Skip to main content
Glama
NHS MCP Server

NHS MCP Server

by gsampaio-rh

NHS MCP Server

An MCP (Model Context Protocol) server that provides AI assistants with access to NHS public health datasets. Query prescribing data, explore datasets, and look up NHS organisations directly from Cursor, Claude Desktop, or any MCP-compatible host.

Quick Start

Prerequisites

  • Node.js 20+

  • npm

Install and Build

npm install
npm run build

Configure Cursor

The project includes a .cursor/mcp.json that registers the server automatically. After building, restart Cursor to pick up the MCP server.

To configure manually in any MCP host, register a stdio server:

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

Related MCP server: OpenFDA FastMCP Server

Available Tools

datasets_list

List all available datasets on the NHSBSA Open Data Portal.

Parameters:

  • search_query (optional) — Filter datasets by title or description

Example prompt: "List all NHS datasets related to prescribing"

datasets_metadata

Get detailed metadata for a specific dataset, including resource IDs needed for querying.

Parameters:

  • dataset_id (required) — Dataset name or ID

Example prompt: "Show me the metadata for the English Prescribing Dataset"

datasets_query

Query a specific dataset resource by its resource ID. Use datasets_metadata first to discover resource IDs.

Parameters:

  • resource_id (required) — The resource ID to query

  • filters (optional) — Key-value pairs to filter records

  • limit (optional) — Max records to return (default 20, max 100)

  • offset (optional) — Records to skip for pagination

Example prompt: "Query resource abc-123 filtering by BNF_CODE 0407010H0"

Search NHS prescribing data from the English Prescribing Dataset (EPD).

Parameters:

  • bnf_code (optional) — BNF code (e.g., 0407010H0 for Paracetamol)

  • drug_name (optional) — Free-text drug name search

  • practice_code (optional) — GP practice code

  • year_month (optional) — Period in YYYYMM format

  • resource_id (optional) — Specific EPD resource ID

  • limit (optional) — Max records (default 20, max 100)

Example prompt: "Search for Paracetamol prescriptions in January 2024"

Data Sources

Source

API

Auth Required

NHSBSA Open Data Portal

CKAN Action API

No

Development

Project Structure

src/
├── mcp/                    # MCP protocol layer (tools, server setup)
│   ├── server.ts
│   └── tools/
├── application/            # Business logic (use cases, formatters, types)
│   ├── use-cases/
│   ├── formatters/
│   └── types.ts
└── infrastructure/         # External concerns (API clients, cache, config)
    ├── clients/
    ├── cache/
    ├── config.ts
    └── logger.ts

Commands

npm run build       # Compile TypeScript
npm run dev         # Watch mode
npm test            # Run tests
npm run test:watch  # Watch mode tests
npm start           # Start MCP server (stdio)

Running Tests

npm test

Tests mock all external HTTP calls. No network access is required.

License

MIT

Available Tools

9 tools
datasets_listList NHS DatasetsA

List all available datasets on the NHSBSA Open Data Portal. Returns dataset names, descriptions, and resource counts. Optionally filter by a search term matching title or description.

Inputs: search_query.

datasets_metadataGet Dataset MetadataA

Get detailed metadata for a specific NHS dataset, including its resources (data files) with their IDs. Use the resource ID with the datasets_query tool to query the actual data.

Inputs: dataset_id (required).

datasets_queryQuery DatasetA

Query a specific dataset resource on the NHSBSA Open Data Portal by resource ID. Use datasets_metadata first to find resource IDs for a dataset. Supports filtering by field values, pagination with limit and offset.

Inputs: resource_id (required), limit, offset, filters.

organisations_getGet Organisation DetailsA

Get full details for a specific NHS organisation by its ODS code. Returns name, address, roles, relationships, and succession history. Use organisations_search first to find the ODS code.

Inputs: ods_code (required).

organisations_relationshipsGet Organisation RelationshipsA

Get the relationships for a specific NHS organisation (e.g., which ICB commissions a GP practice, which region a trust belongs to). Returns relationship types, target organisations, and status.

Inputs: ods_code (required).

prescriptions_cost_analysisPrescription Cost AnalysisA

Get prescription cost statistics from the national Prescription Cost Analysis (PCA) dataset. Shows aggregate costs and volumes at the national level (not by practice). Use prescriptions_search for practice-level data instead.

Inputs: limit, bnf_code, bnf_name, year_month, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 9 tools

    Disambiguation5/5

    Each tool targets a distinct resource (prescriptions, datasets, organisations) and operation (trends, search, metadata, query, relationships). Even the prescribing tools are clearly differentiated by granularity: time-series trends, record-level search, and national aggregate statistics.

    Naming Consistency4/5

    Tool names follow a consistent domain_suffix pattern in snake_case with a clear domain prefix. However, some suffixes are nouns (datasets_metadata, organisations_relationships) rather than verbs, introducing a minor inconsistency in the naming scheme.

    Tool Count5/5

    Nine tools is an appropriate count, comfortably within the ideal range. Each tool serves a clear purpose, covering three distinct domains, with no redundancy.

    Completeness5/5

    The tool surface provides comprehensive coverage for the stated NHS data domains: prescribing data (search, trends, cost analysis), open data portal (list, metadata, query), and organisation directory (search, details, relationships). It enables complete discovery and access workflows.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers