A Model Context Protocol (MCP) server for accessing GEO (Gene Expression Omnibus) data through NCBI E-Utils API
The GEO MCP server provides 11 tools with mostly consistent naming (verb_noun patterns: search_*, download_*, get_*, list_*, cleanup_*) and basic descriptions. However, critical gaps significantly limit production readiness. While tool names are clear and follow verb conventions, parameter descriptions lack depth and specificity. Most critically, output schemas are completely undocumented, there is no visible schema documentation showing what fields the tools return, forcing LLMs to infer structure blindly. Parameter schemas are present but generic; many lack enums for constrained inputs (e.g., 'db_type' accepts 'gse, gsm, gpl, gds' but is declared as a free-form string, not an enum). Error handling is minimal, no recovery guidance, no actionable error messages, no indication of retryability. The destructive tool (cleanup_downloads_tool) lacks any confirmation pattern despite removing data. Descriptions are brief but adequate (60-100 chars), meeting the 10 - 1024 char baseline but below the 50-200 char sweet spot for LLM optimization. Code review reveals tool definitions are explicit in mcp_server.py (visible registration), so no inference penalty applies. However, the absence of documented output schemas and weak parameter constraints are major blockers for reliable agent use.
Remove downloaded GEO datasets to free up disk space
Download GEO data files (SOFT format)
Get statistics about downloaded datasets and disk usage
Check if a GEO dataset has been downloaded and its status
List all downloaded GEO datasets
Search GEO for all types of records (GSE, GSM, GPL, GDS)
Search GEO Datasets (GDS) - curated gene expression datasets
Output schemas completely undocumented. No tool specifies what fields it returns, forcing LLMs to reason blindly about response structure and preventing reliable chaining.
Constrained parameters not using enums. 'db_type' and 'record_types' accept specific values (gse, gsm, gpl, gds) but are declared as free-form strings, inviting hallucinated invalid values from LLMs.
Destructive operation (cleanup_downloads_tool) lacks confirmation or dry-run pattern. Tool can delete all downloaded data without warning or per-item feedback.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 12 | - | v1 |
Search GEO Platforms (GPL) - array/sequencing platforms
Search GEO Profiles database for gene expression profiles
Search GEO Samples (GSM) - individual samples
Search GEO Series (GSE) - complete experiments
No error handling guidance. Error responses do not indicate whether failures are retryable, what caused them, or what the LLM should do next.
Parameter descriptions lack format/constraint details. E.g., 'term' for search tools has no guidance on length, special characters, or search syntax (boolean operators, wildcards, etc.).
Missing pagination guidance. Tools returning lists (e.g., search_geo, list_downloaded_datasets) do not document total counts, next_cursor, or how to handle large result sets.
Tool naming inconsistency: 'cleanup_downloads_tool' uses '_tool' suffix while all others use verb_noun (search_geo, download_geo_data, etc.). Should be 'cleanup_downloads' or 'delete_downloads' for consistency.