Skip to main content
Glama

search_world_trials

Read-only

PRIMARY TRIAL TOOL. USE WHEN you need actual clinical-trial RECORDS for a disease, intervention, sponsor, country or date window. Searches DISTINCT real-world trials across the admitted PRIMARY registries — ClinicalTrials.gov (US NIH) and ISRCTN (UK) — deduplicated by exact cross-registry identifier match, so a trial registered twice is returned ONCE, not twice. Secondary aggregators are deliberately excluded, so the index is registry-authoritative but NOT a census of every country. Every result is evidence-ready: canonical id, normalized status/phase/study type/enrollment/countries/primary endpoints, the registries that hold it, source URLs, retrieval timestamps, payload checksums and a quotable citation block. HOW TO NARROW: use q for the disease, then intervention to separate MODALITIES within that disease (e.g. "stem cell", "encapsulation", "gene edit", "xenotransplant") — running several intervention-scoped searches is how you build a comparative landscape. Use status="active" for currently-running human studies. SCOPE WARNING: omit registry to keep the answer worldwide; supplying it makes the result single-registry evidence and you must label it as such. ROWS ARE COMPACT by default (20 per page, about 10 KB); pass include="full" only when you need endpoints, eligibility or locations, or call get_world_trial for one trial. COUNTING: read data.totalCanonical or call get_trial_coverage; do NOT page through results to count. Page with _meta.pagination.nextUrl only when you need more records to read. Status/phase/studyType/country are case-insensitive and normalized (US = USA = United States; 1 = I = PHASE1); unknown values return 400. q expands lay terms and MeSH/ICD-10 codes (juvenile diabetes, E10, heart attack); data.resolvedTerms shows what was searched. NEXT: get_world_trial for one trial's full per-registry provenance and raw payload; get_trial_coverage to learn how much of your result set is duplicate registrations; get_trial_landscape for the derived shape (phase mix, sponsors, reporting gap, momentum); find_trial_registrations to see every registry one trial appears in.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "search_world_trials"
  }
}

Input Schema

NameRequiredDescriptionDefault
qNoFree-text condition/intervention query, e.g. "type 1 diabetes islet". Tokens are ANDed.
pageNoPage number, 1-based.
sortNolastUpdated (default) | startDate | enrollment | canonicalId.
limitNoResults per call (the same as pageSize).
phaseNoComma-separated phases: 1-4, I-IV, early_phase1, or 1/2. Phase is missing for much of the corpus.
topicNoCure Protocol topic id (get_trial_stats lists them).
cursorNoOpaque cursor. Pass _meta.pagination.nextCursor from the previous call unchanged to get the next page; omit it to start at the beginning.
statusNorecruiting | active_not_recruiting | not_yet_recruiting | completed | halted | terminated | withdrawn | not_authorised | unknown, or "active" for any open status (recruiting + active_not_recruiting + not_yet_recruiting). Case-insensitive; unknown values return 400.
countryNoRecruiting/site country: full English name or ISO code (US, USA, UK, DE, ...).
includeNo"full" for complete records instead of compact rows; "eligibilityText" adds the full inclusion/exclusion prose (large). Use only when you must reason about endpoints or eligibility.
sponsorNoFree-text sponsor name match.
pageSizeNoResults per page (default 20, max 100). Keep it small: use get_trial_coverage for counts.
registryNoclinicaltrials_gov | isrctn. OMIT for full-index scope, restricting to one registry makes the answer single-registry evidence.
conditionNoExact registry condition term. Prefer q unless you know the exact string.
studyTypeNointerventional | observational | expanded_access | other.
interventionNoFree-text intervention match: the way to separate MODALITIES within one disease.
startedAfterNoISO date: study start on/after.
updatedSinceNoISO date: only records updated on/after this date.
crossRegistryNotrue = only trials registered in more than one registry.
maxEnrollmentNoMaximum normalized enrollment.
minEnrollmentNoMinimum normalized enrollment.
startedBeforeNoISO date: study start on/before.
completionAfterNoISO date: completion on/after.
completionBeforeNoISO date: completion on/before.
resultsAvailableNoRestrict to trials with/without posted results.

Output Schema

NameRequiredDescriptionDefault
dataNoThe answer. Shape depends on the tool; describe_tool documents it.
_metaNosource, generatedAt, sources (per-source lastSyncedAt and ageHours), rateLimit, disclaimer.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / cursor
      Added value: +{
      +  "description": "Opaque cursor. Pass _meta.pagination.nextCursor from the previous call unchanged to get the next page; omit it to start at the beginning.",
      +  "maxLength": 200,
      +  "type": "string"
      +}
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "Results per call (the same as pageSize).",
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "integer"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {
      +    "_meta": {
      +      "additionalProperties": {},
      +      "description": "source, generatedAt, sources (per-source lastSyncedAt and ageHours), rateLimit, disclaimer.",
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "data": {
      +      "description": "The answer. Shape depends on the tool; describe_tool documents it."
      +    }
      +  },
      +  "type": "object"
      +}
  3. Changed19 schema fields changed
    • addedInput schema / properties / completionAfter / maxLength
      Added value: +20000
    • addedInput schema / properties / completionBefore / maxLength
      Added value: +20000
    • addedInput schema / properties / condition / maxLength
      Added value: +20000
    • addedInput schema / properties / country / maxLength
      Added value: +20000
    • addedInput schema / properties / include / maxLength
      Added value: +20000
    • addedInput schema / properties / intervention / maxLength
      Added value: +20000
    • changedInput schema / properties / page / maximum
      Previous value: -9007199254740991New value: +10000
    • addedInput schema / properties / phase / anyOf
      Added value: +[
      +  {
      +    "maxLength": 2000,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "maxLength": 200,
      +      "type": "string"
      +    },
      +    "maxItems": 100,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • removedInput schema / properties / phase / type
      Removed value: -"string"
    • addedInput schema / properties / q / maxLength
      Added value: +500
    • addedInput schema / properties / registry / maxLength
      Added value: +20000
    • addedInput schema / properties / sort / maxLength
      Added value: +20000
    • addedInput schema / properties / sponsor / maxLength
      Added value: +20000
    • addedInput schema / properties / startedAfter / maxLength
      Added value: +20000
    • addedInput schema / properties / startedBefore / maxLength
      Added value: +20000
    • addedInput schema / properties / status / maxLength
      Added value: +20000
    • addedInput schema / properties / studyType / maxLength
      Added value: +20000
    • addedInput schema / properties / topic / maxLength
      Added value: +20000
    • addedInput schema / properties / updatedSince / maxLength
      Added value: +20000
  4. Changed5 schema fields changed
    • changedInput schema / properties / country / description
      Previous value: -"Recruiting/site country."New value: +"Recruiting/site country: full English name or ISO code (US, USA, UK, DE, ...)."
    • changedInput schema / properties / include / description
      Previous value: -"Set to \"eligibilityText\" to include the full inclusion/exclusion prose for every result. Large payload — use only when you must reason about eligibility (e.g. whether chronic immunosuppression is required)."New value: +"\"full\" for complete records instead of compact rows; \"eligibilityText\" adds the full inclusion/exclusion prose (large). Use only when you must reason about endpoints or eligibility."
    • changedInput schema / properties / pageSize / description
      Previous value: -"Results per page (default 50, max 100)."New value: +"Results per page (default 20, max 100). Keep it small: use get_trial_coverage for counts."
    • changedInput schema / properties / phase / description
      Previous value: -"Comma-separated phases, e.g. \"1,2\". Phase is missing for much of the corpus."New value: +"Comma-separated phases: 1-4, I-IV, early_phase1, or 1/2. Phase is missing for much of the corpus."
    • changedInput schema / properties / status / description
      Previous value: -"Recruitment status, or \"active\" for recruiting + active + not_yet_recruiting."New value: +"recruiting | active_not_recruiting | not_yet_recruiting | completed | halted | terminated | withdrawn | not_authorised | unknown, or \"active\" for any open status (recruiting + active_not_recruiting + not_yet_recruiting). Case-insensitive; unknown values return 400."
  5. Changed7 schema fields changed
    • changedInput schema / properties / completionAfter / description
      Previous value: -"ISO date — completion on/after."New value: +"ISO date: completion on/after."
    • changedInput schema / properties / completionBefore / description
      Previous value: -"ISO date — completion on/before."New value: +"ISO date: completion on/before."
    • changedInput schema / properties / intervention / description
      Previous value: -"Free-text intervention match — the way to separate MODALITIES within one disease."New value: +"Free-text intervention match: the way to separate MODALITIES within one disease."
    • changedInput schema / properties / registry / description
      Previous value: -"clinicaltrials_gov | isrctn. OMIT for full-index scope — restricting to one registry makes the answer single-registry evidence."New value: +"clinicaltrials_gov | isrctn. OMIT for full-index scope, restricting to one registry makes the answer single-registry evidence."
    • changedInput schema / properties / startedAfter / description
      Previous value: -"ISO date — study start on/after."New value: +"ISO date: study start on/after."
    • changedInput schema / properties / startedBefore / description
      Previous value: -"ISO date — study start on/before."New value: +"ISO date: study start on/before."
    • changedInput schema / properties / updatedSince / description
      Previous value: -"ISO date — only records updated on/after this date."New value: +"ISO date: only records updated on/after this date."
  6. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), and the description still adds real operational context: dedup by exact cross-registry identifier, compact 20-row ~10 KB default pages, 400 errors on unknown enum-ish values, and case-insensitive normalization. It stops short of describing rate limits or failure modes beyond the 400.

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?

Front-loaded and organized into labelled blocks (HOW TO NARROW, SCOPE WARNING, COUNTING, NEXT), so an agent can scan it. It is long and re-states registry scope in both prose and the SCOPE WARNING, costing some tightness, but nearly every sentence carries actionable information.

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

Completeness5/5

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

For a 25-parameter search over two registries with an output schema present, the description covers scope, narrowing strategy, pagination, counting, and hand-off to the four relevant siblings. Nothing an agent needs in order to call it correctly is missing.

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?

Schema coverage is 100%, so 3 is the floor; the description goes further by explaining why intervention matters (modalites within a disease), that q expands lay terms and MeSH/ICD-10 codes with resolvedTerms feedback, and that registry omission vs. supply changes the evidentiary status of the answer.

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?

Opens with a specific verb+resource ('PRIMARY TRIAL TOOL ... need actual clinical-trial RECORDS') and names the resources it covers (ClinicalTrials.gov, ISRCTN). It distinguishes itself from siblings by explicitly routing get_world_trial, get_trial_coverage, get_trial_landscape and find_trial_registrations to their own jobs.

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

Usage Guidelines5/5

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

Gives an explicit 'USE WHEN' clause, explains how to narrow (q for disease then intervention to separate modalities), when to use status="active", when to pass include="full" versus paging, and warns not to page to count. It also states the exclusion (secondary aggregators) and the registry-scope caveat.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources