Medical MCP Server
Provides tools for academic paper search, using Google Scholar via Monid TinyFish when configured and falling back to Semantic Scholar when no Monid API key is set.
Provides tools for searching PubMed's 30M+ medical literature database, retrieving detailed article information by PMID, and applying optional evidence grading and question-based reranking. Also supports pediatric literature and AAP guideline searches via PubMed.
Provides academic paper search through Semantic Scholar, serving as the no-key fallback for Google Scholar queries and as an upstream source for health checks.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Medical MCP Serversearch medical literature for GLP-1 cardiovascular outcomes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
𩺠Medical MCP Server
Bring trusted medical data directly into your AI workflow. A local server for private, free access to FDA, WHO, PubMed, RxNorm, Semantic Scholar, and Google Scholar. No API keys. No data leaks.
An MCP (Model Context Protocol) server that brings authoritative medical information into AI coding environments like Cursor and Claude Desktop.
Why Use Medical MCP?
š Your Data Never Leaves ā Runs 100% locally; no tracking, no logs, no cloud
š No API Keys ā Works out of the box, zero configuration
š„ Authoritative Sources ā FDA, TGA, Health Canada, EMA, DailyMed, WHO, PubMed, RxNorm, ClinicalTrials.gov
ā” Easy Setup ā One-click install in Cursor or simple manual setup
š¬ Comprehensive ā Drug info, health stats, medical literature, clinical guidelines, pediatric sources
š”ļø Resilient ā Circuit breakers, retry with backoff, rate limiting, and automatic fallbacks
š Evidence-Graded ā Results tagged with study type and evidence level (Meta-Analysis ā Case Report). Tags are automatic labels from the title and abstract, not independently checked grades.
š„ Health Monitoring ā Built-in health check tool to diagnose source availability
Related MCP server: Medical MCP Server
What's New in v2.0
Resilience Layer ā Circuit breakers per source, retry with exponential backoff + jitter, per-source token bucket rate limiters
Monid web search ā Scholar, AAP, and PMC HTML go through Monid TinyFish (Tavily-style search/fetch). Semantic Scholar is the no-key fallback
Evidence Grading ā PubMed and multi-database results tagged with study type (Systematic Review, RCT, Cohort, Case Report, etc.) and evidence grade (IāV). These tags are automatic labels from the title and abstract, not independently checked grades.
Response Validation ā Zod schemas validate all upstream API responses, logging warnings on schema drift without breaking
NCBI API Key Support ā Optional
NCBI_API_KEYenv var boosts PubMed from 3 req/sec to 10 req/secHealth Check Tool ā
health-checkpings all upstream sources and reports latency, circuit breaker states, rate limiter status, and cache healthStructured Logging ā Leveled, structured logging (DEBUG/INFO/WARN/ERROR) with source tracking and timing for every API call
Request Timeouts ā All upstream calls have explicit response/deadline timeouts to prevent hanging
Quick Start
Install in Cursor (Recommended):
Or install manually:
npm install -g medical-mcp
# Or from source:
git clone https://github.com/JamesANZ/medical-mcp.git
cd medical-mcp && npm install && npm run buildFeatures
š Drug Information
search-drugsā Search FDA, DailyMed, TGA (Australia), Health Canada, and EMA. Filter withcountries(US,AU,CA,EU). Unsupported codes are rejected rather than returned as empty regulatory results.search-drug-nomenclatureā Standardized drug names via RxNorm (limitdefaults to 25)search-drug-safetyā FDA FAERS adverse events (with report IDs), recalls, and shortages
š Health Statistics
get-health-statisticsā WHO Global Health Observatory data (life expectancy, mortality, disease prevalence)
š¬ Medical Literature
search-medical-literatureā Search 30M+ PubMed articles (with evidence grading). Optionalquestionorrerankreorders those hits so papers that actually answer the question sit above papers that only share keywords.rank-search-hitsā Same rerank for a list you already have (title + abstract). Retrieval ranking only ā not diagnosis or advice.get-article-detailsā Detailed article info by PMIDsearch-google-scholarā Academic papers via Monid TinyFish (research_paper) whenMONID_API_KEYis set; otherwise Semantic Scholarsearch-medical-journalsā Top journals (NEJM, JAMA, Lancet, BMJ, Nature Medicine)
š„ Clinical Tools
search-clinical-guidelinesā Practice recommendations from medical organizationssearch-clinical-trialsā ClinicalTrials.govlist-sourcesā Full catalog of registry adapters and dedicated-tool sources (WHO, PubMed, RxNorm, Scholar, AAP), including which MCP tool reaches each. This is not thesearch-drugsfive-regulator fanout.
š¶ Pediatric Sources
search-pediatric-guidelinesā AAP policy/clinical reports via PubMed, plus Bright Futures. Off-domain web hits are dropped; labels come from the page, not from which search ran.search-pediatric-literatureā Research from major pediatric journals. Optionalquestion/reranklike medical literature.search-pediatric-drugsā Drugs with pediatric labeling, NDC, manufacturer, and DailyMed URL
š”ļø Reliability & Monitoring
health-checkā Ping all upstream sources, report latency/status, circuit breaker states, and cache healthget-cache-statsā View cache statistics (hit rate, memory usage, entry count)
Installation
Cursor (One-Click)
Click the install link above or use:
cursor://anysphere.cursor-deeplink/mcp/install?name=medical-mcp&config=eyJtZWRpY2FsLW1jcCI6eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm1lZGljYWwtbWNwIl19fQ==Manual Installation
Requirements: Node.js 18+ and npm
git clone https://github.com/JamesANZ/medical-mcp.git
cd medical-mcp
npm install
npm run build
npm startClaude Desktop
Add to claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"medical-mcp": {
"command": "node",
"args": ["/absolute/path/to/medical-mcp/build/index.js"],
"env": {
"NCBI_API_KEY": "your_optional_key_here"
}
}
}
}Restart Claude Desktop after configuration.
Docker
The container runs the HTTP server. It listens on port 3000 inside the container. -p 3000:3000 publishes that port on your machine. Optional API keys are passed at run time and are not written into the image.
docker build -t medical-mcp:local .
docker run --name medical-mcp --rm -p 3000:3000 medical-mcp:localIf something on the machine is already listening on port 3000, publish a different host port and point the client at that port. The process inside the container still uses 3000.
docker run --name medical-mcp --rm -p 3010:3000 medical-mcp:localIn another terminal:
docker logs medical-mcp
docker stop medical-mcpdocker stop sends SIGTERM. The process stops accepting connections and exits.
Point an MCP client at http://127.0.0.1:3000/mcp. A health URL is not an MCP session. The client has to send initialize and then tools/call.
Pass an optional key from your shell without putting it in the image:
docker run --rm -p 3000:3000 -e NCBI_API_KEY medical-mcp:localstdio still works when a client owns the container's standard input. Keep stdin open and do not allocate a terminal:
docker run -i --rm medical-mcp:local node build/index.js-i keeps stdin open for protocol messages. Leave off -t. A TTY is for an interactive terminal and can alter the bytes this protocol uses. Logs stay on stderr so they are not mixed into stdout. The lesson and the Kubernetes steps are in docs/learning-docker-kubernetes.md.
Usage Examples
Search for Drug Information
{
"tool": "search-drugs",
"arguments": { "query": "Tylenol", "limit": 5 }
}Search Medical Literature (with Evidence Grading)
Results now include evidence tags:
1. Efficacy of COVID-19 Treatments: A Meta-Analysis
Evidence: [Systematic Review / Meta-Analysis ⢠tool grade I]
Authors: Smith J, Jones K...
2. Randomized Trial of Remdesivir in Adults
Evidence: [Randomized Controlled Trial ⢠tool grade II]
Authors: Chen L, Wang M...Run Health Check
{ "tool": "health-check", "arguments": {} }Returns:
ā
FDA: healthy (234ms)
ā
PubMed: healthy (156ms)
ā
WHO: healthy (890ms)
ā
RxNorm: healthy (312ms)
ā
ClinicalTrials: healthy (445ms)
ā
SemanticScholar: healthy (189ms)
NCBI API Key: ā
Configured (10 req/sec PubMed)Architecture
Resilience Stack
Every API call flows through a three-layer resilience stack:
Request ā Rate Limiter ā Circuit Breaker ā Retry (with backoff) ā Upstream APIRate Limiter ā Per-source token bucket prevents exceeding API limits (PubMed: 3/sec without key, 10/sec with; FDA: 4/sec; Google Scholar: 0.2/sec)
Circuit Breaker ā After 3 consecutive failures, the circuit opens for 60s, preventing cascade failures. Transitions: CLOSED ā OPEN ā HALF_OPEN ā CLOSED
Retry ā Exponential backoff with full jitter on transient failures (429, 5xx, network errors). Max 2 retries
Evidence Grading
PubMed and multi-database results are automatically classified:
Grade | Study Type | Examples |
I | Systematic Review / Meta-Analysis | Cochrane reviews, PRISMA studies |
II | Randomized Controlled Trial | Double-blind placebo-controlled trials |
III | Cohort / Case-Control Study | Prospective, retrospective, population-based |
IV | Case Report / Case Series | Clinical case presentations |
V | Expert Opinion / Editorial | Commentaries, perspectives, narrative reviews |
These tags are automatic labels from the title and abstract, not independently checked grades.
Automatic Fallback
When MONID_API_KEY is set, Scholar/AAP search and PMC HTML fetch go through Monid TinyFish. Without a key, Scholar falls back to Semantic Scholar's API ā free, well-structured, 100 req/sec, no API key needed.
Response Validation
All upstream API responses are validated against Zod schemas. If a source changes their API response format, the server logs a warning but continues operating with raw data ā no crashes, just alerts.
Data Sources
Source | Coverage | Update Frequency | Resilience |
FDA | US approved drug labels | Real-time | Circuit breaker + retry |
DailyMed | US structured product labels | Daily | Circuit breaker + retry |
TGA ARTG | Australian Register of Therapeutic Goods | Real-time | Circuit breaker + retry |
Health Canada DPD | Canadian marketed/approved drugs | Real-time | Circuit breaker + retry |
EMA | EU centrally authorised medicines | Twice daily JSON | In-memory cache + retry |
FDA FAERS / recalls / shortages | US safety signals | Real-time | Circuit breaker + retry |
WHO | Global health stats (194 countries) | Annual | Circuit breaker + retry |
PubMed | 30M+ medical citations | Daily | Circuit breaker + retry + NCBI key |
RxNorm | Standardized drug nomenclature (US) | Weekly | Circuit breaker + retry |
TinyFish via Monid | Research papers + domain-scoped web | Real-time | Optional |
Semantic Scholar | 200M+ papers with citation data | Real-time | Circuit breaker + retry |
AAP | Bright Futures & policy statements | Periodic | Graceful degradation |
Pediatric Journals | Major pediatric journals | Daily | Circuit breaker + retry |
ClinicalTrials.gov | Interventional and observational trials | Real-time | Circuit breaker + retry |
Configuration
Environment Variables
Performance & Reliability:
Variable | Default | Description |
| (none) | Free PubMed API key ā 3x throughput. Get one at NCBI |
| (none) | Optional. When set, Scholar/AAP/PMC HTML use Monid's TinyFish search and fetch (Tavily-style web scraper). Get a key at Monid |
| (none) | Optional fallback if you call TinyFish directly instead of through Monid. |
| (none) | Optional. Needed to rerank literature hits with JEV ( |
|
| Logging level: |
Cache:
Variable | Default | Description |
|
| Enable/disable caching |
|
| Maximum cache entries |
|
| FDA TTL in seconds (24h) |
|
| PubMed TTL (1h) |
|
| WHO TTL (7d) |
|
| RxNorm TTL (30d) |
|
| Google Scholar TTL (1h) |
|
| Bright Futures TTL (30d) |
|
| AAP Policy TTL (7d) |
|
| TGA/EMA/Health Canada TTL |
|
| FAERS/recalls/shortages TTL |
|
| Clinical trial search TTL |
|
| Cleanup interval in ms (5min) |
Deduplication:
Variable | Default | Description |
|
| Enable/disable cross-source deduplication |
|
| Fuzzy title match threshold (0.0ā1.0) |
|
| Log removed duplicates |
Performance: Cached responses return in <10ms vs 800ā1500ms for API calls. Expected hit rate: 60%+ for common queries.
Security & Privacy
ā Localhost-only ā Server runs locally, no external access
ā No data storage ā All queries are real-time, nothing saved to disk
ā Process isolation ā Medical data stays on your machine
ā No API keys required ā Works without credentials (NCBI and Monid keys are optional)
Technical Details
Built with: Node.js, TypeScript, MCP SDK
Dependencies: @modelcontextprotocol/sdk, superagent, zod, express, cors
Platforms: macOS, Windows, Linux
Source layout:
src/
āāā index.ts # MCP tool definitions
āāā utils.ts # Core API functions + formatters
āāā constants.ts # API URLs, config constants
āāā types.ts # TypeScript types
āāā logger.ts # Structured leveled logging
āāā rank/ # Optional JEV post-retrieval ranker (question vs abstract)
ā āāā policy.ts # Keep / demote / drop ā no HTTP
ā āāā jev-client.ts # TypeSafe System One client (jev-1.13.0)
āāā cache/
ā āāā config.ts # TTL policies, env var support
ā āāā manager.ts # In-memory LRU cache
āāā resilience/
ā āāā index.ts # Composed resilientCall()
ā āāā circuit-breaker.ts # Per-source circuit breaker
ā āāā retry.ts # Exponential backoff + jitter
ā āāā rate-limiter.ts # Token bucket rate limiter
āāā validation/
ā āāā schemas.ts # Zod schemas for API responses
āāā sources/ # Country/source registry + adapters
ā āāā adapters/ # FDA, TGA, Health Canada, EMA, DailyMed, FAERS, trials, TinyFish
ā āāā ...
āāā utils/
āāā deduplication.ts # Cross-source paper dedup
āāā evidence-grading.ts # Study type classification
āāā semantic-scholar.ts # Semantic Scholar API clientMedical Disclaimer
ā ļø Important: This tool provides information from authoritative sources but should not replace professional medical advice, diagnosis, or treatment. Always consult qualified healthcare professionals for medical decisions.
Contributing
ā If this project helps you, please star it on GitHub! ā
Contributions welcome! Please open an issue or submit a pull request.
License
MIT License ā see LICENSE.md for details.
Support
If you find this project useful, consider supporting it:
ā” Lightning Network
lnbc1pjhhsqepp5mjgwnvg0z53shm22hfe9us289lnaqkwv8rn2s0rtekg5vvj56xnqdqqcqzzsxqyz5vqsp5gu6vh9hyp94c7t3tkpqrp2r059t4vrw7ps78a4n0a2u52678c7yq9qyyssq7zcferywka50wcy75skjfrdrk930cuyx24rg55cwfuzxs49rc9c53mpz6zug5y2544pt8y9jflnq0ltlha26ed846jh0y7n4gm8jd3qqaautqaāæ Bitcoin: bc1ptzvr93pn959xq4et6sqzpfnkk2args22ewv5u2th4ps7hshfaqrshe0xtp
Ī Ethereum/EVM: 0x42ea529282DDE0AA87B42d9E83316eb23FE62c3f
This server cannot be deployed
Maintenance
Related MCP Connectors
Connect AI clients to biomedical data and tools.
Medical RAG: semantic search for clinical guidelines, drug interactions, diagnoses & EHR data.
Medical RAG: semantic search for clinical guidelines, drug interactions, diagnoses & EHR data.
US healthcare data for AI agents: CMS, FDA adverse events, CDC, NPPES NPI. Keyless, real samples.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables AI agents to query free biomedical and pharmaceutical APIs for clinical trials, drug data, molecular structures, adverse events, and research literature.14-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides comprehensive medical information by querying authoritative APIs including FDA, WHO, PubMed, RxNorm, and Australia's PBS, enabling drug searches, health statistics, medical literature, drug nomenclature, and PBS subsidy queries.67 npmMIT
- AlicenseNot gradedqualityCmaintenanceThis MCP server provides authoritative medical data from FDA, WHO, PubMed, RxNorm, and Google Scholar, enabling drug information lookup, health statistics retrieval, medical literature searching, and clinical guidelines access directly in AI workflows.67 npmMIT
- AlicenseNot gradedqualityFmaintenanceEnables ChatGPT, Claude and Gemini to run read-only lookups across EMS protocol guides, judges and courts, public health data (NPI registry, drug labels, recalls, adverse events), and open-source model sizing with VRAM estimates and Hugging Face search. Connects over Streamable HTTP with OAuth 2.1 or API keys, offering anonymous, free-key and paid Pro call quotas.1MIT