Skip to main content
ClaudeWave
pipeworx-io avatar
pipeworx-io

mcp-ema-medicines

View on GitHub

EMA Medicines MCP — the European Medicines Agency's public medicines register.

MCP ServersOfficial Registry0 stars0 forksTypeScriptMITUpdated today
ClaudeWave Trust Score
95/100
Verified
Passed
  • Open-source license (MIT)
  • Actively maintained (<30d)
  • Clear description
  • Topics declared
  • Documented (README)
Last scanned: 9/17/2026
Install in Claude Code / Claude Desktop
Method: Manual
Claude Code CLI
git clone https://github.com/pipeworx-io/mcp-ema-medicines
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "mcp-ema-medicines": {
      "command": "node",
      "args": ["/path/to/mcp-ema-medicines/dist/index.js"]
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
💡 Clone https://github.com/pipeworx-io/mcp-ema-medicines and follow its README for install instructions.
Use cases

MCP Servers overview

# @pipeworx/ema-medicines

European Medicines Agency medicines register — every medicine authorised for the EU market through the centralised procedure, plus the committee opinions still awaiting a European Commission decision — the EMA's herbal-medicine inventory (plant/botanical substances the Committee on Herbal Medicinal Products (HMPC) has assessed, with links to each herb's EU herbal monograph and assessment-report PDFs) — and seven sibling XLSX reports from the same download-medicine-data page: shortages, direct healthcare professional communications (DHPC), referrals, periodic safety update single assessments (PSUSA), orphan designations, paediatric investigation plans, and post-authorisation procedures.

Part of [Pipeworx](https://pipeworx.io) — an MCP gateway connecting AI agents to 1576+ live data sources.

## Tools

- `ema_recent_approvals(from?, to?, month?, category?, limit?)` — new EU marketing authorisations in a date window. Answers "which drugs did the EMA approve in July 2026".
- `ema_chmp_opinions(opinion_status?, since?, category?, include_decided?, limit?)` — medicines the CHMP (human) or CVMP (veterinary) has recommended for or against approval and the Commission has not yet decided. Answers "what did the CHMP recommend this month".
- `ema_medicine_search(query, status?, category?, orphan_only?, limit?)` — search by brand name, INN / active substance, therapeutic area, indication text, ATC code or authorisation holder.
- `ema_medicine(name)` — the full published record for one medicine, by brand name or EMA product number.
- `ema_recent_updates(since?, status?, category?, limit?)` — register entries that changed most recently, including withdrawals and suspensions.
- `herb_search(name?, latin?, botanical?, therapeutic_area?, status?, limit?)` — search the EMA herbal-medicines inventory (plant/herb substances) by common name, Latin/botanical name, therapeutic area, or HMPC assessment status. Answers "which herbs has the EMA assessed for sleep disorders", "is there an EU herbal monograph for chamomile".
- `herb(latin_name?, common_name?)` — the full inventory record for one herb, plus `monograph_url` and `assessment_report_url` scraped (link extraction only) from the herb's EMA page. Answers "what is the EMA monograph link for valerian root".
- `herb_monograph_status(latin)` — HMPC assessment status, code/label, and the outcome of the European assessment for one herb by Latin name; explains why well-established-use vs traditional-use is NOT a field the register carries (see below).
- `ema_shortages(query?, status?, since?, limit?)` — EU medicine shortages: status (ongoing/resolved/discontinued), forms/strengths affected, alternatives availability, start-of-shortage date. The EU counterpart of the FDA shortages tool.
- `ema_dhpc(query?, dhpc_type?, since?, category?, limit?)` — Direct Healthcare Professional Communications: urgent EU-wide safety alerts to prescribers (adverse events, quality defects, shortages, safety signals).
- `ema_referrals(query?, status?, safety_only?, category?, since?, limit?)` — EU referral procedures (Article 31/20/107i and related) — safety and scientific reviews of a medicine or substance class.
- `ema_psusa(query?, outcome?, since?, limit?)` — Periodic Safety Update Report Single Assessments: the EU-wide joint pharmacovigilance review per active substance.
- `ema_orphan_designations(query?, status?, since?, limit?)` — EU orphan medicinal product designations for rare-disease treatments (Positive/Withdrawn/Expired/Negative).
- `ema_pip(query?, decision_type?, since?, limit?)` — Paediatric Investigation Plans: the agreed/waived plan for studying a medicine in children.
- `ema_post_authorisation(query?, status?, category?, since?, limit?)` — post-marketing variations and label-change activity for centrally authorised medicines.

## Auth

Keyless.

## Data sources

- <https://www.ema.europa.eu/en/documents/report/medicines-output-medicines-report_en.xlsx> — the whole register as one XLSX, regenerated daily around 18:00 CET. Listed at <https://www.ema.europa.eu/en/medicines/download-medicine-data> alongside ten sibling reports (orphan designations, shortages, referrals, post-authorisation, DHPC, herbal, PSUSA, paediatric plans, MRLs).
- <https://www.ema.europa.eu/en/documents/report/medicines-output-herbal_medicines-report_en.xlsx> — the herbal-medicines inventory, same file family, regenerated daily. 251 data rows collapse to 204 distinct herbs (a handful of rows repeat identically 2-4x in the sheet; `herb_search`/`herb` dedup on the per-herb page URL). Each row carries a per-herb page URL (`https://www.ema.europa.eu/en/medicines/herbal/<latin-name-slug>`) whose "Documents" section links the monograph and assessment-report PDFs that `herb` scrapes.
- Seven sibling reports, same file family and daily regeneration, listed on the same download page:
  - `medicines-output-shortages-report_en.xlsx` (`ema_shortages`)
  - `medicines-output-dhpc-report_en.xlsx` (`ema_dhpc`)
  - `medicines-output-referrals-report_en.xlsx` (`ema_referrals`)
  - `medicines-output-periodic_safety_update_report_single_assessments-report_en.xlsx` (`ema_psusa`) — **note the filename is NOT `medicines-output-psusa-report_en.xlsx`**; that guess 404s.
  - `medicines-output-orphan_designations-report_en.xlsx` (`ema_orphan_designations`)
  - `medicines-output-paediatric_investigation_plans-report_en.xlsx` (`ema_pip`)
  - `medicines-output-post_authorisation-report_en.xlsx` (`ema_post_authorisation`)
  - Deliberately **not** built: `medicines-output-maximum_residue_limits-report_en.xlsx` (veterinary residue limits, out of scope for this pack) and `medicines-output-opinions_outside_eu-report_en.xlsx` (niche Article 58 scientific opinions on non-EU products).

### Things worth knowing before you touch this

- **Sheet layout is not row 1.** Sheet `Medicine`: row 1 is a provenance banner, rows 2–8 are blank, **row 9 is the header** (39 columns), rows 10+ are records. The header row uses **inline strings, not shared strings** — a parser that only resolves shared strings reads the header as blank.
- **Self-closing cells are a trap.** `<c r="E10" s="1"/>` is an empty cell. A greedy attribute match in the cell regex swallows the `/` and runs on to the *next* cell's `</c>`, silently shifting every value in the row by one column. `src/xlsx.ts` uses a lazy match for exactly this reason.
- **Use `Marketing authorisation date` for "new approvals", not `European Commission decision date`.** The Commission decision date also moves on post-authorisation variations — 80–141 rows a month — while genuine initial authorisations run 4–12 a month. Filtering on the wrong one answers a different question without looking wrong.
- **The committees meet monthly**, so "what did the CHMP recommend this month" lands on an empty window most of the time. When `since` filters everything out, `ema_chmp_opinions` returns the outstanding opinions and states in `window_note` that none were adopted in the window asked for — the question is about the pipeline, not the calendar.
- **`Opinion status` alone does not mean "pending".** Authorised and withdrawn products keep their historical opinion fields. Pending means `Medicine status` starts with `Opinion`; `ema_chmp_opinions` applies that by default and exposes `include_decided` to widen it.
- **EMA rate-limits bursts** and answers a 429 with ~40 KB of HTML rather than JSON — reproduced at five sequential requests. A per-call download is not viable, so the pack holds one parsed copy for six hours and the Cloudflare edge cache absorbs repeats on top of that. If a refresh fails while an earlier copy is in hand, the earlier copy is served rather than an error.
- **Dates are `DD/MM/YYYY` upstream** and are converted to ISO on the way out.
- **`data.europa.eu` is not a route to this data.** The EMA datasets are still listed there but frozen at `modified: 2019-01-09`, and every distribution URL 404s against the pre-redesign `/sites/default/files/Medicines_output_*.xlsx` path.
- The register covers the **EU centralised procedure only** — nationally authorised products are not in it.

### The 7 sibling reports — things worth knowing

- **The PSUSA filename does not match its tool/report name.** It is `medicines-output-periodic_safety_update_report_single_assessments-report_en.xlsx`, not `medicines-output-psusa-report_en.xlsx` — the latter guess 404s. Verified by fetching `en/medicines/download-medicine-data` and grepping the actual `<a href>` list rather than guessing the pattern from the other reports' names.
- **`post_authorisation`'s URL column is `AA`, out of alphabetical order** with the rest of the header row (`A, AA, B, C, ...Z`). The generic loader reads whatever column letter the sheet XML actually uses per header cell, so this is harmless — but do not "fix" it by assuming A..Z order if you ever hand-edit the field map.
- **`orphan_designations` has no `Category` column at all** (the register is human-only) — unlike `dhpc`, `referrals` and `post_authorisation`, which are a Human/Veterinary mix and take a `category` filter.
- **A rare EMA source-data artifact**, not a parser bug: PSUSA's own export occasionally splits one comma-containing active-substance string into two adjacent shared-string cells with a stray embedded `&quot;` (~0.2% of rows, e.g. `dienogest` / `ethinylestradiol (prolonged-release tablet)"` as two separate cells) — those rows still parse, just with a slightly garbled `category`/`substances_in_scope` value. Not worth a special case for a handful of rows.
- Each report gets its own `ReportSpec` (URL, column-header → field map, date fields) fed through one generic `loadReport()`/`reportDataset()` pair — same row-9-is-the-header parsing and same one-download-per-six-hours cache as the main register and the herbal inventory, just parameterised instead of copy-pasted seven times.
- All seven probed live 2026-09-13 with real current rows (e.g. shortages: Eskazole/Zentel ongoing
ema-medicinesmcpmcp-servermodel-context-protocolpipeworx

What people ask about mcp-ema-medicines

What is pipeworx-io/mcp-ema-medicines?

+

pipeworx-io/mcp-ema-medicines is mcp servers for the Claude AI ecosystem. EMA Medicines MCP — the European Medicines Agency's public medicines register. It has 0 GitHub stars and its last recorded update is dated 2026-09-16.

How do I install mcp-ema-medicines?

+

You can install mcp-ema-medicines by cloning the repository (https://github.com/pipeworx-io/mcp-ema-medicines) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is pipeworx-io/mcp-ema-medicines safe to use?

+

Our security agent has analyzed pipeworx-io/mcp-ema-medicines and assigned a Trust Score of 95/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.

Who maintains pipeworx-io/mcp-ema-medicines?

+

pipeworx-io/mcp-ema-medicines is maintained by pipeworx-io. The last recorded GitHub activity is dated 2026-09-16, with 0 open issues.

Are there alternatives to mcp-ema-medicines?

+

Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.

Deploy mcp-ema-medicines to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: pipeworx-io/mcp-ema-medicines
[![Featured on ClaudeWave](https://claudewave.com/api/badge/pipeworx-io-mcp-ema-medicines)](https://claudewave.com/repo/pipeworx-io-mcp-ema-medicines)
<a href="https://claudewave.com/repo/pipeworx-io-mcp-ema-medicines"><img src="https://claudewave.com/api/badge/pipeworx-io-mcp-ema-medicines" alt="Featured on ClaudeWave: pipeworx-io/mcp-ema-medicines" width="320" height="64" /></a>

More MCP Servers

mcp-ema-medicines alternatives