Give Claude a real phone line with the Wixzel Voice MCP server
At the end of this guide Claude can place a real phone call over your own SIP trunk, wait for it to finish and read you the transcript, from Claude Code or claude.ai, through the official Wixzel Voice MCP server. Setup takes about 15 minutes, most of it in your carrier's console. The MCP server itself costs nothing: a call costs what its voice engine costs, $0.0867 per connected minute on the default classic engine, about $0.26 for a three-minute call, billed per second from a prepaid balance, plus your carrier's rate for the line.
By Aqeel Shamsudheen · Published · Updated
- Takes
- About 15 minutes
- Engine
- classic
- Engine time
- $0.0867 per connected minute
What do you need before you start?
- A Wixzel Voice account with credit. The minimum top-up is $5, and there is no free trial credit.
- A SIP trunk at a carrier you already use (Twilio, Telnyx, Plivo, Vonage, Bandwidth, Exotel, Vobiz or any SIP provider) with a phone number on it. Wixzel Voice does not sell or port numbers.
- Claude Code, or claude.ai or Claude Desktop with custom connectors available on your plan.
How do you build this on Wixzel Voice, step by step?
01Add the server to Claude Code
The hosted server lives at
https://mcp.voice.wixzel.com/mcpand signs you in with OAuth, so no API key is pasted anywhere. Add it from a terminal:shellclaude mcp add --transport http wixzel-voice https://mcp.voice.wixzel.com/mcpThen type
/mcpinside Claude Code, choose thewixzel-voiceserver and pick Authenticate. Your browser opens the console, you sign in, untick any scope you do not want the client to have, and approve. Claude Code receives an API key of its own, limited to the scopes you approved.02Or add it to claude.ai or Claude Desktop
In Settings, open Connectors and add a custom connector with the same URL,
https://mcp.voice.wixzel.com/mcp. Press Connect, sign in to the console and approve the scopes. The connector gets its own key, and you can disconnect it from the AI clients page in the console at any time; the key stops working at once.Clients that launch servers locally from an
mcpServersJSON config, such as Cursor or Windsurf, run the same server from npm with an API key in the environment:shellclaude mcp add wixzel-voice -e WIXZEL_API_KEY=wv_live_... -- npx -y wixzel-voice-mcpjson{ "mcpServers": { "wixzel-voice": { "command": "npx", "args": ["-y", "wixzel-voice-mcp"], "env": { "WIXZEL_API_KEY": "wv_live_..." } } } }03Let the quickstart prompt set up your account
The server ships a
quickstartprompt, which Claude Code shows as a slash command. It takes an optional goal, such as "confirm dental appointments":Claude Code/mcp__wixzel-voice__quickstartClaude first lists what already exists (
list_sip_trunks,list_phone_numbers,list_agents,get_balance) so nothing is duplicated. Then it works in the order the server's operating guide sets:list_enginesto see what is available and what it costs,create_sip_trunkwith the carrier credentials you give it,create_phone_numberon that trunk, andcreate_agentwith a short spoken-style prompt, an opening line and a caller ID. It asks you for credentials rather than inventing them, and it stops before anything that dials.Two settings only you can change live at your carrier. Allowlist the
platform_ipthe new trunk returns, so your carrier accepts outbound calls from it, and point the carrier's inbound route at the trunk'sorigination_uri. Claude reads both values back to you, andcheck_sip_trunk_statusshows whether the trunk is reachable.04Ask for a call, and approve it
With an agent and a number in place, ask in plain words:
promptCall +14155551234 with the Support agent. Ask whether tomorrow's 10:00 delivery slot still works, and tell me what they said.Claude picks
place_call. That tool is marked as one that spends money and rings a real phone, and its description tells the model to confirm with you first, so the client asks for your approval before it runs. Eachplace_callcarries an idempotency key; a retry is safe only when Claude passes the sameidempotency_keyagain, which the tool description asks it to do.The voice agent you created holds the conversation, not Claude. Claude then polls
get_calluntil the call ends and reads you the transcript, the status andcost_micros, the cost in millionths of a dollar.05Know which tools ask before they run
Wixzel Voice marks four tools as spending money or reaching the real world:
place_calldials a number,test_call_agentrings a number and speaks one phrase,start_campaigndials every lead on a campaign, andcreate_topupstarts a payment. Tools that only read, such asget_callorlist_usage_events, are marked read-only, so a client can run them without asking.create_topupnever pays by itself: it returns a checkout link that a person has to open and complete.Scopes are the second fence. A client that asks for nothing specific is offered the standard set for agents;
billing:write, which starts a top-up, andapi_keys:write, which mints keys, are never offered by default and have to be granted deliberately. There is no admin scope.06When a call fails, ask why
Two more prompts ship with the server:
Claude Code/mcp__wixzel-voice__diagnose_call /mcp__wixzel-voice__spend_reportdiagnose_calltakes a call id, reads the record'sfailure_codeandfailure_reason, its usage events, the trunk status and recent SIP logs, and tells you whether the fix is at your carrier or in the agent. It places no calls while it works.spend_reportturns a period's usage into dollars by component and by call.
What does this build cost on Wixzel Voice?
Engine time for 3-minute calls on the classic engine at $0.0867 per connected minute: about $0.26 per call. Telephony is your own trunk at your carrier’s rate and is not included.
| Calls per month | Connected minutes | Engine cost per month |
|---|---|---|
| 20 | 60 | $5.20 |
| 100 | 300 | $26.01 |
| 500 | 1,500 | $130 |
Wixzel Voice charges nothing for the MCP server or for the tools that read and configure your account. Only live calls spend credit: the engine's per-minute price, billed per second, plus your carrier's own rate for the trunk, which Wixzel Voice does not mark up. A call that never connects costs nothing.
Prepaid, with no subscription and no free tier: add credit from $5 and usage spends it. Estimate your own mix.
Which Wixzel Voice limits apply to this build?
- Phone calls need your own SIP trunk and a number on it. Wixzel Voice does not sell, port or hold numbers.
- The approval before a paid tool is shown by the client. The server marks those tools and tells the model to confirm; a client set to approve tools automatically will not ask, so leave automatic approval off for this server.
- Five calls can be live at once per account by default. The limit is raised on request.
- A test call is a real call: it rings a real phone over your carrier and the meter runs. There is no free test mode.
- Wixzel Voice is in alpha. Behavioural changes ship behind a dated
Wixzel-Versionheader.
Frequently asked questions
- How do I let Claude make phone calls?
- Connect the Wixzel Voice MCP server:
claude mcp add --transport http wixzel-voice https://mcp.voice.wixzel.com/mcpin Claude Code, or a custom connector with the same URL in claude.ai or Claude Desktop, then sign in and approve the scopes. Claude can then create a voice agent, place a call over your own SIP trunk withplace_call, wait for it to end and read the transcript. The client asks for your approval before the call is placed. - Is Claude the voice on the call?
- Not by default. Claude sets the call up and reads the result; the conversation is held by the voice agent you created, on the engine you chose. The agent's language model can be a Claude model: name
openrouter/anthropic/claude-haiku-4.5as itsllmon the classic pipeline, which comes to $0.0925 per connected minute with the default speech stages. - Does Claude get my API key?
- Not with the hosted server. OAuth issues the client a key of its own, limited to the scopes you approved, and disconnecting it from the AI clients page in the console revokes that key at once. With the local npm server, the key you put in the environment is the one it uses.
- Which MCP clients work with it?
- Any MCP client. Over HTTP with OAuth: Claude Code, claude.ai, Claude Desktop and other remote-capable clients. Over stdio with an API key: Claude Code, Claude Desktop, Cursor, Windsurf, VS Code and anything that launches servers from a JSON config.
Where to read more
- MCP serverdocs
Hosted and local setup, scopes, the full tool list and self-hosting.
- SIP trunksdocs
The platform IP to allowlist and where inbound calls go, carrier by carrier.
- Quickstartdocs
The same four steps as HTTP requests and SDK calls.
- Creditsdocs
How the prepaid balance is reserved and spent.
About Wixzel Voice
Wixzel Voice is a voice AI API for building AI agents that place and answer real phone calls over your own SIP trunk, or talk to people in your web and mobile apps. One API key and one prepaid balance cover every voice engine, billed per second of actual usage.
More guides
Your existing Twilio number answered by an AI receptionist that books appointments into the API, built in Node.js.
Two phone agents, one speaking Hindi and one Malayalam, on Sarvam's Indian-language models, answering or placing calls over your SIP trunk.
A Flutter app where users talk to your voice agent over a WebSocket, with the API key kept on your server and no phone number involved.
A Gemini Live agent ringing a real phone over your SIP trunk from four cURL requests, and the call record with its transcript and cost.
A list of leads called by your agent over your SIP trunk, in batches sized to your concurrency limit, with every call's status and transcript read back.
