Readi-mcp

MCP server exposing tools over the READI clinical trials API.

v1.0.0
Readi

Tools (16)

POST /_mcp
TOOL 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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"
    ]
}