Tools (16)
POST /_mcp
TOOL
find_similar_trials
find_similar_trials
Finds clinical trials matching a condition, phase and/or nearby location. Use suggest_conditions first to resolve a condition name to one or more ids (conditionIds), or reuse ids already known from earlier in the conversation. This is a listing/exploratory operation: present the results and ask the user if they want more details about a specific trial instead of automatically calling other tools.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| conditionIds | array | optional | One or more READI internal condition identifiers, from the id field of suggest_conditions results. Not trialIds, not SNOMED CT concept codes. A trial is matched if it has ANY of the given conditions (OR). When resolving a free-text condition name, pass every relevant suggest_conditions match here (see get_instructions) instead of a single guessed id. |
| phaseCode | string | optional | Study phase code to filter by (studyPhases.code). |
| lat | number | optional | Latitude to search near, e.g. 47.0243903 |
| long | number | optional | Longitude to search near, e.g. 28.8330539 |
| page | integer | optional | Page number (default: 1) |
| itemsPerPage | integer | optional | Items per page (default: 10) |
Output schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"trialId": {
"type": [
"string",
"null"
],
"description": "READI internal clinical trial UUID. Pass this as trialId to the other clinical trial tools."
},
"fullTitle": {
"type": [
"string",
"null"
]
},
"identifiers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Study identifiers, prefixed with their owning site's name when known (e.g. \"National Institutes of Health Clinical Center (CC): 10001645\")."
},
"adminUrl": {
"type": [
"string",
"null"
],
"description": "Link to view this trial in the READI admin app."
},
"presentationUrl": {
"type": [
"string",
"null"
],
"description": "Link to this trial's public presentation page. Null when the trial has no slug."
}
},
"required": [
"trialId",
"fullTitle",
"identifiers",
"adminUrl",
"presentationUrl"
]
}
}
},
"required": [
"results"
]
}
TOOL
find_trial
find_trial
Searches clinical trials using the supplied filters. Use this tool directly when the requested target is clinical trials. If a condition is provided as text, resolve it with suggest_conditions first and pass every relevant match's id as conditionIds (see get_instructions) rather than a single guessed id. If a public registry identifier such as NCT, CTIS or EudraCT is provided, pass it as studyIdentifier. Each result returns trialId, the READI internal UUID required by trial detail tools. If the request already asks for specific details and one trial is clearly matched, continue automatically with the appropriate detail tools.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| conditionIds | array | optional | One or more READI internal condition identifiers, from the id field of suggest_conditions results. Not trialIds, not SNOMED CT concept codes. A trial is matched if it has ANY of the given conditions (OR). When resolving a free-text condition name, pass every relevant suggest_conditions match here (up to 10, see get_instructions) instead of a single guessed id — trials are indexed against a specific node of the condition hierarchy (e.g. "Breast Neoplasms" rather than the searched "breast cancer"), so a single loosely-matched id can silently miss relevant trials. |
| phaseCode | string | optional | Study phase code to filter by (studyPhases.code). |
| lat | number | optional | Latitude to search near, e.g. 47.0243903 |
| long | number | optional | Longitude to search near, e.g. 28.8330539 |
| page | integer | optional | Page number (default: 1) |
| itemsPerPage | integer | optional | Items per page (default: 5) |
| onlyOngoing | boolean | optional | If true, only trials that have not fully completed yet (current recruitment). Omit to include all statuses. |
| country | string | optional | Filter by trial site country (in English), e.g. "Romania". |
| county | string | optional | Filter by trial site county/region (in English). |
| city | string | optional | Filter by trial site city. |
| organizationName | array | optional | Filter by the organization/site name running the trial. Pass an array of name variants, combined with OR: the user rarely knows the exact registered name, and trial records store it inconsistently (abbreviations, legal suffixes, localname variations). For a user request like "organization Roche", pass every plausible spelling of the same organization, e.g. ["Roche", "F. Hoffmann-La Roche AG", "Hoffmann-La Roche", "Hoffmann Roche"] — never invented organizations, just alternate spellings/forms of the one the user named. Each value is matched as a case-insensitive partial match. |
| age | integer | optional | Patient's age, to filter trials whose eligibility criteria include it. Ask the user for this before applying it. |
| sponsorName | array | optional | Filter by sponsor organization name. Pass an array of name variants, combined with OR: the user rarely knows the exact registered name, and trial records store it inconsistently (abbreviations, legal suffixes, localname variations). For a user request like "sponsor Roche", pass every plausible spelling of the same sponsor, e.g. ["Roche", "F. Hoffmann-La Roche AG", "Hoffmann-La Roche", "Hoffmann Roche"] — never invented sponsors, just alternate spellings/forms of the one the user named. Each value is matched as a case-insensitive partial match. |
| studyIdentifier | string | optional | Filter by a known study identifier, e.g. an NCT number like "NCT07011472" or a EudraCT/CT number like "2022-502616-37-00". |
| interventionType | string | optional | Filter by intervention type: DRUG, DEVICE, PROCEDURE, RADIATION, BEHAVIORAL, GENETIC, DIETARY_SUPPLEMENT, COMBINATION_PRODUCT, DIAGNOSTIC_TEST, BIOLOGICAL, OTHER. |
Output schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"trialId": {
"type": [
"string",
"null"
],
"description": "READI internal clinical trial UUID. Pass this as trialId to the other clinical trial tools."
},
"officialTitle": {
"type": [
"string",
"null"
]
},
"studyType": {
"type": [
"string",
"null"
],
"description": "e.g. OBSERVATIONAL, INTERVENTIONAL."
},
"studyPhaseName": {
"type": [
"string",
"null"
],
"description": "Primary study phase, e.g. PHASE2."
},
"currentStatus": {
"type": [
"string",
"null"
],
"description": "e.g. RECRUITING, COMPLETED, TERMINATED."
},
"enrollmentInfo": {
"type": [
"object",
"null"
],
"description": "Number of participants, with whether it is an estimate or the actual figure.",
"properties": {
"type": {
"type": [
"string",
"null"
],
"description": "e.g. ESTIMATED, ACTUAL."
},
"count": {
"type": [
"integer",
"null"
]
}
},
"required": [
"type",
"count"
]
},
"startDate": {
"type": [
"string",
"null"
],
"description": "Study start date, YYYY-MM-DD."
},
"endDate": {
"type": [
"string",
"null"
],
"description": "Estimated or actual study completion date, YYYY-MM-DD."
},
"minimumAndMaximumEligibleAges": {
"type": [
"object",
"null"
],
"description": "Eligible age range from the trial's criteria. A bound is null when the trial does not set it.",
"properties": {
"minValue": {
"type": [
"string",
"null"
]
},
"minUnitType": {
"type": [
"string",
"null"
],
"description": "e.g. YEARS, MONTHS, WEEKS."
},
"maxValue": {
"type": [
"string",
"null"
]
},
"maxUnitType": {
"type": [
"string",
"null"
],
"description": "e.g. YEARS, MONTHS, WEEKS."
}
},
"required": [
"minValue",
"minUnitType",
"maxValue",
"maxUnitType"
]
},
"identifiers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Study identifiers, prefixed with their owning site's name when known (e.g. \"National Institutes of Health Clinical Center (CC): 10001645\")."
},
"locations": {
"type": "array",
"description": "Up to 10 recruitment locations for this trial. Use get_trial_locations for the full list.",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"address": {
"type": [
"object",
"null"
],
"properties": {
"streetAddress": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"postcode": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"county": {
"type": [
"string",
"null"
]
}
}
},
"distanceKm": {
"type": [
"number",
"null"
],
"description": "Approximate distance in kilometers, when it could be determined."
},
"status": {
"type": [
"string",
"null"
]
}
},
"required": [
"name",
"address",
"distanceKm",
"status"
]
}
},
"conditions": {
"type": "array",
"description": "Conditions studied by this trial.",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"string",
"null"
],
"description": "READI internal condition id, usable with get_condition_details."
},
"name": {
"type": [
"string",
"null"
]
},
"conceptCode": {
"type": [
"string",
"null"
]
},
"vocabularyName": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"name",
"conceptCode",
"vocabularyName"
]
}
},
"adminUrl": {
"type": [
"string",
"null"
],
"description": "Link to view this trial in the READI admin app."
},
"presentationUrl": {
"type": [
"string",
"null"
],
"description": "Link to this trial's public presentation page. Null when the trial has no slug."
}
},
"required": [
"trialId",
"officialTitle",
"studyType",
"studyPhaseName",
"currentStatus",
"enrollmentInfo",
"startDate",
"endDate",
"minimumAndMaximumEligibleAges",
"identifiers",
"locations",
"conditions",
"adminUrl",
"presentationUrl"
]
}
}
},
"required": [
"results"
]
}
TOOL
get_clinical_trail_eligibility_criteria
get_clinical_trail_eligibility_criteria
Returns the raw inclusion and exclusion narrative for a clinical trial. Requires trialId, the READI internal trial UUID returned by find_trial or find_similar_trials. This tool does not include all structured eligibility fields. When the user asks for all eligibility criteria, also call get_clinical_trail_general_eligibility_criteria.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| trialId | string | required | READI internal clinical trial UUID returned in the trialId field of find_trial or find_similar_trials. This is not an NCT, CTIS or EudraCT identifier. Copy it exactly and never guess it. |
Output schema
{
"type": "object",
"properties": {
"trialId": {
"type": [
"string",
"null"
],
"description": "READI internal clinical trial UUID."
},
"adminUrl": {
"type": [
"string",
"null"
],
"description": "Link to view this trial in the READI admin app."
},
"presentationUrl": {
"type": [
"string",
"null"
],
"description": "Link to this trial's public presentation page. Null when the trial has no slug."
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": [
"string",
"null"
]
}
},
"required": [
"text"
]
}
}
},
"required": [
"trialId",
"adminUrl",
"presentationUrl",
"results"
]
}
TOOL
get_clinical_trail_general_eligibility_criteria
get_clinical_trail_general_eligibility_criteria
Returns structured eligibility fields for a clinical trial, including study population, sampling method, healthy-volunteer acceptance, vulnerable population, sex and minimum or maximum age. Requires trialId, the READI internal trial UUID. This tool does not return the complete raw inclusion and exclusion narrative. When the user asks for all eligibility criteria, also call get_clinical_trail_eligibility_criteria..
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| trialId | string | required | READI internal clinical trial UUID returned in the trialId field of find_trial or find_similar_trials. This is not an NCT, CTIS or EudraCT identifier. Copy it exactly and never guess it. |
Output schema
{
"type": "object",
"properties": {
"trialId": {
"type": [
"string",
"null"
],
"description": "READI internal clinical trial UUID."
},
"adminUrl": {
"type": [
"string",
"null"
],
"description": "Link to view this trial in the READI admin app."
},
"presentationUrl": {
"type": [
"string",
"null"
],
"description": "Link to this trial's public presentation page. Null when the trial has no slug."
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"criterion": {
"type": [
"string",
"null"
],
"description": "e.g. STUDY_POPULATION, SAMPLING_METHOD, HEALTHY_VOLUNTEERS, VULNERABLE_POPULATION_SELECTED, SEX, MINIMUM_AGE, MAXIMUM_AGE, GENDER_BASED, GENDER_DESCRIPTION."
},
"text": {
"type": [
"string",
"null"
]
},
"isInclusion": {
"type": [
"boolean",
"null"
]
}
},
"required": [
"criterion",
"text",
"isInclusion"
]
}
}
},
"required": [
"trialId",
"adminUrl",
"presentationUrl",
"results"
]
}
TOOL
get_clinical_trial_details
get_clinical_trial_details
Returns core information for one clinical trial identified by trialId, including title, description, study type, status, public registry identifiers and studied conditions. This tool does not replace the specialized eligibility, sponsor, intervention, contact or location tools.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| trialId | string | required | READI internal clinical trial UUID returned in the trialId field of find_trial or find_similar_trials. This is not an NCT, CTIS or EudraCT identifier. Copy it exactly and never guess it. |
Output schema
{
"type": "object",
"properties": {
"trialId": {
"type": [
"string",
"null"
],
"description": "READI internal clinical trial UUID."
},
"fullTitle": {
"type": [
"string",
"null"
]
},
"fullDescription": {
"type": [
"string",
"null"
]
},
"studyType": {
"type": [
"string",
"null"
],
"description": "e.g. OBSERVATIONAL, INTERVENTIONAL."
},
"studyPhaseName": {
"type": [
"string",
"null"
],
"description": "Primary study phase, e.g. PHASE2."
},
"currentStatus": {
"type": [
"string",
"null"
],
"description": "e.g. RECRUITING, COMPLETED, TERMINATED."
},
"enrollmentInfo": {
"type": [
"object",
"null"
],
"description": "Number of participants, with whether it is an estimate or the actual figure.",
"properties": {
"type": {
"type": [
"string",
"null"
],
"description": "e.g. ESTIMATED, ACTUAL."
},
"count": {
"type": [
"integer",
"null"
]
}
},
"required": [
"type",
"count"
]
},
"startDate": {
"type": [
"string",
"null"
],
"description": "Study start date, YYYY-MM-DD."
},
"endDate": {
"type": [
"string",
"null"
],
"description": "Estimated or actual study completion date, YYYY-MM-DD."
},
"minimumAndMaximumEligibleAges": {
"type": [
"object",
"null"
],
"description": "Eligible age range from the trial's eligibility criteria. A bound is null when the trial does not set it.",
"properties": {
"minValue": {
"type": [
"string",
"null"
]
},
"minUnitType": {
"type": [
"string",
"null"
],
"description": "e.g. YEARS, MONTHS, WEEKS."
},
"maxValue": {
"type": [
"string",
"null"
]
},
"maxUnitType": {
"type": [
"string",
"null"
],
"description": "e.g. YEARS, MONTHS, WEEKS."
}
},
"required": [
"minValue",
"minUnitType",
"maxValue",
"maxUnitType"
]
},
"sources": {
"type": "array",
"description": "Registry sources for this trial (e.g. ClinicalTrials.gov), with their identifiers.",
"items": {
"type": "object",
"properties": {
"registryName": {
"type": [
"string",
"null"
]
},
"identifiers": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"registryName",
"identifiers"
]
}
},
"conditions": {
"type": "array",
"description": "Conditions studied by this trial.",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"string",
"null"
],
"description": "READI internal condition id, usable with get_condition_details."
},
"name": {
"type": [
"string",
"null"
]
},
"conceptCode": {
"type": [
"string",
"null"
]
},
"vocabularyName": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"name",
"conceptCode",
"vocabularyName"
]
}
},
"adminUrl": {
"type": [
"string",
"null"
],
"description": "Link to view this trial in the READI admin app."
},
"presentationUrl": {
"type": [
"string",
"null"
],
"description": "Link to this trial's public presentation page. Null when the trial has no slug."
}
},
"required": [
"trialId",
"fullTitle",
"fullDescription",
"studyType",
"studyPhaseName",
"currentStatus",
"enrollmentInfo",
"startDate",
"endDate",
"minimumAndMaximumEligibleAges",
"sources",
"conditions",
"adminUrl",
"presentationUrl"
]
}
TOOL
get_clinical_trial_goals
get_clinical_trial_goals
Fetches a clinical trial's goals by its READI internal id: objectives and endpoints (CTIS-sourced trials) and outcome measures (ClinicalTrials.gov-sourced trials). A trial usually populates only one of the two sets, so some of the lists may be empty.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| trialId | string | required | READI internal clinical trial UUID returned in the trialId field of find_trial or find_similar_trials. This is not an NCT, CTIS or EudraCT identifier. Copy it exactly and never guess it. |
Output schema
{
"type": "object",
"properties": {
"trialId": {
"type": [
"string",
"null"
],
"description": "READI internal clinical trial UUID."
},
"adminUrl": {
"type": [
"string",
"null"
],
"description": "Link to view this trial in the READI admin app."
},
"presentationUrl": {
"type": [
"string",
"null"
],
"description": "Link to this trial's public presentation page. Null when the trial has no slug."
},
"objectives": {
"type": "array",
"description": "Trial objectives (CTIS). Empty for ClinicalTrials.gov-sourced trials.",
"items": {
"type": "object",
"properties": {
"type": {
"type": [
"string",
"null"
],
"description": "e.g. primary, secondary."
},
"text": {
"type": [
"string",
"null"
]
}
},
"required": [
"type",
"text"
]
}
},
"endpoints": {
"type": "array",
"description": "Trial endpoints (CTIS). Empty for ClinicalTrials.gov-sourced trials.",
"items": {
"type": "object",
"properties": {
"type": {
"type": [
"string",
"null"
],
"description": "e.g. primary, secondary."
},
"text": {
"type": [
"string",
"null"
]
}
},
"required": [
"type",
"text"
]
}
},
"outcomes": {
"type": "array",
"description": "Outcome measures (ClinicalTrials.gov). Empty for CTIS-sourced trials.",
"items": {
"type": "object",
"properties": {
"type": {
"type": [
"string",
"null"
],
"description": "e.g. primary, secondary."
},
"measure": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"timeFrame": {
"type": [
"string",
"null"
]
}
},
"required": [
"type",
"measure",
"description",
"timeFrame"
]
}
}
},
"required": [
"trialId",
"adminUrl",
"presentationUrl",
"objectives",
"endpoints",
"outcomes"
]
}
TOOL
get_clinical_trial_interventions
get_clinical_trial_interventions
Fetches the interventions studied in a clinical trial by its READI internal id (title + description for each).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| trialId | string | required | READI internal clinical trial UUID returned in the trialId field of find_trial or find_similar_trials. This is not an NCT, CTIS or EudraCT identifier. Copy it exactly and never guess it. |
Output schema
{
"type": "object",
"properties": {
"trialId": {
"type": [
"string",
"null"
],
"description": "READI internal clinical trial UUID."
},
"adminUrl": {
"type": [
"string",
"null"
],
"description": "Link to view this trial in the READI admin app."
},
"presentationUrl": {
"type": [
"string",
"null"
],
"description": "Link to this trial's public presentation page. Null when the trial has no slug."
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
}
},
"required": [
"title",
"description"
]
}
}
},
"required": [
"trialId",
"adminUrl",
"presentationUrl",
"results"
]
}
TOOL
get_clinical_trial_sponsors
get_clinical_trial_sponsors
Fetches the sponsors of a clinical trial by its READI internal id: organisation name and address (address may be null).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| trialId | string | required | READI internal clinical trial UUID returned in the trialId field of find_trial or find_similar_trials. This is not an NCT, CTIS or EudraCT identifier. Copy it exactly and never guess it. |
Output schema
{
"type": "object",
"properties": {
"trialId": {
"type": [
"string",
"null"
],
"description": "READI internal clinical trial UUID."
},
"adminUrl": {
"type": [
"string",
"null"
],
"description": "Link to view this trial in the READI admin app."
},
"presentationUrl": {
"type": [
"string",
"null"
],
"description": "Link to this trial's public presentation page. Null when the trial has no slug."
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"organisationName": {
"type": [
"string",
"null"
]
},
"address": {
"type": [
"object",
"null"
],
"properties": {
"streetAddress": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"postcode": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"county": {
"type": [
"string",
"null"
]
}
}
}
},
"required": [
"organisationName",
"address"
]
}
}
},
"required": [
"trialId",
"adminUrl",
"presentationUrl",
"results"
]
}
TOOL
get_condition_details
get_condition_details
Fetches full details for a medical condition by its READI internal id (obtained from suggest_conditions do not invent them).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | READI internal condition id, obtained from suggest_conditions' 'id' field. |
Output schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"vocabulary": {
"type": [
"string",
"null"
],
"description": "Name of the source vocabulary\/terminology (e.g. SNOMED CT)."
},
"conceptClass": {
"type": [
"string",
"null"
],
"description": "Concept class\/category name (e.g. \"Disorder\")."
},
"synonyms": {
"type": "array",
"items": {
"type": "string"
}
},
"parents": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Name(s) of the parent condition(s), if any."
},
"children": {
"type": "array",
"items": {
"type": "string"
},
"description": "Names of the child conditions."
},
"synonymsFromNonStandardToStandardMapRelation": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"name"
]
}
TOOL
get_instructions
get_instructions
Call this tool FIRST, before any other tool in this MCP server, once at the start of any conversation that uses READI tools (no need to call it again later in the same conversation). Returns the required call sequences and identifier rules, plus mandatory presentation rules describing exactly how READI data (trials, locations, conditions, sponsors, interventions, links, etc.) must be formatted and displayed, so the information stays visually and structurally consistent with how it is presented across the other READI platforms.
Parameters
No parameters.
Output schema
{
"type": "object",
"properties": {
"useCaseExample": {
"type": "array",
"items": {
"type": "string"
},
"description": "Examples of how to chain READI tools together, following the rules above."
}
},
"required": [
"useCaseExample"
]
}
TOOL
get_nearest_trial_site
get_nearest_trial_site
Returns active locations for one clinical trial, sorted by approximate distance from the supplied coordinates. trialId must be a READI internal trial UUID, not an NCT, CTIS or EudraCT identifier. If only a public study identifier is known, resolve it with find_trial first.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| trialId | string | required | READI internal clinical trial UUID returned in the trialId field of find_trial or find_similar_trials. This is not an NCT, CTIS or EudraCT identifier. Copy it exactly and never guess it. |
| lat | number | required | Patient's latitude, e.g. 47.0243903 |
| long | number | required | Patient's longitude, e.g. 28.8330539 |
Output schema
{
"type": "object",
"properties": {
"trialId": {
"type": [
"string",
"null"
],
"description": "READI internal clinical trial UUID."
},
"fullTitle": {
"type": [
"string",
"null"
]
},
"identifiers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Study identifiers, prefixed with their owning site's name when known (e.g. \"National Institutes of Health Clinical Center (CC): 10001645\")."
},
"locations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"address": {
"type": [
"object",
"null"
],
"properties": {
"streetAddress": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"postcode": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"county": {
"type": [
"string",
"null"
]
}
}
},
"distanceKm": {
"type": [
"number",
"null"
],
"description": "Approximate distance in kilometers, when it could be determined."
},
"status": {
"type": [
"string",
"null"
]
}
},
"required": [
"name",
"address",
"distanceKm",
"status"
]
}
},
"adminUrl": {
"type": [
"string",
"null"
],
"description": "Link to view this trial in the READI admin app."
},
"presentationUrl": {
"type": [
"string",
"null"
],
"description": "Link to this trial's public presentation page. Null when the trial has no slug."
}
},
"required": [
"trialId",
"fullTitle",
"identifiers",
"locations",
"adminUrl",
"presentationUrl"
]
}
TOOL
get_trial_contacts
get_trial_contacts
Fetches the contact persons for a clinical trial by its READI internal id: full name, phone, email, and the organization they belong to (when available).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| trialId | string | required | READI internal clinical trial UUID returned in the trialId field of find_trial or find_similar_trials. This is not an NCT, CTIS or EudraCT identifier. Copy it exactly and never guess it. |
Output schema
{
"type": "object",
"properties": {
"trialId": {
"type": [
"string",
"null"
],
"description": "READI internal clinical trial UUID."
},
"adminUrl": {
"type": [
"string",
"null"
],
"description": "Link to view this trial in the READI admin app."
},
"presentationUrl": {
"type": [
"string",
"null"
],
"description": "Link to this trial's public presentation page. Null when the trial has no slug."
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fullName": {
"type": [
"string",
"null"
]
},
"phone": {
"type": [
"string",
"null"
]
},
"email": {
"type": [
"string",
"null"
]
},
"organizationId": {
"type": [
"string",
"null"
],
"description": "READI internal organization site id."
},
"organizationName": {
"type": [
"string",
"null"
]
}
},
"required": [
"fullName",
"phone",
"email",
"organizationId",
"organizationName"
]
}
}
},
"required": [
"trialId",
"adminUrl",
"presentationUrl",
"results"
]
}
TOOL
get_trial_locations
get_trial_locations
Fetches all recruitment locations for a clinical trial by its READI internal id: name, address, approximate distance (if coordinates are supplied and available) and status.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| trialId | string | required | READI internal clinical trial UUID returned in the trialId field of find_trial or find_similar_trials. This is not an NCT, CTIS or EudraCT identifier. Copy it exactly and never guess it. |
| lat | number | optional | Patient's latitude, to compute approximate distance to each location. |
| long | number | optional | Patient's longitude, to compute approximate distance to each location. |
Output schema
{
"type": "object",
"properties": {
"trialId": {
"type": [
"string",
"null"
],
"description": "READI internal clinical trial UUID."
},
"adminUrl": {
"type": [
"string",
"null"
],
"description": "Link to view this trial in the READI admin app."
},
"presentationUrl": {
"type": [
"string",
"null"
],
"description": "Link to this trial's public presentation page. Null when the trial has no slug."
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"address": {
"type": [
"object",
"null"
],
"properties": {
"streetAddress": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"postcode": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"county": {
"type": [
"string",
"null"
]
}
}
},
"distanceKm": {
"type": [
"number",
"null"
],
"description": "Approximate distance in kilometers, when it could be determined."
},
"status": {
"type": [
"string",
"null"
]
}
},
"required": [
"name",
"address",
"distanceKm",
"status"
]
}
}
},
"required": [
"trialId",
"adminUrl",
"presentationUrl",
"results"
]
}
TOOL
ping
ping
Health-check tool: echoes back the given message.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| message | string | optional | Message to echo back. Default: pong |
TOOL
search_organization_sites
search_organization_sites
Searches organizations and trial-site addresses in a country, optionally filtered by city or county. Use this tool only when the requested target is an organization, hospital, research centre or site address. Do not use it as an intermediate step when the user asks for clinical trials in a country or city; use find_trial directly for that request. Returns a maximum of 20 results per page together with totalItems, page, itemsPerPage and hasMore. When hasMore is true, present the current results, tell the user that additional results are available and offer to show more results or narrow the search by city or county. Do not request the next page automatically. Fetch page + 1 only when the user explicitly asks to see more results. Never repeat a page that has already been retrieved.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| country | string | required | Country to search in, e.g. "Canada". Partial, case-insensitive match. Always in English. |
| city | string | optional | Optional city to narrow the search, e.g. "Toronto". Partial, case-insensitive match. Always in English. |
| county | string | optional | Optional county to narrow the search. Partial, case-insensitive match. Always in English. |
| page | integer | optional | Page number (default: 1). Only pass a value other than 1 if the user explicitly asked for more results. |
Output schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"organisationName": {
"type": [
"string",
"null"
]
},
"address": {
"type": [
"object",
"null"
],
"properties": {
"streetAddress": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"postcode": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"county": {
"type": [
"string",
"null"
]
}
}
}
},
"required": [
"organisationName",
"address"
]
}
},
"totalItems": {
"type": [
"integer",
"null"
],
"description": "Total number of matching locations, when known."
},
"page": {
"type": "integer"
},
"itemsPerPage": {
"type": "integer"
},
"hasMore": {
"type": "boolean",
"description": "True if there are more results beyond this page. Ask the user to narrow by city\/county instead of paginating automatically."
}
},
"required": [
"results",
"totalItems",
"page",
"itemsPerPage",
"hasMore"
]
}
TOOL
suggest_conditions
suggest_conditions
Resolves a medical condition or disease name to READI internal condition ids, in a single call. Trials are indexed against specific nodes of a condition hierarchy, so when searching for trials pass 2-4 search terms together (the user's exact wording plus clinically accurate synonyms/alternative phrasings, e.g. ["breast cancer", "breast carcinoma", "malignant neoplasm of breast"]) — do not call this tool once per term, all terms are searched and merged into one deduplicated result in this one call. Take every relevant match's id (up to 10) as the conditionIds array to find_trial or find_similar_trials, not just the single best match — see get_instructions. Use a single id with get_condition_details. Returned ids are not trialIds and not universal terminology codes. Only ask the user to choose when the matches are genuinely different, unrelated diseases.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| search | array | required | One to 4 free-text search terms for the same condition, e.g. ["breast cancer", "breast carcinoma", "malignant neoplasm of breast"]. For a condition with no obvious synonyms, e.g. "pregnancy", a single term is enough. Every term is searched and the results merged into one deduplicated list. |
| itemsPerPage | integer | optional | Maximum number of suggestions to return per search term (default: 10) |
Output schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "READI's internal id for this condition. Pass this to get_condition_details, store them in internal memory you will use for clinical trial filtering and get_condition_details tool method."
},
"name": {
"type": "string",
"description": "The disease\/condition name."
},
"conceptCode": {
"type": [
"string",
"null"
],
"description": "The universal standardized code for the disease (e.g. SNOMED CT concept code), independent of READI."
}
},
"required": [
"id",
"name",
"conceptCode"
]
}
}
},
"required": [
"results"
]
}