An MCP server that gives AI assistants access to PubMed, Europe PMC, FDA & UK drug labelling, and ClinicalTrials.gov.
A peer-reviewed pub crawl through the literature β the label β and the trial.
Quick start Β· Tools Β· Examples Β· Architecture Β· Roadmap Β· Contributing
PubCrawl connects your AI assistant (Claude Desktop, Cursor, or any MCP-compatible client) directly to the primary sources clinicians and researchers actually use β so you can ask a question in plain English and get an answer grounded in PubMed, Europe PMC, FDA/UK drug labelling, and ClinicalTrials.gov, with real PMIDs, NCT IDs, and DOIs you can verify.
Every tool is a thin, deterministic wrapper over an official API. Nothing is invented; every result cites its source.
Ask "compare US and UK labelling for semaglutide" and PubCrawl pulls both live labels and maps equivalent sections β US Indications and Usage β UK 4.1 Therapeutic indications, and so on β so the differences are visible instead of assumed:
| US Prescribing Information | UK SmPC | |
|---|---|---|
| Indications | glycaemic control Β· reduce risk of MACE in T2D with established CVD Β· reduce risk of sustained eGFR decline, ESKD and CV death in T2D with CKD | glycaemic control only β CV and renal outcomes appear as cross-references to Β§4.4/4.5/5.1, not as indications |
| Contraindications | personal or family history of MTC or MEN 2 Β· hypersensitivity | hypersensitivity only |
A cardiovascular claim that is on-label in the US promotes an unlicensed indication in the UK. If you write, review, or check medical copy for both markets, that gap is the whole job β and compare_labels is the only MCP tool that surfaces it.
- π¬ 14 tools across literature, drug labelling, and clinical trials
- π§Ύ Verifiable by design β results link back to DailyMed, the eMC, PubMed, and ClinicalTrials.gov
- π° Preprints via Europe PMC β surface work ahead of formal publication
- π No API keys required (an optional free NCBI key raises PubMed rate limits)
- π§ͺ Fully typed, tested, and CI-checked β literature retrieval gated by OpenGATE, and labelling & trials by the in-repo fidelity benchmark, on every release
Built by PharmaTools.AI.
1. Add PubCrawl to your client config β no install step needed, npx fetches it on first run.
For Claude Desktop, edit claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"pubcrawl": {
"command": "npx",
"args": ["-y", "@pharmatools/pubcrawl"]
}
}
}2. Restart your client. PubCrawl appears under + β Connectors.
3. Ask away:
"Compare the US and UK labelling for atorvastatin, and find recent Phase 3 trials for it."
That's it. β More examples Β· API key & other options
| Tool | What it does |
|---|---|
search_pubmed |
Search PubMed with filters for date range, article type, and sort order. Returns PMIDs, titles, authors, journals, and DOIs. |
search_europepmc |
Search Europe PMC β a broader corpus than PubMed that also indexes preprints (bioRxiv, medRxiv) and patents. Each result includes an abstract snippet, citation count, open-access status, and a preprint flag. Filter to preprints or open-access only. |
get_abstract |
Get the full structured abstract for an article β broken into labeled sections (background, methods, results, conclusions) with keywords and MeSH terms. |
get_full_text |
Retrieve the full text of open-access articles from PubMed Central, with parsed sections, figure/table captions, and reference counts. |
find_related |
Find similar articles using PubMed's neighbor algorithm, ranked by relevance score. |
format_citation |
Generate a formatted citation in APA, Vancouver, Harvard, or BibTeX style. |
trending_papers |
Find recent papers on a topic, with optional filtering to high-impact journals (Nature, Science, Cell, NEJM, Lancet, JAMA, etc.). |
| Tool | What it does |
|---|---|
resolve_drug_name |
Convert a brand drug name to its generic (or a generic to its US brand names), with drug class and common indications. Deterministic, via RxNorm/openFDA β no AI. |
get_uspi |
Pull US Prescribing Information sections via openFDA (cited to DailyMed) β indications, dosing, warnings, contraindications, and more. |
get_smpc |
Retrieve UK Summary of Product Characteristics from the eMC β the UK equivalent of US prescribing information, with numbered SmPC sections. |
compare_labels |
Side-by-side comparison of US (USPI) and UK (SmPC) labelling for the same drug, pairing equivalent sections (US Indications β UK 4.1). A missing side is always explained, cut sections are flagged truncated, and us_drug / uk_drug pin a different name per market (Farxiga / Forxiga). |
search_by_indication |
Find drugs approved for a medical condition. Searches FDA labelling via openFDA, then cross-references UK availability on the eMC. |
| Tool | What it does |
|---|---|
search_trials |
Search ClinicalTrials.gov for clinical trials. Filter by condition, intervention, recruitment status, and phase. Returns NCT IDs, sponsors, enrollment, and links. |
get_trial |
Get full details for a clinical trial by NCT ID β eligibility criteria, study design, arms, primary/secondary outcomes, locations, and associated PubMed IDs. |
Once connected, just ask naturally:
Literature
- "Search PubMed for recent clinical trials on semaglutide."
- "Search Europe PMC for preprints on GLP-1 receptor agonists, most cited first."
- "Get the abstract for PMID 38127654, then find related papers and cite them all in Vancouver style."
- "What are the trending papers on CRISPR gene therapy this month, high-impact journals only?"
- "Pull the full text of that PMC article and summarise the methods section."
Drug labelling
- "Get the FDA prescribing information for metformin β just the indications and warnings."
- "Pull the UK SmPC for atorvastatin."
- "Compare US and UK labelling for lisinopril and highlight the differences."
- "What's the generic name and drug class for Ozempic?"
- "What drugs are approved for type 2 diabetes in both the US and UK?"
Clinical trials
- "Find recruiting Phase 3 trials for pembrolizumab in breast cancer."
- "Get the eligibility criteria and primary outcomes for NCT03086486."
Cross-source (where PubCrawl shines)
- "For semaglutide: summarise the US label's cardiovascular indication, then find the pivotal trial and its NEJM publication."
Three layers β tools register the MCP interface, lib clients talk to each external API, and shared cache + parsers keep it fast and consistent.
Each tool file exports a register*Tool(server) function with a zod schema and an async handler. All network calls are rate-limited, cached, and time-bounded. See CLAUDE.md for a full architecture walkthrough and CONTRIBUTING.md to add a tool.
# Zero-install (recommended): npx fetches it on demand β see Quick start above.
# Or install globally:
npm install -g @pharmatools/pubcrawl
# Config for a global install:
# { "mcpServers": { "pubcrawl": { "command": "pubcrawl" } } }Without a key, PubMed requests are limited to 3/second. A free key raises this to 10/second.
- Create a free NCBI account at https://www.ncbi.nlm.nih.gov/account/
- Account Settings β API Key Management β create a key
- Add it to your config:
{
"mcpServers": {
"pubcrawl": {
"command": "npx",
"args": ["-y", "@pharmatools/pubcrawl"],
"env": { "NCBI_API_KEY": "your_key_here" }
}
}
}PubCrawl also ships a stateless Streamable HTTP transport for browser-based and hosted clients:
npm run start:http # serves POST /mcp and GET /health on PORT (default 3000)Highlights of what's planned β see ROADMAP.md for the full list.
get_europepmc_fulltextβ read preprints & OA articles surfaced bysearch_europepmcget_adverse_eventsβ openFDA FAERS adverse-event lookups- EMA / EPAR labelling to complement the US + UK
compare_labels - MeSH query helper for sharper PubMed searches
- MCP resources & prompts for common review workflows
Ideas welcome β open an issue.
git clone https://github.com/nickjlamb/pubcrawl.git
cd pubcrawl
npm install
npm run dev # TypeScript watch mode
npm run build # compile to dist/
npm start # run the stdio server
npm test # Vitest unit suite
npm run lint # ESLintUnit tests live in tests/ and cover the parsing, caching, citation, formatting and label-pairing logic with fixture payloads (no network calls). CI runs lint β test β build on every push and pull request. New to the codebase? Start with CONTRIBUTING.md.
npm run bench # labelling + trials fidelity benchmark against the live sources
npm run bench -- --ci # what the release gate runs: exit 1 if a verified case failsTwo gates run on every release and weekly. OpenGATE's retrieval scorer checks PubMed and Europe PMC records against hand-verified anchors. The in-repo fidelity benchmark does the same for drug labelling and trials: compare_labels is held to a gold set of US/UK anchors (a phrase must appear on one side and must not on the other, so real divergences are surfaced rather than smoothed over) plus a verbatim check that refetches the raw openFDA record and eMC page and confirms every returned sentence is a substring of the source. No LLM judge anywhere in either gate.
Versions follow Semantic Versioning. See the CHANGELOG for a full history and Releases for notes and assets.
Contributions are welcome and appreciated β bug reports, new data sources, new tools. Read the contributing guide to get started, then open an issue or a pull request.
If PubCrawl supports work you publish, please cite it β see CITATION.cff, or:
@software{lamb_pubcrawl,
author = {Lamb, Nick},
title = {PubCrawl: verifiable biomedical literature, drug labelling and clinical trials for AI assistants},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.22101559},
url = {https://doi.org/10.5281/zenodo.22101559}
}