server — Claude Code MCP server: one contract for telephony
A single MCP server exposing 14 tools for calls, SMS, recordings and numbers. Swap the backend, keep your agent code.
claude mcp add --env CALLMCP_CONFIG=<CALLMCP_CONFIG> --env CALLMCP_DEFAULT_DRIVER=<CALLMCP_DEFAULT_DRIVER> --transport stdio callmcp-server -- npx -y @callmcp/serverWhat server does
CallMCP defines one tool contract: 14 tools with matching schemas and matching error shapes. Hosted backend, local backend, or your own key — the set of tools shifts, their shape does not. Driver quirks go into a namespaced options.<driver_id> object, so there is no make_call_twilio. A tool is either present for your driver and works per spec, or it is missing from tools/list.
Start it with npx -y @callmcp/server. Run npx -y @callmcp/server doctor before wiring up a live provider, and npx -y @callmcp/server --sandbox for a safe walkthrough. With no driver configured the server fails closed, and the mock driver only appears under explicit sandbox settings. Paste-ready configs for Claude Desktop and Claude sit in examples/.
Outbound make_call and send_sms need a valid approval_id or an allowlist match, and that check lives in the server core — no driver can skip it. Approval normally runs through MCP elicitation; clients without it get a single-use link instead. Number provisioning (search_numbers, buy_number, configure_number) is not gated on a human and can settle cost through x402 when a driver wants prepayment.
What it helps with
- place a call from an agent with approval before dialing
- send SMS without glue code per provider
- buy and configure a number inside the agent session
- stream a call transcript as it happens
- switch call providers without rewriting agent code
Example prompts for the agent
- Search my account for an available number and show what it costs
- Call
+1...and read out the meeting reminder — ask for approval first - Send the access code by SMS to a number on the allowlist
How to install server
Platform CLI
claude mcp add --env CALLMCP_CONFIG=<CALLMCP_CONFIG> --env CALLMCP_DEFAULT_DRIVER=<CALLMCP_DEFAULT_DRIVER> --transport stdio callmcp-server -- npx -y @callmcp/serverReplace <…> with your own values
Platform CLI
codex mcp add callmcp-server --env CALLMCP_CONFIG=<CALLMCP_CONFIG> --env CALLMCP_DEFAULT_DRIVER=<CALLMCP_DEFAULT_DRIVER> -- npx -y @callmcp/serverReplace <…> with your own values
Config file
{
"mcpServers": {
"callmcp-server": {
"command": "npx",
"args": [
"-y",
"@callmcp/server"
],
"env": {
"CALLMCP_CONFIG": "<CALLMCP_CONFIG>",
"CALLMCP_DEFAULT_DRIVER": "<CALLMCP_DEFAULT_DRIVER>"
}
}
}
}Replace <…> with your own values
Config file
{
"servers": {
"callmcp-server": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@callmcp/server"
],
"env": {
"CALLMCP_CONFIG": "<CALLMCP_CONFIG>",
"CALLMCP_DEFAULT_DRIVER": "<CALLMCP_DEFAULT_DRIVER>"
}
}
}
}Replace <…> with your own values
Platform CLI
gemini mcp add -e CALLMCP_CONFIG=<CALLMCP_CONFIG> -e CALLMCP_DEFAULT_DRIVER=<CALLMCP_DEFAULT_DRIVER> callmcp-server npx -y @callmcp/serverReplace <…> with your own values
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about server
How do I install server in Claude Code?
Quick path: claude mcp add server -- npx -y @callmcp/server. With config and driver: `claude mcp add --env CALLMCP_CONFIG=<CALLMCP_CONFIG> --env CALLMCP_DEFAULT_DRIVER=<CALLMCP_DEFAULT_DRIVER> --transport stdio callmcp-server -- npx -y @callmcp/server`.
What does server do?
It hands your agent 14 tools covering calls, SMS, recordings, transcripts and phone numbers. The same contract drives a hosted, local or BYOK backend.
Does an outbound call need human approval?
Yes. make_call and send_sms require an approval_id or an allowlist match, enforced in the server core rather than in driver code.