
Connects Claude to PubMed, FDA drug labelling via DailyMed, UK medicines data from the eMC, and ClinicalTrials.gov. You get literature search with full abstracts and open access full text retrieval, citation formatting in multiple styles, related article discovery, and trending papers filtered by journal impact. On the regulatory side, it pulls structured US prescribing information and UK SmPCs, compares labels across jurisdictions, and searches drugs by indication using OpenFDA. Clinical trial search returns NCT IDs with full protocol details including eligibility, outcomes, and linked publications. Built by PharmaTools.AI. Supports optional NCBI API keys for higher rate limits. Useful when you need to move quickly between primary literature, regulatory documents, and trial registries without switching contexts.
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.
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:
~/Library/Application Support/Claude/claude_desktop_config.json%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. Spot regulatory differences in indications, warnings, and dosing. |
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
Drug labelling
Clinical trials
Cross-source (where PubCrawl shines)
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.
{
"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 by search_europepmcget_adverse_events — openFDA FAERS adverse-event lookupscompare_labelsIdeas 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 # ESLint
Unit tests live in tests/ and cover the parsing, caching, citation, and formatting 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.
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}
}
NCBI_API_KEYsecretNCBI API key for higher rate limits (10 req/s vs 3 req/s). Optional — get one free at https://www.ncbi.nlm.nih.gov/account/