Give Claude Code a Phone Number with MCP
September 2, 2026 · 6 min read
Want Claude Code (or Cursor, Windsurf, VS Code) to make a call or send an SMS straight from a prompt, with no code written? One command in the terminal connects volai as an MCP server, and then you just tell your editor what you want in plain English - “call me at...”, “text...”. The editor picks the right tool out of the 31 volai exposes over MCP and calls it for you. No API docs to read, no custom telephony code.
What is MCP, and why does this work without code?
MCP (Model Context Protocol) is how an AI editor pulls in a tool from an outside service at runtime and actually uses it, instead of just talking about it. Once volai is connected, the editor sees all 31 tools (make a call, send an SMS, buy a number, create an agent, and more) and picks the right one from its description based on what you just typed. For a deeper explanation of the underlying idea, see What is an MCP server and how does it make phone calls; this article is mainly about getting Claude Code a phone number and trying it out right away.
Installing into Claude Code
One command in the terminal and you are done:
claude mcp add --transport http volai https://volai.cz/mcp \
--header "Authorization: Bearer vk_YOUR_KEY"You get the API key (vk_YOUR_KEY) from the volai portal, under API and MCP, once you have signed up. Without a valid key the server rejects the request - the editor will tell you on the first message.
Cursor and other editors
Same server, different syntax. Add this to ~/.cursor/mcp.json (or .cursor/mcp.json for a single project):
{
"mcpServers": {
"volai": {
"url": "https://volai.cz/mcp",
"headers": {
"Authorization": "Bearer vk_YOUR_KEY"
}
}
}
}Windsurf, VS Code (Copilot) and Claude Desktop connect on the same principle, just with a slightly different config file shape - the exact syntax for each one is on the MCP server page.
If the editor offers no tools right after you connect it: it is usually one of three things. Most editors only read MCP server configuration at startup, so the first save needs a restart (or at least reloading the window or project). Check the key you pasted in for a stray space at the start or end - invisible in a terminal or a JSON file, but enough to break the Authorization header. And the fastest way to confirm the server actually answers is the exact prompt a bit further down - once the editor calls a tool, the connection is working.
Your first call, in one prompt
Once it is connected, just tell your editor what you want - your own words are fine, but here is a concrete example:
- Call me right now at +420777123456 and try the role of a pizzeria order line - I don't want to set up my own number or agent just for this.
The editor recognizes this as the make_call tool with its systemPrompt parameter - a trial call with no number or agent to set up beforehand. It calls from volai's shared demo number - that is exactly what shows up on the callee's display, not your own number, and it runs on the agent's default voice, because a custom voiceId cannot be sent on a trial call. systemPrompt is capped at 1200 characters, the call is billed completely normally including the agent surcharge (no discount), and it is limited to at most 3 trial calls per 24 hours per account - a verified email is required. If you want to call from your own number through your own agent instead, just tell the editor that - it will call make_call with agentId instead of systemPrompt.
Your first SMS, in one prompt
The same idea works for text messages:
- Text +420777123456 that their appointment is confirmed for tomorrow morning.
This time the editor reaches for send_sms - under the hood it is the exact same call you would write yourself against the REST API (POST /v1/messages {"to": "+420...", "body": "..."}), just without writing any code. SMS only goes to a Czech (+420) or Slovak (+421) number, and only OUTBOUND - volai cannot receive or forward inbound SMS, and no prompt changes that.
What else can you ask for?
The same pattern works for any of the 31 tools - a few more examples:
- “Go through my last ten calls and tell me which ones actually need my attention.” - the list_calls tool.
- “Tell me my current credit balance and send a warning if it's running low.” - the get_balance tool.
- “Set up a number for the new branch and put an agent on it that takes table reservations.” - buy_number and create_agent, one after the other.
The full table of all 31 tools, with a description of when the editor uses each one, is on the MCP server page - and the Claude Code integration page has a handful of ready-made prompts for common tasks.
Is it safe to give your editor an API key?
MCP authenticates with the same API key as the REST API and shares its 60-requests-per-minute limit with it - whoever holds that key acts on your account exactly the way you would: buy a number, place a call, fire off a text, or spin up an agent, and every bit of it comes out of your credit.
Guard the key like a payment card
Keep this key out of frontend code, out of a GitHub repo, and out of any message sent in plain text. Fixing a suspected leak takes one click: delete the key in the portal, under API and MCP - it stops working right away and there is no getting it back. Spin up a new one and drop it into your editor's config.
Paid actions (send_sms, make_call, buy_number) are deliberately marked idempotentHint: false - calling them again sends a second SMS or charges a second amount, so a well-behaved editor will not retry them on its own after a timeout. And even if a prompt ever drifted toward a number you do not want called, there is one more safeguard: the do-not-call list. The add_to_dnc, list_dnc and remove_from_dnc tools guard numbers that no agent - built-in or your own - may call again. It applies to calls, not SMS, and no prompt or API call can bypass it.
Every tool also tells the editor upfront how it behaves - whether it only reads (readOnlyHint), whether it is irreversible (destructiveHint), or whether it must not be retried without thinking (no idempotent hint on paid actions). That is why a good editor asks before it deletes an agent or cancels an unused relay lease, while read-only tools (balance, call history, number list) just run without asking - there is nothing to lose.
Two things MCP deliberately can't do: releasing a purchased number (DELETE /v1/numbers/{e164}) only works through the portal or the REST API, so one misread sentence can't cost you the number printed on your flyer, and tax invoices with billing details only live in the portal, under Credit and Settings. Downloading a call recording doesn't get its own tool either, for the same reason - it's an audio file, not JSON, and downloads with the same API key straight from REST.
The full walkthrough, including each tool's safety properties (what a good client asks about before acting), is on the MCP server page; per-minute and per-SMS rates are on the pricing page.
Try volai - first 50 CZK on us
Sign up in a minute and your account already has starter credit for calls, SMS and a number.
What's next
Related articles
Send SMS from Node.js in 10 Minutes
Send an SMS from Node.js with volai's REST API: one fetch call to POST /v1/messages, idempotency, error handling, and the exact price per segment.
Make Outbound Phone Calls from an n8n Workflow
Call a customer straight from n8n: an HTTP Request node against volai's REST API, workflow data in the agent's prompt, and results delivered by webhook.
How Much Does an AI Receptionist Cost
A line-by-line breakdown of AI receptionist pricing on volai: number, minutes, agent surcharge, three volume scenarios, and what Czech competitors charge.