npi-verify

npi-verify

MCP server for looking up and searching US healthcare providers in the CMS NPPES NPI Registry.

Category
Visit Server

README

npi-verify

A small, typed Python client and MCP server for the public CMS NPPES NPI Registry.

CI

What it is

npi-verify looks up and searches United States healthcare providers against the National Plan and Provider Enumeration System (NPPES) NPI Registry. NPPES is the authoritative registry published by the Centers for Medicare and Medicaid Services (CMS). Every clinician and healthcare organization that bills US payers has an NPI, and the registry is the source of truth for that identity.

The package gives you two things:

  1. A typed, dependency-light Python client that parses NPPES JSON into frozen dataclasses.
  2. An MCP (Model Context Protocol) server that exposes the same lookups as tools an AI agent can call.

Why

If you are building anything that touches the healthcare workforce, you eventually need to confirm that a provider is real and that the identity you were handed matches the public record. Checking the NPI against the CMS source of truth is the cheapest, most defensible verification step available, and it requires no credentials. This package makes that check a one-line call and a reusable agent tool.

The client validates the NPI offline before it ever hits the network, using the same Luhn checksum (over the 80840 issuer prefix) that NPPES itself uses, so malformed input fails fast and for free.

Public CMS data, no PHI

The NPPES NPI Registry is free, public, and requires no authentication. It returns provider demographic data only: names, NPIs, taxonomies, practice addresses, and enumeration status. It contains no protected health information (PHI). This package sends no credentials and stores nothing.

Install

pip install npi-verify

To use the MCP server, install the optional mcp extra:

pip install "npi-verify[mcp]"

From source:

git clone https://github.com/gm4prezi/npi-verify.git
cd npi-verify
pip install -e ".[dev]"

Client usage

Look up a single provider by NPI:

from npi_verify import NPIClient

with NPIClient() as client:
    provider = client.lookup_npi("1234567893")

if provider is None:
    print("No provider with that NPI.")
else:
    print(provider.name, provider.credential)
    print(provider.taxonomy.description)
    print(provider.primary_address.city, provider.primary_address.state)

Search by name, state, taxonomy, or organization:

from npi_verify import NPIClient

with NPIClient() as client:
    providers = client.search(
        last_name="Rivera",
        state="GA",
        taxonomy_description="Internal Medicine",
        limit=10,
    )

for provider in providers:
    print(provider.npi, provider.name, provider.entity_type)

Validate an NPI without any network call:

from npi_verify import is_valid_npi, validate_npi

is_valid_npi("1234567893")   # True
is_valid_npi("1234567890")   # False (bad checksum)
validate_npi("0000000000")   # raises ValueError

Errors

  • lookup_npi and validate_npi raise ValueError for a structurally invalid NPI.
  • A not-found lookup returns None. An empty search returns [].
  • Network failures, timeouts, and NPPES query errors raise NPIRegistryError.

MCP usage

The package ships an MCP server over stdio that exposes two tools, lookup_npi and search_providers, both wired to the client above.

Run it directly:

npi-verify-mcp
# or
python -m npi_verify.mcp_server

Register it with an MCP client (for example, Claude Desktop) by adding this to your MCP configuration:

{
  "mcpServers": {
    "npi-verify": {
      "command": "npi-verify-mcp"
    }
  }
}

If you prefer not to install the console script, point the config at the module:

{
  "mcpServers": {
    "npi-verify": {
      "command": "python",
      "args": ["-m", "npi_verify.mcp_server"]
    }
  }
}

Data model

lookup_npi and search return frozen Provider dataclasses:

Field Description
npi The 10-digit NPI.
entity_type "Individual" or "Organization".
name Person name, or organization name for entity type 2.
credential Credential string (for example MD), individuals only.
taxonomy Primary taxonomy: code, description, state, license.
primary_address Practice location address (falls back to mailing).
status NPPES status code (A for active).
enumeration_date The date the NPI was issued.

Development

pip install -e ".[dev]"
pytest

The default test run mocks all HTTP, so it makes no network calls and is safe for CI. A single live smoke test against the real NPPES API is marked live and is skipped by default. Run it explicitly with:

pytest -m live

License

MIT. See LICENSE.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured