Search and read ClinicalTrials.gov studies, sites and outcomes.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Return only the total NUMBER of studies matching a query, without fetching any records. Accepts the same query terms and filters as clinicaltrialsgov_search_studies (term, condition, intervention, title, location, sponsor, status, geoFilter, advanced). Returns { totalCount }. GET /studies with countTotal=true and pageSize=1.
General full-text 'other terms' query (maps to query.term).
Words in the study title (maps to query.titles).
Filter by overall recruitment status (maps to filter.overallStatus). One or more of: ACTIVE_NOT_RECRUITING, COMPLETED, ENROLLING_BY_INVITATION, NOT_YET_RECRUITING, RECRUITING, SUSPENDED, TERMINATED, WITHDRAWN, AVAILABLE, NO_LONGER_AVAILABLE, TEMPORARILY_NOT_AVAILABLE, APPROVED_FOR_MARKETING, WITHHELD, UNKNOWN.
Sponsor / collaborator name (maps to query.spons).
Advanced Essie expression applied as an additional filter (maps to filter.advanced).
Study location text, e.g. a city/state/country (maps to query.locn).
Disease / condition to match (maps to query.cond), e.g. 'diabetes'.
Geo filter as a raw geo-function string (maps to filter.geo), e.g. 'distance(39.0027,-77.1,50mi)'.
Treatment / drug / intervention to match (maps to query.intr).
Return only the total NUMBER of studies matching a query, without fetching any records. Accepts the same query terms and filters as clinicaltrialsgov_search_studies (term, condition, intervention, title, location, sponsor, status, geoFilter, advanced). Returns { totalCount }. GET /studies with countTotal=true and pageSize=1.
| Argument | Type | Description |
|---|---|---|
| term | string | General full-text 'other terms' query (maps to query.term). |
| title | string | Words in the study title (maps to query.titles). |
| status | array | Filter by overall recruitment status (maps to filter.overallStatus). One or more of: ACTIVE_NOT_RECRUITING, COMPLETED, ENROLLING_BY_INVITATION, NOT_YET_RECRUITING, RECRUITING, SUSPENDED, TERMINATED, WITHDRAWN, AVAILABLE, NO_LONGER_AVAILABLE, TEMPORARILY_NOT_AVAILABLE, APPROVED_FOR_MARKETING, WITHHELD, UNKNOWN. |
| sponsor | string | Sponsor / collaborator name (maps to query.spons). |
| advanced | string | Advanced Essie expression applied as an additional filter (maps to filter.advanced). |
| location | string | Study location text, e.g. a city/state/country (maps to query.locn). |
| condition | string | Disease / condition to match (maps to query.cond), e.g. 'diabetes'. |
| geoFilter | string | Geo filter as a raw geo-function string (maps to filter.geo), e.g. 'distance(39.0027,-77.1,50mi)'. |
| intervention | string | Treatment / drug / intervention to match (maps to query.intr). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"term": {
"type": "string",
"description": "General full-text 'other terms' query (maps to query.term)."
},
"title": {
"type": "string",
"description": "Words in the study title (maps to query.titles)."
},
"status": {
"type": "array",
"items": {
"enum": [
"ACTIVE_NOT_RECRUITING",
"COMPLETED",
"ENROLLING_BY_INVITATION",
"NOT_YET_RECRUITING",
"RECRUITING",
"SUSPENDED",
"TERMINATED",
"WITHDRAWN",
"AVAILABLE",
"NO_LONGER_AVAILABLE",
"TEMPORARILY_NOT_AVAILABLE",
"APPROVED_FOR_MARKETING",
"WITHHELD",
"UNKNOWN"
],
"type": "string"
},
"description": "Filter by overall recruitment status (maps to filter.overallStatus). One or more of: ACTIVE_NOT_RECRUITING, COMPLETED, ENROLLING_BY_INVITATION, NOT_YET_RECRUITING, RECRUITING, SUSPENDED, TERMINATED, WITHDRAWN, AVAILABLE, NO_LONGER_AVAILABLE, TEMPORARILY_NOT_AVAILABLE, APPROVED_FOR_MARKETING, WITHHELD, UNKNOWN."
},
"sponsor": {
"type": "string",
"description": "Sponsor / collaborator name (maps to query.spons)."
},
"advanced": {
"type": "string",
"description": "Advanced Essie expression applied as an additional filter (maps to filter.advanced)."
},
"location": {
"type": "string",
"description": "Study location text, e.g. a city/state/country (maps to query.locn)."
},
"condition": {
"type": "string",
"description": "Disease / condition to match (maps to query.cond), e.g. 'diabetes'."
},
"geoFilter": {
"type": "string",
"description": "Geo filter as a raw geo-function string (maps to filter.geo), e.g. 'distance(39.0027,-77.1,50mi)'."
},
"intervention": {
"type": "string",
"description": "Treatment / drug / intervention to match (maps to query.intr)."
}
}
}Return the ClinicalTrials.gov API version and the timestamp of the underlying data snapshot: { apiVersion, dataTimestamp }. GET /version.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Return overall study-size statistics across the registry: { totalStudies, averageSizeBytes, percentiles, ranges, largestStudies }. Useful for understanding data volume. GET /stats/size.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Fetch a single ClinicalTrials.gov study by its NCT id (format NCT######## — the letters 'NCT' followed by digits, e.g. NCT00841061). Returns the full study object { protocolSection, derivedSection?, hasResults? }. Use `fields` to return only specific fields/modules. GET /studies/{nctId}.
| Argument | Type | Description |
|---|---|---|
| nctId* | string | The study's NCT id, format NCT######## (e.g. NCT00841061). |
| fields | array | Fields or modules to return, e.g. ['protocolSection.identificationModule','protocolSection.statusModule']. Omit for the full record. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"nctId"
],
"properties": {
"nctId": {
"type": "string",
"pattern": "^NCT\\d+$",
"description": "The study's NCT id, format NCT######## (e.g. NCT00841061)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Fields or modules to return, e.g. ['protocolSection.identificationModule','protocolSection.statusModule']. Omit for the full record."
}
}
}Return the ClinicalTrials.gov study data model as a tree of module nodes (each with name/title/type/children). Use this to explore what fields/modules exist and their nesting, to build `fields` selections or `sort`/filter expressions. GET /studies/metadata.
| Argument | Type | Description |
|---|---|---|
| includeIndexedOnly | boolean | Include fields that are indexed-only (searchable but not part of the main data model). |
| includeHistoricOnly | boolean | Include fields that exist only in historic study versions. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"includeIndexedOnly": {
"type": "boolean",
"description": "Include fields that are indexed-only (searchable but not part of the main data model)."
},
"includeHistoricOnly": {
"type": "boolean",
"description": "Include fields that exist only in historic study versions."
}
}
}Discover valid values / enums for one or more study fields. Returns per-field value statistics — for each field: its type, unique-value count and topValues [{value, studiesCount}]. Great for finding valid enum values (e.g. OverallStatus, Phase) before building a filter. GET /stats/field/values.
| Argument | Type | Description |
|---|---|---|
| types | array | Restrict to fields of these value types (ENUM, STRING, DATE, INTEGER, NUMBER, BOOLEAN). |
| fields* | array | Field names to get value statistics for, e.g. ['OverallStatus','Phase']. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"fields"
],
"properties": {
"types": {
"type": "array",
"items": {
"enum": [
"ENUM",
"STRING",
"DATE",
"INTEGER",
"NUMBER",
"BOOLEAN"
],
"type": "string"
},
"description": "Restrict to fields of these value types (ENUM, STRING, DATE, INTEGER, NUMBER, BOOLEAN)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Field names to get value statistics for, e.g. ['OverallStatus','Phase']."
}
}
}Search the ClinicalTrials.gov v2 study registry. Provide any combination of query terms (condition, intervention, title, location, sponsor, general term) — multiple query.* terms are ANDed together — plus optional filters (status, geo, advanced Essie expression, explicit NCT ids). Returns { totalCount?, studies: [...], nextPageToken? }. Use `fields` to trim the response to specific fields/modules, `sort` to order (e.g. '@relevance', 'LastUpdatePostDate:desc', 'EnrollmentCount:desc'), and pageSize/pageToken to page. GET /studies.
| Argument | Type | Description |
|---|---|---|
| ids | array | Restrict to these NCT ids (maps to filter.ids), e.g. ['NCT00841061']. |
| sort | string | Sort order, e.g. '@relevance', 'LastUpdatePostDate:desc', 'EnrollmentCount:desc', 'StudyFirstPostDate:desc'. |
| term | string | General full-text 'other terms' query (maps to query.term). |
| title | string | Words in the study title (maps to query.titles). |
| fields | array | Fields or modules to return, e.g. ['NCTId','BriefTitle','OverallStatus'] or ['protocolSection.identificationModule']. Omit to return full study records. |
| status | array | Filter by overall recruitment status (maps to filter.overallStatus). One or more of: ACTIVE_NOT_RECRUITING, COMPLETED, ENROLLING_BY_INVITATION, NOT_YET_RECRUITING, RECRUITING, SUSPENDED, TERMINATED, WITHDRAWN, AVAILABLE, NO_LONGER_AVAILABLE, TEMPORARILY_NOT_AVAILABLE, APPROVED_FOR_MARKETING, WITHHELD, UNKNOWN. |
| sponsor | string | Sponsor / collaborator name (maps to query.spons). |
| advanced | string | Advanced Essie expression applied as an additional filter (maps to filter.advanced). |
| location | string | Study location text, e.g. a city/state/country (maps to query.locn). |
| pageSize | integer | Number of studies per page (1–1000; API default 10). |
| condition | string | Disease / condition to match (maps to query.cond), e.g. 'diabetes'. |
| geoFilter | string | Geo filter as a raw geo-function string (maps to filter.geo), e.g. 'distance(39.0027,-77.1,50mi)'. |
| pageToken | string | Opaque token from a previous response's nextPageToken, to fetch the next page. |
| countTotal | boolean | Include the total number of matching studies (totalCount) on the first page. |
| intervention | string | Treatment / drug / intervention to match (maps to query.intr). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Restrict to these NCT ids (maps to filter.ids), e.g. ['NCT00841061']."
},
"sort": {
"type": "string",
"description": "Sort order, e.g. '@relevance', 'LastUpdatePostDate:desc', 'EnrollmentCount:desc', 'StudyFirstPostDate:desc'."
},
"term": {
"type": "string",
"description": "General full-text 'other terms' query (maps to query.term)."
},
"title": {
"type": "string",
"description": "Words in the study title (maps to query.titles)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Fields or modules to return, e.g. ['NCTId','BriefTitle','OverallStatus'] or ['protocolSection.identificationModule']. Omit to return full study records."
},
"status": {
"type": "array",
"items": {
"enum": [
"ACTIVE_NOT_RECRUITING",
"COMPLETED",
"ENROLLING_BY_INVITATION",
"NOT_YET_RECRUITING",
"RECRUITING",
"SUSPENDED",
"TERMINATED",
"WITHDRAWN",
"AVAILABLE",
"NO_LONGER_AVAILABLE",
"TEMPORARILY_NOT_AVAILABLE",
"APPROVED_FOR_MARKETING",
"WITHHELD",
"UNKNOWN"
],
"type": "string"
},
"description": "Filter by overall recruitment status (maps to filter.overallStatus). One or more of: ACTIVE_NOT_RECRUITING, COMPLETED, ENROLLING_BY_INVITATION, NOT_YET_RECRUITING, RECRUITING, SUSPENDED, TERMINATED, WITHDRAWN, AVAILABLE, NO_LONGER_AVAILABLE, TEMPORARILY_NOT_AVAILABLE, APPROVED_FOR_MARKETING, WITHHELD, UNKNOWN."
},
"sponsor": {
"type": "string",
"description": "Sponsor / collaborator name (maps to query.spons)."
},
"advanced": {
"type": "string",
"description": "Advanced Essie expression applied as an additional filter (maps to filter.advanced)."
},
"location": {
"type": "string",
"description": "Study location text, e.g. a city/state/country (maps to query.locn)."
},
"pageSize": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Number of studies per page (1–1000; API default 10)."
},
"condition": {
"type": "string",
"description": "Disease / condition to match (maps to query.cond), e.g. 'diabetes'."
},
"geoFilter": {
"type": "string",
"description": "Geo filter as a raw geo-function string (maps to filter.geo), e.g. 'distance(39.0027,-77.1,50mi)'."
},
"pageToken": {
"type": "string",
"description": "Opaque token from a previous response's nextPageToken, to fetch the next page."
},
"countTotal": {
"type": "boolean",
"description": "Include the total number of matching studies (totalCount) on the first page."
},
"intervention": {
"type": "string",
"description": "Treatment / drug / intervention to match (maps to query.intr)."
}
}
}