MCP server for querying CELLxGENE Discover Census single-cell data
Four tools with complete schemas and reasonable descriptions, but significant gaps in parameter documentation and error handling. Tool names follow verb_noun convention (get_*). Descriptions average ~120 chars, within acceptable range but lack WHEN/WHY context. All tools are READ_ONLY, reducing risk. However, parameter descriptions are sparse (e.g., 'value_filter' lacks format/syntax guidance), and no output schema is documented. No error recovery guidance. Composition is sound, tools chain logically (get_census_info → get_obs_metadata → get_data_slice). Missing tool annotations and per-tool error handling.
Get information about available Census versions and organisms
Get a summary of a data slice from CELLxGENE Census based on cell and gene filters
Get cell (observation) metadata from CELLxGENE Census. Use this to explore available cell types, tissues, diseases, etc.
Get gene (variable) metadata from CELLxGENE Census. Use this to explore available genes and their annotations.
Parameter descriptions lack format/constraint guidance. 'value_filter' and 'var_value_filter' do not document expected syntax (e.g., 'TileDB filter expression format: column_name == value'). LLMs cannot infer valid filter syntax and will hallucinate.
No output schema documented. Tool descriptions do not specify what fields are returned (e.g., QueryResult.rows structure, query_info contents). LLMs cannot plan downstream operations or extract required fields.
No error handling or recovery guidance. Code catches exceptions and logs them, but tool descriptions do not explain what errors are possible or how to recover (e.g., 'If organism not found, call cellxgene_get_census_info first').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
Tool descriptions lack WHEN/WHY context. 'Get cell metadata' does not explain when to call this vs get_var_metadata or get_data_slice. LLMs must guess the intended use case.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). While all tools are READ_ONLY, explicit annotations would improve agent planning and safety.