@pipeworx/isrctn
Connect: https://pipeworx.io/mcp — every tool in the catalog, including @pipeworx/isrctn’s. Install: one-click buttons
Connect to just the @pipeworx/isrctn pack
https://gateway.pipeworx.io/isrctn/mcp — only @pipeworx/isrctn’s own tools, nothing else in the catalog.
No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.
Tools: 2
ISRCTN (isrctn.com) is a primary clinical trial registry recognised by WHO and ICMJE, operated by Springer Nature/BMC. It covers UK and international trials — including many non-US studies that never appear on ClinicalTrials.gov — and assigns a permanent ISRCTN number to every registered study. Free, keyless, public XML query API.
Why this matters for AI agents
ClinicalTrials.gov is US-centric. A question like “what trials exist on
psilocybin for stroke recovery” is only half-answered without ISRCTN, since
several UK/EU-sponsored studies register here instead of (or in addition to)
ClinicalTrials.gov. Use this pack alongside clinicaltrials for international
coverage, not in place of it.
Two flows:
1. Search. “Studies on X and Y” → isrctn_search({query: "psilocybin depression"})
or, to require BOTH a registered condition and a registered intervention,
isrctn_search({condition: "stroke", intervention: "psilocybin"}). Combining
condition and intervention is an AND, not an OR — a real zero means no
ISRCTN trial currently pairs that condition with that intervention, and the
response echoes query_used so the caller can see exactly what was searched.
2. Single record. isrctn_trial({id: "ISRCTN37167117"}) → full structured
record: title, condition(s), intervention(s)/phase, sponsor, funder, dates,
countries, and whether a results report has been posted.
Status is DERIVED, not a registry field
ISRCTN’s XML feed carries no “overall trial status” string — unlike
ClinicalTrials.gov. Every returned trial computes status from its
recruitment-window dates (recruitment_start, recruitment_end,
overall_end_date) relative to the current date, and status_basis names
exactly which date drove the call (e.g. “overall trial end date
(2025-01-23T00:00:00.000Z) has passed”). isrctn_search’s status filter
matches against this derived value and is applied client-side over a
fetched batch (status_filter_scanned reports how many trials were scanned),
since the upstream has no server-side status field to filter on.
Search syntax
query is free text (ISRCTN’s search is a Lucene index over the full record
— title, summary, eligibility criteria, etc.). Multiple words are ANDed by
default (“psilocybin depression” matches trials containing both terms, not
either), confirmed against the live API: psilocybin depression and
psilocybin AND depression return identical counts, "psilocybin depression"
(a phrase) returns zero. condition and intervention match ISRCTN’s
indexed condition: / intervention: fields specifically — these are
narrower than a free-text match on the same word (e.g. condition:stroke
returns ~1/4 the hits of a bare stroke search, because it excludes trials
that only mention “stroke” in eligibility criteria or elsewhere).
At least one of query, condition, intervention is required.
Auth
Keyless. Public, unauthenticated XML query API.
Data sources
https://www.isrctn.com/api/query/format/default?q={lucene_query}&limit={n}— search (e.g.q=psilocybin+depression&limit=10); also used for single-record lookup (isrctn_trialqueries by the canonicalISRCTN37167117-shaped id withlimit=1).
Notes for the next person
- The single-record URL shape
/api/query/ISRCTN37167117/format/defaultdocumented informally elsewhere 404s live (verified 2026-10-09) — the working path for one record is the SAME search endpoint, queried by id. - A non-existent ISRCTN id returns
HTTP 200with an emptyallTrialselement (totalCountof zero) — a legitimate empty result, surfaced as{found: false}, not an error. - A malformed Lucene query (e.g. unbalanced quotes) also silently returns
totalCount="0"rather than an HTTP error — user input going intoquery,condition, andinterventionis Lucene-escaped before being sent, so a caller’s literal text (parentheses, colons, quotes) can’t accidentally produce a false zero from broken query syntax. - A response that is HTTP 200 but has no
allTrials/totalCountroot element, or that claimstotalCount > 0with zero parseable fullTrial blocks, is thrown as a loudupstream_parseerror — never silently returned as an empty result.
Tools
- isrctn_search — Search the ISRCTN registry (isrctn.com) — the UK-based international clinical trial registry — by free text and/or by condition/intervention. Use for “studies on
and <drug/intervention>”, - isrctn_trial — Look up a single ISRCTN trial by its registry number. Accepts “ISRCTN12345678”, “isrctn12345678”, or the bare number “12345678”. Returns title, condition(s), intervention(s)/phase, derived recruitment
Tools
isrctn_search— Search the ISRCTN registry (isrctn.com) — the UK-based international clinical trial registry — by free text and/or by condition/intervention. Use for studies on <condition> and <drug/intervention> , tisrctn_trial— Look up a single ISRCTN trial by its registry number. Accepts ISRCTN12345678 , isrctn12345678 , or the bare number 12345678 . Returns title, condition(s), intervention(s)/phase, derived recruitment st