Overview
MCP (Model Context Protocol) is the open standard for connecting AI assistants to external tools. Our MCP server wraps the IVR Solutions REST API so that an AI agent can operate your telephony in plain language — no glue code.
- Hosted & remote — one HTTPS endpoint. Nothing to install or run.
- Bring your own key — the agent authenticates with your existing API token; we store no credentials.
- Full API as tools — all 103 visible endpoints are exposed as callable tools, generated from the same OpenAPI specs as the REST reference and always in sync.
- Works everywhere — Claude Desktop, Claude in the API, Cursor, VS Code (Continue), and any MCP-compatible client.
Endpoints
Two MCP endpoints, matching the two API products. Authenticate each with the matching token.
Click-to-call, number masking, auto-dialer, agents, DIDs, call logs and more. Use your IVR Solutions API token.
Onboard and manage end-clients: registration, KYC, provisioning, wallet and credits. Use your partner API key.
Transport is Streamable HTTP (JSON-RPC 2.0 over HTTPS POST). A GET /health on the server returns the live tool counts.
Get your API key
The MCP server uses the same token as the REST API. To get it:
- Sign in to IVR Solutions.
- Open
Settings → API token(orIntegrations → API documentation). - Copy the token — you'll send it as a
Bearercredential below.
3 stepsQuick start
Connect in under a minute with Claude Desktop or Cursor.
1 · Add the server to your MCP config
{ "mcpServers": { "ivr": { "url": "https://mcp.ivrsolutions.in/mcp", "headers": { "Authorization": "Bearer YOUR_IVR_API_KEY" } } } }
2 · Restart the client
Claude Desktop / Cursor reads the config on launch. After restarting, the ivr tools appear in the tool list (the 🔌 / hammer icon).
3 · Ask it to do something
Type a natural request — the model picks the right tool and fills in the parameters. See Using it for examples.
https://mcp.ivrsolutions.in/mcp/partner with your partner key instead.Connect a client
The server speaks standard remote MCP, so any compliant client works. Pick yours:
Edit claude_desktop_config.json (Settings → Developer → Edit Config) and add the ivr server, then restart Claude Desktop.
{ "mcpServers": { "ivr": { "url": "https://mcp.ivrsolutions.in/mcp", "headers": { "Authorization": "Bearer YOUR_IVR_API_KEY" } } } }
Create .cursor/mcp.json in your project (or the global config via Settings → MCP). Same shape as Claude Desktop.
{ "mcpServers": { "ivr": { "url": "https://mcp.ivrsolutions.in/mcp", "headers": { "Authorization": "Bearer YOUR_IVR_API_KEY" } } } }
From the Claude API, attach the server as an mcp_servers connector. The model can then call IVR tools during the turn.
"mcp_servers": [{ "type": "url", "url": "https://mcp.ivrsolutions.in/mcp", "name": "ivr", "authorization_token": "YOUR_IVR_API_KEY" }]
Send the beta header anthropic-beta: mcp-client-2025-04-04 as required by the MCP connector.
In VS Code with the Continue extension (or any MCP-enabled extension), add the server under mcpServers in the extension config — identical JSON to Claude Desktop.
"mcpServers": [{ "name": "ivr", "url": "https://mcp.ivrsolutions.in/mcp", "requestOptions": { "headers": { "Authorization": "Bearer YOUR_IVR_API_KEY" } } }]
Any client that can POST JSON-RPC over HTTP works. Point it at the endpoint, set the bearer header, and send an Accept header that allows both JSON and SSE. See Protocol & raw calls for full request examples.
Authentication — what to send
Every request carries your API token as a Bearer header. The server validates it by forwarding to the REST API as you — it holds no keys of its own and stores nothing.
Authorization: Bearer YOUR_IVR_API_KEY
- Voice endpoint
/mcp→ your IVR Solutions API token. - Partner endpoint
/mcp/partner→ your partner API key. - A missing or malformed token returns a JSON-RPC error with HTTP
401.
You act with exactly the permissions of that token — the agent can never do more than you could via the REST API.
Using it
Once connected, just talk to your assistant. It reads each tool's description (carried over from the API docs, including the How it works / Use it for notes) and chooses the right one. Examples:
Voice / Client API
Partner API
Protocol & raw calls
The server implements MCP over Streamable HTTP. If you're building a custom client, here is the full exchange with curl. Note the Accept header must list both application/json and text/event-stream.
1 · Initialize
curl -X POST https://mcp.ivrsolutions.in/mcp \ -H "Authorization: Bearer YOUR_IVR_API_KEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize", "params":{"protocolVersion":"2025-03-26","capabilities":{}, "clientInfo":{"name":"my-app","version":"1.0"}}}'
2 · List tools
curl -X POST https://mcp.ivrsolutions.in/mcp \ -H "Authorization: Bearer YOUR_IVR_API_KEY" \ -H "Accept: application/json, text/event-stream" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
3 · Call a tool
curl -X POST https://mcp.ivrsolutions.in/mcp \ -H "Authorization: Bearer YOUR_IVR_API_KEY" \ -H "Accept: application/json, text/event-stream" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":3,"method":"tools/call", "params":{"name":"clickConnect", "arguments":{"first_phone":"+919876543210", "second_phone":"+919123456789", "did":"+911143104567"}}}'
The server forwards the call to https://api.ivrsolutions.in/api/click_connect with your token and returns the JSON response in the tool result.
103Tool catalogue
Every visible endpoint is a tool. The tool name is the operation's operationId; its input is the endpoint's parameters and body, flattened into one object (auth is injected automatically). Switch API and search:
Click to Call 4
Number Masking 3
Auto Dialer 13
Agents 8
Call Logs 9
DID 6
Voice Bots 5
Text Templates 3
Contacts 3
Webhooks 1
No tools match your search.
Local (stdio) mode
Prefer to run it yourself — for testing, air-gapped setups, or to plug directly into Claude Desktop without the hosted endpoint? The same server ships a stdio entry point.
# build once npm install && npm run build # run over stdio with your key IVR_API_KEY=your_token IVR_API=voice node dist/local.js
Then point Claude Desktop at the command:
{ "mcpServers": { "ivr": { "command": "node", "args": ["/path/to/dist/local.js"], "env": { "IVR_API_KEY": "your_token", "IVR_API": "voice" } } } }
Security & scoping
- No stored credentials. Your token lives only in the request that carries it; the server holds nothing.
- Token-scoped. The agent can only do what your token permits on the REST API — nothing more.
- The full API is exposed, including actions that spend money (buying DIDs, adding credits) or change config (agents, flows). For unattended/autonomous bots, consider a token with limited scope, and keep human-in-the-loop confirmation on in your client.
- Hide sensitive endpoints from agents by marking them
x-internal: truein the OpenAPI spec — the MCP server skips them, just like the docs. - TLS only. Remote MCP runs exclusively over HTTPS.
Troubleshooting
The tools don't show up in my client
Fully restart the client after editing its config (most read MCP config only at launch). Confirm the JSON is valid and the url has no trailing slash.
Every call returns "Token Invalid" / 401
The bearer token is wrong, expired, or you're using a voice token on /mcp/partner (or vice-versa). Re-copy it from Settings → API token.
"Not Acceptable" / 406 from a custom client
Your Accept header must include both application/json and text/event-stream.
A tool exists in the docs but not as a tool
It's likely marked x-internal (hidden on purpose). Hidden endpoints are excluded from the MCP surface.