- Skill ID
- google-deepmind/science-skills/clinical-trials-database
- Publisher
- google-deepmind
- Repository
- science-skills
- Installs
- 0
- Files
- 5
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
google-deepmind/science-skills/clinical-trials-databaseInstalls these files- SKILL.md
- references/citation.bib
- references/clinical_trials_api.md
- references/studies_schema.md
- scripts/clinical_trials_api.py
What this skill tells the agent
Clinical Trials Database
Prerequisites
- `uv`: Read the
uvskill and follow its Setup instructions to ensureuvis installed and on PATH. - User Notification: If .licenses/clinical_trials_database_LICENSE.txt does not already exist in the workspace root directory then (1) prominently notify the user to check the terms at https://clinicaltrials.gov/, then (2) create the file recording the notification text and timestamp.
Overview
Access worldwide clinical trial data from ClinicalTrials.gov via the REST API v2. The CLI script at scripts/clinical_trials_api.py wraps the API with dedicated flags for common filters (phase, age group, status, intervention, sponsor, etc.) so you rarely need to construct raw queries.
Core Rules
- Use the Wrapper: ALWAYS execute the provided helper scripts to query the database rather than accessing the database directly. The scripts automatically enforce the required rate limit gracefully.
- Always use `--fields` — trial JSON records can be very large; restrict to the data points you need.
- Use `--count-total` first — check result volume before fetching all records.
- Paginate large result sets — use
--limitwith--page-tokento iterate. - Trust Search Filters: Do not manually re-filter results unless explicitly asked to verify detailed eligibility.
- Notification: If this skill is used, ensure this is mentioned in the output.
Context Efficiency Warning
Trial JSON records can be very large. Always use the --fields parameter to restrict the response to only the data points you need. After writing to file, read only the fields you need rather than the entire file.
[!TIP] Usereferences/studies_schema.mdto identify exact field paths for--fields.
Response Layout Summary
API responses contain a list of studies (usually in a studies[] array). Each study is split into protocolSection and optional resultsSection.
[!Tip] Use the shorthand aliases below with the --fields parameter to request specific data and keep responses small.Top-Level Fields
totalCount— Total studies matching query (integer)studies[]— Array of study objectsnextPageToken— cursor string for pagination
Common Study Fields (and shorthand alias)
- Identification
protocolSection.identificationModule.nctId(NCTId) — Unique trial IDprotocolSection.identificationModule.briefTitle(BriefTitle) — Short title- Status
protocolSection.statusModule.overallStatus(OverallStatus) — Recruitment status- Description
protocolSection.descriptionModule.briefSummary(BriefSummary) — Short description- Arms & Interventions
protocolSection.armsInterventionsModule.interventions(ArmsInterventionsModule)- Eligibility
protocolSection.eligibilityModule.eligibilityCriteria(EligibilityCriteria) — Inclusion/ExclusionprotocolSection.eligibilityModule.stdAges(StdAge) — CHILD, ADULT, etc.
Consult references/studies_schema.md for full paths (Locations, Outcomes, Results) and common --fields recipes.
Commands
Search for studies
Use for: finding trials by disease, drug, phase, status, age group, or any combination of these filters.
uv run scripts/clinical_trials_api.py search \
--condition "<disease>" \
--intervention "<drug_or_treatment>" \
--status "<status>" \
--phase "<phase>" \
--age-group "<age_group>" \
--study-type "<study_type>" \
--sponsor "<sponsor_name>" \
--has-results \
--sort "<field>:<asc|desc>" \
--fields "<fields>" \
--limit <N> \
--count-total \
--page-token "<token>" \
--output /tmp/search_results.jsonAll flags are optional and combine via AND logic.
Flag reference:
--condition— Disease or condition to search for (e.g."cystic fibrosis").--intervention— Drug, device, or treatment name (e.g."pembrolizumab").--status— Recruitment status filter. Values: RECRUITING, COMPLETED, NOT_YET_RECRUITING, ACTIVE_NOT_RECRUITING, ENROLLING_BY_INVITATION, TERMINATED, SUSPENDED, WITHDRAWN.--phase— Trial phase filter. Values: PHASE1, PHASE2, PHASE3, PHASE4, EARLY_PHASE1, NA.--age-group— Patient age group filter. Values: CHILD (0–17), ADULT (18–64), OLDER_ADULT (65+).--study-type— Type of study. Values: INTERVENTIONAL, OBSERVATIONAL, EXPANDED_ACCESS.--sponsor— Lead sponsor or institution name (e.g."National Cancer Institute").--has-results— Boolean flag (no value needed). When present, filters for studies that have results available on ClinicalTrials.gov.--sort— Sort order asFieldName:ascorFieldName:desc. Common fields:LastUpdatePostDate,EnrollmentCount,StudyFirstPostDate,StartDate.--fields— Comma-separated list of JSON field names to include in the response. Use this to keep responses small (e.g."NCTId,BriefTitle,OverallStatus,Phase"). Seereferences/studies_schema.mdfor available field paths.--limit— Maximum number of studies to return per request (1–1000, default 10).--count-total— Boolean flag (no value needed). When present, the response includes atotalCountfield showing the total number of matching studies across all pages.--page-token— An opaque cursor string used to fetch the next page of results. Obtain this value from thenextPageTokenfield in a previous search response. Do not construct this string yourself; always copy it verbatim from the API response. See the Pagination section below.--advanced— Raw Essie filter expression for structured queries beyond the dedicated flags (e.g."AREA[LocationCountry]United States"). Combined with other flags via AND. Seereferences/clinical_trials_api.mdfor syntax.--output— (Required) File path where the JSON response is written.
Example — actively recruiting Phase 3 pediatric cystic fibrosis trials:
uv run scripts/clinical_trials_api.py search \
--condition "cystic fibrosis" \
--status RECRUITING \
--phase PHASE3 \
--age-group CHILD \
--fields "NCTId,BriefTitle,OverallStatus,Phase" \
--limit 10 \
--output /tmp/cf_trials.jsonExample — recruiting atezolizumab trials for esophageal cancer:
uv run scripts/clinical_trials_api.py search \
--condition "esophageal cancer" \
--intervention "Atezolizumab" \
--status RECRUITING \
--fields "NCTId,BriefTitle,Phase" \
--limit 10 \
--output /tmp/atezolizumab_trials.jsonRetrieve a study by NCT ID
Use for: fetching full details of a specific trial when you already have the NCT identifier.
uv run scripts/clinical_trials_api.py get-study \
<nct_id> [--fields "<fields>"] \
--output /tmp/study.jsonReturns a useful default set of fields if --fields is omitted: NCTId,BriefTitle,OverallStatus,Phase,BriefSummary, ConditionsModule,ArmsInterventionsModule,EligibilityModule
Structure of the default response:
{
"protocolSection": {
"identificationModule": {
"nctId": "NCT00000000",
"briefTitle": "Study Title"
},
"statusModule": {
"overallStatus": "RECRUITING"
},
"descriptionModule": {
"briefSummary": "This study is about..."
},
"conditionsModule": {
"conditions": [ "Condition Name" ]
},
"armsInterventionsModule": {
"interventions": [ { "type": "DRUG", "name": "Drug Name" } ]
},
"eligibilityModule": {
"eligibilityCriteria": "Inclusion:\n- ...",
"stdAges": [ "ADULT" ]
}
}
}Get eligibility / inclusion criteria
Use for: pulling inclusion/exclusion rules, age ranges, and sex requirements for patient-matching tasks.
More from google-deepmind
Use this skill in a project
Open any RiverX project, search the Skills panel for google-deepmind/science-skills/clinical-trials-database, and install it in one click.
