freshcrate
Skin:/
Home > MCP Servers > clinicaltrialsgov-mcp-server

clinicaltrialsgov-mcp-server

MCP server for the ClinicalTrials.gov v2 API. Search trials, retrieve study details and results, and match patients to eligible trials.

Why this rank:Strong adoptionRecent releaseHealthy release cadence

Description

MCP server for the ClinicalTrials.gov v2 API. Search trials, retrieve study details and results, and match patients to eligible trials.

README

clinicaltrialsgov-mcp-server

MCP server for the ClinicalTrials.gov v2 API. Search trials, retrieve study details and results, and match patients to eligible trials.

7 Tools ยท 1 Resource ยท 1 Prompt


Overview

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

Tool Name Description
clinicaltrials_search_studies Search studies with full-text queries, filters, pagination, sorting, and field selection.
clinicaltrials_get_study_record Fetch a single study by NCT ID. Returns the full record: protocol, eligibility, outcomes, arms, interventions, contacts, and locations.
clinicaltrials_get_study_count Get total study count for a query without fetching data. Fast statistics and breakdowns.
clinicaltrials_get_field_values Discover valid values for API fields (status, phase, study type, etc.) with per-value counts.
clinicaltrials_get_field_definitions Browse the study data model field tree โ€” piece names, types, nesting. Supports subtree navigation and keyword search.
clinicaltrials_get_study_results Extract outcomes, adverse events, participant flow, and baseline from completed studies. Optional summary mode reduces ~200KB payloads to ~5KB.
clinicaltrials_find_eligible Match 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.
Resource Description
clinicaltrials://{nctId} Fetch a single clinical study by NCT ID. Full JSON.
Prompt Description
analyze_trial_landscape Adaptable 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
  • Field selection to reduce payload size (full records are ~70KB each)
  • 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)
  • 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

Getting Started

Public Hosted Instance

A public instance is available at https://clinicaltrials.caseyjhand.com/mcp โ€” no installation required. Point any MCP client at it via Streamable HTTP:

{
  "mcpServers": {
    "clinicaltrialsgov-mcp-server": {
      "type": "streamable-http",
      "url": "https://clinicaltrials.caseyjhand.com/mcp"
    }
  }
}

Self-Hosted / Local

Add to your MCP client config (e.g., claude_desktop_config.json):

{
  "mcpServers": {
    "clinicaltrialsgov-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["clinicaltrialsgov-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio"
      }
    }
  }
}

Or for Streamable HTTP:

MCP_TRANSPORT_TYPE=http
MCP_HTTP_PORT=3010

Prerequisites

Installation

  1. Clone the repository:

    git clone https://github.com/cyanheads/clinicaltrialsgov-mcp-server.git
  2. Navigate into the directory:

    cd clinicaltrialsgov-mcp-server
  3. Install dependencies:

    bun install

Configuration

All configuration is optional โ€” the server works with defaults and no API keys.

Variable Description Default
CT_API_BASE_URL ClinicalTrials.gov API base URL. https://clinicaltrials.gov/api/v2
CT_REQUEST_TIMEOUT_MS Per-request timeout in milliseconds. 30000
CT_MAX_PAGE_SIZE Maximum page size cap. 200
MCP_TRANSPORT_TYPE Transport: stdio or http. stdio
MCP_HTTP_PORT Port for HTTP server. 3010
MCP_AUTH_MODE Auth mode: none, jwt, or oauth. none
MCP_LOG_LEVEL Log level (RFC 5424). info
LOGS_DIR Directory for log files (Node.js only). <project-root>/logs
OTEL_ENABLED Enable OpenTelemetry tracing. false

Running the Server

Local Development

  • Build and run the production version:

    bun run build
    bun run start:http   # or start:stdio
  • Run in dev mode (with watch):

    bun run dev:http     # or dev:stdio
  • Run checks and tests:

    bun run devcheck     # Lints, formats, type-checks
    bun run test         # Runs test suite

Docker

docker build -t clinicaltrialsgov-mcp-server .
docker run -p 3010:3010 clinicaltrialsgov-mcp-server

Project Structure

Directory Purpose
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:

bun run devcheck
bun run test

License

Apache-2.0 โ€” see LICENSE for details.

Release History

VersionChangesUrgencyDate
v2.6.4Remove SQLite study mirror; fix find_eligible recruiting filter Removes the opt-in local SQLite study mirror (CT_MIRROR_*). The FTS5 index cannot reproduce ClinicalTrials.gov's server-side field-scoped search โ€” condition counts diverged 4โ€“5ร— from live (#68), fields selection was silently dropped and pagination was broken (#66), and the metadata-only schema could not return resultsSection at all (#65). Search, count, and record lookups now always use the live API. Removed: - Local SQLite mirroHigh6/5/2026
v2.5.4Two bug fixes: dead error contract, status-label misses The batch-fallback for get-study-results converts batch errors to per-ID fetchErrors, making the ids_not_found contract dead documentation. The field-values validator misdirected agents reaching for common status labels. Fixed: - **get-study-results**: drop unreachable ids_not_found error contract โ€” invalid NCT IDs surface in fetchErrors, not as a thrown error (#55) - **get-field-values**: auto-correct RecruitmentStatus/RecruitingStatus High5/31/2026
v2.4.12mcp-ts-core ^0.9.1 โ†’ ^0.9.6, zod added, manifest.json + .mcpbignore scaffolded, install badges, action-first descriptionsHigh5/23/2026
main@2026-05-16Latest activity on main branchHigh5/16/2026
v2.1.0Latest release: v2.1.0High4/6/2026

Dependencies & License Audit

Loading dependencies...

Similar Packages

resonantOpen-source relational AI framework with identity persistence, memory, and MCP integration. Build relationship-aware AI agents that remember, grow, and maintain continuity. Built on Claude Agent SDK.v2.3.0
Perplexity-Comet-MCPNo descriptionmain@2026-06-07
scagent๐Ÿ” Discover security flaws and improve code quality with ShenCha, an AI-powered autonomous code audit agent designed for developers.main@2026-06-07
claude-blocker๐Ÿ›ก๏ธ Block distracting websites when Claude Code is in use, ensuring focused work sessions and minimizing interruptions.main@2026-06-07
node9-proxyThe Execution Security Layer for the Agentic Era. Providing deterministic "Sudo" governance and audit logs for autonomous AI agents.v1.29.0

More from cyanheads

mcp-ts-coreAgent-native TypeScript framework for building MCP servers. Build tools, not infrastructure.

More in MCP Servers

claude-plugins-officialOfficial, Anthropic-managed directory of high quality Claude Code Plugins.
langchain4jLangChain4j is an open-source Java library that simplifies the integration of LLMs into Java applications through a unified API, providing access to popular LLMs and vector databases. It makes impleme
hyperframesWrite HTML. Render video. Built for agents.
claude-code-guideClaude Code Guide - Setup, Commands, workflows, agents, skills & tips-n-tricks go from beginner to power user!