The Callout MCP server lets Claude Code, OpenAI Codex and any MCP client place real outbound phone calls. Your agent passes a number and an objective; Callout's voice agent makes the call in Japanese or English and returns the outcome and full transcript.
$ claude mcp add --transport http callout https://mcp.callout.jp/mcp \ --header "Authorization: Bearer $CALLOUT_API_KEY"
first call free · pay per connected call · ja / en voice agent
From zero to your agent's first phone call in about a minute.
Sign in at app.callout.jp/developer
and create a key. Keys look like co_sk_…, are shown once, and can be revoked anytime.
Calls are charged to the key's owner.
export CALLOUT_API_KEY="co_sk_..."
One command for your client. The endpoint speaks Streamable HTTP and authenticates with Authorization: Bearer.
$ claude mcp add --transport http callout https://mcp.callout.jp/mcp \ --header "Authorization: Bearer $CALLOUT_API_KEY" $ claude mcp list callout: https://mcp.callout.jp/mcp (HTTP) - ✓ Connected
$ codex mcp add callout --url https://mcp.callout.jp/mcp \
--bearer-token-env-var CALLOUT_API_KEY
[mcp_servers.callout] url = "https://mcp.callout.jp/mcp" bearer_token_env_var = "CALLOUT_API_KEY"
{
"mcpServers": {
"callout": {
"url": "https://mcp.callout.jp/mcp",
"headers": { "Authorization": "Bearer co_sk_..." }
}
}
}
Any client that supports remote Streamable HTTP servers with custom headers. The ChatGPT app's custom connectors don't support Bearer keys yet; use Codex instead.
Plain language works. The agent picks the tools, waits for the call to finish and reads you the result.
> Call Sushi Sakura at +81 3-1234-5678 and book a table for 2 this
Saturday at 7pm under the name Sato. Counter seats if possible.
Wait for the call to finish and tell me what they said.
Tool calls and JSON results for a typical reservation (illustrative, abridged).
// 1. place the call (returns immediately) callout_create_call({ "to": "+81312345678", "objective": "Book a table for 2 this Saturday at 7pm under the name Sato. Ask for counter seats.", "language": "ja" }) → { "call_id": "9f2c…e41a", "status": "queued", "message": "Call queued." } // 2. block until the call ends (1–3 min is typical) callout_wait_for_call_completion({ "call_id": "9f2c…e41a", "timeout_seconds": 180 }) → { "status": "completed", "terminal": true, "timed_out": false, "duration_seconds": 74 } // 3. structured outcome callout_get_call_result({ "call_id": "9f2c…e41a" }) → { "outcome": "ok", "summary": "Call completed successfully (duration: 74s).", "next_recommended_action": "none" } // 4. what was actually said callout_get_transcript({ "call_id": "9f2c…e41a" }) → { "transcript": [ { "speaker": "callee", "text": "お電話ありがとうございます。鮨さくらでございます。" }, { "speaker": "agent", "text": "お忙しいところ失礼いたします。土曜日の夜7時に2名で予約をお願いしたいのですが。" }, { "speaker": "callee", "text": "はい、カウンター席でご用意できます。お名前をお願いします。" }, { "speaker": "agent", "text": "佐藤です。よろしくお願いします。" } ] }
Five tools. Every result is JSON; errors come back as {"error": {"code", "message", "retryable"}}.
to is E.164 (+81…), objective is the goal in plain language, language is "ja" or "en", context is optional structured data for the voice agent. Returns a call_id immediately; the call runs asynchronously.completed, no-answer, busy, failed, canceled) or the timeout passes. Saves your agent from writing a polling loop.outcome (ok · no_answer · busy · failed), a summary, and next_recommended_action such as retry_call.[{speaker: "agent" | "callee", text, timestamp_ms}], so your agent can extract details (times, prices, reference numbers) itself.Authorization: Bearer co_sk_…. Keys are stored hashed and revocable from the Developer page.callout_create_call returns an error instead of dialing.The same API key works on the REST endpoint. POST /dialout starts a call and returns its call_id.
$ curl -X POST https://call-for-me-prod-3055119120.us-central1.run.app/dialout \ -H "Authorization: Bearer $CALLOUT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "to_number": "+81312345678", "language": "ja", "prompt": "Book a table for 2 this Saturday at 7pm under the name Sato." }' {"call_sid":"CA…","status":"call_initiated","to_number":"+81312345678","call_id":"9f2c…e41a"}
A remote MCP server that gives AI agents a phone. Your agent calls callout_create_call with a number and an objective; Callout's voice agent places the call, holds the conversation, and returns the outcome and transcript through MCP tools.
Claude Code, OpenAI Codex CLI, and any MCP client that supports remote Streamable HTTP servers with an Authorization header.
Not yet. ChatGPT custom connectors don't support API-key (Bearer) authentication. Use Codex or another MCP client in the meantime.
From the same credits as the web app: one credit per call that reaches a conversation. Unanswered, busy and failed calls are free, and your first call is free.
Yes, up to your credit balance. Each running call holds a credit, so an agent can't overspend by starting many calls at once.
The voice agent speaks Japanese ("ja") or English ("en"). Pass numbers in E.164, e.g. +81312345678. Non-emergency calls only.
Keys are shown once and stored only as a hash. Revoke a key from the Developer page and it stops working within a minute.
Create a key, add the server, and your first call is free.