Validate, look up and count US NPI providers from the public CMS registry; not affiliated with CMS.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
How many providers does the NPI Registry list for a specialty, optionally in a state or ZIP prefix? Exact up to 1,200; beyond that it says "1200+" and points to the full-list route. Up to 5 specialties per call.
ZIP prefix with *, e.g. "100*"
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http npi https://mcp-npi.tuper.app/mcp
How many providers does the NPI Registry list for a specialty, optionally in a state or ZIP prefix? Exact up to 1,200; beyond that it says "1200+" and points to the full-list route. Up to 5 specialties per call.
| Argument | Type | Description |
|---|---|---|
| state | string | |
| entity | string | |
| postal_code | string | ZIP prefix with *, e.g. "100*" |
| specialties* | array |
{
"type": "object",
"required": [
"specialties"
],
"properties": {
"state": {
"type": "string"
},
"entity": {
"enum": [
"any",
"individual",
"organization"
],
"type": "string",
"default": "individual"
},
"postal_code": {
"type": "string",
"description": "ZIP prefix with *, e.g. \"100*\""
},
"specialties": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5,
"minItems": 1
}
},
"additionalProperties": false
}Fetch 1-20 providers by NPI number from the live CMS NPI Registry: name, credential, status, primary specialty (taxonomy), practice address and phone. Check digits are validated first; invalid and unknown numbers are reported separately.
| Argument | Type | Description |
|---|---|---|
| npis* | array |
{
"type": "object",
"required": [
"npis"
],
"properties": {
"npis": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"minItems": 1
}
},
"additionalProperties": false
}Search the live NPI Registry by first/last name, organization name, specialty (taxonomy description as the registry writes it, e.g. "Family Medicine", "Dentist"), state (2 letters), city or ZIP. Needs at least one of name, organization, specialty, city or ZIP (a state alone is refused by CMS). Returns up to 50 rows and how many exist (capped at 1,200). Full lists beyond that: https://tuper.app/tools/npi-list-by-specialty/?src=mcp-npi
| Argument | Type | Description |
|---|---|---|
| city | string | |
| skip | integer | |
| limit | integer | |
| state | string | 2-letter US state code |
| entity | string | |
| last_name | string | |
| specialty | string | taxonomy description, e.g. "Pediatrics" |
| first_name | string | |
| postal_code | string | 5 digits or a prefix with * |
Offline check of up to 50 NPI numbers: 10 digits and the Luhn check digit (prefix 80840). Does not call CMS, so it cannot say whether the number is issued; use lookup_npi for that.
| Argument | Type | Description |
|---|---|---|
| npis* | array |
{
"type": "object",
"required": [
"npis"
],
"properties": {
"npis": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.
| organization_name |
| string |
{
"type": "object",
"properties": {
"city": {
"type": "string"
},
"skip": {
"type": "integer",
"default": 0,
"maximum": 1000,
"minimum": 0
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1
},
"state": {
"type": "string",
"description": "2-letter US state code"
},
"entity": {
"enum": [
"any",
"individual",
"organization"
],
"type": "string",
"default": "any"
},
"last_name": {
"type": "string"
},
"specialty": {
"type": "string",
"description": "taxonomy description, e.g. \"Pediatrics\""
},
"first_name": {
"type": "string"
},
"postal_code": {
"type": "string",
"description": "5 digits or a prefix with *"
},
"organization_name": {
"type": "string"
}
},
"additionalProperties": false
}