Skip to main content
Glama

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

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.7/5 across 9 of 9 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct operation: searching vs. metadata retrieval vs. pre-computed queries vs. live connectivity vs. ID resolution vs. listing datasets/facets. The descriptions explicitly clarify differences between similar tools like query_connectivity and run_query, and resolve_entity vs. resolve_combination.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern (get_hierarchy, list_connectome_datasets, query_connectivity, resolve_entity, run_query, search_terms). No mixing of styles or vague verbs.

Tool Count5/5

9 tools is well-scoped for a specialized domain server. Each tool covers a necessary capability without redundancy or bloat, fitting comfortably within the ideal 3-15 range.

Completeness5/5

The tool set comprehensively covers the VFB domain: search, metadata, hierarchy, pre-computed queries, live cross-dataset connectivity, ID resolution, and listing of datasets and facets. Obvious gaps like direct image retrieval are handled via get_term_info, and publication queries are available through run_query.

Available Tools

9 tools
get_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVFB term ID (e.g. FBbt_00005801 for mushroom body, FBbt_00003686 for Kenyon cell)
directionNoWhich direction to explore (default: "both")both
max_depthNoNumber of levels to expand. 1 = direct children/parents only. Higher values go deeper. -1 = full tree (use with caution on broad terms). Default: 1.
relationshipYesType of hierarchy: "part_of" for brain region structure, "subclass_of" for cell type taxonomies
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_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).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesOne or more VFB IDs to look up
force_refreshNoBypass 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.
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
containsNoOnly return type names containing this text. Matched case- and separator-insensitively, so "nervous system" finds "Nervous_system".
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 aggregates to class pairs instead of returning every neuron pair.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow 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.
offsetNoRow to start from within the strongest-first ranking (default 0). Re-running with the same limit and the next offset walks down the list.
weightNoMinimum synapse count threshold (recommended default: 5). Lower to 1 if initial query returns zero results as first relaxation step.
exclude_dbsNoDataset 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_typeNoUpstream (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_classNoIf 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.
downstream_typeNoDownstream (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.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so thoroughly. It discloses that queries are NOT pre-cached and can take minutes, that broad queries can return over 50,000 connections, that results are ranked and paged, and that unrecognized dataset symbols are silently ignored. It also explains the summary's contents and advises on paging. This gives the agent critical expectations not derivable from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Though long, the description is densely informative and well-structured. It front-loads the purpose, then uses clear CONSTRAINTS, RECOMMENDED DEFAULTS, RESULT SIZE, and WORKFLOW sections. Every sentence adds unique value (e.g., result size caveat, paging behavior, relaxation sequence) and there is no redundant filler. The length is justified by the tool's complexity and the absence of annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter query tool with no output schema, this description is exceptionally complete. It covers purpose, exclusions, parameter interplay, result expectations, paging semantics, dataset symbol validation, and relaxation troubleshooting. It even explains what the summary contains and advises 'Answer from the summary and quote a handful of rows.' No significant contextual gaps remain for an agent to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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: 'Set both upstream_type AND downstream_type to filter connections between two specific neuron classes,' 'At least one of upstream_type or downstream_type is required,' recommended defaults (weight=5, exclude_dbs=["hb","fafb"]), and guidance to use weight≥50 for both-ends queries to avoid timeouts. It also clarifies the practical effect of group_by_class, enriching the agent's parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource+scope: 'Query synaptic connectivity between Drosophila neuron classes across ALL connectome datasets simultaneously.' It clearly differentiates from sibling tools by explicitly stating it is NOT for single-neuron connections (use run_query) and NOT for muscle/sense organ connections. This makes the tool's purpose unambiguous and distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use and when-not-to-use guidance, naming alternatives: 'use run_query with NeuronNeuronConnectivityQuery instead' for individual neurons, and 'use search_terms... to validate/canonicalize neuron type labels.' It also gives a full workflow (confirm with user, validate terms, relaxation steps) and specific recommendations for broad queries. This far exceeds the minimum and gives an agent clear decision rules.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesUnresolved split-GAL4 combination name or synonym exactly as written by the user (e.g., "MB002B", "SS04495"). Do NOT pass an FBco ID here.
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesUnresolved 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.
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoOne or more VFB IDs to query
limitNoMax 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).
offsetNoRow offset for paging (default 0). To get the next page, re-run with offset increased by limit; "count" gives the total.
queriesNoArray of {id, query_type} pairs for mixed batch queries. When provided, id and query_type params are ignored.
query_typeNoA valid query type from the Queries array returned by get_term_info. Used for single id or array of ids.
force_refreshNoBypass 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_imagesNoInclude 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).
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNoNumber of results to return (default 150, max 1000) - use smaller numbers for focused searches
queryYesSearch query (e.g., medulla)
startNoPagination start index (default 0) - use to get results beyond the first page
uniqueNoOne 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_typesNoFloat results matching these facets_annotation types to the top of the ranked list without excluding others
demote_typesNoSink 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_typesNoFilter results to only include items matching ALL of these facets_annotation types (AND logic). Use list_search_facets for valid names.
exclude_typesNoExclude results matching ANY of these facets_annotation types (OR logic). Deprecated terms are already excluded.
minimize_resultsNoWhen true, return at most 10 results with only the essential fields. For exact matches, return only the matching result.
auto_fetch_term_infoNoWhen true and an exact label match is found, automatically fetch and include term info in the response.
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.