@pharmatools/pubcrawl 2.5.0 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +32 -28
  2. package/package.json +1 -1
  3. package/server.json +2 -2
package/README.md CHANGED
@@ -28,12 +28,24 @@ PubCrawl connects your AI assistant (Claude Desktop, Cursor, or any MCP-compatib
28
28
 
29
29
  Every tool is a thin, deterministic wrapper over an official API. Nothing is invented; every result cites its source.
30
30
 
31
+ ### The thing no other MCP server does
32
+
33
+ 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:
34
+
35
+ | | US Prescribing Information | UK SmPC |
36
+ |---|---|---|
37
+ | **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 |
38
+ | **Contraindications** | personal or family history of MTC or MEN 2 · hypersensitivity | hypersensitivity only |
39
+
40
+ 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.
41
+
42
+ ### Everything else
43
+
31
44
  - 🔬 **14 tools** across literature, drug labelling, and clinical trials
32
45
  - 🧾 **Verifiable by design** — results link back to DailyMed, the eMC, PubMed, and ClinicalTrials.gov
33
- - 🌍 **US *and* UK labelling** — a side-by-side `compare_labels` no other MCP server offers
34
46
  - 📰 **Preprints** via Europe PMC — surface work ahead of formal publication
35
47
  - 🆓 **No API keys required** (an optional free NCBI key raises PubMed rate limits)
36
- - 🧪 Fully **typed, tested, and CI-checked**
48
+ - 🧪 Fully **typed, tested, and CI-checked** — retrieval fidelity gated by [OpenGATE](https://github.com/nickjlamb/opengate) on every release
37
49
 
38
50
  Built by [PharmaTools.AI](https://pharmatools.ai).
39
51
 
@@ -133,32 +145,10 @@ Once connected, just ask naturally:
133
145
 
134
146
  Three layers — **tools** register the MCP interface, **lib clients** talk to each external API, and shared **cache** + **parsers** keep it fast and consistent.
135
147
 
136
- ```mermaid
137
- flowchart LR
138
- Client["🖥 MCP client<br/>Claude Desktop · Cursor · …"]
139
-
140
- subgraph Server["PubCrawl MCP server"]
141
- direction TB
142
- Transport["stdio · Streamable HTTP"]
143
- Tools["14 tools — src/tools/*"]
144
- Shared["LRU cache · XML/JATS/SPL parser"]
145
- Transport --> Tools --> Shared
146
- end
147
-
148
- Client -->|MCP| Transport
149
-
150
- Tools --> NCBI["NCBI E-utilities"]
151
- Tools --> EPMC["Europe PMC REST"]
152
- Tools --> FDA["openFDA + DailyMed"]
153
- Tools --> EMC["UK eMC"]
154
- Tools --> CT["ClinicalTrials.gov v2"]
155
-
156
- NCBI --> S1[("PubMed / PMC")]
157
- EPMC --> S2[("Preprints · patents")]
158
- FDA --> S3[("US labels")]
159
- EMC --> S4[("UK labels")]
160
- CT --> S5[("Trials")]
161
- ```
148
+ <picture>
149
+ <source media="(prefers-color-scheme: dark)" srcset="docs/architecture-dark.svg">
150
+ <img src="docs/architecture-light.svg" alt="PubCrawl architecture: an MCP client connects over stdio or streamable HTTP to the PubCrawl server, whose 14 tools are grouped into literature, drug labelling and clinical trials. Each family calls the official APIs directly — NCBI E-utilities, Europe PMC, openFDA and DailyMed, the UK eMC, and ClinicalTrials.gov — behind a shared LRU cache, XML/JATS/SPL parsers and rate limits. Every result returns with its own identifier: PMID, NCT or DOI. No model sits in this path; nothing is invented." width="100%">
151
+ </picture>
162
152
 
163
153
  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`](CLAUDE.md) for a full architecture walkthrough and [`CONTRIBUTING.md`](CONTRIBUTING.md) to add a tool.
164
154
 
@@ -248,6 +238,20 @@ Versions follow [Semantic Versioning](https://semver.org). See the [**CHANGELOG*
248
238
 
249
239
  Contributions are welcome and appreciated — bug reports, new data sources, new tools. Read the [contributing guide](CONTRIBUTING.md) to get started, then [open an issue](https://github.com/nickjlamb/pubcrawl/issues/new/choose) or a pull request.
250
240
 
241
+ ## 📚 Citation
242
+
243
+ If PubCrawl supports work you publish, please cite it — see [`CITATION.cff`](CITATION.cff), or:
244
+
245
+ ```bibtex
246
+ @software{lamb_pubcrawl,
247
+ author = {Lamb, Nick},
248
+ title = {PubCrawl: verifiable biomedical literature, drug labelling and clinical trials for AI assistants},
249
+ url = {https://github.com/nickjlamb/pubcrawl}
250
+ }
251
+ ```
252
+
253
+ ---
254
+
251
255
  ## 📄 License
252
256
 
253
257
  [MIT](LICENSE) © [PharmaTools.AI](https://pharmatools.ai)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pharmatools/pubcrawl",
3
- "version": "2.5.0",
3
+ "version": "2.5.1",
4
4
  "description": "MCP server for PubMed & Europe PMC literature search, US/UK drug labelling, and clinical trials — built by PharmaTools.AI",
5
5
  "mcpName": "io.github.nickjlamb/pubcrawl",
6
6
  "author": "PharmaTools.AI",
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/nickjlamb/pubcrawl",
7
7
  "source": "github"
8
8
  },
9
- "version": "2.5.0",
9
+ "version": "2.5.1",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@pharmatools/pubcrawl",
14
- "version": "2.5.0",
14
+ "version": "2.5.1",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },