A medical education MCP server providing tools for drug information, adverse events, clinical trials, and PubMed research. Integrates with FastAPI and includes multiple specialized MCP servers for healthcare data.
The server provides 10 tools across medical and clinical domains with variable quality. Most tools have descriptions and basic parameter schemas, but descriptions are inconsistent in depth and clarity. Several tools lack proper output schema documentation, parameter descriptions are sometimes minimal, and error handling guidance is absent. The tools follow reasonable naming conventions (verb_noun patterns like 'get_', 'search_', 'fetch_') but parameter documentation and schema completeness vary significantly. This is a typical community-grade server with functional definitions but notable gaps in consistency and LLM-optimization.
Fetch titles + abstracts for a list of PubMed IDs (PMIDs). Uses PubMed E-utilities `efetch` to retrieve article records in XML, then extracts: - PMID - Title - Abstract (concatenated if sectioned)
Fetch FAERS adverse event reports filtered by patient/drug attributes. This calls the openFDA FAERS endpoint and returns a compact subset of fields (not the full raw report) for each matching case.
Get FDA drug label information including warnings, side effects, dosage, and contraindications. Searches by brand name, generic name, or substance name.
Get drug names (brand, generic, substance) from openFDA drug label endpoint using set_id.
Get comprehensive summary about a medical condition, disease, or health topic from NLM MedlinePlus. Use this for general health information, condition overviews, and patient education content.
Get concise dictionary definition of a medical term from Merriam-Webster Medical Dictionary. Use this to define medical terminology, anatomical terms, or clinical vocabulary.
Output schemas not documented. Tools return data structures but LLMs cannot determine what fields to expect in responses, forcing ambiguous parsing.
Inconsistent parameter descriptions. Some parameters have meaningful context (e.g., 'search_pubmed_real_world_clinical_studies' drug param is descriptive), but others are minimal (e.g., 'get_word_count' text param has only 'The input text to count words in' with no format hints).
No error handling guidance. Tools like 'openfda_search' return {error: ...} on failure, but descriptions do not tell LLMs what to do next (retry? ask user? try alternate endpoint?).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 6 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Get the word count of the provided text.
Make a safe GET request to an allowlisted public API. This is a *shared* utility for agents. It is intentionally conservative: - Only `https` URLs - Host allowlist to avoid SSRF / unexpected egress - Basic `limit` clamping for common public API patterns
Search an openFDA endpoint using a custom Lucene-style `search` query. Use this when an agent wants a customized query against openFDA, and already knows which endpoint to use (e.g. drug label vs adverse events).
Search ClinicalTrials.gov and return user-oriented trial summaries.
Search PubMed for *real‑world* or clinically relevant evidence about a drug for a condition. This tool is intended for an agent to: - Find clinical studies and real‑world evidence (RWE) like observational cohorts, registries, pragmatic trials, post‑marketing studies, and comparative effectiveness analyses. - Support user questions about how a medicine performs for people similar to them.
No pagination support documented. 'search_clinical_trials' and 'search_pubmed_real_world_clinical_studies' accept max_results but do not document total count, next_cursor, or offset behavior needed for LLM planning of multi-page result handling.
'get_drug_name' parameter 'set_id' description is minimal ('The set_id of the drug label') with no guidance on how to obtain a set_id or what format is valid. LLMs cannot discover valid values.