{"ok":true,"site":{"host":"flylab-neuroethology.d-lougen.chatgpt.site","url":"https://flylab-neuroethology.d-lougen.chatgpt.site/","type":"live","desc":"An agent-first WebMCP virtual Drosophila lab with typed site tools, reproducible experiments, source-backed circuits, and a visible operator audit surface.","tools":[{"name":"inspect_flylab_state","kind":"answer","impl":"imperative","description":"Read the current shared FlyLab page state before starting or resuming work. Returns the state revision, artifact IDs, exact next valid action, blockers, the visible non-WebMCP review gate, and the complete tool pipeline. It does not modify the page.","title":"Inspect FlyLab state","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"find_fly_circuits","kind":"answer","impl":"imperative","description":"Search FlyLab's curated adult Drosophila evidence and embodied motor-map index by behavior, body part, circuit, or neuron name. Use before drafting a hypothesis. Returns stable circuit IDs, typed brain-to-body paths, citations, model-readiness boundaries, and explicit evidence labels; it does not run a simulation.","title":"Find fly circuits","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"page_session_id":{"type":"string","minLength":9,"maxLength":80,"description":"Exact page_session_id returned by inspect_flylab_state for this open FlyLab page."},"expected_state_revision":{"type":"integer","minimum":1,"description":"Exact state revision returned by the most recent inspect or successful mutation."},"query":{"type":"string","minLength":1,"maxLength":1000,"description":"Behavior, circuit, neuron type, complete mission prompt, or scientific question to search."},"behavior":{"type":"string","enum":["backward_walking","retreat","forward_walking","turning","short_mode_escape","grooming","any"],"default":"any"},"body_part":{"type":"string","enum":["left_foreleg","right_foreleg","left_midleg","right_midleg","left_hindleg","right_hindleg","left_wing","right_wing","any"],"default":"any"},"evidence_labels":{"type":"array","items":{"type":"string","enum":["measured","derived","connectome_inferred","simulation_predicted","agent_hypothesized"]},"minItems":1,"maxItems":5,"uniqueItems":true},"limit":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"Minimum top-k cutoff. Every candidate tied at the cutoff score is retained, so the returned candidate count may exceed this value."}},"required":["page_session_id","expected_state_revision","query"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"draft_fly_hypothesis","kind":"act","impl":"imperative","description":"Create a visible, editable and falsifiable hypothesis from a selected circuit and discovered evidence. At least one cited role=hypothesis_support record must have kind=perturbation_effect matching the requested perturbation and behavior; structural, inventory, and motor-context records are supplemental only. Returns an agent_hypothesized record and does not run a simulation.","title":"Draft fly hypothesis","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"page_session_id":{"type":"string","minLength":9,"maxLength":80,"description":"Exact page_session_id returned by inspect_flylab_state for this open FlyLab page."},"expected_state_revision":{"type":"integer","minimum":1,"description":"Exact state revision returned by the most recent inspect or successful mutation."},"circuit_id":{"type":"string","minLength":1,"maxLength":100},"claim":{"type":"string","minLength":10,"maxLength":500},"predicted_behavior":{"type":"string","enum":["backward_walking","retreat","forward_walking","turning","short_mode_escape","grooming"]},"perturbation":{"type":"string","enum":["activate","silence"]},"primary_outcome":{"type":"string","enum":["backward_distance_mm","signed_speed_mm_s","response_latency_ms","heading_change_deg","stance_stability","short_mode_escape_probability","vertical_displacement_mm","wing_recruitment","leg_recruitment"],"description":"Stable simulation metric ID used as the hypothesis primary outcome."},"expected_direction":{"type":"string","enum":["increase","decrease"]},"controls":{"type":"array","items":{"type":"string","enum":["condition_baseline","condition_sham"]},"minItems":2,"maxItems":2,"uniqueItems":true,"description":"Must include the exact baseline and model-sham condition IDs."},"evidence_ids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"minItems":1,"maxItems":20,"uniqueItems":true,"description":"Discovered hypothesis-support IDs. Must include at least one perturbation_effect record matching perturbation and predicted_behavior; structural, inventory, and motor-context IDs may only supplement it."},"evidence_limitations":{"type":"array","items":{"type":"string","minLength":5,"maxLength":300},"minItems":1,"maxItems":10,"uniqueItems":true,"description":"Explicit limits on what the cited evidence and reduced-order model can establish."},"falsification_criterion":{"type":"string","minLength":5,"maxLength":300}},"required":["page_session_id","expected_state_revision","circuit_id","claim","predicted_behavior","perturbation","primary_outcome","expected_direction","controls","evidence_ids","evidence_limitations","falsification_criterion"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"design_stimulation_trial","kind":"act","impl":"imperative","description":"Create and display a controlled adult-fly perturbation protocol for a saved hypothesis. Returns baseline, sham and perturbation conditions, visible effective-drive derivations, timing, seeds and model assumptions; operator approval is still required before execution.","title":"Design stimulation trial","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"page_session_id":{"type":"string","minLength":9,"maxLength":80,"description":"Exact page_session_id returned by inspect_flylab_state for this open FlyLab page."},"expected_state_revision":{"type":"integer","minimum":1,"description":"Exact state revision returned by the most recent inspect or successful mutation."},"hypothesis_id":{"type":"string","minLength":1,"maxLength":100},"target_circuit_id":{"type":"string","minLength":1,"maxLength":100},"perturbation":{"type":"string","enum":["activate","silence"]},"laterality":{"type":"string","enum":["bilateral","left","right"]},"activation_level":{"type":"number","minimum":0,"maximum":1,"description":"Unitless simulation control; not biological light power."},"onset_ms":{"type":"integer","minimum":0,"maximum":5000},"duration_ms":{"type":"integer","minimum":50,"maximum":5000},"trial_duration_ms":{"type":"integer","minimum":1000,"maximum":10000},"replicates":{"type":"integer","minimum":1,"maximum":20,"default":5},"include_baseline":{"type":"boolean","const":true,"default":true,"description":"Required for the controlled FlyLab vertical slice."},"include_sham_control":{"type":"boolean","const":true,"default":true,"description":"Required for the controlled FlyLab vertical slice."},"seed":{"type":"integer","minimum":0,"maximum":2147483647}},"required":["page_session_id","expected_state_revision","hypothesis_id","target_circuit_id","perturbation","laterality","activation_level","onset_ms","duration_ms","trial_duration_ms","replicates","include_baseline","include_sham_control","seed"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"run_fly_simulation","kind":"act","impl":"imperative","description":"Execute one approved, bounded FlyLab experiment and make exact seeded runs replayable in the shared arena. The caller must echo the approved_protocol_hash from the visible operator gate; any protocol or seed-manifest change revokes authorization. Returns effective-drive derivations, state/event timelines, complete per-run trajectories, model/controller identities, legacy lineage hash, and SHA-256 content hash with field-level attribution.","title":"Run fly simulation","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"page_session_id":{"type":"string","minLength":9,"maxLength":80,"description":"Exact page_session_id returned by inspect_flylab_state for this open FlyLab page."},"expected_state_revision":{"type":"integer","minimum":1,"description":"Exact state revision returned by the most recent inspect or successful mutation."},"experiment_id":{"type":"string","minLength":1,"maxLength":100},"approved_protocol_hash":{"type":"string","minLength":71,"maxLength":71,"pattern":"^sha256:[a-f0-9]{64}$","description":"Exact protocol hash returned after visible operator approval and exposed by inspect_flylab_state."},"operation_id":{"type":"string","minLength":1,"maxLength":120,"description":"Stable caller-generated ID for one logical simulation operation. Retry the same operation with the same ID."}},"required":["page_session_id","expected_state_revision","experiment_id","approved_protocol_hash","operation_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"analyze_fly_behavior","kind":"act","impl":"imperative","description":"Compute and save the selected motor map's complete five-metric panel from summaries derived from each run's authoritative state trajectory. The required metric IDs are returned on the circuit motor map and simulation batch. The shared arena can replay the exact selected seeded run; a legacy condition illustration remains compatibility-only and excluded from analysis. Outputs are not wet-lab evidence.","title":"Analyze fly behavior","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"page_session_id":{"type":"string","minLength":9,"maxLength":80,"description":"Exact page_session_id returned by inspect_flylab_state for this open FlyLab page."},"expected_state_revision":{"type":"integer","minimum":1,"description":"Exact state revision returned by the most recent inspect or successful mutation."},"batch_id":{"type":"string","minLength":1,"maxLength":100},"metrics":{"type":"array","items":{"type":"string","enum":["backward_distance_mm","signed_speed_mm_s","response_latency_ms","heading_change_deg","stance_stability","short_mode_escape_probability","vertical_displacement_mm","wing_recruitment","leg_recruitment"]},"minItems":5,"maxItems":5,"uniqueItems":true,"description":"The complete five-metric panel declared by the selected circuit motor map; partial or mixed panels are rejected."}},"required":["page_session_id","expected_state_revision","batch_id","metrics"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"compare_fly_trials","kind":"act","impl":"imperative","description":"Rank conditions from one or more saved analyses against a behavioral objective and create one bounded next-experiment proposal. It never executes the proposal automatically.","title":"Compare fly trials","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"page_session_id":{"type":"string","minLength":9,"maxLength":80,"description":"Exact page_session_id returned by inspect_flylab_state for this open FlyLab page."},"expected_state_revision":{"type":"integer","minimum":1,"description":"Exact state revision returned by the most recent inspect or successful mutation."},"analysis_ids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"minItems":1,"maxItems":8,"uniqueItems":true},"objective_metric":{"type":"string","enum":["backward_distance_mm","signed_speed_mm_s","response_latency_ms","heading_change_deg","stance_stability","short_mode_escape_probability","vertical_displacement_mm","wing_recruitment","leg_recruitment"]},"objective":{"type":"string","enum":["maximize","minimize"]}},"required":["page_session_id","expected_state_revision","analysis_ids","objective_metric","objective"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"save_fly_evidence","kind":"act","impl":"imperative","description":"Commit a complete FlyLab hypothesis, experiment, runs, analyses, comparison, citations, model versions and seeds to the visible browser-local evidence ledger. Verifies the simulation content hash and returns stable bundle metadata, the exact portable evidence-export envelope, its manifest hash, media type, and published JSON Schema URL.","title":"Save fly evidence","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"page_session_id":{"type":"string","minLength":9,"maxLength":80,"description":"Exact page_session_id returned by inspect_flylab_state for this open FlyLab page."},"expected_state_revision":{"type":"integer","minimum":1,"description":"Exact state revision returned by the most recent inspect or successful mutation."},"scope":{"type":"string","enum":["experiment","mission"],"description":"experiment saves the exact selected lineage; mission additionally preserves the goal, discovery decision, alternatives, exclusions, and coverage gaps."},"title":{"type":"string","minLength":1,"maxLength":120,"description":"Optional caller-entered administrative title. Omit it to use FlyLab system metadata; it is never scientific evidence."},"hypothesis_id":{"type":"string","minLength":1,"maxLength":100},"experiment_id":{"type":"string","minLength":1,"maxLength":100},"batch_ids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"minItems":1,"maxItems":1,"uniqueItems":true},"analysis_ids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"minItems":1,"maxItems":8,"uniqueItems":true},"comparison_id":{"type":"string","minLength":1,"maxLength":100},"note":{"type":"string","maxLength":500},"operation_id":{"type":"string","minLength":1,"maxLength":120,"description":"Stable caller-generated ID for one logical evidence-save operation. Retry the same operation with the same ID."}},"required":["page_session_id","expected_state_revision","scope","hypothesis_id","experiment_id","batch_ids","analysis_ids","comparison_id","operation_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]}],"category":"Health & Education","favicon":"/favicons/flylab-neuroethology.d-lougen.chatgpt.site.png","apiSurface":"spec","toolCount":8}}