MCP server for pharmacogenomics — real-time access to ClinVar, PharmGKB, gnomAD, OpenTargets, and clinical trials from Claude
pgx-mcp demonstrates solid foundational quality with 6 well-named, read-only tools in the pharmacogenomics domain. All tools have clear descriptions (194-280 chars, within baseline 34-392 range) and complete input schemas with typed parameters. However, output schemas are entirely undocumented, the code does not show structured return types, field descriptions, or pagination support. Naming follows verb_noun patterns correctly (search_*, get_*). Parameters are well-described and contextual. Major gap: no error handling guidance, no output schema documentation, and missing actionable recovery hints for common failure modes (API timeouts, not-found results, rate limits). The server uses fastmcp with decorator-based registration, which is clean, but tool definitions are not visible in the provided source snapshot, only imports and descriptions from the header are verifiable. All tools are READ_ONLY, reducing risk but also reducing the need for confirmation/dry-run patterns.
Get CPIC or DPWG pharmacogenomic dosing guidelines for a gene-drug pair. Returns evidence-based dosing recommendations based on genotype/phenotype, including recommendation strength and the source guideline. This is the primary tool for answering questions like: "What dose of codeine should I prescribe for a CYP2D6 poor metabolizer?"
Get pharmacogenomic interactions between a drug and gene(s) from PharmGKB. Returns clinical annotations showing how genetic variants affect drug response, including evidence level, phenotype categories, and associated genotypes.
Get comprehensive drug information from PharmGKB. Returns drug details including PharmGKB ID, generic/trade names, and cross-references.
Get full details for a specific clinical trial by NCT ID.
Search for clinical trials on ClinicalTrials.gov. Searches both US and international trials (including European trials registered at ClinicalTrials.gov). Covers pharmacogenomics-relevant trials for drug-gene interactions, biomarker studies, and precision medicine approaches.
Output schemas entirely undocumented across all 6 tools. No field descriptions, return types, pagination structure, or result limits visible. LLMs cannot infer what fields to extract or how to chain tools.
No error handling guidance in any tool description. LLMs cannot determine what to do if API is unreachable, rate-limited, or resource not found. No recovery hints like 'try search_* with partial name' or 'this API returns 429 on rate limit, wait and retry'.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | <=2025-11-25 | v2 |
| 2026-03-09 | C | 61 | - | v1 |
Search Open Targets for drug mechanism of action, indications, and pharmacogenomics data. Uses the Open Targets Platform to find detailed drug-target relationships including pharmacogenomic evidence linking variants to drug response.
Search tools (search_clinical_trials, search_drug_targets) lack pagination and result limit documentation. search_clinical_trials accepts max_results (1 - 50) but no description of what happens if results exceed limit, whether there is a next_cursor, or total_count. LLMs cannot plan for large result sets.
Parameter values for enums are documented in descriptions but not formalized as JSON Schema enums. E.g., 'status' accepts 'RECRUITING, COMPLETED, NOT_YET_RECRUITING' but schema does not enforce enum. 'gene' parameter should constrain to HGNC-approved symbols. LLMs may hallucinate invalid values.
get_trial_details and get_drug_info descriptions are too brief (36 and 110 chars respectively) and lack WHEN/WHY context. Users cannot determine which tool to select when multiple 'get_*' tools exist (e.g., get_drug_info vs get_drug_gene_interactions vs search_drug_targets).
Tool definitions are inferred from imports and decorator usage; explicit schema registration code is not visible in the source snapshot. Cannot verify actual parameter constraints, return types, or tool registration completeness via static analysis.