Skip to main content
Glama
davidfromkansas

ClinicalTrials.gov MCP Server

ClinicalTrials.gov MCP Server

A Model Context Protocol (MCP) server that provides access to the ClinicalTrials.gov API v2, enabling AI assistants to search and retrieve clinical trial data.

Features

  • Search clinical trials with filters (status, phase, condition, intervention, sponsor, study type)

  • Get detailed study information by NCT ID

  • Retrieve field metadata for available data fields

  • Get search areas and available filters

  • Query dataset statistics

  • API version information

Installation

npm install

Building

npm run build

Running

Local Development (MCP over HTTP)

npm start

The MCP server (Streamable HTTP transport) will be available at:

  • MCP endpoint: http://localhost:3000/mcp

  • Health check: http://localhost:3000/health

Local Development (MCP stdio)

For local MCP client integration via stdio:

npm run start:stdio

Deployment

Vercel (MCP over HTTP)

The server is deployed on Vercel as a remote MCP server (Streamable HTTP transport):

MCP Configuration

For Remote MCP (Vercel)

Configure your MCP client to use the hosted MCP endpoint:

{
  "mcpServers": {
    "clinicaltrials": {
      "url": "https://clinicaltrials-mcp-server-three.vercel.app/mcp",
      "transport": "http"
    }
  }
}

See MCP_CONFIG_CLAUDE.md, MCP_CONFIG_CURSOR.md, and MCP_CONFIG_DEVIN.md for client-specific setup.

For Local stdio

Add this server to your MCP client configuration:

{
  "mcpServers": {
    "clinicaltrials": {
      "command": "node",
      "args": ["/path/to/clinicaltrials-mcp-server/dist/server.js"]
    }
  }
}

Available Tools

All tools are read-only (annotated readOnlyHint: true) and return both text and structuredContent.

clinicaltrials_search_studies

Search clinical trials with filters. Returns paginated summaries plus an accurate totalCount and hasMore flag.

Parameters:

  • query (string, optional): Full-text search term (maps to query.term)

  • status (enum, optional): Recruitment status (RECRUITING, COMPLETED, ACTIVE_NOT_RECRUITING, etc.)

  • phase (enum, optional): EARLY_PHASE1, PHASE1, PHASE2, PHASE3, PHASE4

  • condition (string, optional): Medical condition or disease (maps to query.cond)

  • intervention (string, optional): Intervention or treatment (maps to query.intr)

  • leadSponsor (string, optional): Lead sponsor name (maps to query.spons)

  • studyType (enum, optional): INTERVENTIONAL, OBSERVATIONAL, EXPANDED_ACCESS

  • pageSize (number, optional): Results per page (1-1000, default: 20)

  • pageToken (string, optional): Pagination token for the next page

Example:

{
  "query": "diabetes",
  "status": "RECRUITING",
  "phase": "PHASE2",
  "pageSize": 10
}

clinicaltrials_get_study

Get detailed information about a specific clinical trial by NCT ID.

Parameters:

  • nctId (string, required): ClinicalTrials.gov identifier (e.g., "NCT04000009")

Example:

{
  "nctId": "NCT04000009"
}

clinicaltrials_list_data_fields

List the available data fields in ClinicalTrials.gov study records.

Parameters: None

clinicaltrials_list_search_areas

List available search areas and filters for querying clinical trials.

Parameters: None

clinicaltrials_get_stats

Get statistics about the ClinicalTrials.gov database.

Parameters:

  • query (string, optional): Search term to scope the statistics

clinicaltrials_get_api_version

Get the ClinicalTrials.gov API version information.

Parameters: None

clinicaltrials_search_studies_map

Search trials and render their locations as an interactive world map (an MCP App using @modelcontextprotocol/ext-apps). Markers are colored by recruitment status and clustered; clicking a marker shows trial details and can open the full study. Re-call with refined filters to update the same map. Also returns a text summary as a fallback for clients that don't render MCP Apps.

Parameters:

  • query, condition, intervention, leadSponsor (string, optional): search terms

  • country (string, optional): location term (country/city; maps to query.locn)

  • status (enum, optional), phase (enum, optional), studyType (enum, optional): filters

  • pageSize (number, optional): trials to plot (1-200, default 50)

UI resource: ui://clinicaltrials/map (text/html;profile=mcp-app). Uses each site's geoPoint coordinates from the API. Note: MCP Apps rendering is host-dependent — reliably renders in Goose / VS Code Copilot / Postman / MCPJam; Claude may currently show only the text fallback.

API Reference

This server uses the ClinicalTrials.gov Data API v2, which is a public, unauthenticated REST API.

Base URL: https://clinicaltrials.gov/api/v2

Project Structure

clinicaltrials-mcp-server/
├── src/
│   ├── api-client.ts          # ClinicalTrials.gov API client
│   ├── server.ts              # MCP server setup
│   ├── index.ts               # Main entry point
│   ├── types/
│   │   └── api.ts             # TypeScript type definitions
│   └── tools/
│       ├── search-studies.ts
│       ├── get-study.ts
│       ├── get-study-fields.ts
│       ├── get-search-areas.ts
│       ├── get-dataset-stats.ts
│       └── get-api-version.ts
├── dist/                      # Compiled JavaScript
├── package.json
├── tsconfig.json
└── README.md

Development

This project uses:

  • TypeScript for type safety

  • @modelcontextprotocol/sdk for MCP server implementation

  • Node.js runtime

License

ISC