Official implementation of Model Context Protocol for Open Targets Platform API
The server demonstrates solid definition quality with consistent naming conventions, well-structured parameter schemas, and thoughtful composition. All 5 tools follow verb-noun naming patterns (get_, search_, query_, batch_query_). Parameter descriptions are present and reasonably detailed. However, there are gaps in output schema documentation, the actual return types are not explicitly declared in the visible code, forcing LLMs to infer structure. Tool descriptions are adequate (100-150 chars typical) but could be more prescriptive about when to use each tool vs. alternatives. Error handling is present but generic; no guidance on recovery strategies. The batch_query variant shows good composition thinking (avoiding N sequential calls), but the distinction between query_with_jq and query_without_jq as separate tools is suboptimal, this should be a single parameterized tool.
Execute multiple GraphQL queries in batch against the Open Targets Platform API with optional jq filtering per query.
Retrieve the GraphQL schema for the Open Targets Platform API with category-specific subschemas.
Retrieve the type dependency graph for the Open Targets Platform GraphQL schema.
Execute a GraphQL query against the Open Targets Platform API with optional jq filtering.
Search for entities in the Open Targets Platform by query string.
Output schemas not documented. Tools do not declare what fields are returned, forcing LLMs to infer response structure and plan downstream tool calls blindly.
Enum constraints missing for string parameters. 'entity_type' in search_entities, 'schema_type' in get_open_targets_graphql_schema should declare valid values as enums, not free-form strings. This invites hallucinated values.
Conditional parameters tied to runtime config. 'jq_filter' availability depends on server configuration (jq_enabled flag). This creates brittle tool definitions, the tool's signature should not change based on deployment state. Either make jq always available, or split into separate tools with explicit names (query_with_jq vs query_without_jq is already done in implementation, but the tool registration may not expose this clearly).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 68 | - | v1 |
Pagination parameter constraints not documented. search_entities accepts 'page_index' and 'page_size' but does not specify minimum/maximum values or default behavior if omitted. Should document: page_size min=1, max=100 (or applicable), page_index start at 0 or 1, total count in response.
Error handling lacks recovery guidance. No visible error messages guide the LLM on what to do next. E.g., if a GraphQL query fails, should the LLM retry, check the schema first, or ask the user? If entity search returns no results, should it suggest partial matches or alternative entity types?
Tool purpose and mutual exclusivity unclear. get_open_targets_graphql_schema, get_type_dependencies, and query_open_targets_graphql all relate to schema exploration but lack guidance on which to call first or in what sequence. Should document: call get_open_targets_graphql_schema first to understand available types, then query_open_targets_graphql to fetch data.