Skip to content
Guide

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 · 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?

  1. 01Add the server to Claude Code

    The hosted server lives at https://mcp.voice.wixzel.com/mcp and signs you in with OAuth, so no API key is pasted anywhere. Add it from a terminal:

    shell
    claude mcp add --transport http wixzel-voice https://mcp.voice.wixzel.com/mcp

    Then type /mcp inside Claude Code, choose the wixzel-voice server 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.

  2. 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 mcpServers JSON config, such as Cursor or Windsurf, run the same server from npm with an API key in the environment:

    shell
    claude mcp add wixzel-voice -e WIXZEL_API_KEY=wv_live_... -- npx -y wixzel-voice-mcp
    json
    {
      "mcpServers": {
        "wixzel-voice": {
          "command": "npx",
          "args": ["-y", "wixzel-voice-mcp"],
          "env": { "WIXZEL_API_KEY": "wv_live_..." }
        }
      }
    }
  3. 03Let the quickstart prompt set up your account

    The server ships a quickstart prompt, which Claude Code shows as a slash command. It takes an optional goal, such as "confirm dental appointments":

    Claude Code
    /mcp__wixzel-voice__quickstart

    Claude 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_engines to see what is available and what it costs, create_sip_trunk with the carrier credentials you give it, create_phone_number on that trunk, and create_agent with 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_ip the new trunk returns, so your carrier accepts outbound calls from it, and point the carrier's inbound route at the trunk's origination_uri. Claude reads both values back to you, and check_sip_trunk_status shows whether the trunk is reachable.

  4. 04Ask for a call, and approve it

    With an agent and a number in place, ask in plain words:

    prompt
    Call +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. Each place_call carries an idempotency key; a retry is safe only when Claude passes the same idempotency_key again, which the tool description asks it to do.

    The voice agent you created holds the conversation, not Claude. Claude then polls get_call until the call ends and reads you the transcript, the status and cost_micros, the cost in millionths of a dollar.

  5. 05Know which tools ask before they run

    Wixzel Voice marks four tools as spending money or reaching the real world: place_call dials a number, test_call_agent rings a number and speaks one phrase, start_campaign dials every lead on a campaign, and create_topup starts a payment. Tools that only read, such as get_call or list_usage_events, are marked read-only, so a client can run them without asking.

    create_topup never 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, and api_keys:write, which mints keys, are never offered by default and have to be granted deliberately. There is no admin scope.

  6. 06When a call fails, ask why

    Two more prompts ship with the server:

    Claude Code
    /mcp__wixzel-voice__diagnose_call
    /mcp__wixzel-voice__spend_report

    diagnose_call takes a call id, reads the record's failure_code and failure_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_report turns 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.

Monthly engine cost for this guide’s build
Calls per monthConnected minutesEngine cost per month
2060$5.20
100300$26.01
5001,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-Version header.

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/mcp in 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 with place_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.5 as its llm on 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.

APIs for agentic telephony

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.