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.
Endpoint
https://api.inplan.io/mcpThe 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
| TOOL | WHAT IT ANSWERS | SAME AS | PLAN |
|---|---|---|---|
| check_network | Is this provider in this plan? npi, plan_id, optional year. | GET /v1/check | Free and above |
| check_network_batch | The same answer for up to 100 pairs in one call. | POST /v1/check/batch | Builder and above |
| plans_for_provider | Every plan whose directory lists the provider. Filters: market, state, year; pages: limit, offset. | GET /v1/providers/{npi}/plans | Free and above |
| lookup_provider | Who an NPI is: name, credential, specialties, locations, plan summary. | GET /v1/providers/{npi} | Free and above |
| get_plan | Plan details by plan ID. | GET /v1/plans/{plan_id} | Free and above |
| search_plan_providers | Providers a Marketplace plan lists. Filters: state, specialty, zip, radius; pages: cursor. | GET /v1/plans/{plan_id}/providers | Growth and above |
| coverage | The markets, states and insurers we hold listings for, with plan counts and dates. | GET /v1/coverage | Free 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
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:
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:
{ "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:
{ "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:
{ "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.
{ "type": "streamable-http", "url": "https://api.inplan.io/mcp", "headers": { "Authorization": "Bearer ip_live_..." }}
Test with curl
List the tools (no key needed):
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:
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"}}}'