@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/searchanswers 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 ofctNumberin 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) andtrialRegionall take integers. The vocabularies are insrc/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).
trialCountriesin a search row is"Spain:2"— country name, colon, that country’s status code. ctStatusmeans 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 inctPublicStatusCode. 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 asnct_number. That is the join key to theclinicaltrialspack 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.
trialGlobalEndis 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