Labsco
cyanheads logo

ClinicalTrials.gov

โ˜… 81

from cyanheads

Search and retrieve clinical trial data from the official ClinicalTrials.gov API.

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedFreeAdvanced setup
<div align="center"> <h1>clinicaltrialsgov-mcp-server</h1> <p><b>Search ClinicalTrials.gov trials, retrieve study details and results, and match patients to eligible trials via MCP. STDIO or Streamable HTTP.</b> <div>7 Tools โ€ข 1 Resource โ€ข 1 Prompt</div> </p> </div> <div align="center">

npm Docker Version MCP SDK License TypeScript Bun

</div> <div align="center">

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

</div> <div align="center">

Public Hosted Server: https://clinicaltrials.caseyjhand.com/mcp

</div>

Overview

Seven tools for searching, discovering, analyzing, and matching clinical trials:

Tool NameDescription
clinicaltrials_search_studiesSearch studies with full-text queries, filters, pagination, sorting, and field selection.
clinicaltrials_get_study_recordFetch a single study by NCT ID. Returns the full record: protocol, eligibility, outcomes, arms, interventions, contacts, and locations.
clinicaltrials_get_study_countGet total study count for a query without fetching data. Fast statistics and breakdowns.
clinicaltrials_get_field_valuesDiscover valid values for API fields (status, phase, study type, etc.) with per-value counts.
clinicaltrials_get_field_definitionsBrowse the study data model field tree โ€” piece names, types, nesting. Supports subtree navigation and keyword search.
clinicaltrials_get_study_resultsExtract outcomes, adverse events, participant flow, and baseline from completed studies. Optional summary mode reduces ~200KB payloads to ~5KB.
clinicaltrials_find_eligibleMatch patient demographics and conditions to eligible recruiting trials. Provide age, sex, conditions, and location to find studies with matching eligibility criteria, contacts, and recruiting locations.
ResourceDescription
clinicaltrials://{nctId}Fetch a single clinical trial study by NCT ID. Full JSON.
PromptDescription
analyze_trial_landscapeAdaptable workflow for data-driven trial landscape analysis using count + search tools.

Tools

clinicaltrials_search_studies

Primary search tool with full ClinicalTrials.gov query capabilities.

  • Full-text and field-specific queries (condition, intervention, sponsor, location, title, outcome)
  • Status and phase filters with typed enum values
  • Geographic proximity filtering by coordinates and distance
  • Advanced AREA[] Essie expression support for complex queries
  • Compact index results by default; pass fields for a full-fidelity projection of specific leaves (a full single record is ~70KB โ€” fetch one with get_study_record)
  • Pagination with cursor tokens, sorting by any field

clinicaltrials_get_study_results

Fetch posted results data for completed studies.

  • Outcome measures with statistics, adverse events, participant flow, baseline characteristics
  • Section-level filtering (request only the data you need)
  • Optional summary mode condenses full results (~200KB) to essential metadata (~5KB per study)
  • Batch multiple NCT IDs per call with partial-success reporting
  • Separate tracking of studies without results and fetch errors

clinicaltrials_find_eligible

Match a patient profile to eligible recruiting trials.

  • Takes age, sex, conditions, and location as patient demographics
  • Builds optimized API queries with demographic filters (age range, sex, healthy volunteers)
  • Re-ranks results so studies whose own condition matches a requested condition surface above tangential matches from the upstream fuzzy condition search
  • Returns studies with eligibility and location fields for the caller to evaluate
  • Provides actionable hints when no studies match (broaden conditions, adjust filters)

Features

Built on @cyanheads/mcp-ts-core:

  • Declarative tool/resource/prompt definitions with Zod schemas and format functions
  • Unified error handling โ€” handlers throw, framework catches and classifies
  • Dual transport: stdio and Streamable HTTP from the same codebase
  • Pluggable auth (none, jwt, oauth) for HTTP transport
  • Structured logging with optional OpenTelemetry tracing

ClinicalTrials.gov-specific:

  • Type-safe client for the ClinicalTrials.gov REST API v2
  • Public API โ€” no authentication or API keys required
  • Retry with exponential backoff (3 attempts) and rate limiting (~1 req/sec)
  • HTML error detection and structured error factories

Project Structure

DirectoryPurpose
src/mcp-server/tools/Tool definitions (*.tool.ts).
src/mcp-server/resources/Resource definitions (*.resource.ts).
src/mcp-server/prompts/Prompt definitions (*.prompt.ts).
src/services/clinical-trials/ClinicalTrials.gov API client and types.
src/config/Environment variable parsing and validation with Zod.
tests/Unit and integration tests.

Development Guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches โ€” no try/catch in tool logic
  • Use ctx.log for request-scoped logging, no console calls
  • Register new tools and resources in the index.ts barrel files

Contributing

Issues and pull requests are welcome. Run checks before submitting:

Copy & paste โ€” that's it
bun run devcheck
bun run test

License

Apache-2.0 โ€” see LICENSE for details.