NPPES NPI Registry MCP by usefulapi
Look up US healthcare providers and organisations by NPI.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"nppes-npi-registry": {
"url": "https://nppes-npi-registry.usefulapi.io/mcp"
}
}
}Remote endpoints
https://nppes-npi-registry.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (4)
🟢nppes_lookup_npi(number)
Look up a single healthcare provider by their exact 10-digit National Provider Identifier (NPI). Returns the full registry record: basic info, addresses, taxonomies/specialties, identifiers and other names. NPPES Read API v2.1.
Input Schema
{
"type": "object",
"properties": {
"number": {
"type": "string",
"pattern": "^\\d{10}$",
"description": "The 10-digit NPI number to look up, e.g. '1467550004' (required)."
}
},
"required": [
"number"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nppes_search_individuals(first_name, last_name, name_purpose, taxonomy_description, city, ...)
Search for INDIVIDUAL healthcare providers (NPI-1: doctors, nurses, therapists, etc.) by name, specialty (taxonomy) and/or location. Provide at least one meaningful criterion beyond a location. Name fields support a trailing '*' wildcard (min 2 chars before it). NPPES Read API v2.1.
Input Schema
{
"type": "object",
"properties": {
"first_name": {
"description": "Provider first name. A trailing '*' wildcard is allowed, e.g. 'Jo*'.",
"type": "string"
},
"last_name": {
"description": "Provider last name. A trailing '*' wildcard is allowed, e.g. 'Smi*'.",
"type": "string"
},
"name_purpose": {
"description": "Which name to match: 'PROVIDER' (default) matches the provider's own name; 'AO' matches an authorized official.",
"type": "string",
"enum": [
"AO",
"PROVIDER"
]
},
"taxonomy_description": {
"description": "Provider taxonomy / specialty text, e.g. 'cardiology', 'Pediatrics', 'Social Worker'. Partial matches supported; a trailing '*' wildcard is allowed (min 2 chars before it).",
"type": "string"
},
"city": {
"description": "City of the provider's address.",
"type": "string"
},
"state": {
"description": "Two-letter U.S. state/territory abbreviation, e.g. 'CA', 'NY', 'PR'.",
"type": "string"
},
"postal_code": {
"description": "Postal (ZIP) code; a trailing '*' wildcard is allowed for prefix search, e.g. '941*'.",
"type": "string"
},
"country_code": {
"description": "Two-letter country code (default 'US'). Use 'US' for domestic addresses.",
"type": "string"
},
"address_purpose": {
"description": "Which address the city/state/postal_code filters apply to (LOCATION = practice address).",
"type": "string",
"enum": [
"LOCATION",
"MAILING",
"PRIMARY",
"SECONDARY"
]
},
"limit": {
"description": "Max number of records to return (1–200, default 10).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"skip": {
"description": "Number of records to skip, for pagination (0–1000; combined with limit, up to 1200 records reachable).",
"type": "integer",
"minimum": 0,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nppes_search_organizations(organization_name, taxonomy_description, city, state, postal_code, ...)
Search for ORGANIZATION healthcare providers (NPI-2: hospitals, clinics, group practices, pharmacies, labs, etc.) by organization name, specialty (taxonomy) and/or location. The organization_name field supports a trailing '*' wildcard (min 2 chars before it). NPPES Read API v2.1.
Input Schema
{
"type": "object",
"properties": {
"organization_name": {
"description": "Organization (legal business) name. A trailing '*' wildcard is allowed, e.g. 'Kaiser*'.",
"type": "string"
},
"taxonomy_description": {
"description": "Provider taxonomy / specialty text, e.g. 'cardiology', 'Pediatrics', 'Social Worker'. Partial matches supported; a trailing '*' wildcard is allowed (min 2 chars before it).",
"type": "string"
},
"city": {
"description": "City of the provider's address.",
"type": "string"
},
"state": {
"description": "Two-letter U.S. state/territory abbreviation, e.g. 'CA', 'NY', 'PR'.",
"type": "string"
},
"postal_code": {
"description": "Postal (ZIP) code; a trailing '*' wildcard is allowed for prefix search, e.g. '941*'.",
"type": "string"
},
"country_code": {
"description": "Two-letter country code (default 'US'). Use 'US' for domestic addresses.",
"type": "string"
},
"address_purpose": {
"description": "Which address the city/state/postal_code filters apply to (LOCATION = practice address).",
"type": "string",
"enum": [
"LOCATION",
"MAILING",
"PRIMARY",
"SECONDARY"
]
},
"limit": {
"description": "Max number of records to return (1–200, default 10).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"skip": {
"description": "Number of records to skip, for pagination (0–1000; combined with limit, up to 1200 records reachable).",
"type": "integer",
"minimum": 0,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nppes_search(enumeration_type, number, first_name, last_name, organization_name, ...)
Full-power search of the NPPES NPI Registry across ANY combination of criteria — individual name, organization name, NPI number, taxonomy/specialty, and location. Use nppes_search_individuals / nppes_search_organizations for the common cases; use this when you need mixed or advanced criteria. The API requires at least one meaningful search parameter. NPPES Read API v2.1.
Input Schema
{
"type": "object",
"properties": {
"enumeration_type": {
"description": "Restrict to 'NPI-1' (individuals) or 'NPI-2' (organizations). Omit to search both.",
"type": "string",
"enum": [
"NPI-1",
"NPI-2"
]
},
"number": {
"description": "Exact 10-digit NPI number.",
"type": "string",
"pattern": "^\\d{10}$"
},
"first_name": {
"description": "Individual provider first name (trailing '*' wildcard allowed).",
"type": "string"
},
"last_name": {
"description": "Individual provider last name (trailing '*' wildcard allowed).",
"type": "string"
},
"organization_name": {
"description": "Organization name (trailing '*' wildcard allowed).",
"type": "string"
},
"name_purpose": {
"description": "For name matching: 'PROVIDER' (default) or 'AO' (authorized official).",
"type": "string",
"enum": [
"AO",
"PROVIDER"
]
},
"taxonomy_description": {
"description": "Provider taxonomy / specialty text, e.g. 'cardiology', 'Pediatrics', 'Social Worker'. Partial matches supported; a trailing '*' wildcard is allowed (min 2 chars before it).",
"type": "string"
},
"city": {
"description": "City of the provider's address.",
"type": "string"
},
"state": {
"description": "Two-letter U.S. state/territory abbreviation, e.g. 'CA', 'NY', 'PR'.",
"type": "string"
},
"postal_code": {
"description": "Postal (ZIP) code; a trailing '*' wildcard is allowed for prefix search, e.g. '941*'.",
"type": "string"
},
"country_code": {
"description": "Two-letter country code (default 'US'). Use 'US' for domestic addresses.",
"type": "string"
},
"address_purpose": {
"description": "Which address the city/state/postal_code filters apply to (LOCATION = practice address).",
"type": "string",
"enum": [
"LOCATION",
"MAILING",
"PRIMARY",
"SECONDARY"
]
},
"limit": {
"description": "Max number of records to return (1–200, default 10).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"skip": {
"description": "Number of records to skip, for pagination (0–1000; combined with limit, up to 1200 records reachable).",
"type": "integer",
"minimum": 0,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence