io.github.cyanheads/npi-providers-mcp-server
REMOTE · NPI-PROVIDERS.CASEYJHAND.COM · 2 COMPONENTS
Search NPPES providers and resolve NUCC specialty codes via MCP over STDIO or Streamable HTTP.
Available components
Last scanned (8 hours ago)
Scores higher than 93% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Health and Science
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security83
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability73
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 1775 tokens (~443/item across 4 items; 3 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
- Stability check failed: schema churn in the 30 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 0 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 3 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 5 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 26 Oct 26 0
- Stability: pass → fail ▼ security
- Tool “npi_get_provider” rewrote its description, which is the text the model reads security
- Tool “npi_lookup_taxonomy” rewrote its description, which is the text the model reads security
- Schema quality: 1426 → 1775 ▼ functional
- “npi_lookup_taxonomy” added a required parameter “mode”, so existing callers break ▼ functional
- Schema quality: unverified → 100 ▲ functional
- New resource “npi-providers-guide” functional
- Server version: 0.4.1 → 0.5.0 functional
- “npi_lookup_taxonomy” added an optional parameter “limit” cosmetic
- “npi_search_providers” added an optional parameter “use_first_name_alias” cosmetic
- “npi_lookup_taxonomy” added an optional parameter “skip” cosmetic
- “npi_lookup_taxonomy” added an optional parameter “section” cosmetic
- “npi_lookup_taxonomy” added an optional parameter “query” cosmetic
- “npi_lookup_taxonomy” added an optional parameter “code” cosmetic
- “npi_lookup_taxonomy” added an optional parameter “grouping” cosmetic
- “npi_search_providers” reworded the description of “limit” cosmetic
- “npi_get_provider” reworded the description of “npis” cosmetic
- 10 Oct 26 0
- Server version: 0.4.0 → 0.4.1 functional
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Sept 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “npi_search_providers” rewrote its description, which is the text the model reads security
- Schema quality: 413 → 475 ▼ functional
- Server version: 0.3.0 → 0.4.0 functional
- “npi_search_providers” reworded the description of “postal_code” cosmetic
- “npi_search_providers” reworded the description of “skip” cosmetic
- “npi_search_providers” reworded the description of “provider_type” cosmetic
- “npi_search_providers” reworded the description of “organization_name” cosmetic
- “npi_search_providers” reworded the description of “city” cosmetic
- 24 Sept 26 0
- Stability: fail → pass ▲ security
- The server rewrote its instructions, which are the text every model session reads security
- Tool “npi_search_providers” rewrote its description, which is the text the model reads security
- Tool “npi_get_provider” rewrote its description, which is the text the model reads security
- Schema quality: 358 → 395 ▼ functional
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- Server version: 0.1.9 → 0.2.0 functional
- “npi_get_provider” reworded the description of “npis” cosmetic
- 20 Sept 26 0
- Server version: 0.1.8 → 0.1.9 functional
- 26 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Aug 26 0
- Stability: 0.97 → fail ▼ security
- Stability: 0.97 → pass security
- Tool “npi_search_providers” rewrote its description, which is the text the model reads security
- Tool “npi_lookup_taxonomy” rewrote its description, which is the text the model reads security
- “npi_lookup_taxonomy” dropped the required parameter “mode” ▼ functional
- Schema quality: 441 → 358 ▲ functional
- MCP protocol: Implements a current MCP spec version (2026-07-28). functional
- MCP protocol version: 2025-11-25 → 2026-07-28 functional
- Server version: 0.1.7 → 0.1.8 functional
- “npi_search_providers” reworded the description of “name_search” cosmetic
- “npi_search_providers” reworded the description of “state” cosmetic
- “npi_lookup_taxonomy” dropped the optional parameter “code” cosmetic
- “npi_lookup_taxonomy” dropped the optional parameter “grouping” cosmetic
- “npi_lookup_taxonomy” dropped the optional parameter “limit” cosmetic
- “npi_lookup_taxonomy” dropped the optional parameter “query” cosmetic
- “npi_lookup_taxonomy” dropped the optional parameter “section” cosmetic
- “npi_lookup_taxonomy” dropped the optional parameter “skip” cosmetic
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://npi-providers.caseyjhand.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=caseyjhand.com | CN=WE1,O=Google Trust Services,C=US | 2 Nov 2026 | 31 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | 995a30681ab772540e934241ca1d576c |
| SANs: caseyjhand.com, *.caseyjhand.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of npi-providers.caseyjhand.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| caseyjhand.com. | present | 2371 | 13 | Verified |
| npi-providers.caseyjhand.com. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://npi-providers.caseyjhand.com/mcp | Verified | 200 | |
| http (plaintext) | http://npi-providers.caseyjhand.com/mcp | HTTPS enforced | 301 | https://npi-providers.caseyjhand.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
npi_get_provider Npi Get Provider ~328
Fetch NPPES records from up to 100 raw NPI entries per call. Deduplicate in input order, validate check digits, and look up the first 10 distinct valid NPIs; remaining valid NPIs are listed in unprocessed and are never looked up. Decodes an NPI from a claim, prescription, or another health data source into the provider's professional-practice profile: every taxonomy with its primary flag, license number and state; practice addresses with phone and fax (only LOCATION rows are kept for individual providers, so their mailing address is withheld; organizations also carry their mailing address); credential, sex, sole-proprietor flag; enumeration and last-updated dates; active/deactivated status; secondary identifiers (Medicaid, etc.); and FHIR/Direct endpoints. Each NPI must be 10 digits with a valid check digit (its last digit); every NPI failing the check digit lands in invalid and is never looked up. Reports partial success: valid NPIs with no registry record (deactivated or never enumerated) land in notFound, while NPIs whose lookup hit an upstream error (registry unavailable, timeout) land in errored — kept distinct from confirmed misses — rather than failing the whole call.
| Name | Type | Req | Description |
|---|---|---|---|
| npis | – | yes | A single 10-digit NPI, or an array of up to 100. Entries are deduplicated in order, then check digits are validated; the first 10 distinct valid NPIs are looked up and any remaining valid NPIs are li… |
| Name | Type | Req | Description |
|---|---|---|---|
| error | object | – | Present when the call failed. Absent on success. |
| errored | array | – | NPIs whose lookups failed with an upstream/transport error (service unavailable, timeout) — distinct from a confirmed miss in notFound. These are unresolved, not absent; retry them. |
| found | array | – | Decoded records for NPIs that resolved. |
| invalid | array | – | NPIs that failed the NPI check digit — not valid NPIs, usually a typo. They were never looked up, so they are neither confirmed misses nor upstream failures. |
| notFound | array | – | NPIs with a valid check digit that returned no record (deactivated or never enumerated). A confirmed absence, not a failure. |
| notice | string | – | Guidance when some NPIs failed the check digit, returned no record, or hit an upstream error. |
| totalCount | number | – | Number of provider records that resolved from the requested NPIs. |
| unprocessed | array | – | Distinct valid NPIs beyond the first 10, in input order; not looked up. Present only when the lookup limit is exceeded. |
No examples provided.
npi_lookup_taxonomy Npi Lookup Taxonomy ~390
Resolve and browse the NUCC Healthcare Provider Taxonomy — the specialty code set NPPES uses — fully offline (bundled). Mode `resolve` turns a plain-language specialty (e.g. "cardiologist", "heart doctor") into matching active taxonomy entries, excluding codes NUCC marks inactive; mode `get` returns the full entry for an exact code, including NUCC's Notes; mode `browse` walks the hierarchy (grouping → classification → specialization), optionally filtered by grouping and NUCC section. Individual includes Group codes; section does not determine NPI entity type, which comes from NPPES enumeration_type. Every entry carries its status, and an inactive code names its replacement when NUCC gives one; `get` and `browse` still return inactive codes. A resolved entry's specialization, or its classification when specialization is absent, maps directly to npi_search_providers.taxonomy_description.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | – | For get only: exact NUCC taxonomy code, e.g. "207RC0000X". |
| grouping | string | – | Filter to a top-level grouping by case-insensitive substring, e.g. "physicians". |
| limit | integer | – | Maximum entries for resolve/browse; defaults to 20. Positive integers above 50 are clamped to 50 unless NPI_CLAMP_LIMITS is disabled. |
| mode | string | yes | resolve: plain-language specialty to codes; get: exact code; browse: hierarchy. |
| query | string | – | The plain-language specialty term to resolve, e.g. "pediatric cardiologist". |
| section | string | – | For browse only: NUCC section, independent of NPI entity type. Individual includes Group codes. |
| skip | integer | – | Entries to skip before the page (0–1000). Keep the same query and limit, then raise skip by limit each call. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | – | The limit that was applied. |
| error | object | – | Present when the call failed. Absent on success. |
| matches | array | – | Matching taxonomy entries. For mode "get" this is the single requested entry; for "resolve"/"browse" it is the ranked/sorted matches up to limit. |
| notice | string | – | Guidance — how to page a truncated result with skip, or how to broaden when nothing matched. |
| shown | number | – | Number of entries returned. |
| truncated | boolean | – | True when the list was capped at `limit` (more entries may match). |
No examples provided.
npi_search_providers Npi Search Providers ~841
Search the NPPES NPI registry for individual practitioners and healthcare organizations by name, organization name, location, provider type, and specialty. Plain-language specialty terms (e.g. "cardiologist", "pediatric cardiologist") resolve through the bundled NUCC taxonomy; the top match's specialization or classification becomes taxonomy_description, and all resolved candidates are returned in metadata. Location belongs in the dedicated city/state/postal_code inputs, not inside specialty. Each provider row includes the NPI, name, primary specialty, city/state/ZIP, type, and active/deactivated status; the NPI is the input for npi_get_provider when the full record is needed. At least one search criterion is required, and the registry rejects state-only searches. When city/state/postal_code are given, only practice addresses are searched, never mailing addresses: a provider is returned only when its primary practice location or one of its other practice locations matches all of them. A provider kept on another practice location names it in matchedLocation. Name searches also match former and other names, sorted by current name; such a row names the matching name in matchedOtherName. The registry never reports a true match total, and one search reaches only its first 1200 matches: a full page names the next in nextPage, and the terminal window (skip 1000, limit 200) returns continuationPostalCodes, postal_code prefixes that continue the search.
| Name | Type | Req | Description |
|---|---|---|---|
| city | string | – | Practice-location city, case-insensitive. A trailing "*" after at least 2 characters matches every city starting with them (e.g. "SAN F*"). |
| first_name | string | – | Individual first name. Trailing wildcard "*" allowed with at least 2 leading characters. |
| last_name | string | – | Individual last name. Trailing wildcard "*" allowed with at least 2 leading characters. |
| limit | integer | – | Maximum providers to return (default 10). Values above 200 are clamped to the registry cap of 200 with a notice. |
| name_search | string | – | One person's name. The first token becomes first_name and the last token becomes last_name; use first_name/last_name when middle names or multi-part surnames matter. |
| organization_name | string | – | Organization name (implies provider_type organization; cannot be combined with first_name, last_name, or name_search). Trailing wildcard "*" allowed with at least 2 leading characters. |
| postal_code | string | – | Practice-location ZIP code: 5 digits (also matching the ZIP+4 codes that extend it), 9 digits, or a 2–9 digit prefix with one trailing "*" (e.g. "98*", "981*"). A ZIP+4 prefix (6+ digits) never match… |
| provider_type | string | – | Restrict to individuals (NPI-1) or organizations (NPI-2). Omit to search both; when set, it must match the name fields ("individual" for first_name/last_name/name_search, "organization" for organizat… |
| skip | integer | – | Results to skip for pagination (0–1000). A full page names the next in nextPage. |
| specialty | string | – | Plain-language specialty (e.g. "pediatric cardiologist"), resolved through the bundled NUCC taxonomy to exact descriptions before searching. Codes NUCC marks inactive are never resolved. The matched… |
| state | – | – | 2-letter state code (e.g. "WA"). The registry rejects state-only searches, so another criterion is required. A blank value is treated as omitted. |
| taxonomy_description | string | – | Exact NUCC taxonomy description for direct passthrough — use when the taxonomy description is already known. Mutually exclusive with specialty. |
| use_first_name_alias | boolean | – | Include first-name variants (default true upstream). False requests exact first-name matching. Applies to the resolved first_name, including name_search, only without a wildcard; other-name matching… |
| Name | Type | Req | Description |
|---|---|---|---|
| appliedFirstNameAlias | boolean | – | Effective first-name alias expansion for a resolved non-wildcard first name, including the upstream default true. Absent when no first name exists or it contains a wildcard. |
| appliedTaxonomyDescription | string | – | The exact NUCC specialization or classification used as the specialty filter. |
| cap | number | – | The limit that was applied. |
| continuationPostalCodes | array | – | Present only at the terminal window (a full page at skip 1000, limit 200): postal_code prefixes that continue the same search, each re-run from skip 0 with the same arguments — the notice gives the f… |
| error | object | – | Present when the call failed. Absent on success. |
| nextPage | object | – | The next page: re-run the same arguments with this skip and limit. Present after a full page while rows remain reachable. When skip + limit passes 1000 it is skip 1000, limit 200, whose leading rows… |
| notice | string | – | Guidance — the page-size-not-total caveat, the next page or terminal-window continuation procedure, other-name and location-filter counts, or how to broaden an empty result. |
| providers | array | – | Matching provider rows (up to limit). |
| resolvedTaxonomies | array | – | Taxonomy candidates ranked for the specialty term. The first candidate supplies appliedTaxonomyDescription; a different candidate can be selected through taxonomy_description. |
| shown | number | – | Number of providers returned. |
| truncated | boolean | – | True when the NPPES page contained at least cap providers before location constraints were applied; more may match even when shown is below cap. |
No examples provided.
How do I install the io.github.cyanheads/npi-providers-mcp-server server?
io.github.cyanheads/npi-providers-mcp-server is a hosted endpoint at https://npi-providers.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · npi-providers.caseyjhand.com
claude mcp add --transport http cyanheads-npi-providers-mcp-server 'https://npi-providers.caseyjhand.com/mcp'
What is the io.github.cyanheads/npi-providers-mcp-server server?
io.github.cyanheads/npi-providers-mcp-server is listed in the public MCP registry as io.github.cyanheads/npi-providers-mcp-server. Search NPPES providers and resolve NUCC specialty codes via MCP over STDIO or Streamable HTTP. This page covers its hosted endpoint (https://npi-providers.caseyjhand.com/mcp).
Is the io.github.cyanheads/npi-providers-mcp-server server safe to use?
io.github.cyanheads/npi-providers-mcp-server scores 86 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.cyanheads/npi-providers-mcp-server server expose?
io.github.cyanheads/npi-providers-mcp-server exposes 3 tools: npi_search_providers, npi_get_provider, npi_lookup_taxonomy. Their descriptions and schemas cost roughly 1,559 tokens of context every time the server is loaded.
Does the io.github.cyanheads/npi-providers-mcp-server server require authentication?
No. We connected to io.github.cyanheads/npi-providers-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the io.github.cyanheads/npi-providers-mcp-server server still maintained?
io.github.cyanheads/npi-providers-mcp-server is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.