VirtualFlyBrain
Server Details
MCP server for Drosophila neuroscience data from VirtualFlyBrain
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- Robbie1977/VFB3-MCP
- GitHub Stars
- 0
- Server Listing
- VFB3-MCP
TDQS
Scored across 11 tools
Most tools have clearly distinct purposes: search (search_terms), resolution (resolve_entity/resolve_combination), term metadata (get_term_info), and domain queries (query_connectivity, run_query). However, resolve_combination and resolve_entity overlap for split-GAL4 combination names such as 'MB002B' and 'SS04495', which could cause misselection. Minor overlap also exists between get_hierarchy and run_query's PartsOf/SubclassesOf query types.
All tool names follow a consistent snake_case verb_noun pattern (get_, list_, query_, resolve_, run_, search_) with no mixed conventions. Names are predictable and readable, making the set easy to navigate.
With 11 tools, the server is well-scoped for a rich domain integration service covering ontology, search, connectivity, and FlyBase metadata. Each tool appears to earn its place without excessive fragmentation or thin coverage.
The read-only surface thoroughly covers the VFB domain: search and facet discovery, entity and combination resolution, term metadata, hierarchy traversal, known and predicted neurotransmitter queries, cross-dataset connectivity, pre-computed queries, and dataset listing. No obvious lifecycle gaps exist for a query-oriented research API.
Available Tools
11 toolsget_hierarchyAInspect
Build a hierarchy tree for a VFB term, showing ancestors (parents) and/or descendants (children). Use relationship "part_of" for brain region structure (e.g. "what are the parts of the mushroom body?") and "subclass_of" for cell type hierarchies (e.g. "what types of Kenyon cell are there?"). Descendants are returned as a nested tree for both relationship types. Ancestors are returned as a nested chain, filtered to nervous system terms for part_of. Start with max_depth=1 for direct parents/children, and offer to go deeper if the user wants more detail.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | VFB term ID (e.g. FBbt_00005801 for mushroom body, FBbt_00003686 for Kenyon cell) | |
| direction | No | Which direction to explore (default: "both") | both |
| max_depth | No | Number of levels to expand. 1 = direct children/parents only. Higher values go deeper. -1 = full tree (use with caution on broad terms). Default: 1. | |
| relationship | Yes | Type of hierarchy: "part_of" for brain region structure, "subclass_of" for cell type taxonomies |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It states that 'Descendants are returned as a nested tree for both relationship types' and 'Ancestors are returned as a nested chain, filtered to nervous system terms for part_of.' It also implies the default direction and depth behavior via 'Start with max_depth=1' and 'offer to go deeper.' These details go beyond the schema and help the agent anticipate the output structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It opens with the core action, then gives relationship guidance, describes return formats, and ends with a practical usage tip. Each sentence earns its place, and there is no filler. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description covers all key aspects: what the tool does, when to use each relationship, the shape of the returned data (tree vs. chain), and a recommendation for default depth. Combined with the detailed parameter descriptions in the schema, the agent has enough information to select and invoke the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with descriptions for all 4 parameters, so the baseline is 3. The description adds meaningful context: it explains how 'relationship' maps to use cases (part_of for regions, subclass_of for cells), gives example IDs in the schema, and clarifies that direction and max_depth control the output structure. This enriches the parameter definitions beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Build a hierarchy tree for a VFB term, showing ancestors (parents) and/or descendants (children).' It uses a specific verb ('Build') and resource ('hierarchy tree for a VFB term'), and it distinguishes itself from sibling tools by focusing on hierarchy exploration. It also includes concrete examples like 'what are the parts of the mushroom body?' which reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use each relationship: '"part_of" for brain region structure' and '"subclass_of" for cell type hierarchies', with examples for each. It also advises starting with 'max_depth=1 for direct parents/children' and offering to go deeper. While it doesn't explicitly state when not to use this tool or name alternatives, the usage context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_known_neurotransmittersAInspect
Get the KNOWN (curated) neurotransmitter(s) for a Drosophila neuron class and its subclasses, from the ontology's classification rather than per-instance predictions — so there is no confidence. Use this for "what neurotransmitter is known to use?" when you want the curated/established answer. Returns one row per (cell type, neurotransmitter): {cell_type_id, cell_type, nt_id, nt_label}, where the neurotransmitter is a GO secretion term (same id space as get_predicted_neurotransmitters). Empty when the ontology asserts none — in that case try get_predicted_neurotransmitters for the data-driven prediction. CONSTRAINTS: neuron class terms only (FBbt id or label); use search_terms with filter_types ["neuron","class"] to canonicalize.
| Name | Required | Description | Default |
|---|---|---|---|
| neuron_type | Yes | Neuron class — OWL ID (e.g. "FBbt_00003797") or label (e.g. "Tm9"). Means the class and all of its subclasses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on full responsibility for behavioral disclosure. It explains that results come from ontology classification rather than per-instance predictions, explicitly states there is no confidence value, describes the exact output row shape, and covers the empty-result behavior. This is comprehensive transparency for a simple lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense with useful information but not verbose; every sentence serves a purpose. It is front-loaded with the tool's core purpose, then proceeds logically to usage, output format, edge-case behavior, and constraints. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema or annotations, the description fully explains what the tool returns, the shape of each row, the meaning of the neurotransmitter id space, and what happens in the empty case. Combined with the parameter documentation, it gives an agent everything needed to call the tool correctly and interpret its response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 100%, so the schema already documents the single parameter well, including examples and meaning of subclasses. The description adds extra value by clarifying that only neuron class terms are accepted and by recommending use of search_terms with specific filter_types for canonicalization. This goes beyond the schema's literal parameter definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: getting curated/known neurotransmitters for a Drosophila neuron class and its subclasses. It explicitly distinguishes itself from per-instance predictions and from the sibling get_predicted_neurotransmitters. An agent can immediately understand what this tool does and how it differs from similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: use it for curated/established answers to 'what neurotransmitter is <cell type> known to use?' It even tells the agent what to do when the result is empty, directing it to get_predicted_neurotransmitters. It also provides concrete constraints and canonicalization advice via search_terms, leaving no ambiguity about the intended workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_predicted_neurotransmittersAInspect
Get the PREDICTED neurotransmitter(s) for a Drosophila neuron class — itself or any subclass — from per-instance connectome predictions (each reconstructed neuron carries a predicted transmitter with a confidence). Use this for "what neurotransmitter does use?" when you want the data-driven prediction and its confidence. By default results are aggregated to flat per-class rows (one per cell type × neurotransmitter) with instance counts, percent_of_class and mean_confidence; set aggregate=false for one row per individual neuron. Set split_by_dataset=true to get one row per (cell type, neurotransmitter, dataset) so you can see agreement across connectomes. The neurotransmitter is reported as a GO secretion term (nt_id/nt_label), the same id space as get_known_neurotransmitters. This is distinct from get_known_neurotransmitters, which returns the ontology-curated classification without confidence. CONSTRAINTS: neuron class terms only (FBbt id or label); use search_terms with filter_types ["neuron","class"] to canonicalize. RECOMMENDED: exclude_dbs defaults to ["hb","fafb"]; pass [] for all datasets.
| Name | Required | Description | Default |
|---|---|---|---|
| aggregate | No | If true (default), aggregate to flat per-class rows {cell_type_id, cell_type, nt_id, nt_label, instances, percent_of_class, mean_confidence}. If false, return one row per individual neuron {..., neuron_id, neuron_name, confidence, references, dataset}. | |
| exclude_dbs | No | Dataset symbols to exclude (default ["hb","fafb"]). Pass [] to include all datasets. Same symbols as query_connectivity / list_connectome_datasets. | |
| neuron_type | Yes | Neuron class — OWL ID (e.g. "FBbt_00003797") or label (e.g. "Tm9"). Means the class and all of its subclasses. | |
| min_confidence | No | Drop predictions below this confidence (0..1). Default 0 (keep all). | |
| split_by_dataset | No | If true (aggregate only), emit one row per (cell type, neurotransmitter, dataset) with a dataset column, so cross-connectome agreement is visible. Default false aggregates over all included datasets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It fully discloses the output format (flat per-class rows with counts, percent, mean_confidence; per-neuron rows if aggregate=false), the ability to split by dataset, the GO secretion term id space, and the effect of exclude_dbs. This is exemplary transparency for a query tool with no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but efficiently structured: purpose first, then when-to-use, then output variants, then constraints and recommendations. Every sentence adds distinct value with no fluff. The use of section markers (CONSTRAINTS, RECOMMENDED) improves scannability for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, no output schema, and no annotations, the description provides all necessary information: output formats, parameter effects, id-space alignment with a sibling tool, constraints, and recommended defaults. An agent can confidently invoke it correctly without additional lookups.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds meaning beyond the schema: it explains why aggregate=false returns per-neuron rows, why split_by_dataset=true reveals cross-connectome agreement, how min_confidence filters predictions, and the rationale for the default exclude_dbs. This contextualizes each parameter's purpose, exceeding the schema's bare descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a precise resource ('PREDICTED neurotransmitter(s) for a Drosophila neuron class — itself or any subclass'), and the data source ('per-instance connectome predictions'). It explicitly differentiates from its sibling get_known_neurotransmitters by contrasting data-driven predictions with ontology-curated classifications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'Use this for "what neurotransmitter does <cell type> use?" when you want the data-driven prediction and its confidence.' It also names the alternative (get_known_neurotransmitters) and explains the distinction. Constraints (neuron class terms only, canonicalization via search_terms) and a recommended default (exclude_dbs) further guide correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_term_infoAInspect
Get term info for a VFB or anatomy ontology entity (VFB_*, FBbt_*, etc.). THIS IS THE QUERY DISCOVERY TOOL: the response's "Queries" array lists the valid query_type values that run_query accepts for this entity. ALWAYS call get_term_info before run_query unless you already obtained the query_type from a previous get_term_info call in this conversation. Returns: SuperTypes (classification), Tags (data flags like has_image, has_neuron_connectivity), Queries (valid query_types for run_query), RelatedTools (other MCP tools applicable to this entity, with default_args ready to copy — e.g. get_hierarchy with subclass_of for cell types or part_of for nervous-system regions), Images (keyed by template brain ID), Publications, Synonyms. Supports batch — pass an array of IDs to fetch in parallel; batch results are returned as a JSON object keyed by ID. To build VFB browser URLs from the Images field: https://v2.virtualflybrain.org/org.geppetto.frontend/geppetto?id=&i=,, — id= sets the focus term and i= lists images for the 3D viewer (template ID must be first in i= to set the coordinate space).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | One or more VFB IDs to look up | |
| force_refresh | No | Bypass the response cache and recompute this result. Expensive — leave it unset on a first call. Set it ONLY to re-try a call that, earlier in this same conversation, returned a result that was clearly wrong, stale, or reported as failed. Never set it on more than one retry of the same call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the response structure (SuperTypes, Tags, Queries, RelatedTools, Images, Publications, Synonyms), batch behavior (results keyed by ID), and even URL construction for the 3D viewer. It doesn't explicitly state read-only semantics or error behavior, but the 'get' verb and the detailed output description provide a strong behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but every sentence earns its place: it covers the core purpose, the critical workflow (ALWAYS call first), batch behavior, return fields, related tools, and URL template. It is front-loaded with the purpose and the most actionable guidance, and the details are structured clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's central role in a multi-tool workflow and the absence of an output schema, the description is remarkably complete. It explains what the Queries field is for, how to use RelatedTools, how to interpret Images for building URLs, and that batch results are keyed by ID. It provides all necessary context for correct selection and invocation, even without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema by explaining the batch mode in detail (array of IDs returns a JSON object keyed by ID) and providing examples of ID formats. It also clarifies that the Queries field is what run_query accepts, which helps understand the tool's role. The force_refresh parameter is already well-explained in the schema, and the description reinforces it without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Get term info for a VFB or anatomy ontology entity') and immediately clarifies its role as 'THE QUERY DISCOVERY TOOL', which distinguishes it from siblings like run_query and get_hierarchy. It also mentions the ID patterns (VFB_*, FBbt_*) and the returned Queries array, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'ALWAYS call get_term_info before run_query unless you already obtained the query_type from a previous get_term_info call in this conversation.' It also explains the batch usage (pass an array of IDs) and when to use the force_refresh parameter (via schema, but the description reinforces the workflow). This clearly states when to use this tool and how it relates to run_query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_connectome_datasetsAInspect
List available connectome datasets with their labels and symbols. Use the returned symbols when constructing exclude_dbs arguments for query_connectivity. Common datasets include Hemibrain (hb), FAFB (fafb), MANC, and others. Call this tool if unsure which dataset symbols are valid.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The 'list' verb correctly implies a read-only operation, and the description adds context about what the output contains (labels and symbols) and how it relates to exclude_dbs. It could have disclosed more about the response structure, but for a parameterless list tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the purpose, followed by usage guidance and an example of common datasets. Every sentence adds value with no repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with no output schema, the description is complete. It states what the tool does, what it returns, how to use the results, and when to call it. The mention of common dataset symbols adds useful context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. The description doesn't need to explain parameters, but it does mention that symbols are used in exclude_dbs arguments, which adds semantic context about the use of the tool's output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List available connectome datasets with their labels and symbols', which is a specific verb (list) and resource (connectome datasets). This distinguishes it from sibling tools like query_connectivity, resolve_entity, and search_terms, which perform different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use the returned symbols when constructing exclude_dbs arguments for query_connectivity' and 'Call this tool if unsure which dataset symbols are valid.' This tells the agent exactly when and how to use the tool relative to its sibling query_connectivity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_search_facetsAInspect
List the type names search_terms can filter, exclude, boost or demote by, with the number of terms carrying each one. Call this instead of guessing: there are over 200 names, they are the index's own annotations rather than a curated list, and they change as data is added. Use contains to narrow (e.g. contains="lineage" for the ~120 lineage clones, contains="connectivity" to find the connectome facets). The counts tell you whether a name is broad or niche — "entity" covers everything, a single lineage covers a handful.
| Name | Required | Description | Default |
|---|---|---|---|
| contains | No | Only return type names containing this text. Matched case- and separator-insensitively, so "nervous system" finds "Nervous_system". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with no annotations, the description discloses key behavior: the list is dynamic ('change as data is added'), derived from the index's own annotations, and includes counts that indicate breadth (e.g., 'entity covers everything, a single lineage covers a handful'). It also clarifies that contains matching is case- and separator-insensitive, reinforcing the schema's explanation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-load the purpose, then provide contextual guidance and parameter examples. No wasted words; each sentence contributes meaningfully.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-optional-param list tool, the description covers what it returns (type names with counts), the dynamic nature, and how to narrow results. While it doesn't specify an exact output schema, the description is sufficient for effective use, though it could mention whether results are sorted or paginated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the 'contains' parameter with a clear description and matching rule. The description adds concrete usage examples (e.g., contains='lineage' for ~120 lineage clones, contains='connectivity' for connectome facets) and explains how counts relate to the breadth of the name, enriching understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence clearly states the function: 'List the type names search_terms can filter, exclude, boost or demote by, with the number of terms carrying each one.' This identifies both the action and the resource, distinguishing it from sibling tools like get_term_info or run_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises 'Call this instead of guessing,' explaining that there are over 200 names, they are index annotations rather than a curated list, and they change as data is added. This sets clear expectations for when to invoke the tool—before using search_terms with filters—though it doesn't name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_connectivityAInspect
Query synaptic connectivity between Drosophila neuron classes across ALL connectome datasets simultaneously for comparative connectomics. This is NOT pre-cached — it runs live queries, so expect slow responses (up to several minutes). Set both upstream_type AND downstream_type to filter connections between two specific neuron classes (e.g., "What Tm1→T3 connections exist across all datasets?"). At least one of upstream_type or downstream_type is required. CONSTRAINTS: Only accepts neuron class terms (OWL IDs like FBbt_00003789 or labels like "transmedullary neuron Tm1") — anatomical regions or neuropils (e.g., "lobula", "medulla") are NOT accepted. NOT suitable for individual neuron-to-neuron connections — for pre-computed connections of a single individual neuron, use run_query with NeuronNeuronConnectivityQuery instead. NOT for muscle/sense organ connections. RECOMMENDED DEFAULTS: weight=5, exclude_dbs=["hb","fafb"] unless user specifies otherwise. For both-ends queries, start with weight≥50 to avoid timeouts. RESULT SIZE: a broad query is enormous (a single class at weight=5 can be over 50,000 connections), so results are ranked strongest-first and paged — you get limit rows (default 50) plus a summary computed over ALL of them: totals, per-dataset counts, distinct neuron counts, and the top class pairs. Answer from the summary and quote a handful of rows; only page with offset if the user asks for specific further rows. WORKFLOW: Confirm parameters with user before querying. Use search_terms with filter_types ["neuron","class"] to validate/canonicalize neuron type labels. If zero results, try relaxation: lower weight to 1, then remove exclude_dbs filter, then try group_by_class=true — report what worked and let user decide. group_by_class=true is usually the better first call on a broad query: it rolls the connections up over the subclass hierarchy — a row per (upstream level, downstream level) with data, up to the queried term(s) — instead of returning every neuron pair. Because a connection counts toward every ancestor pair in scope, per-row pairwise_connections and total_weight do NOT sum to the raw connection counts, and a row appears for the queried class itself as well as each subclass with data.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many connection rows to return, strongest first (default 50). The summary always covers every connection found, not just the returned rows. Pass 0 for all rows — only do this on a query you already know is small, as broad queries return tens of thousands. | |
| offset | No | Row to start from within the strongest-first ranking (default 0). Re-running with the same limit and the next offset walks down the list. | |
| weight | No | Minimum synapse count threshold (recommended default: 5). Lower to 1 if initial query returns zero results as first relaxation step. | |
| exclude_dbs | No | Dataset symbols to exclude (recommended default: ["hb", "fafb"] to focus on newer datasets). Pass empty array [] to include all datasets. Must be the exact `symbol` field from list_connectome_datasets — currently BANC, fw, ol, mv, hb, mc, fafb, l1em. An unrecognised symbol is silently ignored by the server rather than reported, so a dataset name ("hemibrain", "male-cns", "flywire") excludes nothing and gives no warning. Call list_connectome_datasets rather than guessing. | |
| upstream_type | No | Upstream (presynaptic) neuron class — OWL ID (e.g., "FBbt_00003789") or full label (e.g., "transmedullary neuron Tm1"). Must be a neuron type/class, NOT an anatomical region. Use search_terms with filter_types ["neuron","class"] to validate/canonicalize labels before querying. | |
| group_by_class | No | If true, aggregate by class rolled up over the subclass hierarchy: a row appears for the queried class AND each subclass with data (a connection counts toward every ancestor pair up to the queried term(s), so per-row pairwise_connections / total_weight do not sum to the raw counts). Returns total_weight, average_weight, percent_connected and pairwise_connections per class pair, ranked by pairwise_connections. If false (default), returns individual neuron-to-neuron rows. | |
| downstream_type | No | Downstream (postsynaptic) neuron class — OWL ID or full label. Must be a neuron type/class, NOT an anatomical region. If user asks about connectivity to a brain region, first find neuron classes in that region using search_terms, then query for those classes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden, and it does so thoroughly. It discloses live-query latency, enormous result sizes, strongest-first ranking and paging, summary semantics, silent ignoring of unrecognized exclude_dbs symbols, and the non-additive behavior of group_by_class. This gives an agent accurate expectations before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but densely informative and organized with clear labels (CONSTRAINTS, RECOMMENDED DEFAULTS, RESULT SIZE, WORKFLOW). It repeats a few points already present in the schema, such as recommended defaults and anatomical-region restrictions, but given the tool's complexity and failure modes, the length is mostly justified and critical warnings are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description covers return shape, summary fields, ranking, paging discipline, group_by_class semantics, user-confirmation workflow, validation, and result-relaxation strategies. It also clarifies how an agent should answer from the summary rather than blindly paging. For a 7-parameter live-query tool with no annotations, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds substantial meaning beyond the schema: recommended defaults, OWL ID/label requirements, the need to validate labels via search_terms, exact dataset symbols and the silent-ignore pitfall, limit behavior with 0, and step-by-step relaxation guidance. These additions materially improve parameter selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb, resource, and scope: 'Query synaptic connectivity between Drosophila neuron classes across ALL connectome datasets simultaneously.' It also differentiates this tool from siblings by warning 'This is NOT pre-cached' and explicitly pointing to run_query for individual neuron-neuron connections, so an agent can select it correctly without guessing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is explicitly specified: at least one of upstream_type/downstream_type is required, both should be set for a directed pair query, anatomical regions are invalid, and individual-neuron queries should go to run_query. It also gives a concrete workflow: confirm parameters, canonicalize labels with search_terms, apply recommended defaults, and follow a relaxation sequence when zero results appear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_combinationAInspect
Resolve an unresolved split-GAL4 combination name or synonym into its FBco ID and component hemidrivers. Pass the raw combination text exactly as the user wrote it (for example "MB002B" or "SS04495"). Do NOT pass an FBco ID; if you already have one, use the downstream tool directly. Uses tiered resolution: exact name → synonym → broad pattern match. Returns FBco ID, combination name, matched synonym (if applicable), and component allele IDs/names. IMPORTANT: When match is via synonym, confirm the resolved combination with the user before proceeding (e.g., "Your search for 'MB002B' matched [formal name] (FBco...) via synonym. Shall I proceed?"). If multiple matches, show disambiguation list and ask user to choose.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unresolved split-GAL4 combination name or synonym exactly as written by the user (e.g., "MB002B", "SS04495"). Do NOT pass an FBco ID here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to rely on, the description fully discloses the tiered resolution process (exact name → synonym → broad pattern match), the confirmation requirement for synonym matches, disambiguation for multiple matches, and the return fields. This is rich behavioral detail beyond simple function naming.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is logically structured from purpose to input rules to behavior to edge cases, and is appropriately detailed. The quoted confirmation prompt is illustrative but not excessive, making it a solid, well-organized description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description enumerates all returned fields (FBco ID, combination name, matched synonym, component allele IDs/names) and explicitly handles the two key edge cases (synonym confirmation and multiple matches). For a tool with a single parameter, this is comprehensively sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the 'name' parameter with 100% coverage, including the exact instructions to pass raw text and avoid FBco IDs. The description merely repeats these instructions without adding new semantic nuance, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves split-GAL4 combination names or synonyms into FBco IDs and hemidrivers, with a specific verb and resource. It distinguishes from general resolver tools like resolve_entity by focusing on the split-GAL4 domain and explicitly excluding FBco IDs as input.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance (unresolved combination text) and a clear exclusion: do not pass an FBco ID, use the downstream tool directly instead. While no alternative sibling tool is named, the directive is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_entityAInspect
Resolve an unresolved FlyBase-related query string into VFB/FlyBase IDs and metadata. Pass the raw text exactly as the user wrote it (for example "P{VT054895-GAL4.DBD}", "Hb9-GAL4", "SS04495", "MB002B", "PAM cluster", or "dpp"). Do NOT pass resolved IDs such as FBgn/FBal/FBti/FBco/FBst or VFB IDs; if you already have an ID, use the downstream tool directly. Uses tiered resolution: exact name → synonym → broad pattern match. Returns match_type (EXACT/SYNONYM/BROAD), feature ID, name, type, and synonyms. IMPORTANT: When match_type is SYNONYM or BROAD, always confirm the resolved entity with the user before proceeding to further queries. If multiple matches are returned, show a disambiguation list and ask the user to choose. This tool queries FlyBase Chado — for VFB ontology lookups (anatomical terms, neuron class IDs) use search_terms instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unresolved FlyBase-related query string from the user. Pass the raw name/synonym exactly as written (e.g., "P{VT054895-GAL4.DBD}", "Hb9-GAL4", "SS04495", "MB002B", "PAM cluster", "dpp"). Do NOT pass an already resolved FlyBase or VFB ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the tiered resolution process (exact name → synonym → broad pattern match), return fields, and confirmation requirements for SYNONYM/BROAD matches, including disambiguation steps. While not covering rate limits or error cases, it does provide substantial behavioral context beyond the schema (which has no annotations).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence adds value: it covers purpose, usage rules, examples, resolution logic, confirmation steps, and sibling differentiation without redundancy. The structure flows logically from what to pass, to how resolution works, to what to do with results.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description is comprehensive: it explains the input format, resolution behavior, potential match types, user confirmation rules, and the difference from sibling tools. An agent would know exactly when and how to use it, and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description enriches the parameter definition with multiple concrete examples and explicit negative constraints (do not pass resolved IDs). It also explains how the parameter value affects resolution behavior (tiered matching), adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Resolve an unresolved FlyBase-related query string into VFB/FlyBase IDs and metadata.' It distinguishes from siblings by explicitly directing VFB ontology lookups to search_terms instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: pass raw text exactly as written, do NOT pass resolved IDs, and use downstream tools if an ID is already available. It also names the alternative tool (search_terms) for different query types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_queryAInspect
Run a pre-computed query on a VFB entity. REQUIRED WORKFLOW: (1) call get_term_info on the ID first; (2) read the response's "Queries" array; (3) pass one of those values as query_type. Calling run_query with a guessed query_type will return an error. If a query returns empty rows or an error, the entity does not support that query_type or has no data for it — try a different query_type from the Queries array, or try a related entity (e.g. its parent class via get_hierarchy). Empty results do NOT mean the answer is unknown — only that this call did not return it. NEVER fabricate results from training data when a query is empty; tell the user clearly what was tried. NEVER pass tool names like "get_term_info" or "search_terms" as query_type — those are separate tools. Common query_types by entity kind: PaintedDomains, AllAlignedImages, AlignedDatasets, AllDatasets (templates); SimilarMorphologyTo, NeuronInputsTo, NeuronNeuronConnectivityQuery, NeuronRegionConnectivityQuery (individual neurons); ListAllAvailableImages, SubclassesOf, PartsOf, NeuronsPartHere, NeuronsSynaptic, ExpressionOverlapsHere, DownstreamClassConnectivity, UpstreamClassConnectivity (classes). Supports batch — pass an array of IDs (same query_type) or a "queries" array of {id, query_type} pairs; batch results are keyed by "ID::query_type". Results are PAGED: the first 25 rows by default (change with limit/offset) plus the true total as "count". ALWAYS read "count_status" before quoting "count": "exact" means count is the true total; "unavailable" means the query FAILED upstream and count is -1, which is NOT zero and must never be reported as "no results" — read "_note" and tell the user the query could not be run. Image/thumbnail columns are excluded by default to save space - pass include_images=true to include them. FlyBase integration is via query_types too: FindStocks (fly stocks for a FlyBase feature ID - FBgn/FBal/FBti/FBtp/FBco/FBst) and FindComboPublications (publications for an FBco split-GAL4 combination). Get those IDs from resolve_entity / resolve_combination first, then run_query with the ID and the query_type. Include FlyBase links in output: https://flybase.org/reports/{ID}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One or more VFB IDs to query | |
| limit | No | Max rows returned per call (default 25). The true total is always returned as "count"; broad queries (e.g. ListAllAvailableImages, or NeuronsSynaptic on a whole region) can have thousands to hundreds of thousands of rows. Use 0 for all rows (still capped server-side ~25000 - avoid for broad queries). | |
| offset | No | Row offset for paging (default 0). To get the next page, re-run with offset increased by limit; "count" gives the total. | |
| queries | No | Array of {id, query_type} pairs for mixed batch queries. When provided, id and query_type params are ignored. | |
| query_type | No | A valid query type from the Queries array returned by get_term_info. Used for single id or array of ids. | |
| force_refresh | No | Bypass the response cache and recompute this result. Expensive — leave it unset on a first call. Set it ONLY to re-try a call that, earlier in this same conversation, returned a result that was clearly wrong, stale, or reported as failed. Never set it on more than one retry of the same call. A failed query (count -1) is already retried once automatically, so you do not need this for that case. | |
| include_images | No | Include the image/thumbnail column in result rows. Default false: the thumbnail is a long markdown image string that is rarely useful to reason over and greatly inflates every row, so it is stripped and the response says so in _note. Set true to include it (e.g. to build image URLs). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, and it excels: it explains paging (first 25 rows, limit/offset, total count), the meaning of count_status ('exact' vs 'unavailable'), that empty results do NOT mean unknown, the cache-bypass semantics of force_refresh, and that images are stripped by default. It also warns against fabricating answers when queries are empty. This is far beyond baseline transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every sentence earns its place given the tool's complexity. It is front-loaded with the required workflow and then covers edge cases. However, it is presented as a single dense paragraph; structuring it with sections or bullet lists would improve scannability. Minor structural inefficiency, hence 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 7 parameters, no output schema, and no annotations, the description is remarkably complete. It covers batching, paging, error semantics, caching, image handling, FlyBase integration, and links to related workflow steps (get_term_info, resolve_entity). An agent has everything it needs to select and invoke this tool correctly in varied situations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema covers all parameters (100% coverage), the description adds substantial meaning: it explains how id can be a single ID or array, how queries works for mixed batches, how limit and offset interact with paging, when force_refresh should be used, and why include_images defaults to false. It also provides real query_type examples by entity kind. This goes well beyond the schema's descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Run a pre-computed query on a VFB entity.' It clearly distinguishes itself from sibling tools by warning not to pass tool names like get_term_info or search_terms as query_type, and by describing batch and FlyBase-specific usages. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit REQUIRED WORKFLOW: call get_term_info first, read the Queries array, then pass one of those values. It also provides alternatives ('try a related entity via get_hierarchy'), exclusion criteria ('NEVER pass tool names'), and context for when to use batches or FlyBase query types. This is exemplary when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_termsAInspect
Search VFB terms. This is the search virtualflybrain.org itself runs — the same Solr query, the same ranking — so what comes back first here is what a user would see first on the site.
USE filter_types BY DEFAULT. Unfiltered searches mix scRNAseq artifacts and developmental stages in with the entity the user wants.
Common filter_types recipes:
Neuron classes: ["neuron", "class"]
Individual neurons with images: ["neuron", "has_image"]
Neurons with connectome data: ["neuron", "has_neuron_connectivity"]
Brain regions / neuropils: ["anatomy"]
Genes: ["gene"]
Driver lines / expression patterns: ["expression_pattern"]
Datasets: ["dataset"]
There are over 200 type names and they change as data is added, so do NOT guess them: call list_search_facets to see the current vocabulary (optionally filtered, e.g. contains="lineage"). Names are matched case- and separator-insensitively, and a name that does not exist is an error with suggestions rather than a silently empty result.
Deprecated terms are excluded by the search itself — you do not need exclude_types: ["deprecated"], and adding it is harmless but pointless.
Stage filtering: VFB covers adult, larval, and embryonic data, and many anatomical FBbt classes are stage-agnostic. Do NOT add "adult" or "larva" to filter_types by default — only add them when the user is explicit about a stage (e.g. "adult Kenyon cells", "larval mushroom body"). Default searches should leave stage out so stage-agnostic classes and all life stages are visible.
Useful flags:
unique=true (the default) → one row per term. Turn it OFF only when you need to see WHICH synonym matched; with unique=false a term appears once per matching synonym, so "Kenyon cell" can return the same ID several times.
minimize_results=true → top 10, essential fields only, for exploratory searches.
auto_fetch_term_info=true → if an exact label match is found, returns get_term_info in the same response.
boost_types=["has_image", "has_neuron_connectivity"] → float data-rich entities to the top of the list without excluding anything else.
demote_types=["expression_pattern_fragment"] → sink noisy types to the bottom of the list instead of removing them.
If the search returns no good matches, do NOT fall back to training-data answers — try alternative spellings, synonyms, broader terms, or different filter_types.
Multiple filter_types are ANDed (results must match ALL). Multiple exclude_types are ORed (any match excludes). boost_types and demote_types re-order without excluding; boost wins if a term matches both.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | Number of results to return (default 150, max 1000) - use smaller numbers for focused searches | |
| query | Yes | Search query (e.g., medulla) | |
| start | No | Pagination start index (default 0) - use to get results beyond the first page | |
| unique | No | One row per term (default true). Set false to get a row per matching synonym, which shows WHICH name matched at the cost of repeating IDs. | |
| boost_types | No | Float results matching these facets_annotation types to the top of the ranked list without excluding others | |
| demote_types | No | Sink results matching these facets_annotation types to the bottom of the ranked list without excluding them. Ignored for a type that also appears in boost_types. | |
| filter_types | No | Filter results to only include items matching ALL of these facets_annotation types (AND logic). Use list_search_facets for valid names. | |
| exclude_types | No | Exclude results matching ANY of these facets_annotation types (OR logic). Deprecated terms are already excluded. | |
| minimize_results | No | When true, return at most 10 results with only the essential fields. For exact matches, return only the matching result. | |
| auto_fetch_term_info | No | When true and an exact label match is found, automatically fetch and include term info in the response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers richly: it discloses that deprecated terms are pre-excluded, that filter_types are ANDed while exclude_types are ORed, that boost/demote re-order without excluding, and that unique=false repeats IDs per matching synonym. It also explains exact-match behavior for auto_fetch_term_info and error handling for unknown type names. This is exemplary transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but impeccably structured and front-loaded. It opens with the core purpose, then moves through defaults, recipes, constraints, and flags, with each sentence adding unique value. No redundancy or fluff exists; the density is justified by the tool's 10-parameter complexity and domain-specific semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, absence of annotations, and lack of output schema, this description is exceptionally complete. It covers usage defaults, parameter interactions, edge cases (deprecated, unknown types, no matches), and even contextualizes the tool within the larger VFB ecosystem. The only minor gap is lack of example invocations, but the explicit recipes and flag explanations render this unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema covers 100% of parameters, the description adds substantial semantic depth: it explains the AND/OR logic for filter/exclude types, when to disable unique, the trade-offs of minimize_results, and provides concrete recipes for boost_types/demote_types. It even clarifies that adding exclude_types:['deprecated'] is harmless but pointless. This far exceeds baseline schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource ('Search VFB terms') and immediately distinguishes the tool from siblings by stating it uses the same Solr query and ranking as the VFB site itself. It contrasts with list_search_facets (vocabulary listing) and get_term_info (exact-match info fetch), making the tool's unique role explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit, actionable guidance: 'USE filter_types BY DEFAULT', common filter recipes, instructions to call list_search_facets rather than guessing type names, stage-filtering rules, and a clear fallback strategy (try alternatives, not training-data). This goes well beyond typical tool descriptions and directly supports correct agent selection and invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Added
get_known_neurotransmitters - Added
get_predicted_neurotransmitters - Changed
query_connectivity1 field changed- changed
Input schema / properties / group_by_class / descriptionPrevious value: -"If true, aggregate results by neuron class — returns total_weight, average_weight, percent_connected per class pair, ranked by pairwise_connections. If false (default), returns individual neuron-to-neuron rows."New value: +"If true, aggregate by class rolled up over the subclass hierarchy: a row appears for the queried class AND each subclass with data (a connection counts toward every ancestor pair up to the queried term(s), so per-row pairwise_connections / total_weight do not sum to the raw counts). Returns total_weight, average_weight, percent_connected and pairwise_connections per class pair, ranked by pairwise_connections. If false (default), returns individual neuron-to-neuron rows."
2 tool updates
- Changed
get_term_info1 field changed- added
Input schema / properties / force_refreshAdded value: +{ + "description": "Bypass the response cache and recompute this result. Expensive — leave it unset on a first call. Set it ONLY to re-try a call that, earlier in this same conversation, returned a result that was clearly wrong, stale, or reported as failed. Never set it on more than one retry of the same call.", + "type": "boolean" +}
- Changed
run_query1 field changed- added
Input schema / properties / force_refreshAdded value: +{ + "description": "Bypass the response cache and recompute this result. Expensive — leave it unset on a first call. Set it ONLY to re-try a call that, earlier in this same conversation, returned a result that was clearly wrong, stale, or reported as failed. Never set it on more than one retry of the same call. A failed query (count -1) is already retried once automatically, so you do not need this for that case.", + "type": "boolean" +}
3 tool updates
- Added
list_search_facets - Changed
query_connectivity3 fields changed- changed
Input schema / properties / exclude_dbs / descriptionPrevious value: -"Dataset symbols to exclude (recommended default: [\"hb\", \"fafb\"] to focus on newer datasets). Pass empty array [] to include all datasets. Use list_connectome_datasets to see valid symbols."New value: +"Dataset symbols to exclude (recommended default: [\"hb\", \"fafb\"] to focus on newer datasets). Pass empty array [] to include all datasets. Must be the exact `symbol` field from list_connectome_datasets — currently BANC, fw, ol, mv, hb, mc, fafb, l1em. An unrecognised symbol is silently ignored by the server rather than reported, so a dataset name (\"hemibrain\", \"male-cns\", \"flywire\") excludes nothing and gives no warning. Call list_connectome_datasets rather than guessing." - added
Input schema / properties / limitAdded value: +{ + "default": 50, + "description": "How many connection rows to return, strongest first (default 50). The summary always covers every connection found, not just the returned rows. Pass 0 for all rows — only do this on a query you already know is small, as broad queries return tens of thousands.", + "type": "number" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Row to start from within the strongest-first ranking (default 0). Re-running with the same limit and the next offset walks down the list.", + "type": "number" +}
- Changed
search_terms6 fields changed- changed
Input schema / properties / boost_types / descriptionPrevious value: -"Boost ranking of results matching these facets_annotation types without excluding others"New value: +"Float results matching these facets_annotation types to the top of the ranked list without excluding others" - added
Input schema / properties / demote_typesAdded value: +{ + "description": "Sink results matching these facets_annotation types to the bottom of the ranked list without excluding them. Ignored for a type that also appears in boost_types.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / exclude_types / descriptionPrevious value: -"Exclude results matching ANY of these facets_annotation types (OR logic)"New value: +"Exclude results matching ANY of these facets_annotation types (OR logic). Deprecated terms are already excluded." - changed
Input schema / properties / filter_types / descriptionPrevious value: -"Filter results to only include items matching ALL of these facets_annotation types (AND logic)"New value: +"Filter results to only include items matching ALL of these facets_annotation types (AND logic). Use list_search_facets for valid names." - changed
Input schema / properties / minimize_results / descriptionPrevious value: -"When true, limit results to top 10 for initial searches and add truncation metadata. For exact matches, return only the matching result."New value: +"When true, return at most 10 results with only the essential fields. For exact matches, return only the matching result." - added
Input schema / properties / uniqueAdded value: +{ + "default": true, + "description": "One row per term (default true). Set false to get a row per matching synonym, which shows WHICH name matched at the cost of repeating IDs.", + "type": "boolean" +}
6 tool updates
- Added
get_hierarchy - Added
list_connectome_datasets - Added
query_connectivity - Added
resolve_combination - Added
resolve_entity - Changed
run_query3 fields changed- added
Input schema / properties / include_imagesAdded value: +{ + "description": "Include the image/thumbnail column in result rows. Default false: the thumbnail is a long markdown image string that is rarely useful to reason over and greatly inflates every row, so it is stripped and the response says so in _note. Set true to include it (e.g. to build image URLs).", + "type": "boolean" +} - added
Input schema / properties / limitAdded value: +{ + "description": "Max rows returned per call (default 25). The true total is always returned as \"count\"; broad queries (e.g. ListAllAvailableImages, or NeuronsSynaptic on a whole region) can have thousands to hundreds of thousands of rows. Use 0 for all rows (still capped server-side ~25000 - avoid for broad queries).", + "type": "number" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Row offset for paging (default 0). To get the next page, re-run with offset increased by limit; \"count\" gives the total.", + "type": "number" +}
2 tool updates
- Changed
get_term_info3 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"VFB ID (e.g., VFB_jrcv0i43)"New value: +"One or more VFB IDs to look up" - added
Input schema / properties / id / oneOfAdded value: +[ + { + "description": "A single VFB ID (e.g., VFB_jrcv0i43)", + "type": "string" + }, + { + "description": "An array of VFB IDs to fetch in batch (e.g., [\"VFB_jrcv0i43\", \"VFB_00101567\"])", + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / id / typeRemoved value: -"string"
- Changed
run_query6 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"VFB ID (e.g., VFB_00101567)"New value: +"One or more VFB IDs to query" - added
Input schema / properties / id / oneOfAdded value: +[ + { + "description": "A single VFB ID (e.g., VFB_00101567)", + "type": "string" + }, + { + "description": "An array of VFB IDs — all will use the same query_type", + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / id / typeRemoved value: -"string" - added
Input schema / properties / queriesAdded value: +{ + "description": "Array of {id, query_type} pairs for mixed batch queries. When provided, id and query_type params are ignored.", + "items": { + "properties": { + "id": { + "description": "VFB ID", + "type": "string" + }, + "query_type": { + "description": "Query type for this ID", + "type": "string" + } + }, + "required": [ + "id", + "query_type" + ], + "type": "object" + }, + "type": "array" +} - changed
Input schema / properties / query_type / descriptionPrevious value: -"A valid query type from the Queries array returned by get_term_info (e.g., PaintedDomains, AllAlignedImages, SubclassesOf). Do NOT use tool names here. Always check get_term_info first for available query types."New value: +"A valid query type from the Queries array returned by get_term_info. Used for single id or array of ids." - removed
Input schema / requiredRemoved value: -[ - "id", - "query_type" -]
2 tool updates
- Changed
run_query1 field changed- changed
Input schema / properties / query_type / descriptionPrevious value: -"A valid query type from the Queries array returned by get_term_info (e.g., PaintedDomains, AllAlignedImages, SubclassesOf). Do NOT use tool names here."New value: +"A valid query type from the Queries array returned by get_term_info (e.g., PaintedDomains, AllAlignedImages, SubclassesOf). Do NOT use tool names here. Always check get_term_info first for available query types."
- Changed
search_terms4 fields changed- added
Input schema / properties / auto_fetch_term_infoAdded value: +{ + "default": false, + "description": "When true and an exact label match is found, automatically fetch and include term info in the response.", + "type": "boolean" +} - added
Input schema / properties / minimize_resultsAdded value: +{ + "default": false, + "description": "When true, limit results to top 10 for initial searches and add truncation metadata. For exact matches, return only the matching result.", + "type": "boolean" +} - added
Input schema / properties / rowsAdded value: +{ + "default": 150, + "description": "Number of results to return (default 150, max 1000) - use smaller numbers for focused searches", + "maximum": 1000, + "type": "number" +} - added
Input schema / properties / startAdded value: +{ + "default": 0, + "description": "Pagination start index (default 0) - use to get results beyond the first page", + "type": "number" +}
1 tool update
- Changed
run_query1 field changed- changed
Input schema / properties / query_type / descriptionPrevious value: -"Query type (e.g., PaintedDomains)"New value: +"A valid query type from the Queries array returned by get_term_info (e.g., PaintedDomains, AllAlignedImages, SubclassesOf). Do NOT use tool names here."
3 tool updates
- First observed
get_term_info - First observed
run_query - First observed
search_terms
Related MCP Connectors
MCP server for querying BrainKB, a knowledge base for neuroscience knowledge graphs.
MCP gateway federating 22 biomedical MCP servers behind one endpoint: gnomAD, ClinVar, HPO, VEP.
Auditable MCP server for PubMed, Europe PMC, ClinicalTrials.gov, and bioRxiv/medRxiv queries
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceUnified MCP server providing AI-agent-ready access to AlphaFold, PubMed, ChEMBL, Ensembl, and 37+ scientific databases.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for STRING-DB that enables querying protein-protein interaction networks, functional enrichment, and homology mappings.4 npmMIT
- AlicenseNot gradedqualityFmaintenanceMCP server for PubMed search and literature summarization52MIT
- FlicenseAqualityBmaintenanceBiological and medical data search MCP server.42-
Glama MCP Gateway
Add one secure layer between your agents and this server.