VFB3-MCP demonstrates strong definition quality with 4 well-named tools, comprehensive descriptions (averaging 250+ chars per tool), and detailed input/output documentation. All tools follow clear verb_noun patterns (get_*, run_*, search_*, list_). Schemas are present and mostly complete with type definitions and parameter descriptions. However, output schemas are not explicitly documented in the source code, and tool annotations (readOnlyHint, idempotentHint) are missing. Error handling guidance is implicit rather than explicit. The server excels at discovery documentation (the get_term_info description is exceptionally detailed at ~800 chars, including workflow requirements, field mappings, and URL construction guidance).
Navigate class hierarchies in the VFB / anatomy ontologies. Pass a VFB_ID and one of subclass_of, part_of, or has_part to get immediate parent classes (subclass_of) or parts (part_of) or structural containers (has_part). Returns a list of matching class VFB_IDs. Each ID can then be passed to get_term_info to retrieve details. Batch supported — pass an array of IDs to fetch hierarchy for multiple terms at once; results are returned as a JSON object keyed by ID.
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=<VFB_ID>&i=<TEMPLATE_ID>,<IMAGE_ID1>,<IMAGE_ID2> — 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).
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 applied to each) or an array of {id, query_type} objects (distinct queries in one call). Batch results are returned as a JSON object keyed by ID.
Output schemas not explicitly documented in source code. While descriptions mention return fields (e.g., 'Returns: SuperTypes, Tags, Queries, RelatedTools, Images, Publications, Synonyms'), the actual JSON schema for responses is not visible in the provided source.
Tool annotations missing. Tools are READ_ONLY but lack readOnlyHint or idempotentHint annotations in the tool definition. Modern MCP servers should declare these via tool.annotations field.
Error guidance implicit rather than explicit. Descriptions mention error cases (e.g., 'Empty results do NOT mean the answer is unknown') but there is no explicit error response schema or recovery instructions. LLMs must infer retry logic.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 76 | 2026-07-28+ | v2 |
Search for VFB and anatomy ontology terms by name or abbreviation; return matches in a table. Exact matches for names/abbreviations appear first; partial matches (substring search) and fuzzy matches follow. Batch supported — pass an array of search strings to match all at once; results are returned as a JSON object keyed by search string, or as a flat table (with an added 'search_query' column) if return_mode='flat_table'. Pass return_mode='exact_only' to drop fuzzy matches and return only exact matches by name, abbreviation or substring. To build VFB browser URLs from the VFB_ID field: https://v2.virtualflybrain.org/org.geppetto.frontend/geppetto?id=<VFB_ID>.
Parameter constraints not fully formalized. The 'limit' parameter description says 'default 25' and 'Set to 0 to fetch all rows', but there is no explicit minimum/maximum constraint in the schema (e.g., 'minimum': 0, 'maximum': 1000). Prevents validation and LLM clarity.