MCP server for immunopeptidomics and HLA data access with Code Mode execution, GraphQL/SPARQL/REST API integration, and auto-staging of large responses
Server provides 5 tools with reasonable descriptions and parameter schemas. All tools have descriptions (50-300 chars) and input schemas with type definitions. However, output schemas are not documented, error handling guidance is minimal, and parameter descriptions lack actionable constraints (ranges, enums, formats). Tools are well-named with action verbs (search, execute, catalog_search) but descriptions could be more concise and LLM-optimized. No tool annotations (readOnlyHint, destructiveHint) despite all being read-only operations. Parameter validation rules and recovery guidance are absent.
Search the API catalog (endpoints). Returns matching endpoints with full parameter docs. Use this to discover API capabilities before calling execute. Categories are listed. USAGE IN execute: api.get(path, params) for GET, api.post(path, body, params) for POST. Path params like /lookup/{id} are auto-interpolated from params. Remaining params become query string. Large responses (>100KB) are auto-staged: check result.__staged, return the staging info, use query_data to explore. Use limit/pagination params to control response size.
Execute JavaScript code against the API with sandboxed V8 isolate. Code runs with: searchSpec(query) / searchPaths(query) — search the API catalog/spec; listCategories() / listTags() — inspect tags/categories; getEndpoint(path) / getOperation(idOrPath) — get endpoint docs; api.get(path, params) for GET, api.post(path, body, params) for POST; Large responses (>100KB) are auto-staged into SQLite; console.log() capture; optional filesystem access (fs.readFile, fs.writeFile, fs.glob). The last expression or return value is the result.
Execute JavaScript code against a GraphQL API with sandboxed V8 isolate. Code runs with: gql.query(queryString, variables?) — execute GraphQL queries; schema.types(), schema.type(), schema.search() — introspection helpers; db.stage(), db.queryStaged() — staging helpers; optional api.get/api.post for hybrid REST access; console.log() capture; optional filesystem access. The last expression or return value is the result.
Search the OpenAPI spec (operations across paths). Write JavaScript code to search the OpenAPI spec, or use legacy query/category arguments for keyword search. Available functions: searchPaths(query, maxResults=10) — keyword search across paths, summaries, tags, parameters; listTags() — list all tags with operation counts; getOperation(idOrPath) — get full operation by operationId or path; describeOperation(idOrPath) — formatted documentation for an operation; spec — the full frozen OpenAPI spec object. Use to discover endpoints, then write code in execute to call them.
Output schemas not documented. Tools return complex results (staged data, console output, query results) but LLMs cannot infer structure. Agents cannot plan downstream calls or extract required fields reliably.
Parameter descriptions lack actionable constraints. 'max_results' has no min/max bounds stated (default 10, max 25 mentioned in description text but not as schema constraints). 'code' parameters have no length limits or validation rules. LLMs cannot self-correct invalid inputs.
No error handling guidance. Tools accept arbitrary JavaScript code and SPARQL queries but provide no recovery hints if execution fails. Descriptions do not explain what errors are retryable, user-fixable, or fatal.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Execute JavaScript code against a SPARQL endpoint with sandboxed V8 isolate. Code runs with: sparql.query(queryString, opts?) — run SELECT/CONSTRUCT/DESCRIBE; returns array of plain { variable: value } rows; sparql.ask(queryString) — run ASK; returns boolean; sparql.raw(queryString, opts?) — return unparsed { head, results } envelope; prefixes — object of common ontology prefixes; prefixHeader — pre-built PREFIX block; db.stage(), db.queryStaged() — staging helpers; console.log() capture; optional filesystem access. Large responses (>30KB) are auto-staged into SQLite.
No tool annotations despite all tools being read-only. Adding readOnlyHint=true would signal to agents that these calls are safe to retry and have no side effects, improving agent planning.
Parameter 'workspace' (execute, graphql_execute) lacks description of what it controls or how it affects staging behavior. Undocumented dependencies between parameters reduce clarity.