### Clinical Trials Database
Works with
name: "clinical-trials-database"
description: "Query ClinicalTrials.gov via APIv2. Use when you want to search for trials by condition, drug, location, status, or phase; retrieve trial details by NCT ID; check eligibility/inclusion criteria; count..."
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionclinical-trials-databaseExecute the skills CLI command in your project's root directory to begin installation:
Fetches clinical-trials-database from google-deepmind/science-skills and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate clinical-trials-database. Access via /clinical-trials-database in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Automate repetitive workflows and reduce manual effort
Example
Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example
Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example
Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
1
total installs
1
this week
0
upvotes
Run in your terminal
1
installs
1
this week
—
stars
| name | clinical-trials-database |
| description | > Query ClinicalTrials.gov via APIv2. Use when you want to search for trials by condition, drug, location, status, or phase; retrieve trial details by NCT ID; check eligibility/inclusion criteria; count trials across conditions or time periods; identify a sponsor's trial portfolio; find recruiting trials for patient matching. |
uv: Read the uv skill and follow its Setup instructions to ensure
uv is installed and on PATH.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.
--fields — trial JSON records can be very large; restrict
to the data points you need.--count-total first — check result volume before fetching all
records.--limit with --page-token to
iterate.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] Use
references/studies_schema.mdto identify exact field paths for--fields.
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
--fieldsparameter to request specific data and keep responses small.
totalCount — Total studies matching query (integer)studies[] — Array of study objectsnextPageToken — cursor string for paginationprotocolSection.identificationModule.nctId (NCTId) — Unique trial IDprotocolSection.identificationModule.briefTitle (BriefTitle) — Short
titleprotocolSection.statusModule.overallStatus (OverallStatus) —
Recruitment statusprotocolSection.descriptionModule.briefSummary (BriefSummary) —
Short descriptionprotocolSection.armsInterventionsModule.interventions
(ArmsInterventionsModule)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.
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.json
All 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 as FieldName:asc or FieldName: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"). See
references/studies_schema.md for 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 a totalCount field 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 the nextPageToken field 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. See references/clinical_trials_api.md for 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.json
Example — 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.json
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.json
Returns 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" ]
}
}
}
Use for: pulling inclusion/exclusion rules, age ranges, and sex requirements for patient-matching tasks.
uv run scripts/clinical_trials_api.py \
get-eligibility <nct_id> \
--output /tmp/eligibility.json
Shortcut that returns title and the full eligibility module (inclusion/exclusion criteria, age range, sex).
Example — inclusion criteria for NCT04886804:
uv run scripts/clinical_trials_api.py \
get-eligibility NCT04886804 \
--output /tmp/eligibility_NCT04886804.json
Use for: exploring the trial landscape — checking how many trials exist for a condition, phase, or status before fetching full records.
uv run scripts/clinical_trials_api.py count \
--condition "<disease>" \
[--status "<status>"] [--phase "<phase>"] ... \
--output /tmp/count.json
Returns only the total count of clinical trials matching the search criteria
without fetching study records. Accepts the same filter flags as search.
Use for: narrowing trials to a specific country, state, or city.
Use --advanced with AREA[LocationCountry] or AREA[LocationCity] to
restrict results by geography:
uv run scripts/clinical_trials_api.py search \
--condition "cystic fibrosis" \
--status RECRUITING \
--advanced "AREA[LocationCity]New York" \
--fields "NCTId,BriefTitle" \
--limit 20 \
--output /tmp/nyc_cf_trials.json
Use for: identifying a sponsor's or institution's trial portfolio.
Use --sponsor to find trials run by a specific institution or company:
uv run scripts/clinical_trials_api.py search \
--sponsor "National Cancer Institute" \
--fields "NCTId,BriefTitle,LeadSponsorName" \
--limit 20 \
--output /tmp/nci_trials.json
Use for: complex queries that layer multiple filters (condition and drug and phase and geography and sponsor, etc.).
All flags combine via AND, so you can layer conditions, interventions, status, phase, geography, and sponsor in a single query:
uv run scripts/clinical_trials_api.py search \
--condition "pancreatic cancer" \
--intervention "immunotherapy" \
--status RECRUITING \
--phase PHASE3 \
--advanced "AREA[LocationCountry]United States" \
--fields "NCTId,BriefTitle,Phase,LeadSponsorName" \
--limit 20 \
--output /tmp/panc_trials.json
Use for: uncommon endpoints or parameter combinations not covered by the dedicated flags.
uv run scripts/clinical_trials_api.py raw-query \
--endpoint <path> \
--params '<json_dict>' \
--output /tmp/raw_result.json
When results exceed --limit, the response includes a nextPageToken. Pass it
with --page-token to fetch the next page:
uv run scripts/clinical_trials_api.py search \
--condition "breast cancer" \
--status RECRUITING \
--limit 50 --count-total \
--output /tmp/breast_cancer_p1.json
uv run scripts/clinical_trials_api.py search \
--condition "breast cancer" \
--status RECRUITING \
--limit 50 --page-token "CAo=" \
--output /tmp/breast_cancer_p2.json
For complex filtering beyond the dedicated flags, use --advanced with an Essie
expression.
What is an Essie Expression? Essie is the search engine powering ClinicalTrials.gov. An Essie expression is a structured query that targets specific fields (e.g., country, phase) rather than doing general keyword searches.
AREA[Field]Value: Targets a specific field.
AREA[LocationCountry]United StatesAREA[Phase]PHASE3AND, OR, NOT.RANGE[min, max]: For numeric/date fields (e.g. RANGE[500, MAX]).See references/clinical_trials_api.md for syntax and available fields.
It is combined with other flags via AND:
uv run scripts/clinical_trials_api.py search \
--condition "diabetes" \
--advanced "AREA[LocationCountry]United States \
AND AREA[EnrollmentCount]RANGE[500, MAX]" \
--fields "NCTId,BriefTitle,EnrollmentCount" \
--output /tmp/diabetes_us_large.json
references/clinical_trials_api.md--fields recipes: references/studies_schema.mdPrerequisites
Time Estimate
15-45 minutes depending on use case complexity
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
google-deepmind/science-skills
google-deepmind/science-skills
google-deepmind/science-skills
K-Dense-AI/scientific-agent-skills
K-Dense-AI/scientific-agent-skills
K-Dense-AI/scientific-agent-skills
Registry listing for clinical-trials-database matched our evaluation — installs cleanly and behaves as described in the markdown.
clinical-trials-database has been reliable in day-to-day use. Documentation quality is above average for community skills.
clinical-trials-database fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
clinical-trials-database is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
Solid pick for teams standardizing on skills: clinical-trials-database is focused, and the summary matches what you get after install.
clinical-trials-database reduced setup friction for our internal harness; good balance of opinion and flexibility.
We added clinical-trials-database from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
Solid pick for teams standardizing on skills: clinical-trials-database is focused, and the summary matches what you get after install.
We added clinical-trials-database from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
I recommend clinical-trials-database for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
showing 1-10 of 33