NEWMedicare Advantage 2027 plans are live in the API.Read the changelog

MCP server for AI agents

AI agents can call InPlan through our remote MCP server at https://api.inplan.io/mcp. It gives an agent 7 tools, from "is this provider in this plan?" to "which plans list this provider?", and every answer keeps its source type and date. Add the server with your API key and the agent can use it at once.

.mdView as MarkdownUpdated 2026-10-30

Endpoint

MCP endpoint
https://api.inplan.io/mcp

The server speaks the Model Context Protocol over Streamable HTTP. It is stateless: every JSON-RPC request is a POST to the endpoint and gets a JSON answer. It serves protocol version 2026-07-28 and the earlier versions that start with initialize (2025-11-25, 2025-06-18, 2025-03-26), so current clients connect without extra settings.

API key

Send your InPlan API key as a bearer token, the same key you use for the API: Authorization: Bearer ip_live_.... The free plan gives 500 calls a month with no credit card. Get a free key.

Without a key, an agent can still connect and list the tools. A tool call without a key returns a tool error that tells the agent where to get a free key.

Tool calls count exactly like API calls. Each call costs 1 call of your monthly quota (a batch costs 1 per accepted pair), and your plan, per-second limit and quota apply. Errors come back as tool errors with the same type values as the API, for example quota_exceeded or plan_upgrade_required. See Rate limits and quotas and Errors.

Tools

MCP tools
TOOLWHAT IT ANSWERSSAME ASPLAN
check_networkIs this provider in this plan? npi, plan_id, optional year.GET /v1/checkFree and above
check_network_batchThe same answer for up to 100 pairs in one call.POST /v1/check/batchBuilder and above
plans_for_providerEvery plan whose directory lists the provider. Filters: market, state, year; pages: limit, offset.GET /v1/providers/{npi}/plansFree and above
lookup_providerWho an NPI is: name, credential, specialties, locations, plan summary.GET /v1/providers/{npi}Free and above
get_planPlan details by plan ID.GET /v1/plans/{plan_id}Free and above
search_plan_providersProviders a Marketplace plan lists. Filters: state, specialty, zip, radius; pages: cursor.GET /v1/plans/{plan_id}/providersGrowth and above
coverageThe markets, states and insurers we hold listings for, with plan counts and dates.GET /v1/coverageFree and above

Each tool result has a short plain-text summary, then the full API answer: as JSON text, and as structuredContent for clients that read structured output. The answer has the same fields as the API endpoint, with sources and data_as_of.

How agents should read answers

listedThe plan's network directory lists the provider. The evidence names the plan year, the network tier and the source type with its date.
not_foundNo listing was found in current directory data for this provider and plan. It is not a statement that the provider is out of network.
no_provider_networkThe plan is a prescription drug plan; it has no provider network.

The tool descriptions and the server instructions tell the agent the same thing, and to ask users to confirm with the plan before care. See Answers and evidence.

Claude Code

Put your key in an environment variable, then add the server once:

terminal
claude mcp add --transport http inplan https://api.inplan.io/mcp \  --header "Authorization: Bearer $INPLAN_KEY"

Run /mcp in Claude Code to see the server and its 7 tools. Then ask, for example: "Is NPI 1184617268 in plan 29276OH0970001?"

Claude Desktop

Claude Desktop reads local servers from claude_desktop_config.json (Settings, Developer, Edit Config). The mcp-remote bridge connects it to our remote server with your key:

claude_desktop_config.json
{  "mcpServers": {    "inplan": {      "command": "npx",      "args": ["-y", "mcp-remote", "https://api.inplan.io/mcp", "--header", "Authorization:${INPLAN_AUTH}"],      "env": { "INPLAN_AUTH": "Bearer ip_live_..." }    }  }}

Restart Claude Desktop after you save the file. The bridge runs with npx, so Node.js must be installed.

Cursor

Add the server to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project). Cursor reads INPLAN_KEY from your environment:

mcp.json
{  "mcpServers": {    "inplan": {      "url": "https://api.inplan.io/mcp",      "headers": { "Authorization": "Bearer ${env:INPLAN_KEY}" }    }  }}

VS Code and other clients

VS Code asks for the key once and stores it securely with this .vscode/mcp.json:

.vscode/mcp.json
{  "servers": {    "inplan": {      "type": "http",      "url": "https://api.inplan.io/mcp",      "headers": { "Authorization": "Bearer ${input:inplan-key}" }    }  },  "inputs": [    { "type": "promptString", "id": "inplan-key", "description": "InPlan API key", "password": true }  ]}

Any client that supports remote servers over Streamable HTTP needs three things: the URL, the transport and the header.

generic settings
{  "type": "streamable-http",  "url": "https://api.inplan.io/mcp",  "headers": { "Authorization": "Bearer ip_live_..." }}

Test with curl

List the tools (no key needed):

terminal
curl https://api.inplan.io/mcp \  -H "Content-Type: application/json" \  -H "Accept: application/json, text/event-stream" \  -H "MCP-Protocol-Version: 2025-06-18" \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Call a tool with your key:

terminal
curl https://api.inplan.io/mcp \  -H "Authorization: Bearer $INPLAN_KEY" \  -H "Content-Type: application/json" \  -H "Accept: application/json, text/event-stream" \  -H "MCP-Protocol-Version: 2025-06-18" \  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"check_network",       "arguments":{"npi":"1184617268","plan_id":"29276OH0970001"}}}'
Docs / Reference / MCP serverNext: Errors