Serveur MCP

clinicaltrialsgov-mcp-server

io.github.cyanheads/clinicaltrialsgov-mcp-server
Santé Recherche et exploration Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Searches ClinicalTrials.gov, retrieves study protocols and results, counts studies, and matches patient characteristics to recruiting trials.

clinicaltrials_find_eligible
Clinicaltrials Find Eligible
Match patient demographics and conditions to eligible recruiting clinical trials. Provide age, sex, conditions, and location to find studies with matching eligibility criteria, contact information, and recruiting locations. Results are re-ranked so studies whose own condition matches a requested condition surface above tangential matches from ClinicalTrials.gov's fuzzy condition search. Each candidate returns only the sites matching the requested location (capped by locationLimit), not the study's full registered site list — a large trial can register hundreds of sites worldwide. When none of a candidate's matched sites is recruiting, one recruiting site is added so an enrollable site is never hidden behind a closer closed one: the one nearest the matched sites by their published coordinates, in the requested country whenever a site there recruits, carrying distanceMi, or the first in match order when coordinates are missing. Fetch a study's complete record with clinicaltrials_get_study_record.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['age', 'sex', 'conditions', 'location'], 'properties': {'age': {'type': 'integer', 'maximum': 120, 'minimum': 0, 'description': 'Patient age in years.'}, 'sex': {'enum': ['FEMALE', 'MALE', 'ALL'], 'type': 'string', 'description': "Patient's biological sex. Use 'ALL' to include studies regardless of sex restrictions."}, 'location': {'type': 'object', 'required': ['country'], 'properties': {'city': {'type': 'string', 'description': 'City name.'}, 'state': {'type': 'string', 'description': 'State or province.'}, 'country': {'type': 'string', 'description': 'Country name. E.g., "United States".'}}, 'description': 'Patient location as `{ country (required), state?, city? }`. Country is required; state/city narrow the match. For radius-based geographic search, use clinicaltrials_search_studies with geoFilter.', 'additionalProperties': False}, 'conditions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Medical conditions or diagnoses, e.g. ["Type 2 Diabetes", "Hypertension"]. Each entry is matched as a condition (multi-word entries match as a phrase); multiple entries are combined with OR, so studies for any listed condition qualify. Returned studies are re-ranked so those whose own condition list names a requested condition rank above tangential matches the upstream fuzzy search pulls in via the MeSH umbrella.'}, 'maxResults': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Maximum results to return.'}, 'locationLimit': {'type': 'integer', 'default': 10, 'maximum': 500, 'minimum': 1, 'description': "Cap on the sites returned per candidate. Each candidate keeps only the sites matching the requested location at the narrowest level that matched (city, else state, else country), capped at this many; the rest of the study's registered sites are omitted. The cap governs those matched sites â\x80\x94 when none of them is recruiting, one recruiting site is added on top of it (the nearest to any matched site, measured before this cap, when coordinates allow â\x80\x94 in the requested country whenever a site there recruits), so a candidate can carry one site more than this. Raise it to see more nearby sites, or fetch the complete site list with clinicaltrials_get_study_record. Each candidate reports totalLocations / matchedLocations / locationsTruncated / nearestRecruitingSiteAdded in locationSummary only when the bound actually dropped sites."}, 'recruitingOnly': {'type': 'boolean', 'default': True, 'description': 'Only include actively recruiting studies.'}, 'healthyVolunteer': {'type': 'boolean', 'default': False, 'description': 'Whether the patient is a healthy volunteer. When true, only studies accepting healthy volunteers are queried.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['studies', 'searchCriteria', 'funnel']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['blank_value', 'rate_limited'], 'description': 'Machine-readable failure mode. Declared by this tool: `blank_value`: A parameter was supplied with a blank, whitespace-only, or empty-list value. `rate_limited`: ClinicalTrials.gov returned 429 after retry budget exhausted. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'funnel': {'type': 'object', 'required': ['conditionMatched', 'locationMatched', 'demographicsMatched'], 'properties': {'locationMatched': {'type': 'number', 'description': 'Studies matching condition + location â\x80\x94 diagnoses geographic narrowing.'}, 'conditionMatched': {'type': 'number', 'description': 'Studies matching the condition query alone (broadest stage).'}, 'demographicsMatched': {'type': 'number', 'description': 'Studies matching the full filter set (condition + location + age/sex + status). Equal to totalCount.'}}, 'description': 'Match counts at each filter stage. Shows where the funnel collapsed â\x80\x94 e.g., conditionMatched=298 but demographicsMatched=2 means age/sex/status are the constraint.', 'additionalProperties': False}, 'notice': {'type': 'string', 'description': 'Recovery guidance when no studies matched â\x80\x94 identifies which filter stage collapsed and suggests how to broaden. Absent when results are returned.'}, 'studies': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': "Matching studies with eligibility and location fields. Each candidate's protocolSection.contactsLocationsModule.locations is BOUNDED to the sites matching the requested location (capped at locationLimit) plus, when none of those is recruiting, one added recruiting site â\x80\x94 not the study's full registered site list. The added site is the one nearest any matched site by published coordinates, taken from the requested country whenever a site there recruits, and carries distanceMi (miles to that nearest matched site); when the matched or recruiting sites publish no coordinates it is the first in match order and carries no distanceMi. A candidate whose sites were bounded also carries a top-level locationSummary object â\x80\x94 { totalLocations, matchedLocations, locationsTruncated, nearestRecruitingSiteAdded?, retrieveFullStudyWith } â\x80\x94 absent when nothing was dropped; nearestRecruitingSiteAdded is present only when that extra site was added (the key keeps its name in the match-order fallback). Fetch a study's complete record and site list with clinicaltrials_get_study_record."}, 'totalCount': {'type': 'number', 'description': 'Total matching studies from the API.'}, 'searchCriteria': {'type': 'object', 'required': ['conditions', 'location', 'age', 'sex'], 'properties': {'age': {'type': 'number', 'description': 'Patient age.'}, 'sex': {'type': 'string', 'description': 'Patient sex.'}, 'location': {'type': 'string', 'description': 'The exact queryLocn string sent upstream (city/state/country, multi-word components quoted, AND-joined). Pass as locationQuery to clinicaltrials_search_studies to reproduce the location filter beyond the maxResults cap.'}, 'conditions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Conditions searched.'}, 'statusFilter': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The status filter applied (["RECRUITING"] when recruitingOnly). Pass as statusFilter to clinicaltrials_search_studies. Absent when recruitingOnly is false.'}, 'advancedFilter': {'type': 'string', 'description': 'The exact AREA[] advancedFilter (age range, plus sex/healthy-volunteer when constrained) sent upstream. Pass as advancedFilter to clinicaltrials_search_studies to reproduce the demographic constraints.'}, 'conditionQuery': {'type': 'string', 'description': 'The exact queryCond string sent upstream (multi-word terms quoted, OR-joined). Pass as conditionQuery to clinicaltrials_search_studies to reproduce the full match set beyond the maxResults cap.'}}, 'description': 'Normalized search criteria applied to this eligibility query, including the exact upstream query strings needed to reproduce the full match set via clinicaltrials_search_studies (replay with includeUnknownEnrollment=true, which find_eligible always sets).', 'additionalProperties': False}}, 'additionalProperties': False}
clinicaltrials_get_field_definitions
Clinicaltrials Get Field Definitions
Resolve valid field names from the ClinicalTrials.gov data model — the canonical PascalCase identifiers (OverallStatus, EnrollmentCount, LeadSponsorName) accepted by the `fields`, `advancedFilter`, and `sort` parameters of other tools, and as input to clinicaltrials_get_field_values. Select a mode: `"search"` — keyword search returning ranked matches (pass `query`, e.g. "enrollment", "sponsor", "adverse events"); `"drill"` — drill into a specific section by dot-notation path (pass `path`, e.g. "protocolSection.designModule"); `"overview"` — top-level summary of all sections (no additional args).
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['mode'], 'properties': {'mode': {'enum': ['search', 'drill', 'overview'], 'type': 'string', 'description': 'Operation mode. "search" â\x80\x94 keyword search (requires `query`); "drill" â\x80\x94 drill into a section by path (requires `path`); "overview" â\x80\x94 list all top-level sections (no other args needed).'}, 'path': {'type': 'string', 'description': 'drill mode only. Dot-notation path to drill into â\x80\x94 e.g., "protocolSection.designModule", "protocolSection.eligibilityModule", "resultsSection". Returns the section\'s individual fields.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 100, 'minimum': 1, 'description': 'search mode only. Maximum results to return. Default: 20.'}, 'query': {'type': 'string', 'description': 'search mode only. Keyword to search field names by â\x80\x94 e.g., "enrollment", "sponsor", "adverse events". Returns matching field names ranked by relevance with their full paths and data types.'}, 'includeIndexedOnly': {'type': 'boolean', 'description': 'drill mode only. Only return indexed (searchable) fields. Default: false.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['fields', 'totalFields']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'cap': {'type': 'number', 'description': 'The limit cap applied to this search (search mode only).'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['blank_value', 'mode_mismatch', 'mode_requires', 'path_not_found', 'rate_limited'], 'description': "Machine-readable failure mode. Declared by this tool: `blank_value`: The selected mode's required argument was supplied with a whitespace-only value. `mode_mismatch`: An argument belonging to a different mode was supplied alongside the selected mode. `mode_requires`: The selected mode's required argument was omitted. `path_not_found`: The dot-notation path does not match any node in the field tree. `rate_limited`: ClinicalTrials.gov returned 429 after retry budget exhausted. Other values are possible when a failure originates below the handler."}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'number', 'description': 'Number of fields returned (search mode only).'}, 'fields': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Field name (camelCase).'}, 'path': {'type': 'string', 'description': 'Full dot-notation path.'}, 'type': {'type': 'string', 'description': 'Semantic type.'}, 'piece': {'type': 'string', 'description': 'PascalCase identifier for use in `fields`/`AREA[]`/`sort` params.'}, 'isEnum': {'type': 'boolean', 'description': 'Whether the field is an enum type.'}, 'children': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Child fields (overview mode only).'}, 'sourceType': {'type': 'string', 'description': 'Data type in the model.'}, 'description': {'type': 'string', 'description': 'Human-readable description from the upstream data model. Often absent.'}}, 'description': 'A single field definition node.', 'additionalProperties': False}, 'description': 'Field definitions, ordered by relevance when mode is "search".'}, 'notice': {'type': 'string', 'description': 'Recovery guidance when search mode returns no matches, or a truncation note when results are capped.'}, 'truncated': {'type': 'boolean', 'description': 'True when the field list was capped by the limit parameter (search mode only).'}, 'searchQuery': {'type': 'string', 'description': 'Echo of the keyword used in search mode. Absent for drill and overview.'}, 'totalFields': {'type': 'number', 'description': 'Total fields returned.'}, 'resolvedPath': {'type': 'string', 'description': 'Resolved path when mode is "drill".'}, 'totalMatches': {'type': 'number', 'description': 'Total fields matching the query before the limit cap was applied (search mode only). Compare against `shown` to size a follow-up limit, or to see that a capped result set is barely over the cap rather than hundreds deep.'}}, 'additionalProperties': False}
clinicaltrials_get_field_values
Clinicaltrials Get Field Values
Discover valid values for ClinicalTrials.gov fields with study counts per value. Use to explore available filter options before building a search — e.g., valid OverallStatus, Phase, InterventionType, StudyType, or LeadSponsorClass values.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['fields'], 'properties': {'fields': {'anyOf': [{'type': 'string', 'description': 'A single PascalCase field name.'}, {'type': 'array', 'items': {'type': 'string'}, 'description': 'Multiple PascalCase field names (at least one required).'}], 'description': 'PascalCase field name(s) to get value statistics for â\x80\x94 an empty list is rejected, not treated as "every field". Examples: OverallStatus, Phase, StudyType, Sex, LeadSponsorClass. Use clinicaltrials_get_field_definitions with a query to find more field names.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['fieldStats']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['blank_value', 'field_invalid', 'rate_limited'], 'description': 'Machine-readable failure mode. Declared by this tool: `blank_value`: A parameter was supplied with a blank, whitespace-only, or empty-list value. `field_invalid`: A requested field name is not a valid PascalCase piece name. `rate_limited`: ClinicalTrials.gov returned 429 after retry budget exhausted. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'fieldStats': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'piece', 'type'], 'properties': {'avg': {'type': 'number', 'description': 'Mean of the recorded values. Present for INTEGER/NUMBER fields.'}, 'max': {'anyOf': [{'type': 'number', 'description': 'Largest value of an INTEGER/NUMBER field.'}, {'type': 'string', 'description': 'Latest value of a DATE field, at the precision recorded.'}], 'description': 'Largest recorded value â\x80\x94 a number for INTEGER/NUMBER, a date string for DATE.'}, 'min': {'anyOf': [{'type': 'number', 'description': 'Smallest value of an INTEGER/NUMBER field.'}, {'type': 'string', 'description': 'Earliest value of a DATE field, at the precision recorded â\x80\x94 a partial date such as "1900-01" stays partial.'}], 'description': 'Smallest recorded value â\x80\x94 a number for INTEGER/NUMBER, a date string for DATE.'}, 'type': {'type': 'string', 'description': 'Field data type (ENUM, BOOLEAN, STRING, DATE, etc.).'}, 'field': {'type': 'string', 'description': 'Full dot-notation field path.'}, 'piece': {'type': 'string', 'description': 'PascalCase piece name.'}, 'formats': {'type': 'array', 'items': {'type': 'string', 'description': 'A date pattern, e.g. "yyyy-MM-dd".'}, 'description': 'Date patterns this field is recorded in. Present for DATE fields; more than one means the field mixes precisions across studies.'}, 'longest': {'type': 'object', 'required': ['value', 'length', 'nctId'], 'properties': {'nctId': {'type': 'string', 'description': 'NCT ID of a study carrying it.'}, 'value': {'type': 'string', 'description': 'The longest recorded value.'}, 'length': {'type': 'number', 'description': 'Its length in characters.'}}, 'description': 'Longest recorded value with its length and a study carrying it. Present for STRING fields only.', 'additionalProperties': False}, 'topValues': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'studiesCount'], 'properties': {'value': {'type': 'string', 'description': 'Field value.'}, 'studiesCount': {'type': 'number', 'description': 'Number of studies with this value.'}}, 'description': 'A value and its study count.', 'additionalProperties': False}, 'description': 'Values ranked by frequency (capped at 250 by the API). Present for ENUM/STRING fields. When multiValued is true, studiesCount sums can exceed the study total.'}, 'trueCount': {'type': 'number', 'description': 'Studies where field is true. Present for BOOLEAN fields.'}, 'falseCount': {'type': 'number', 'description': 'Studies where field is false. Present for BOOLEAN fields.'}, 'multiValued': {'type': 'boolean', 'description': 'True when the field is repeated â\x80\x94 array-typed itself (Phase, Condition) or nested under a repeated object (LocationCountry, one per site) â\x80\x94 so a study can carry several values and the per-value studiesCount buckets sum above the study total. Use to avoid computing a percentage against the corpus.'}, 'uniqueValuesCount': {'type': 'number', 'description': 'Number of distinct values.'}, 'missingStudiesCount': {'type': 'number', 'description': 'Number of studies where this field is absent.'}}, 'description': 'Statistics for a single requested field.', 'additionalProperties': False}, 'description': 'One entry per requested field: canonical path, PascalCase piece name, data type, and the statistics variant that type carries â\x80\x94 top values with study counts plus unique/longest for ENUM/STRING, trueCount/falseCount for BOOLEAN, min/max/avg for INTEGER/NUMBER, min/max/formats for DATE.'}}, 'additionalProperties': False}
clinicaltrials_get_study_count
Clinicaltrials Get Study Count
Get total clinical trial study count from ClinicalTrials.gov matching a query, without fetching study data. Fast and lightweight. Use for quick statistics or to build breakdowns by calling multiple times with different filters (e.g., count by phase, count by status, count recruiting vs completed for a condition).
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'query': {'type': 'string', 'description': 'General free-text search across all fields. Runs the 57-field relevance search ClinicalTrials.gov publishes for this parameter â\x80\x94 NCTId, NCTIdAlias, OrgStudyId, SecondaryId, Acronym, BriefTitle, OfficialTitle, Condition, InterventionName, InterventionOtherName, Phase, StdAge, StudyType, BriefSummary, outcome measures and their descriptions, LeadSponsorName, CollaboratorName, the Location* fields, the Design* fields, and the ConditionAncestorTerm/InterventionAncestorTerm MeSH umbrellas â\x80\x94 so a hit need not carry your term in the field you had in mind. Plain words plus AND, OR, NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression â\x80\x94 those work here as well as in advancedFilter, so AREA[Phase]PHASE2 is accepted in this parameter; a stray bracket fails. `( )` group sub-expressions and work when matched; `,` acts as AND. The dedicated *Query parameters (conditionQuery, interventionQuery, etc.) scope a search to one field.'}, 'titleQuery': {'type': 'string', 'description': 'Search within study titles and acronyms only. Matches Acronym, BriefTitle, and OfficialTitle. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'phaseFilter': {'anyOf': [{'type': 'string', 'description': 'A single phase value.'}, {'type': 'array', 'items': {'type': 'string'}, 'description': 'Multiple phase values (OR).'}], 'description': 'Filter by trial phase. Omit to count all phases â\x80\x94 an empty list is rejected, not treated as "no filter". Values: EARLY_PHASE1, PHASE1, PHASE2, PHASE3, PHASE4, NA.'}, 'outcomeQuery': {'type': 'string', 'description': 'Search within outcome measure fields. Matches PrimaryOutcomeMeasure, SecondaryOutcomeMeasure, OtherOutcomeMeasure, and OutcomeMeasureTitle, plus their description counterparts PrimaryOutcomeDescription, SecondaryOutcomeDescription, OtherOutcomeDescription, OutcomeMeasureDescription, and OutcomeMeasurePopulationDescription â\x80\x94 so a term appearing only in outcome prose still matches. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'sponsorQuery': {'type': 'string', 'description': 'Sponsor/collaborator name search. Matches LeadSponsorName, CollaboratorName, and OrgFullName. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'statusFilter': {'anyOf': [{'type': 'string', 'description': 'A single status value.'}, {'type': 'array', 'items': {'type': 'string'}, 'description': 'Multiple status values (OR).'}], 'description': 'Filter by study status. Omit to count all statuses â\x80\x94 an empty list is rejected, not treated as "no filter". Values: RECRUITING, COMPLETED, ACTIVE_NOT_RECRUITING, NOT_YET_RECRUITING, ENROLLING_BY_INVITATION, SUSPENDED, TERMINATED, WITHDRAWN, UNKNOWN, WITHHELD, NO_LONGER_AVAILABLE, AVAILABLE, APPROVED_FOR_MARKETING, TEMPORARILY_NOT_AVAILABLE.'}, 'locationQuery': {'type': 'string', 'description': 'Location search â\x80\x94 city, state, country, or facility name. Matches LocationCity, LocationState, LocationCountry, LocationFacility, and LocationZip; a study matches when any of its sites does. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'advancedFilter': {'type': 'string', 'description': 'Advanced filter using AREA[FieldName]value syntax. Examples: "AREA[StudyType]INTERVENTIONAL", "AREA[EnrollmentCount]RANGE[100, 1000]", "AREA[Phase]PHASE2 AND AREA[StudyType]INTERVENTIONAL", "(AREA[Phase]PHASE3 OR AREA[Phase]PHASE4) AND AREA[StudyType]INTERVENTIONAL". AND/OR/NOT join complete AREA[FieldName]value expressions; parentheses group them. Call clinicaltrials_get_field_definitions to find AREA[]-compatible field names.'}, 'conditionQuery': {'type': 'string', 'description': 'Condition/disease-specific search. E.g., "Type 2 Diabetes", "non-small cell lung cancer". Matches Condition, BriefTitle, OfficialTitle, ConditionMeshTerm, ConditionAncestorTerm, Keyword, and NCTId. ConditionAncestorTerm is the MeSH umbrella above the conditions a study itself lists, so results run broader than those lists â\x80\x94 a study can match a parent term it never names. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'interventionQuery': {'type': 'string', 'description': 'Intervention/treatment search. E.g., "pembrolizumab", "cognitive behavioral therapy". Matches InterventionName, InterventionType, ArmGroupType, InterventionOtherName, BriefTitle, OfficialTitle, ArmGroupLabel, InterventionMeshTerm, Keyword, InterventionAncestorTerm, InterventionDescription, and ArmGroupDescription. InterventionAncestorTerm is the MeSH umbrella above the interventions a study itself lists, so results run broader than those lists. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'includeUnknownEnrollment': {'type': 'boolean', 'default': False, 'description': 'Include studies whose EnrollmentCount is the upstream "unknown" sentinel (99999999). Excluded by default â\x80\x94 the sentinel pollutes RANGE[N, MAX] queries. Set true for data-quality audits.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['totalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['blank_value', 'field_invalid', 'enum_invalid', 'query_parse_error', 'rate_limited'], 'description': 'Machine-readable failure mode. Declared by this tool: `blank_value`: A parameter was supplied with a blank, whitespace-only, or empty-list value. `field_invalid`: A field name in the advanced filter or AREA[] expression is invalid (often a module name instead of a piece name). `enum_invalid`: statusFilter or phaseFilter contains a value ClinicalTrials.gov does not accept. `query_parse_error`: A free-text query or advancedFilter expression uses syntax the upstream Essie parser rejects â\x80\x94 typically a `[` or `]` outside an AREA[â\x80¦] / RANGE[â\x80¦] expression, an unmatched `(` / `)`, or an unterminated quote in a query/conditionQuery/etc. value. `rate_limited`: ClinicalTrials.gov returned 429 after retry budget exhausted. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Recovery guidance when totalCount is 0 â\x80\x94 suggests how to broaden the query or filters.'}, 'totalCount': {'type': 'number', 'description': 'Total studies matching the query/filters.'}, 'searchCriteria': {'type': 'object', 'description': 'Echo of active query/filter criteria applied to this count, including sentinelFilterActive when the default unknown-enrollment exclusion is in effect.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'additionalProperties': False}
clinicaltrials_get_study_record
Clinicaltrials Get Study Record
Fetch a single clinical trial study by NCT ID from ClinicalTrials.gov. Returns the full study record including protocol details, eligibility criteria, outcomes, arms, interventions, contacts, and locations. Optional locationLimit / outcomeLimit / referenceLimit / nearLocation parameters trim locations, outcomes, and references — original totals are preserved in `filtersApplied` only when a cap actually trims the set.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['nctId'], 'properties': {'nctId': {'type': 'string', 'pattern': '^NCT\\d{8}$', 'description': 'NCT identifier â\x80\x94 format `NCT` followed by 8 digits (e.g., `NCT03722472`).'}, 'nearLocation': {'type': 'object', 'required': ['lat', 'lon'], 'properties': {'lat': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Latitude in decimal degrees.'}, 'lon': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Longitude in decimal degrees.'}, 'radiusMi': {'type': 'number', 'default': 50, 'maximum': 500, 'minimum': 1, 'description': 'Radius in miles. Default 50.'}}, 'description': 'Filter returned locations to those within radius of (lat, lon) and sort by distance. Adds distanceMi to each location. Locations without published coordinates are dropped â\x80\x94 most US sites carry them; international sites less reliably so. Distances reflect ClinicalTrials.gov geocoding granularity â\x80\x94 typically city-centroid, not facility-level â\x80\x94 so multiple sites in the same city resolve to near-identical distances. For broader geographic filtering across studies, use clinicaltrials_search_studies with geoFilter.', 'additionalProperties': False}, 'outcomeLimit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Optional cap on the number of secondary and other outcomes returned. Omit for no cap (full upstream lists). Primary outcomes are never capped. Original totals preserved in filtersApplied.totalSecondaryOutcomes / totalOtherOutcomes only when the cap trims a list.'}, 'locationLimit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Optional cap on the number of locations returned. Omit for no cap (full upstream list). Pairs naturally with nearLocation for narrowing a large multi-site trial. Original total preserved in filtersApplied.totalLocations only when the cap trims the list.'}, 'referenceLimit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Optional cap on the number of references returned. Omit for no cap (full upstream list). Original total preserved in filtersApplied.totalReferences only when the cap trims the list. seeAlsoLinks are never capped.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['study', 'filtersApplied']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['study_not_found', 'rate_limited'], 'description': 'Machine-readable failure mode. Declared by this tool: `study_not_found`: The provided NCT ID does not match any study at ClinicalTrials.gov. `rate_limited`: ClinicalTrials.gov returned 429 after retry budget exhausted. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'study': {'type': 'object', 'description': 'Full study record with caller-requested filters already applied to locations and outcomes. Top-level keys: protocolSection (identification, status, sponsor, conditions, design, arms/interventions, outcomes, eligibility, contacts/locations), derivedSection (MeSH-normalized terms), hasResults, documentSection. The heavy resultsSection is omitted â\x80\x94 see resultsSummary for counts and clinicaltrials_get_study_results for full results data. Use clinicaltrials_get_field_definitions to explore the schema.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'filtersApplied': {'type': 'object', 'properties': {'nearLocation': {'type': 'object', 'required': ['lat', 'lon', 'radiusMi'], 'properties': {'lat': {'type': 'number', 'description': 'Latitude in decimal degrees.'}, 'lon': {'type': 'number', 'description': 'Longitude in decimal degrees.'}, 'radiusMi': {'type': 'number', 'description': 'Radius in miles.'}}, 'description': 'Echo of the nearLocation input.', 'additionalProperties': False}, 'outcomeLimit': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Echo of the outcomeLimit input â\x80\x94 present only when the cap trimmed a list.'}, 'locationLimit': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Echo of the locationLimit input â\x80\x94 present only when the cap trimmed the list.'}, 'referenceLimit': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Echo of the referenceLimit input â\x80\x94 present only when the cap trimmed the list.'}, 'totalLocations': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Upstream location count before any filter was applied.'}, 'totalReferences': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Upstream reference count before referenceLimit was applied.'}, 'totalOtherOutcomes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Upstream other outcomes count before outcomeLimit was applied.'}, 'locationsWithoutGeo': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Number of upstream locations dropped because they lacked geoPoint when nearLocation was provided.'}, 'totalSecondaryOutcomes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Upstream secondary outcomes count before outcomeLimit was applied.'}}, 'description': 'Metadata about the filtering applied to `study`.', 'additionalProperties': False}, 'resultsSummary': {'type': 'object', 'properties': {'outcomeMeasures': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Posted outcome measures.'}, 'baselineMeasures': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Baseline characteristic measures.'}, 'otherAdverseEvents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Distinct other (non-serious) adverse-event terms.'}, 'seriousAdverseEvents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Distinct serious adverse-event terms.'}, 'participantFlowPeriods': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Participant-flow periods.'}}, 'description': 'Compact counts of posted results, present when hasResults is true. The full resultsSection is intentionally omitted from this record-level tool â\x80\x94 fetch it via clinicaltrials_get_study_results or the clinicaltrials://{nctId} resource.', 'additionalProperties': False}}, 'additionalProperties': False}
clinicaltrials_get_study_results
Clinicaltrials Get Study Results
Fetch clinical trial results data from ClinicalTrials.gov for completed studies — outcome measures with statistics, adverse events, participant flow, baseline characteristics, and results metadata (limitations & caveats, certain-agreement disclosure restrictions, results point of contact). Only available for studies where hasResults is true. Use clinicaltrials_search_studies first to find studies with results. A results-rich record can exceed 500KB per study in full mode — bound it with summary=true, narrower sections, or the outcomeLimit / adverseEventLimit caps. A bounded list is resumable: outcomeOffset / seriousEventOffset / otherEventOffset start the next window, and each study's filtersApplied reports what was trimmed and the next offset for every list left short. A previous (alias) NCT ID resolves to its canonical study, named in canonicalNctId.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'nctIds': {'anyOf': [{'type': 'string', 'pattern': '^NCT\\d{8}$', 'description': 'A single NCT ID.'}, {'type': 'array', 'items': {'type': 'string', 'pattern': '^NCT\\d{8}$'}, 'maxItems': 20, 'description': 'Multiple NCT IDs (max 20).'}], 'description': 'One or more NCT IDs (max 20) â\x80\x94 an empty list is rejected, and a repeated ID collapses to one results entry in first-occurrence order. E.g., "NCT12345678" or ["NCT12345678", "NCT87654321"]. Use summary=true for large batches to avoid large payloads.'}, 'summary': {'type': 'boolean', 'default': False, 'description': 'Return condensed summaries instead of full data. Full mode renders every row and field on both output channels, so a large results set can exceed 500KB per study; summary mode typically cuts that to a few KB, scaling with the measure count rather than to a fixed ceiling. An outcome summary keeps the title, type, timeframe, paramType, dispersionType, unit, group/class counts, per-group denominators, one statistical analysis, and a top-line projection of a single class/category cell â\x80\x94 labelled with the class and category titles it came from and a count of the siblings it omits. The measurements outside that cell and the remaining analyses are dropped; re-run with summary=false to reach them. For a middle ground, keep full mode and cap the two lists that carry the bulk with outcomeLimit / adverseEventLimit.'}, 'sections': {'anyOf': [{'enum': ['outcomes', 'adverseEvents', 'participantFlow', 'baseline', 'moreInfo'], 'type': 'string', 'description': 'A single section name.'}, {'type': 'array', 'items': {'enum': ['outcomes', 'adverseEvents', 'participantFlow', 'baseline', 'moreInfo'], 'type': 'string'}, 'description': 'Multiple section names.'}], 'description': 'Filter which sections to return. Values: outcomes, adverseEvents, participantFlow, baseline, moreInfo. Omit for all sections â\x80\x94 an empty list is rejected, not treated as omission.'}, 'outcomeLimit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Optional cap on the number of outcome measures returned per study, taken in the order ClinicalTrials.gov publishes them. Omit for no cap (every measure). Applies to full mode only â\x80\x94 summary mode is already condensed. Each surviving measure keeps its complete groups/classes/measurements/analyses tree. Upstream total preserved in filtersApplied.totalOutcomes only when the cap trims the list.'}, 'outcomeOffset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Optional index of the first outcome measure to return, in the order ClinicalTrials.gov publishes them. Omit or 0 to start at the first. Pair with outcomeLimit to page a long list: each response reports filtersApplied.nextOutcomeOffset for the study, and the list is exhausted when that field is absent. Applied to every study in the call. An offset at or past the end returns an empty list with filtersApplied.totalOutcomes stating the upstream length, not an error. Rejected with summary: true or when sections excludes outcomes.'}, 'otherEventOffset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Optional index of the first other (non-serious) adverse event to return, in upstream order. Omit or 0 to start at the first. Pages independently of seriousEventOffset and pairs with adverseEventLimit. Continue from filtersApplied.nextOtherEventOffset until that field is absent. Applied to every study in the call. Rejected with summary: true or when sections excludes adverseEvents.'}, 'adverseEventLimit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Optional cap on the number of serious and other adverse events returned per study, applied to each list separately in upstream order. Omit for no cap (every event). Applies to full mode only â\x80\x94 summary mode already ranks the top 20 by the most participants affected in any one event group. Event groups are never capped. Upstream totals preserved in filtersApplied.totalSeriousEvents / totalOtherEvents only when the cap trims a list.'}, 'seriousEventOffset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Optional index of the first serious adverse event to return, in upstream order. Omit or 0 to start at the first. Pages independently of otherEventOffset â\x80\x94 the two lists have uncorrelated lengths â\x80\x94 and pairs with adverseEventLimit, which bounds each list separately. Continue from filtersApplied.nextSeriousEventOffset until that field is absent. Applied to every study in the call. Rejected with summary: true or when sections excludes adverseEvents.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['results']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['blank_value', 'offset_not_applicable', 'rate_limited'], 'description': 'Machine-readable failure mode. Declared by this tool: `blank_value`: A parameter was supplied with a blank, whitespace-only, or empty-list value. `offset_not_applicable`: An offset was supplied for a list this call does not return â\x80\x94 summary mode returns a condensed projection rather than a bounded window, or the sections filter excludes the offsetâ\x80\x99s own section. `rate_limited`: ClinicalTrials.gov returned 429 after retry budget exhausted. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['nctId', 'title', 'hasResults'], 'properties': {'nctId': {'type': 'string', 'description': 'The NCT identifier as requested, trimmed and uppercased. When it is a previous (alias) ID, ClinicalTrials.gov answers with the canonical record and canonicalNctId names it.'}, 'title': {'type': 'string', 'description': 'Study title.'}, 'baseline': {'type': 'object', 'description': 'Baseline characteristics. Summary mode: groupCount, measureCount, and measures (title, paramType, unitOfMeasure). Full mode: adds groups and measures with per-group classes/categories/measurements.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'moreInfo': {'type': 'object', 'description': 'Results metadata from moreInfoModule. Summary mode: limitationsAndCaveats, certainAgreement flags (piSponsorEmployee, restrictiveAgreement, restrictionType), and pointOfContact. Full mode: adds certainAgreement.otherDetails.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'outcomes': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Outcome measures with per-group statistics. Summary mode (compact): type, title, timeFrame, paramType, dispersionType, unitOfMeasure, group/class counts, denoms (per-group denominators keyed by group title), topStats (the per-group cells of one class/category â\x80\x94 each carrying the upstream value verbatim, including an NA/NR sentinel, plus spread, lowerLimit/upperLimit, and the recordâ\x80\x99s own comment when present), topStatsFrom (classTitle / categoryTitle naming where that cell came from, with omittedClasses / omittedCategories counts and a note pointing at summary=false when siblings were dropped), and topAnalysis (statisticalMethod, pValue, paramType/Value, ciPctValue/Lower/Upper, nonInferiorityType, groupIds â\x80\x94 lifted from analyses[0]) when present. Full mode (default): adds raw groups, classes, categories, measurements, and analyses arrays.'}, 'hasResults': {'type': 'boolean', 'description': 'Whether study has posted results.'}, 'adverseEvents': {'type': 'object', 'description': 'Adverse events. Summary mode: timeFrame, groupCount, seriousEventCount, otherEventCount, eventGroups (id and title of each event group), plus topEvents â\x80\x94 up to 20 events ranked by the most participants affected in any one event group, each with term, organSystem, kind, and byGroup (one { groupId, numAffected, numAtRisk } row per event group; resolve groupId against eventGroups). Counts are never pooled across groups: groups can overlap (a crossover or second-course group re-counts participants of its parent arm), so compare arms row by row. Full mode: eventGroups with descriptions and per-group totals, plus seriousEvents and otherEvents with per-event term and per-group affected/at-risk stats.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'canonicalNctId': {'type': 'string', 'description': 'The canonical NCT identifier of the study that answered â\x80\x94 present only when the requested nctId is a previous (alias) ID pointing at a different record. Absent means nctId is already canonical. Requesting an alias and its own canonical ID together returns one entry per requested ID, both carrying the same study.'}, 'filtersApplied': {'type': 'object', 'properties': {'outcomeLimit': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Echo of the outcomeLimit input â\x80\x94 present only when the cap cut measures off the end of the window.'}, 'outcomeOffset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Echo of the outcomeOffset input â\x80\x94 present only when it skipped measures before the window.'}, 'totalOutcomes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Upstream outcome measure count, before the bounds trimmed the list.'}, 'otherEventOffset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Echo of the otherEventOffset input â\x80\x94 present only when it skipped events before the window.'}, 'totalOtherEvents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Upstream other adverse event count, before the bounds trimmed the list.'}, 'adverseEventLimit': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Echo of the adverseEventLimit input â\x80\x94 present only when the cap cut events off the end of a window. Which list it cut is named by that listâ\x80\x99s own next offset.'}, 'nextOutcomeOffset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'The outcomeOffset to request next for this study â\x80\x94 present only when measures remain past the window. Absent means this studyâ\x80\x99s outcome list is exhausted.'}, 'seriousEventOffset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Echo of the seriousEventOffset input â\x80\x94 present only when it skipped events before the window.'}, 'totalSeriousEvents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Upstream serious adverse event count, before the bounds trimmed the list.'}, 'nextOtherEventOffset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'The otherEventOffset to request next for this study â\x80\x94 present only when other events remain past the window. Absent means this studyâ\x80\x99s other event list is exhausted.'}, 'nextSeriousEventOffset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'The seriousEventOffset to request next for this study â\x80\x94 present only when serious events remain past the window. Absent means this studyâ\x80\x99s serious event list is exhausted.'}}, 'description': 'What the outcomeLimit / adverseEventLimit caps and the outcomeOffset / seriousEventOffset / otherEventOffset offsets trimmed on this study, plus the next offset for each list left short. Present only when a bound actually reduced a list â\x80\x94 a window that started at zero and reached the end trimmed nothing. Absent means the payload is the complete upstream set for the requested sections. Offsets apply uniformly to every study in the call, so continuation is reported per study: each exhausts its lists at a different index.', 'additionalProperties': False}, 'participantFlow': {'type': 'object', 'description': 'Participant flow milestones and drop-outs. Summary mode: groupCount, periodCount. Full mode: adds groups and periods with per-period milestones, achievements, and dropWithdraws.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'description': 'Extracted results for one study.', 'additionalProperties': False}, 'description': 'Results per study.'}, 'truncated': {'type': 'boolean', 'description': 'True when a bound â\x80\x94 a cap or an offset â\x80\x94 trimmed a list on at least one study; absent when nothing was trimmed, matching filtersApplied one level down. Which study, which list, and where to resume is named in that studyâ\x80\x99s filtersApplied.'}, 'fetchErrors': {'type': 'array', 'items': {'type': 'object', 'required': ['nctId', 'error'], 'properties': {'error': {'type': 'string', 'description': 'Error message.'}, 'nctId': {'type': 'string', 'description': 'NCT ID.'}}, 'description': 'A single fetch error.', 'additionalProperties': False}, 'description': 'Studies that could not be fetched.'}, 'studiesWithoutResults': {'type': 'array', 'items': {'type': 'string'}, 'description': 'NCT IDs that do not have results data.'}}, 'additionalProperties': False}
clinicaltrials_search_studies
Clinicaltrials Search Studies
Search for clinical trial studies from ClinicalTrials.gov. Supports full-text and field-specific queries, status/phase/geographic filters, pagination, sorting, and field selection. Returns a compact per-study index by default; pass the fields parameter to get specific leaves at full fidelity — full study records are ~70KB each.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'sort': {'type': 'string', 'description': 'Sort order. Format: FieldName:asc or FieldName:desc. E.g., "LastUpdatePostDate:desc", "EnrollmentCount:desc". Max 2 fields comma-separated. For "largest trials" queries, pair EnrollmentCount:desc with advancedFilter "AREA[StudyType]INTERVENTIONAL" â\x80\x94 the top enrollment counts are observational registry/claims studies enrolling tens of millions. Enrollment counts are sponsor-reported and not validated upstream beyond the unknown-enrollment sentinel exclusion. Use clinicaltrials_get_field_definitions to find sortable field names.'}, 'query': {'type': 'string', 'description': 'General free-text search across all fields. Runs the 57-field relevance search ClinicalTrials.gov publishes for this parameter â\x80\x94 NCTId, NCTIdAlias, OrgStudyId, SecondaryId, Acronym, BriefTitle, OfficialTitle, Condition, InterventionName, InterventionOtherName, Phase, StdAge, StudyType, BriefSummary, outcome measures and their descriptions, LeadSponsorName, CollaboratorName, the Location* fields, the Design* fields, and the ConditionAncestorTerm/InterventionAncestorTerm MeSH umbrellas â\x80\x94 so a hit need not carry your term in the field you had in mind. Plain words plus AND, OR, NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression â\x80\x94 those work here as well as in advancedFilter, so AREA[Phase]PHASE2 is accepted in this parameter; a stray bracket fails. `( )` group sub-expressions and work when matched; `,` acts as AND. The dedicated *Query parameters (conditionQuery, interventionQuery, etc.) scope a search to one field.'}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'PascalCase leaf names to return; strongly recommended since full records are ~70KB. Omit for the compact index projection â\x80\x94 an empty list is rejected, not treated as omission. Common leaves: NCTId, BriefTitle, BriefSummary, OverallStatus, Phase, LeadSponsorName, Condition. Call clinicaltrials_get_field_definitions with a concept query (e.g., "adverse events", "eligibility") to find the exact leaf for any concept.'}, 'nctIds': {'anyOf': [{'type': 'string', 'pattern': '^NCT\\d{8}$', 'description': 'A single NCT ID.'}, {'type': 'array', 'items': {'type': 'string', 'pattern': '^NCT\\d{8}$'}, 'description': 'Multiple NCT IDs (OR).'}], 'description': 'Filter to specific NCT IDs for batch lookups. Omit to search every study â\x80\x94 an empty list is rejected, not treated as "no filter". Supplying this lifts the default unknown-enrollment exclusion, so an ID you name is never filtered out of its own lookup.'}, 'pageSize': {'type': 'integer', 'default': 10, 'maximum': 200, 'minimum': 1, 'description': 'Results per page, 1â\x80\x93200.'}, 'geoFilter': {'type': 'string', 'description': 'Geographic proximity filter. Format: distance(lat,lon,radius), where radius carries a `mi` or `km` suffix â\x80\x94 e.g. "distance(47.6062,-122.3321,50mi)" for studies within 50 miles of Seattle. The suffix is required: a radius with no unit is rejected, as are a non-positive radius, a latitude outside [-90, 90], and a longitude outside [-180, 180]. When set, each study\'s locations are re-sorted by proximity to the center so the nearest matched site leads, annotated with its distance in miles; the full location list is preserved.'}, 'pageToken': {'type': 'string', 'description': 'Pagination cursor from a previous response.'}, 'countTotal': {'type': 'boolean', 'default': True, 'description': 'Include total study count in response. Only computed on the first page.'}, 'titleQuery': {'type': 'string', 'description': 'Search within study titles and acronyms only. Matches Acronym, BriefTitle, and OfficialTitle. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'phaseFilter': {'anyOf': [{'type': 'string', 'description': 'A single phase value.'}, {'type': 'array', 'items': {'type': 'string'}, 'description': 'Multiple phase values (OR).'}], 'description': 'Filter by trial phase. Omit to search all phases â\x80\x94 an empty list is rejected, not treated as "no filter". Values: EARLY_PHASE1, PHASE1, PHASE2, PHASE3, PHASE4, NA.'}, 'outcomeQuery': {'type': 'string', 'description': 'Search within outcome measure fields. Matches PrimaryOutcomeMeasure, SecondaryOutcomeMeasure, OtherOutcomeMeasure, and OutcomeMeasureTitle, plus their description counterparts PrimaryOutcomeDescription, SecondaryOutcomeDescription, OtherOutcomeDescription, OutcomeMeasureDescription, and OutcomeMeasurePopulationDescription â\x80\x94 so a term appearing only in outcome prose still matches. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'sponsorQuery': {'type': 'string', 'description': 'Sponsor/collaborator name search. Matches LeadSponsorName, CollaboratorName, and OrgFullName. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'statusFilter': {'anyOf': [{'type': 'string', 'description': 'A single status value.'}, {'type': 'array', 'items': {'type': 'string'}, 'description': 'Multiple status values (OR).'}], 'description': 'Filter by study status. Omit to search all statuses â\x80\x94 an empty list is rejected, not treated as "no filter". Values: RECRUITING, COMPLETED, ACTIVE_NOT_RECRUITING, NOT_YET_RECRUITING, ENROLLING_BY_INVITATION, SUSPENDED, TERMINATED, WITHDRAWN, UNKNOWN, WITHHELD, NO_LONGER_AVAILABLE, AVAILABLE, APPROVED_FOR_MARKETING, TEMPORARILY_NOT_AVAILABLE.'}, 'locationQuery': {'type': 'string', 'description': 'Location search â\x80\x94 city, state, country, or facility name. Matches LocationCity, LocationState, LocationCountry, LocationFacility, and LocationZip; a study matches when any of its sites does. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'advancedFilter': {'type': 'string', 'description': 'Advanced filter using AREA[FieldName]value syntax. Examples: "AREA[StudyType]INTERVENTIONAL", "AREA[EnrollmentCount]RANGE[100, 1000]", "AREA[Phase]PHASE2 AND AREA[StudyType]INTERVENTIONAL", "(AREA[Phase]PHASE3 OR AREA[Phase]PHASE4) AND AREA[StudyType]INTERVENTIONAL". "AREA[HasResults]true" restricts to studies with posted results. AND/OR/NOT join complete AREA[FieldName]value expressions; parentheses group them. Call clinicaltrials_get_field_definitions to find AREA[]-compatible field names.'}, 'conditionQuery': {'type': 'string', 'description': 'Condition/disease-specific search. E.g., "Type 2 Diabetes", "non-small cell lung cancer". Matches Condition, BriefTitle, OfficialTitle, ConditionMeshTerm, ConditionAncestorTerm, Keyword, and NCTId. ConditionAncestorTerm is the MeSH umbrella above the conditions a study itself lists, so results run broader than those lists â\x80\x94 a study can match a parent term it never names. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'interventionQuery': {'type': 'string', 'description': 'Intervention/treatment search. E.g., "pembrolizumab", "cognitive behavioral therapy". Matches InterventionName, InterventionType, ArmGroupType, InterventionOtherName, BriefTitle, OfficialTitle, ArmGroupLabel, InterventionMeshTerm, Keyword, InterventionAncestorTerm, InterventionDescription, and ArmGroupDescription. InterventionAncestorTerm is the MeSH umbrella above the interventions a study itself lists, so results run broader than those lists. Plain words plus AND/OR/NOT. `[ ]` are valid only inside an AREA[FieldName]value or RANGE[min, max] expression, which this parameter accepts; a stray bracket fails. `( )` group sub-expressions when matched; `,` acts as AND.'}, 'includeUnknownEnrollment': {'type': 'boolean', 'default': False, 'description': 'Include studies whose EnrollmentCount is the upstream "unknown" sentinel (99999999). Excluded by default â\x80\x94 the sentinel pollutes RANGE[N, MAX] queries and EnrollmentCount:desc sorts. Set true for data-quality audits or when targeting unknown-enrollment studies specifically.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['studies']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['blank_value', 'ids_not_found', 'field_invalid', 'enum_invalid', 'query_parse_error', 'geo_invalid', 'sort_invalid', 'rate_limited'], 'description': 'Machine-readable failure mode. Declared by this tool: `blank_value`: A parameter was supplied with a blank, whitespace-only, or empty-list value. `ids_not_found`: One or more NCT IDs in the nctIds filter are not present at ClinicalTrials.gov. `field_invalid`: A field name in the fields parameter or AREA[] expression is invalid (often a module name instead of a piece name). `enum_invalid`: statusFilter or phaseFilter contains a value ClinicalTrials.gov does not accept. `query_parse_error`: A free-text query or advancedFilter expression uses syntax the upstream Essie parser rejects â\x80\x94 typically a `[` or `]` outside an AREA[â\x80¦] / RANGE[â\x80¦] expression, an unmatched `(` / `)`, or an unterminated quote in a query/conditionQuery/etc. value. `geo_invalid`: geoFilter is not a well-formed distance(lat,lon,radius) expression. `sort_invalid`: sort is not FieldName:asc / FieldName:desc, or names more than 2 fields. `rate_limited`: ClinicalTrials.gov returned 429 after retry budget exhausted. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Recovery guidance when no studies matched â\x80\x94 echoes the constraint and suggests how to broaden, and names nctIds as part of the unmatched criteria when an ID list was supplied. Absent on pages with results, and on an exhausted continuation page, where the cohort already matched and there is nothing to broaden.'}, 'studies': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Matching studies. By default each entry is a COMPACT index projection â\x80\x94 nctId, briefTitle, overallStatus, phases, enrollmentCount, leadSponsor, conditions, hasResults, startDate and primaryCompletionDate (YYYY-MM or YYYY-MM-DD, as registered), and a bounded locations summary ({ total, nearest }); keys the study does not publish are omitted â\x80\x94 mirroring the rendered result, NOT the full ~70KB record. Pass the fields parameter to receive exactly the requested leaves at full fidelity instead (e.g. all locations). Fetch a full single record with clinicaltrials_get_study_record.'}, 'totalCount': {'type': 'number', 'description': 'Total matching studies (first page only when countTotal=true).'}, 'nextPageToken': {'type': 'string', 'description': 'Token for the next page. Absent when this response already carries every matching study; otherwise it mirrors the upstream cursor, which ClinicalTrials.gov emits whenever a page fills to pageSize â\x80\x94 so on a continuation page a token can still lead to an empty page.'}, 'pageExhausted': {'type': 'boolean', 'description': 'True when this call supplied a pageToken and the continuation page came back empty â\x80\x94 the walk is finished and no further pages exist. Absent on every other response, including an empty first page, which is an unmatched search rather than exhausted pagination.'}, 'searchCriteria': {'type': 'object', 'description': 'Echo of active query/filter criteria applied to this search, including sentinelFilterActive when the default unknown-enrollment exclusion is in effect. Present on every response.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'requestedFields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Echo of the explicit fields parameter â\x80\x94 present only when the caller passed fields. Signals that studies carry the requested leaves at full fidelity (not the default compact index) and that the rendered truncation cap is lifted so all of them appear.'}}, 'additionalProperties': False}
Modifié
clinicaltrials_find_eligible
25 September 2026 02:51
Modifié
clinicaltrials_get_study_results
25 September 2026 02:51
Modifié
clinicaltrials_search_studies
25 September 2026 02:51
Ajouté
clinicaltrials_find_eligible
17 September 2026 12:41
Ajouté
clinicaltrials_get_study_results
17 September 2026 12:41
Ajouté
clinicaltrials_get_field_definitions
17 September 2026 12:41
Ajouté
clinicaltrials_get_field_values
17 September 2026 12:41
Ajouté
clinicaltrials_get_study_count
17 September 2026 12:41
Ajouté
clinicaltrials_get_study_record
17 September 2026 12:41
Ajouté
clinicaltrials_search_studies
17 September 2026 12:41