Medicare Advantage, Part D, Medicaid
is_provider_in_plan
Is Provider In Plan·v0.2.0·L2·read-only·MCP + REST·admitted 2026-11-02
Inputs
52 required
Sources
1
Known limits
2
Real answer
1.46scomplete
What it answers
- 1Every Medicare Advantage plan whose published directory lists an NPI for a plan year (2026 or 2027): contract, CMS plan id, the source of the listing (the payer's API, the printed directory, a name match with its grade, or the Plan Finder export), the location as listed, and the file and page it came from.
- 2Narrow by state or contract.
- 3Use cases: 'Which MA plans list NPI 1275507170 for 2027?'; 'Is Dr X in Humana's Florida network?'.
- 4A listing is evidence the directory names the NPI; an absence is 'not listed in the published directory' for covered contracts only (an uncovered contract says nothing).
- 5Name-matched rows are flagged by grade.
- 6The publish is pinned by dataset_id.
- 7SOURCE: medicare_bronze.ma_directory_plan_npi_site_v1 (every row names its url, page and raw_sha256).
Inputs (5)
| Name | Type | Required | Default | Accepts |
|---|---|---|---|---|
npi | string | required | 10-digit NPI. | |
plan_year | integer | required | 2026 or 2027. 2026 | 2027 | |
contract_id | any | optional | null | Narrow to one contract (H5938); optional. |
limit | any | optional | null | Plans to return (default 50, max 500). |
state | any | optional | null | 2-letter state of the listed location; optional. |
Call it
# MCP (https://mcp.vladahealth.com/mcp): the tool by name is_provider_in_plan(npi="1275507170", plan_year=2027, limit=10)
curl -X POST https://api.vladahealth.com/v1/tools/is_provider_in_plan \
-H "Authorization: Bearer $VLADA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"npi":"1275507170","plan_year":2027,"limit":10}'
# the schema, no key
curl https://api.vladahealth.com/v1/tools/is_provider_in_plan/schemaA real answer
customer seat, 2026-11-09·over REST·1.46s·status
complete·complete·verbatim{
"value": {
"found": false,
"not_found_reason": "query_failed",
"query": {
"npi": "1275507170",
"plan_year": 2027,
"limit": 10
},
"dataset_id": "7bceef45cc9e5910e64caa428a1f3e40869f91d149c4e19f08cc55f5e468ba7c",
"query_ids": []
},
"unit": "plan_network",
"vintage": null,
"source": {
"dataset": "MA plan networks, 2026 and 2027 (Data Tracker): plan year x CMS plan x NPI x listed location",
"publisher": "vlada",
"catalog_updated_at": "2026-11-02"
},
"caveats": [],
"response_hash": "bbb9d16f085e455ad584bd4b36ff0a4f2b68ed4911a836d98dc01990de84321e",
"semantic_version": 1,
"tool_version": "is_provider_in_plan@0.2.0",
"explanation": null,
"status": "complete",
"audience": "customer",
"answer": {
"value_ref": "value",
"unit": "plan_network",
"scope": {
"tool": "is_provider_in_plan",
"filters": {
"npi": "1275507170",
"plan_year": 2027,
"limit": 10
}
}
},
"method": "Computed over the filters shown in this answer's scope, from the sources listed in its evidence. Nothing outside those filters was included.",
"evidence": {
"sources": [
{
"dataset": "MA plan networks, 2026 and 2027 (Data Tracker): plan year x CMS plan x NPI x listed location",
"publisher": "vlada",
"catalog_updated_at": "2026-11-02"
}
],
"response_hash": "bbb9d16f085e455ad584bd4b36ff0a4f2b68ed4911a836d98dc01990de84321e"
},
"freshness": {
"state": "unknown",
"why": "This tool does not report an edition for its answer, and the door could not derive one from what the answer reads. Treat the result as current to no stated date."
}
}What comes back
| Field | Holds |
|---|---|
status | complete · partial · refused · failed · queued |
value | the shape below |
source · caveats · invariants_applied · response_hash | the public file and vintage; what to know before citing; the rules honoured; replayable |
refusal | code (15), message, recover_with |
{
"$defs": {
"Quality": {
"description": "Row-level quality signal. All flags precomputed at build time\n(stored on the gold mart) and passed through here.",
"properties": {
"is_outlier": {
"default": false,
"title": "Is Outlier",
"type": "boolean"
},
"is_ghost_candidate": {
"default": false,
"title": "Is Ghost Candidate",
"type": "boolean"
},
"n_similar_rates": {
"default": 0,
"title": "N Similar Rates",
"type": "integer"
},
"confidence": {
"default": 1,
"title": "Confidence",
"type": "number"
}
},
"title": "Quality",
"type": "object"
},
"Source": {
"description": "Cell-level provenance. Every served value traces back here.\n\n`snapshot_id` is the Iceberg snapshot the tool read from. Two calls\nat the same snapshot MUST produce byte-identical responses —\nthat's the content-addressed caching guarantee.",
"properties": {
"table": {
"title": "Table",
"type": "string"
},
"rate_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rate Id"
},
"source_files": {
"items": {
"type": "string"
},
"title": "Source Files",
"type": "array"
},
"snapshot_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Snapshot Id"
}
},
"required": [
"table"
],
"title": "Source",
"type": "object"
}
},
"properties": {
"value": {
"default": null,
"title": "Value"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Unit"
},
"vintage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Vintage"
},
"source": {
"$ref": "#/$defs/Source"
},
"methodology": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Methodology"
},
"quality": {
"$ref": "#/$defs/Quality"
},
"invariants_applied": {
"items": {
"type": "string"
},
"title": "Invariants Applied",
"type": "array"
},
"caveats": {
"items": {
"type": "string"
},
"title": "Caveats",
"type": "array"
},
"response_hash": {
"default": "",
"title": "Response Hash",
"type": "string"
},
"semantic_version": {
"default": 1,
"title": "Semantic Version",
"type": "integer"
},
"tool_version": {
"default": "unknown",
"title": "Tool Version",
"type": "string"
},
"explanation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Explanation"
},
"status": {
"default": "complete",
"title": "Status",
"type": "string"
},
"refusal": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Refusal"
},
"failure": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Failure"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"freshness_state": {
"default": "unknown",
"title": "Freshness State",
"type": "string"
}
},
"title": "ProviderInPlanResponse",
"type": "object"
}Sources
| Kind | Name |
|---|---|
| source | medicare_bronze.ma_directory_plan_npi_site_v1 |
| table | medicare_bronze.ma_directory_plan_npi_site_v1 |
Known limits (2)
- 1An NPI absent from every directory is 'not listed' only for the covered contracts (99.1% of 2026 members, 96.1% of 2027 from 2027 sources, stage 21); the open-gap contracts say nothing.
- 2A plan listed through a 2026 directory carried back to 2027 (plan_key_basis *_2026_plan_via_crosswalk) is labelled.
| Admitted with a known defect |
|---|
| "Not listed" is a claim about the covered contracts only (99.1% / 96.1% of members); name-only listings (grade C/D, about 11.3M rows) carry no NPI and cannot answer for the provider they name. |
This page as markdown: /docs-md/tools/is_provider_in_plan.md · every page in one file: /llms-full.txt