Skip to main content
Glama
lzinga

US Government Open Data MCP

by lzinga

clinical_trials_search

Read-onlyIdempotent

Find clinical trials by condition, drug, sponsor, phase, status, or location. Retrieve trial ID, title, phase, sponsor, and enrollment from ClinicalTrials.gov.

Instructions

Search ClinicalTrials.gov for clinical trials by condition, drug/intervention, sponsor, status, phase, study type, location, title, or free text. Returns trial ID, title, status, phase, sponsor, conditions, enrollment, and hasResults flag. Use sponsor filter to track pharma company research (e.g. 'Pfizer', 'Moderna', 'NIH'). Use filter_advanced for Essie expressions like 'AREA[StartDate]RANGE[2024-01-01,MAX]'. Use agg_filters for shorthand filters: 'results:with', 'sex:f', 'healthy:y'.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sortNoSort field: '@relevance', 'LastUpdatePostDate', 'EnrollmentCount:desc'
phaseNoTrial phase: 'EARLY_PHASE1' (Early Phase 1 (exploratory)), 'PHASE1' (Phase 1 (safety/dosage in small group)), 'PHASE2' (Phase 2 (efficacy/side effects in larger group)), 'PHASE3' (Phase 3 (large-scale efficacy confirmation)), 'PHASE4' (Phase 4 (post-market surveillance)), 'NA' (Not applicable (non-drug studies))
queryNoFree-text search across all fields
statusNoTrial status. Pass an array for multiple, e.g. ["RECRUITING","ACTIVE_NOT_RECRUITING"]. Valid: 'RECRUITING' (Currently recruiting participants), 'NOT_YET_RECRUITING' (Approved but not yet recruiting), 'ACTIVE_NOT_RECRUITING' (Ongoing but no longer recruiting), 'COMPLETED' (Trial has concluded), 'ENROLLING_BY_INVITATION' (Recruiting by invitation only), ... (14 total)
titlesNoTitle/acronym search: 'KEYNOTE', 'SPRINT'
sponsorNoSponsor/collaborator: 'Pfizer', 'NIH', 'Moderna'
locationNoLocation search: 'California', 'Germany', 'Mayo Clinic'
outcomesNoOutcome measure search: 'overall survival', 'HbA1c'
study_idNoStudy ID search: 'NCT04852770' or org study ID
conditionNoDisease or condition: 'lung cancer', 'diabetes', 'Alzheimer'
page_sizeNoResults per page (default 10, max 100)
page_tokenNoPagination token from previous response
study_typeNoStudy type: 'INTERVENTIONAL' (Testing a drug, device, or procedure), 'OBSERVATIONAL' (Observing health outcomes without intervention), 'EXPANDED_ACCESS' (Making experimental treatment available outside trial)
agg_filtersNoAggregation filters: 'results:with,sex:f,healthy:y'
interventionNoDrug, device, or procedure: 'pembrolizumab', 'insulin'
lead_sponsorNoLead sponsor name only (not collaborators): 'National Cancer Institute'
filter_advancedNoEssie expression filter: 'AREA[MinimumAge]RANGE[MIN,18 years]'

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv2026.9.14
    • addedInput schema / properties / page_size / default
      Added value: +10
    • changedInput schema / properties / status / description
      Previous value: -"Trial status. Pipe-delimited for multiple: 'RECRUITING' (Currently recruiting participants), 'NOT_YET_RECRUITING' (Approved but not yet recruiting), 'ACTIVE_NOT_RECRUITING' (Ongoing but no longer recruiting), 'COMPLETED' (Trial has concluded), 'ENROLLING_BY_INVITATION' (Recruiting by invitation only), ... (14 total)"New value: +"Trial status. Pass an array for multiple, e.g. [\"RECRUITING\",\"ACTIVE_NOT_RECRUITING\"]. Valid: 'RECRUITING' (Currently recruiting participants), 'NOT_YET_RECRUITING' (Approved but not yet recruiting), 'ACTIVE_NOT_RECRUITING' (Ongoing but no longer recruiting), 'COMPLETED' (Trial has concluded), 'ENROLLING_BY_INVITATION' (Recruiting by invitation only), ... (14 total)"
  2. Changed19 schema fields changedv2026.4.11
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / agg_filters
      Added value: +{
      +  "description": "Aggregation filters: 'results:with,sex:f,healthy:y'",
      +  "type": "string"
      +}
    • addedInput schema / properties / filter_advanced
      Added value: +{
      +  "description": "Essie expression filter: 'AREA[MinimumAge]RANGE[MIN,18 years]'",
      +  "type": "string"
      +}
    • changedInput schema / properties / intervention / description
      Previous value: -"Drug, device, or procedure name: 'pembrolizumab', 'insulin'"New value: +"Drug, device, or procedure: 'pembrolizumab', 'insulin'"
    • addedInput schema / properties / lead_sponsor
      Added value: +{
      +  "description": "Lead sponsor name only (not collaborators): 'National Cancer Institute'",
      +  "type": "string"
      +}
    • changedInput schema / properties / location / description
      Previous value: -"State or country: 'California', 'United States', 'Germany'"New value: +"Location search: 'California', 'Germany', 'Mayo Clinic'"
    • addedInput schema / properties / outcomes
      Added value: +{
      +  "description": "Outcome measure search: 'overall survival', 'HbA1c'",
      +  "type": "string"
      +}
    • changedInput schema / properties / page_size / description
      Previous value: -"Results per page (default 10, max 50)"New value: +"Results per page (default 10, max 100)"
    • changedInput schema / properties / page_size / maximum
      Previous value: -50New value: +100
    • changedInput schema / properties / page_size / minimum
      Previous value: --9007199254740991New value: +0
    • addedInput schema / properties / page_token
      Added value: +{
      +  "description": "Pagination token from previous response",
      +  "type": "string"
      +}
    • addedInput schema / properties / sort
      Added value: +{
      +  "description": "Sort field: '@relevance', 'LastUpdatePostDate', 'EnrollmentCount:desc'",
      +  "type": "string"
      +}
    • changedInput schema / properties / sponsor / description
      Previous value: -"Sponsor/funder: 'Pfizer', 'NIH', 'Moderna'"New value: +"Sponsor/collaborator: 'Pfizer', 'NIH', 'Moderna'"
    • addedInput schema / properties / status / anyOf
      Added value: +[
      +  {
      +    "enum": [
      +      "RECRUITING",
      +      "NOT_YET_RECRUITING",
      +      "ACTIVE_NOT_RECRUITING",
      +      "COMPLETED",
      +      "ENROLLING_BY_INVITATION",
      +      "SUSPENDED",
      +      "TERMINATED",
      +      "WITHDRAWN",
      +      "AVAILABLE",
      +      "NO_LONGER_AVAILABLE",
      +      "TEMPORARILY_NOT_AVAILABLE",
      +      "APPROVED_FOR_MARKETING",
      +      "WITHHELD",
      +      "UNKNOWN"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "enum": [
      +        "RECRUITING",
      +        "NOT_YET_RECRUITING",
      +        "ACTIVE_NOT_RECRUITING",
      +        "COMPLETED",
      +        "ENROLLING_BY_INVITATION",
      +        "SUSPENDED",
      +        "TERMINATED",
      +        "WITHDRAWN",
      +        "AVAILABLE",
      +        "NO_LONGER_AVAILABLE",
      +        "TEMPORARILY_NOT_AVAILABLE",
      +        "APPROVED_FOR_MARKETING",
      +        "WITHHELD",
      +        "UNKNOWN"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / status / description
      Previous value: -"Trial status: 'RECRUITING' (Currently recruiting participants), 'NOT_YET_RECRUITING' (Approved but not yet recruiting), 'ACTIVE_NOT_RECRUITING' (Ongoing but no longer recruiting), 'COMPLETED' (Trial has concluded), 'ENROLLING_BY_INVITATION' (Recruiting by invitation only), ... (9 total)"New value: +"Trial status. Pipe-delimited for multiple: 'RECRUITING' (Currently recruiting participants), 'NOT_YET_RECRUITING' (Approved but not yet recruiting), 'ACTIVE_NOT_RECRUITING' (Ongoing but no longer recruiting), 'COMPLETED' (Trial has concluded), 'ENROLLING_BY_INVITATION' (Recruiting by invitation only), ... (14 total)"
    • removedInput schema / properties / status / enum
      Removed value: -[
      -  "RECRUITING",
      -  "NOT_YET_RECRUITING",
      -  "ACTIVE_NOT_RECRUITING",
      -  "COMPLETED",
      -  "ENROLLING_BY_INVITATION",
      -  "SUSPENDED",
      -  "TERMINATED",
      -  "WITHDRAWN",
      -  "AVAILABLE"
      -]
    • removedInput schema / properties / status / type
      Removed value: -"string"
    • addedInput schema / properties / study_id
      Added value: +{
      +  "description": "Study ID search: 'NCT04852770' or org study ID",
      +  "type": "string"
      +}
    • addedInput schema / properties / titles
      Added value: +{
      +  "description": "Title/acronym search: 'KEYNOTE', 'SPRINT'",
      +  "type": "string"
      +}
  3. First observedv2026.3.9

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, covering safety and non-mutating behavior. The description adds the return field list ('trial ID, title, status, phase, sponsor, conditions, enrollment, and hasResults flag') and hints at advanced filtering capabilities (Essie expressions, aggregation filters), which are behavioral details beyond the annotations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately concise with five sentences. The first sentence clearly states the purpose and is front-loaded. The second lists return fields, and the next three provide targeted usage tips. Each sentence adds value; there is no filler or repetition. It is slightly long due to the multiple usage examples but remains efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 17 parameters and no output schema, yet the description covers the core search scope and return fields, and highlights advanced features (Essie, agg_filters). Pagination is not mentioned but is documented via page_token/page_size in the schema. The description does not explain sorting or combination of filters, but these are covered by schema documentation. Overall, it is reasonably complete for a search tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameters with descriptions, providing a baseline of 3. The description adds semantic guidance by mapping common search intents to specific parameters (e.g., 'condition', 'drug/intervention', 'sponsor') and gives usage examples for sponsor, filter_advanced, and agg_filters. This goes beyond the schema's field descriptions by clarifying when and how to use these parameters effectively.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Search ClinicalTrials.gov for clinical trials') and enumerates the searchable dimensions (condition, drug/intervention, sponsor, status, phase, study type, location, title, free text). It clearly distinguishes from sibling tools like clinical_trials_detail or clinical_trials_stats by focusing on search and listing results, not on details or statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete usage tips for specific parameters: 'Use sponsor filter to track pharma company research', 'Use filter_advanced for Essie expressions', 'Use agg_filters for shorthand filters'. These guide efficient use of the tool. However, it does not explicitly contrast with sibling search tools (e.g., 'for detailed trial info use clinical_trials_detail'), so the when-to-use vs alternatives guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools