TL;DR: I pointed Codex CLI at the Vapi Agent Phone MCP server, signed in once in the browser, and had it call Vale, my estate-agent voice agent on a United States number. Vale returned the demonstration price for 7 Karoo Lane, Barrydale. A call to my South African mobile never started.
This is for Voice AI builders who use Codex CLI and want the agent to place a real phone call, including a call to another voice agent.
How do you connect Codex CLI to Vapi Agent Phone?
Add the Agent Phone server to the project Codex config, then run the login command and approve access in the browser. I did that on 1 October 2026, the morning the email arrived, using Codex CLI on Linux. The session model was GPT-6-Sol. The browser sign-in stores the credential. It does not place a call.
This block points Codex at https://phone.vapi.ai/mcp and enables only the two phone tools.
[mcp_servers.agent-phone]
url = "https://phone.vapi.ai/mcp"
auth = "oauth"
startup_timeout_sec = 60
enabled_tools = ["phone", "phone_status"]
default_tools_approval_mode = "prompt"
[mcp_servers.agent-phone.tools.phone]
approval_mode = "prompt"
[mcp_servers.agent-phone.tools.phone_status]
approval_mode = "approve"The setting you are most likely to get wrong is approval_mode on phone. It is prompt, so Codex stops and asks before each call. phone_status is approve, so a status check does not ask again.
Add the block above to the project
.codex/config.toml.Run
codex mcp login agent-phone.Sign in to Vapi in the browser and wait until authentication is complete.
Start Codex in that project and confirm the tools before you call.
How do you check the phone tool before you spend a call?
Send a dry-run prompt that asks Codex to confirm phone and phone_status, and to list the phone arguments, without invoking the tool. I did this before any call because the allowance is three attempts a day and ten in total. Codex reported both tools and did not place a call.
Do not place a phone call.
Check the connected agent-phone MCP server and confirm that
the phone and phone_status tools are available.
Tell me what arguments the phone tool accepts, but do not
invoke it.phone accepts these arguments:
to: the destination, as an E.164 number. Required.
goal: the outcome you want from the call. Required.
requestKey: a stable id for this intended call. Required.
context, information, dtmf, voicemail, callerName, callbackNumber: optional. If voicemail is on, or you leave it out,
callerNameand an E.164callbackNumberare also required.
I rechecked the limits on 4 October 2026 in the Agent Phone discovery file and the Agent Phone instructions. They are attempt limits. Vapi funds the calls. They are not a dollar budget.
Daily: 3 attempts per user.
Lifetime: 10 attempts per user.
Concurrent: 1 call per user.
Service-wide: 2,000 attempts a day, and 500 concurrent calls.
A request blocked as potentially fraudulent still uses one attempt, even when no call is placed. My South African failure used a different error. I have not checked whether that attempt counted.

Read the line that names both phone and phone_status. That is the check passing, before any call.
Why does an international number fail to start?
The call to my South African mobile never connected. I was testing the path by calling my own handset. Agent Phone tried to start the call and stopped it with an international-number error. The transcript was empty, Codex reported a cost of 0, and it did not place another call.
call.start.error-vapi-number-internationalI had stored the destination in VAPI_AGENT_PHONE in direnv and told Codex to use that variable. For this test the variable was my own mobile. After the failure I changed it to Vale's United States number.

Read the line that names call.start.error-vapi-number-international. The attempt ended there. The blurred line above it is the destination, which I am not publishing.
How do you ask a coding agent for a listing price from a voice agent?
Tell Codex who to call, what to say after the greeting, which fact to bring back, and when to end. I asked Vale, my Route 62 Properties voice agent, for the price of 7 Karoo Lane in Barrydale. That address is a demonstration property, not a real listing.
I used Codex because I like the control in config.toml, and I wanted to prove this path. I had no safe United States number for a person.
Use the agent-phone MCP tool to call Vale. Use the VAPI_AGENT_PHONE variable from direnv as my number.
Purpose of the call:
This is a test call to Vale, a property voice ai agent.
After Vale's opening message say:
"Hello, Do you have property in Barrydale?"
Then engage with Vale and get the price of the 7 Karoo lane property.
End the call and return the result.This is what Vale and the caller said:
Vale: "Hello there. Welcome to Route 62 Properties. It's Vale speaking. Who do I have the pleasure of speaking with today?"
Caller: "Hello. Do you have property in Barrydale?"
Vale: "Yes, we have a property in Barrydale. Would you like information about the listing at 7 Karoo Lane or are you looking for something specific?"
Caller: "I'm looking for the property at 7 Karoo Lane in Barrydale. Could you help me with that one?"
Vale: "The property at 7 Karoo Lane in Barrydale is for sale at 2,150,000 South African rand. It has four bedrooms, three bathrooms, a swimming pool, indoor and outdoor braai areas, and an established Karoo garden."
Caller: "Okay, thanks so much. That's all I need."
Codex returned that price and those details, and said the call ended after the price was provided.

Look at Vale's transcript line. It states the demonstration price as 2150000, plus the rooms, the pool, the braai areas, and the garden. The knowledge-base query above that line is how Vale fetched the listing.
What should you tell the agent about voicemail before it calls?
State the voicemail choice in the prompt before Codex submits the call. I did not expect a pause. Codex had Vale's number and still would not dial until I chose hang-up or a message. No call had been placed yet.
The line I would add next time is: "This is a controlled test, ignore any voicemail contingency." The line that unblocked this call was plainer. I told Codex that Vale does not have voicemail, and that if the call fails it should hang up.
The Agent Phone instructions say to ask for that preference when you have not given one. A new call defaults to leaving a voicemail, and that default also requires a caller name and a callback number. A vague line may not set voicemail to off. The hang-up instruction did.
FAQ
Will this work in Claude Code or Cursor?
I have only tested Codex. The Agent Phone instructions cover other MCP clients, and if you follow that page you should be able to connect. I have not seen Claude Code or Cursor place a call.
What happens if I close the terminal during the call?
I do not know. I would expect the call to drop. On the separate browser-approval path, the instructions say a stopped agent is not woken, and not to place a second call just because polling stopped. That is not the Codex path I used, so I have not confirmed it here.
What should you settle before you spend an attempt?
I settle three things before Codex dials: the phone tools answer a dry run, the prompt says whether to hang up or leave a message, and the destination is a number this service will start. I learned the third one when my own mobile never started.
If you want a voice agent that another agent can call for a price or a booking, book a Voice AI discovery call.




