@pipeworx/ema-medicines
Connect: https://gateway.pipeworx.io/ema-medicines/mcp · Install: one-click buttons
Tools: 5
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.
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.
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).
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.tsuses a lazy match for exactly this reason. - Use
Marketing authorisation datefor “new approvals”, notEuropean 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. Opinion statusalone does not mean “pending”. Authorised and withdrawn products keep their historical opinion fields. Pending meansMedicine statusstarts withOpinion;ema_chmp_opinionsapplies that by default and exposesinclude_decidedto 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/YYYYupstream and are converted to ISO on the way out. data.europa.euis not a route to this data. The EMA datasets are still listed there but frozen atmodified: 2019-01-09, and every distribution URL 404s against the pre-redesign/sites/default/files/Medicines_output_*.xlsxpath.- The register covers the EU centralised procedure only — nationally authorised products are not in it.
Tools
- ema_recent_approvals — New medicines authorised for the European Union market by the European Medicines Agency, in a date window. Returns brand name, active substance / INN, therapeutic area and indication, marketing-author
- ema_chmp_opinions — Medicines the EMA committees (CHMP for human medicines, CVMP for veterinary) have recommended for or against EU approval, still awaiting the European Commission decision. Returns brand name, active su
- ema_medicine_search — Search the European Medicines Agency register of centrally authorised medicines by brand name, active substance or INN, therapeutic area, indication text, ATC code, or marketing-authorisation holder.
- ema_medicine — Full European Medicines Agency record for one medicine, looked up by brand name or EMA product number (EMEA/H/C/…). Returns every published field: status, authorised indication, active substance, AT
- ema_recent_updates — Medicines whose European Medicines Agency register entry changed most recently — new authorisations, status changes to withdrawn or suspended, refreshed product information. Returns the medicine, what
Tools
-
ema_chmp_opinions— Medicines the EMA committees (CHMP for human medicines, CVMP for veterinary) have recommended for or against EU approval, still awaiting the European Commission decision. Returns brand name, active su -
ema_medicine— Full European Medicines Agency record for one medicine, looked up by brand name or EMA product number (EMEA/H/C/...). Returns every published field: status, authorised indication, active substance, AT -
ema_medicine_search— Search the European Medicines Agency register of centrally authorised medicines by brand name, active substance or INN, therapeutic area, indication text, ATC code, or marketing-authorisation holder. -
ema_recent_approvals— New medicines authorised for the European Union market by the European Medicines Agency, in a date window. Returns brand name, active substance / INN, therapeutic area and indication, marketing-author -
ema_recent_updates— Medicines whose European Medicines Agency register entry changed most recently — new authorisations, status changes to withdrawn or suspended, refreshed product information. Returns the medicine, what