Back to Blog
Developer ResourcesOctober 3, 202610 min read

How to Give Claude Desktop or Cursor a Real Phone Number [2026]

Add the AgentCall MCP server to Claude Desktop, Cursor or Windsurf in five minutes. Claude gets a real US number that texts, answers calls and reads codes.

Short answer: to give Claude a phone number, paste one MCP server URL and an API key into Claude Desktop's config file and restart it. From that point Claude can provision a real US or Canada number, send and read texts, answer incoming calls with an AI receptionist, and read verification codes that arrive by SMS, all from the chat window. The same two lines work in Cursor, Windsurf and Claude Code. It takes about five minutes and starts on a 72-hour trial that includes one local number.

This is the exact path our first customer who found AgentCall by asking Claude for help took, so this post is written to get you from nothing to a first real call or text without leaving your AI client. The config blocks below are copied from the live MCP setup page, and every tool name is one that exists on the server today.

Why Claude Needs a Phone Number

Claude can already write, plan, browse and call APIs. What it cannot do on its own is anything that touches the phone network: it has no number of its own, so it cannot receive a text, pick up a call, or prove it owns a line when a signup form asks for one. An MCP phone server closes that gap. Once the AgentCall server is connected, these become ordinary requests you type into Claude:

  • A receptionist for a small business. Claude provisions a local number and configures it so an AI answers every call, follows your instructions, and can hand the live call to your cell when the caller asks for a person.
  • Texts your agent sends and reads. Order updates, reminders, replies to customers, or a line you text yourself to reach your own agent.
  • Verification codes. Your agent gives out the number during a signup flow you control and reads the six-digit code when it lands, without you copying it from a phone.
  • Outbound AI calls. Claude dials a number, holds the conversation from a system prompt, and brings back a transcript.
  • Memory across calls. Every AI call produces a structured report, and returning callers are recognised the next time they ring.

The first three work on the trial within its limits. Outbound calls and live verification-code extraction need Pro, which we will be explicit about below.

Get an API Key and Start the Trial

Sign up at agentcall.co/sign-up, open the API Keys page in the dashboard and create a key. It starts with ac_live_ and is shown once, so copy it somewhere safe. That key is the only credential the MCP server needs.

New accounts receive a one-time 72-hour live trial with one US/Canada local number, 300 managed inbound AI seconds (five minutes) total, and five SMS send attempts to verified destinations. Card verification is required before number allocation; the clock starts when allocation succeeds. There is no monthly reset or automatic paid subscription. Live OTP extraction and outbound calls require Pro.

Two things worth knowing before you start. The trial clock does not begin at signup; it begins when your first number is successfully allocated, which happens from inside Claude in the next section. And the card step is a verification, not a purchase: nothing is charged and nothing converts to a subscription unless you choose to upgrade.

Add the AgentCall MCP Server to Claude Desktop

Open Claude Desktop's config file. On macOS it lives at ~/Library/Application Support/Claude/claude_desktop_config.json; on Windows it is %APPDATA%\Claude\claude_desktop_config.json. Add the agentcall block inside mcpServers, replacing ac_live_xxx with your key:

{
  "mcpServers": {
    "agentcall": {
      "transport": "streamable-http",
      "url": "https://api.agentcall.co/mcp",
      "headers": {
        "Authorization": "Bearer ac_live_xxx"
      }
    }
  }
}

Restart Claude Desktop. The 62 phone tools and 5 prompts appear in your conversations, and you can confirm by asking "what phone tools do you have?" Claude should list tools like provision_number, send_sms, configure_inbound_ai and wait_for_otp.

One honest caveat: this is Claude Desktop, not Claude in the browser. The connector screen on claude.ai only accepts OAuth servers, and AgentCall authenticates with a static Bearer key, so the desktop app is the working path for Claude users today.

Cursor

Create .cursor/mcp.json in your project (or ~/.cursor/mcp.json for every project) and reload Cursor. Phone tools become available in agent mode.

{
  "mcpServers": {
    "agentcall": {
      "url": "https://api.agentcall.co/mcp",
      "headers": {
        "Authorization": "Bearer ac_live_xxx"
      }
    }
  }
}

Windsurf

Edit ~/.codeium/mcp_config.json, or go to Settings, Tools, Windsurf Settings, Add Server, View Raw Config. Windsurf uses the key serverUrl rather than url. Save and click the refresh button in Windsurf's MCP settings.

{
  "mcpServers": {
    "agentcall": {
      "serverUrl": "https://api.agentcall.co/mcp",
      "headers": {
        "Authorization": "Bearer ac_live_xxx"
      }
    }
  }
}

Claude Code

Claude Code takes the hosted server in one terminal command, no file editing:

claude mcp add agentcall \
  --transport http https://api.agentcall.co/mcp \
  --header "Authorization: Bearer ac_live_xxx"

There is a fuller walkthrough for the VS Code setup in how to use the AgentCall MCP server with Claude Code.

Prefer to run it locally?

The hosted URL needs no Node.js and no local process, which is why it is the default everywhere above. If you would rather run the server on your own machine, or your client only supports local servers (Codex is one example, covered in the Codex guide), the npm package exposes the same 62 tools:

claude mcp add agentcall --env AGENTCALL_API_KEY=ac_live_xxx -- npx -y @agentcall/mcp-server

For Claude Desktop or Cursor, the local equivalent is a command: "npx" block with args: ["-y", "@agentcall/mcp-server"] and AGENTCALL_API_KEY in env. It is also listed on Smithery, which writes the config file for you; see AgentCall on Smithery.

Your First Conversation: Provision a Number and Set Up the Receptionist

With the server connected, you do not call tools yourself. You describe what you want and Claude picks the tools. Here is a prompt that gets a working receptionist in one turn:

You: Check my AgentCall plan first. Then provision a US local number
     in the 314 area code labelled "front-desk" and configure it to answer
     calls as the front desk for Ridgeline Painting: greet the caller, take
     their name, address and what they need painted, and say someone will
     call back within two hours. Use a warm voice. Email a summary of each
     call to owner@ridgelinepainting.com.

Behind that one message, a well-behaved Claude makes three tool calls:

  1. get_plan with no arguments. It returns your plan, the trial state, what is left, and a one-sentence summary. Claude reads this first so it knows the trial covers one local number and five inbound AI minutes before it spends either.
  2. provision_number with { "country": "US", "type": "local", "areaCode": "314", "label": "front-desk" }. If no card is on file yet, this returns a payment_method_required error with a setup link. Claude should show you the link, you verify the card in your browser, and Claude retries once. On success it reports the new number, for example +13145550000, and its ID, num_abc123. The 72-hour clock starts now.
  3. configure_inbound_ai with the numberId, a systemPrompt built from your instructions, a voice such as marin, a firstMessage that names the business, and notify.emailTo set to your address.

If you would rather have the server guide Claude, the setup-agent-phone and setup-inbound-ai-receptionist prompts do the same thing with a few structured fields. The receptionist prompt also fetches the public prompt templates and fills in the one that fits, which is the easiest way to avoid a vague system prompt that makes the AI invent prices or hours.

Two optional fields are worth adding when you have them. transferTo takes your cell in E.164 form, and the AI hands the live call to you when the caller asks for a person; if you do not pick up within about 25 seconds it resumes and takes a message instead. language pins the AI to one of 31 languages, or leave the default auto and it matches the caller. Both work on the trial. For a deeper look at what makes a good receptionist prompt, read AI receptionist for small business.

Text and Call It

Call it. Dial +13145550000 from your own phone. The AI answers with your first message and follows the prompt. The trial includes 300 seconds of inbound AI answering in total, which is about five short test calls, and Claude can read the result back afterwards with list_calls, get_call_transcript and get_call_report. A few minutes after the call, get_next_call_context on that contact shows the brief the AI will carry into your next call.

Text from it. New live trials include five SMS send attempts total to verified destinations during the trial. Failed or ambiguous sends consume an attempt. Existing Free accounts keep their assigned monthly SMS allowance; read get_plan or GET /v1/account. Pro outbound SMS is $0.015/message, subject to account and destination restrictions. Verified destinations are numbers you have proven you control: open the Verification page in the dashboard, enter your cell, and type in the code it sends you (the REST equivalent is POST /v1/verified-destinations). Then ask Claude:

You: Text my cell +13145551234 from num_abc123: "Front desk is live.
     Call this number to test the receptionist."

Claude: [calls send_sms with from: "num_abc123", to: "+13145551234", body: "..."]
        Sent. Message msg_01J8XKQ is queued; I can check delivery with get_message.

Texts that arrive on the number show up in get_inbox, so the same line can collect replies.

What needs Pro. Three things are not in the trial, and it is better to know before Claude tries them:

  • Outbound calls, both plain (initiate_call) and AI-driven (initiate_ai_call). On a trial account these return plan_limit_calls with the message that the live trial includes inbound managed AI only.
  • Live verification-code extraction via wait_for_otp or the otpOnly inbox filter. Trial accounts get plan_limit_otp.
  • Texting unverified numbers, a second number, or toll-free and mobile types. Expect trial_sms_unavailable, trial_already_started or plan_limit_number_type respectively.

Pro is $19.99/month plus number rental and usage: local/mobile numbers $2/month each, toll-free $2.50/month, outbound SMS $0.015/message, standard outbound voice $0.035/min, managed AI voice $0.40/min, BYOK voice $0.10/min plus your AI provider's charges, or Premium Voice $0.59/min. AI calls round up to whole minutes per call. New-account destination/business verification can still apply after upgrading. When you are ready, ask Claude to run upgrade_to_pro; it returns a checkout link for you to open, and Claude should re-read get_plan after you finish rather than assuming the upgrade went through. Claude should never run that tool on its own just because another tool failed.

Troubleshooting

  • 401, "Invalid or missing API key". The MCP endpoint could not authenticate you. Check that the header reads exactly Bearer ac_live_... with a space after Bearer, that the key was not truncated when you pasted it, and that it has not been revoked on the API Keys page. The REST API says the same thing as Invalid or revoked API key or Invalid API key format.
  • 402, payment_method_required. The trial needs a verified card before a number is allocated. The error carries a setupUrl; open it, finish the card step, and ask Claude to try again. Saving a card does not start a subscription.
  • Trial expired or used up. get_plan reports the trial status as expired once 72 hours have passed, or exhausted when the 300 inbound seconds are gone. New inbound AI calls stop, texts return trial_sms_unavailable, and your stored configuration and results stay in the account. The number is held for at least 48 hours after expiry, and upgrading during the hold keeps it.
  • 403, trial_already_started. You asked for a second number. The trial includes one; use the number you have or upgrade.
  • no_numbers_in_area_code. Inventory for that three-digit area code is empty right now. Drop the areaCode argument and any local number in the country will do.
  • Tools do not appear after editing the config. Restart Claude Desktop fully (quit, not just close the window), reload Cursor, or press refresh in Windsurf's MCP settings. In Claude Code, claude mcp list shows whether the agentcall server is registered.
  • Claude keeps retrying a failing tool. Tell it to stop and read get_plan. Payment and plan errors are meant to be explained to you, not retried.

What Else the 62 Tools Can Do

Once the receptionist is live, the rest of the server is one request away. Among the 62 tools and 5 prompts:

  • Two-way AI SMS and relay mode. Set a number so an AI answers inbound texts for you, or point it at your own agent so a text to that number reaches the agent you already run. Threads are read with list_sms_conversations and answered with reply_to_sms_conversation.
  • Proactive texts. create_schedule makes a number text someone first, once or on a cadence (Pro).
  • Call memory. list_contacts, get_contact, get_current_memory and the briefs inbox (list_briefs, resolve_brief) give Claude a view of every caller and what is still open.
  • Voice options. update_number_voice, update_number_language, Premium Voice via set_premium_voice, and set_byok_openai_key to bill AI minutes against your own OpenAI key on Pro.
  • Webhooks and speech. create_webhook subscribes your own endpoint to call and SMS events; synthesize_speech generates audio from text with the same voices (Pro).
  • Account. get_usage for the period's cost breakdown, get_plan and upgrade_to_pro.

The full tool reference with every argument is on the MCP server page, and the FAQ covers the trial and plan questions in more depth.

Frequently Asked Questions

Can I connect AgentCall to Claude in the browser at claude.ai?

Not today. The custom connector screen on claude.ai only accepts servers that use OAuth, and the AgentCall MCP server authenticates with a static Bearer API key. Use Claude Desktop, Claude Code, Cursor, Windsurf, or any other MCP client that lets you set an Authorization header. The config is the same URL and key in every case.

Does giving Claude a phone number cost anything to try?

New accounts start on a one-time 72-hour live trial with one US or Canada local number, 300 seconds of inbound AI answering, and five text sends to destinations you have verified. You verify a card before the number is allocated, but the card is not charged and nothing converts to a subscription on its own. Outbound calls and live verification-code extraction require Pro at $19.99 a month plus usage.

Which countries can the number be in?

The United States and Canada. The trial includes one local number in either country, and you can pass a three-digit area code so the number looks local to a city. Other countries and toll-free or mobile numbers are not part of the trial; toll-free and mobile types are available on Pro.

Is the hosted MCP server the same as the npm package?

Yes. The hosted endpoint at https://api.agentcall.co/mcp and the @agentcall/mcp-server npm package expose the same 62 tools and 5 prompts. Hosted needs no Node.js and no local process, so it is the default. Run the package locally only when your client cannot reach a remote HTTP server, such as Codex, or when you want everything to run on your own machine.

What should Claude do before it spends anything?

Call get_plan. It returns the account's plan, offer, trial state, remaining allowance and a one-sentence summary, so Claude can tell you what is included before it provisions a number, sends a text or hits a plan error. If a tool returns payment_method_required or a plan_limit code, the right move is to show you the link it returned and stop, not to retry in a loop.

Ready to get started?

Give your AI agents their own phone numbers in minutes.

Start Building