@pipeworx/eu-ctis

Connect: https://gateway.pipeworx.io/eu-ctis/mcp · Install: one-click buttons

Tools: 4

Clinical trials authorised in the EU/EEA under Regulation 536/2014, from the EU Clinical Trials Information System (CTIS) — who is running what, in which member states, for which condition, and at what status.

Tools

  • ctis_search_trials(query?, medicine?, condition?, sponsor?, title?, endpoint?, exclude?, status?, phase?, country?, age_group?, region?, gender?, has_results?, rare_disease?, orphan_designation?, low_intervention?, start_from?, start_to?, sort_by?, sort_direction?, page?, limit?) — the full search surface. Answers “which European trials are recruiting for this drug”.
  • ctis_trial(ct_number) — the full published record for one trial: title, sponsor, products and active substances, conditions, objective, eligibility criteria, endpoints, planned enrolment, per-member-state status and decision dates, and the reported start/recruitment events.
  • ctis_trials_for_medicine(medicine, recruiting_only?, country?, limit?) — every EU trial involving a named medicine or active substance, counted by status.
  • ctis_recent_authorisations(since?, country?, condition?, sponsor?, phase?, limit?) — trials most recently authorised in the EEA, newest decision first.

Auth

Keyless. No API key, no cookie, and no browser User-Agent is required.

Data sources

  • POST https://euclinicaltrials.eu/ctis-public-api/search — the search endpoint, JSON body in and out.
  • GET https://euclinicaltrials.eu/ctis-public-api/retrieve/{ctNumber} — one trial’s full record.
  • Public portal for humans: https://euclinicaltrials.eu/ctis-public/search.

Things worth knowing before you touch this

  • A GET on /ctis-public-api/search answers 403. Searching is a POST. The 403 is a method mismatch, not an authorisation wall — which is exactly what it looks like from the outside, and is why this source was written off once already.
  • Sibling paths answer 200 with HTML. /ctis-public-api/search/{ctNumber}, /trial/{ctNumber} and /ct/{ctNumber} all return the Angular SPA’s index page with a 200. Only /retrieve/{ctNumber} returns JSON. A parser that trusts the status code will parse an HTML shell as data.
  • An unknown trial number returns {} with a 200, not a 404. The absence of ctNumber in the body is the only “not found” signal there is.
  • Filters are numeric code lists, not text. status, trialPhaseCode, ageGroupCode, msc (member states, as ISO 3166 numeric country codes) and trialRegion all take integers. The vocabularies are in src/index.ts, lifted from the portal’s own option lists; the tools accept the human labels and map them.
  • The overall status code and the per-country status code share one vocabulary (1 = under evaluation … 12 = cancelled, plus 13–18 used per member state). trialCountries in a search row is "Spain:2" — country name, colon, that country’s status code.
  • ctStatus means two different things. In a search row it is the numeric code; in a retrieve payload it is a coarser label string (“Authorised”) and the numeric lives in ctPublicStatusCode. Both are normalised to a label on the way out.
  • Dates differ by endpoint: search rows are DD/MM/YYYY, detail is an ISO timestamp. Everything comes out as an ISO date.
  • A full record is large — 220 KB for a 16-country phase III — because every free-text field carries a translation into every concerned language. The detail tool flattens and drops the translations.
  • Trials carry their ClinicalTrials.gov number in secondaryIdentifyingNumbers.nctNumber, exposed as nct_number. That is the join key to the clinicaltrials pack for the same study.
  • CTIS starts in 2022. Regulation 536/2014 applies from 31 January 2022; trials authorised under the old Directive live in the legacy EU Clinical Trials Register and are not here.
  • trialGlobalEnd is an array while a trial is running and an object once it has ended.

Tools

  • ctis_search_trials — Search clinical trials authorised in the EU/EEA under Regulation 536/2014, from the EU Clinical Trials Information System (CTIS). Filter by medicine or active substance, medical condition, sponsor, tr
  • ctis_trial — Full published record for one EU clinical trial by its CTIS number (e.g. 2025-523586-18-00): full scientific title, sponsor and contacts, investigational products with active substances and roles, med
  • ctis_trials_for_medicine — Every EU/EEA clinical trial involving a named medicine or active substance, from the EU Clinical Trials Information System, newest authorisation first. Splits the result by trial status so it is clear
  • ctis_recent_authorisations — Clinical trials most recently authorised in the EU/EEA, newest decision first, from the EU Clinical Trials Information System. Optionally narrowed to a member state, a medical condition, a sponsor or

Tools

  • ctis_recent_authorisations — Clinical trials most recently authorised in the EU/EEA, newest decision first, from the EU Clinical Trials Information System. Optionally narrowed to a member state, a medical condition, a sponsor or
  • ctis_search_trials — Search clinical trials authorised in the EU/EEA under Regulation 536/2014, from the EU Clinical Trials Information System (CTIS). Filter by medicine or active substance, medical condition, sponsor, tr
  • ctis_trial — Full published record for one EU clinical trial by its CTIS number (e.g. 2025-523586-18-00): full scientific title, sponsor and contacts, investigational products with active substances and roles, med
  • ctis_trials_for_medicine — Every EU/EEA clinical trial involving a named medicine or active substance, from the EU Clinical Trials Information System, newest authorisation first. Splits the result by trial status so it is clear

Regenerated from source · build August 25, 2026