MCP server that navigates users to the right cBioPortal pages by resolving natural language queries into URLs
Server provides 6 tools with complete input schemas and descriptions. Naming follows verb_noun conventions (navigate_to_*, resolve_and_*, get_*). However, critical gaps exist: (1) Output schemas are NOT documented, responses are inferred from source code but not explicitly declared in tool definitions. (2) No error handling guidance visible in tool descriptions; LLMs lack recovery hints. (3) Tool descriptions are lengthy (300-500+ chars in some cases) but lack actionable decision criteria for when to use each tool vs. similar alternatives. (4) Parameter descriptions are present but inconsistent, some are detailed, others vague. (5) No tool annotations (readOnlyHint/destructiveHint/idempotentHint) present, despite all tools being READ_ONLY operations. (6) No pagination or result limiting visible in tool designs that accept study IDs or return filter options. Composite tools like navigate_to_group_comparison accept deeply nested objects with oneOf schemas, increasing cognitive load for LLM reasoning. Overall: solid infrastructure with explicit schemas, but incomplete for production agent work due to missing output schemas, error guidance, and tool annotations.
Retrieve StudyView filter options (clinical attributes + generic assay entities)
Navigate to Group Comparison page based on custom filter-defined groups
Navigate to PatientView with optional tab selection and cohort navigation support
Navigate to ResultsView (analysis page) for multi-gene queries and molecular profiling
Navigate to StudyView page with optional filters
Resolves studies and recommends the appropriate navigation tool
Output schemas not documented in tool definitions. Tool descriptions explain inputs but not what fields the LLM should expect in responses. This forces LLMs to guess at response structure when planning multi-step sequences (e.g., what fields does resolve_and_route return that downstream navigate_to_* tools consume?).
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are missing from all tool definitions, despite all tools being marked READ_ONLY in metadata. Modern MCP clients and agents rely on these to understand transaction safety and retry behavior. All 6 tools should declare readOnlyHint=true.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 57 | - | v1 |
Error handling guidance is absent from all tool descriptions. Tool descriptions do not explain how the LLM should recover from failures. E.g., resolve_and_route takes studyKeywords and studyIds but does not explain what to do if no studies match or if routing fails. Description should include: 'If no studies match keywords, returns empty array. Caller should refine keywords or ask user for clarification.'
Long, descriptive but non-actionable descriptions. navigate_to_group_comparison description spans ~800 chars but lacks a concise summary of WHEN to use it vs. navigate_to_study_view. Descriptions should lead with the decision boundary: 'Use this to compare statistics across defined cohorts (e.g., TP53-mutant vs TP53-wild-type). Use navigate_to_study_view if you only need to explore samples with filters.'
Parameter cardinality and pagination unclear. Several tools accept arrays (studyIds, studyViewFilter arrays) without documenting limits or pagination. get_studyviewfilter_options can fetch filter values for multiple attributeIds and genericAssayProfileIds but does not specify max array size or if results are paginated. This risks LLMs passing oversized requests.
Complex nested schema in navigate_to_group_comparison.groups parameter uses oneOf with conditional logic (isUnselected flag). While technically correct JSON Schema, this requires deep reasoning from the LLM to compose valid group objects. Descriptions mention 'oneOf' but do not provide clear examples of valid group structures.
Tool interdependencies not explicitly documented. resolve_and_route is positioned as a routing tool that 'recommends the appropriate navigation tool,' but tool descriptions do not reference it or explain the typical call sequence. LLMs may call navigate_to_study_view directly without routing first. Cross-reference descriptions or design a mandatory sequencing pattern.