Skip to main content
Glama
cliwant

mcp-sam-gov

nppes_lookup_provider

Read-only

Look up US healthcare providers by NPI or search by name, organization, taxonomy, city, or ZIP code. Get validated provider data including active status, addresses, and taxonomies from NPPES.

Instructions

Keyless CMS/HHS NPPES NPI Registry — every US healthcare provider (NPI-1 individual + NPI-2 organization). EXACT-NPI mode (when number supplied): NPI is CMS-Luhn-validated — typo'd NPI is invalid_input, NEVER a fake 'does not exist'; wire carries number+version ALONE — co-supplied filters are DROPPED from wire and checked CLIENT-SIDE (filterMatch:{field:bool} + filtersDropped) because NPPES AND-combines number+filters and a mismatch would falsely zero a real active provider. SEARCH mode: required-one of {first_name, last_name, organization_name, taxonomy_description, city, postal_code} (state + enumeration_type are REFINERS ONLY — rejected alone); trailing '*' wildcard needs ≥2 leading literal chars. Returns EXACT-mode { found, provider:{number, enumerationType, active, basic, taxonomies, addresses, practiceLocations, identifiers, otherNames, endpoints, createdEpoch, lastUpdatedEpoch}, filterMatch? } OR SEARCH { providers:[…] } + honest _meta. HONESTY: active = basic.status==='A'; epochs are ms numeric STRINGS → number|null; addresses[] and practiceLocations[] kept SEPARATE (a provider may appear in practiceLocations ONLY); NPPES exposes NO match total — full page → totalAvailable is a LOWER BOUND (totalIsLowerBound) + reach cap (limit ≤ 200, skip ≤ 1,000). Genuine {result_count:0} → honest found:false; {Errors:[…]} 200 body THROWS; 4xx/5xx/timeout THROW; count mismatch → schema_drift. ★NOT a fitness/exclusion/licensure/sanctions determination — cross-check SAM + OFAC; NPI-1 records may surface personal/home addresses + phone/fax verbatim.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cityNoAddress city (a required-one criterion). e.g. 'Baltimore'.
skipNo0-based pagination offset, 0..1000 (default 0). ★POLICY cap: this vetting tool reaches at most the first ~1,200 matches/query (a deliberate targeted-lookup boundary — NPPES itself no longer enforces a skip ceiling); skip > 1000 ⇒ invalid_input. Search mode only.
limitNoProviders per page, 1..200, default 10. NPPES silently clamps >200; this tool rejects it loudly. Search mode only.
stateNoUS state/territory 2-letter USPS code — a REFINER only (never sufficient alone ⇒ invalid_input; NPPES rejects 'state' as the sole criterion). e.g. 'MD'.
numberNoExact NPI — 10 digits (^\d{10}$). Triggers EXACT-NPI mode: the wire query carries number (+version) ALONE (any co-supplied filter is DROPPED from the wire and checked client-side, disclosed in data.filterMatch — NPPES AND-combines a number with filters, so a mismatched filter would falsely zero a real active provider). Also client-side CMS-Luhn-validated (Luhn over 80840+first-9): a typo'd NPI ⇒ invalid_input, NEVER a fake 'does not exist'. e.g. '1104130236'.
last_nameNoIndividual provider last name (a required-one criterion). Trailing '*' wildcard: ≥2 leading chars. e.g. 'Smith'.
first_nameNoIndividual provider first name (a required-one criterion). A trailing '*' wildcard needs ≥2 leading literal chars. e.g. 'John'.
postal_codeNoAddress postal/ZIP code (a required-one criterion; a prefix like '212' is allowed). e.g. '21218'.
enumeration_typeNoREFINER only (NPI-1 = individual, NPI-2 = organization). Never sufficient alone (⇒ invalid_input) — must accompany a required criterion.
organization_nameNoOrganization (NPI-2) name (a required-one criterion). Trailing '*' wildcard: ≥2 leading chars. e.g. 'Mayo Clinic'.
taxonomy_descriptionNoProvider taxonomy/specialty description (a required-one criterion). e.g. 'Internal Medicine'.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.12.0

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations supply only readOnlyHint and openWorldHint; the description adds far richer behavioral detail: CMS-Luhn validation turning typos into invalid_input rather than a fake 'does not exist', co-supplied filters dropped from the wire and checked client-side (filterMatch + filtersDropped), error contract ({Errors:[...]} 200 body THROWS, 4xx/5xx/timeout THROW, count mismatch → schema_drift), and honesty guarantees (active = basic.status==='A', ms-string epochs, totalAvailable as a lower bound). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but nearly every sentence carries a distinct behavioral fact and it is organized with scannable CAPS section markers (EXACT-NPI, SEARCH, HONESTY) plus a ★ warning. Because there is no output schema, the return-shape enumeration earns its place. Minor criticism: it reads as a dense wall of text; line breaks or bullets would improve an agent's ability to parse it under time pressure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter, two-mode tool with no output schema and minimal annotations, the description is exceptionally complete: it covers purpose, mode switching, required vs refiner criteria, wildcard rules, pagination bounds, return shapes for both modes, error semantics, data honesty guarantees, and a privacy warning about NPI-1 personal addresses. The only absence is concrete rate-limit or timeout values, which is minor for a keyless read-only registry lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, yet the description supplies the cross-parameter semantics the schema cannot: the number parameter's mode-triggering behavior, the required-one vs refiner-only distinction, the trailing-'*' wildcard rule requiring ≥2 leading literal chars, and the hard caps (limit ≤ 200 with NPPES silent clamping, skip ≤ 1,000 with skip > 1000 ⇒ invalid_input). This interaction-level meaning materially exceeds per-field documentation and is essential for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource statement — 'Keyless CMS/HHS NPPES NPI Registry — every US healthcare provider (NPI-1 individual + NPI-2 organization)' — and immediately frames its scope against comparable sibling tools (provider registry lookup, not SAM entity lookup, not CMS revoked-provider screening). The two-mode design (EXACT-NPI vs SEARCH) is given distinct trigger conditions, making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit mode-selection rules ('EXACT-NPI mode (when `number` supplied)' vs 'SEARCH mode: required-one of {first_name, last_name, organization_name, taxonomy_description, city, postal_code}'), refiner-only constraints for state/enumeration_type, and pagination caps. It also states a when-not: '★NOT a fitness/exclusion/licensure/sanctions determination — cross-check SAM + OFAC.' The only gap is that alternatives are named by data source rather than concrete sibling tool names, leaving the agent to infer which sibling maps to SAM/OFAC.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools