[ 00 ] // CallCloud Agent Dialer - MCP server
Give your agent a phone.
The CallCloud Agent Dialer is an MCP server that lets Claude, Cursor, or any MCP client run real outbound calls. Your agent dials a list, answering machines are screened out, and live humans are connected to a browser leg over WebRTC so a person can talk to them.
$30 per 1,000 dials · No seat · No subscription · Credits never expire
Agent session · callcloud-agent-dialer
MCP
tool call
dial {
numbers: [ ...40 leads ],
screening: "gate",
caller_id: "+1 415 555 0100"
}run_status
{ dialed: 27, machines: 9, remaining: 13,
live: 1, credits_remaining: 843 }call.connected
+1 415 555 0102 bridged to browser leg
Human already on the live leg
0ms lag[ 01 ] // Why there is no pause
The human is already on the line.
The person is on a live browser leg before anyone answers, so there is nothing to connect when a prospect picks up. The audio is simply there.
There is deliberately no option to ring a phone. Dialing a person's phone after the prospect answers makes the prospect wait through ring time, which is exactly the pause this product exists to remove.
Ring the human after pickup
Prospect answers, then waits through ring time on the other leg.
The pause is back, and so is the tell.
CallCloud Agent Dialer
Browser leg is live before the first ring. Answer bridges straight into it.
Nothing to connect, nothing to wait for.
[ 02 ] // Setup
Three steps, then talk to it.
01
Mint a key
In CallCloud open /mcp and create an Agent Dialer API key. Keys start with cak_ and are shown once.
02
Add it to your client config
Drop the server into your MCP client config. npx fetches the current version on each launch, so fixes arrive without reinstalling.
03
Tell your agent what to do
The agent calls dial, polls run_status until nothing remains, then reads run_results.
MCP client config
{
"mcpServers": {
"callcloud-agent-dialer": {
"command": "npx",
"args": ["-y", "callcloud-agent-dialer-mcp"],
"env": { "CALLCLOUD_API_KEY": "cak_your_key" }
}
}
}"Call these 40 leads, skip the voicemails, and put anyone who picks up through to me."
The agent calls dial, polls run_status until nothing remains, then reads run_results.
[ 03 ] // Screening modes
Two ways to skip the machines.
amd
DefaultThe carrier listens to the pickup audio. Costs a detection delay on every connect, including real people.
gate
No connect delayJudged on ring duration before the bridge, the same rule CallCloud's own web dialer runs on.
Gate mode treats a pickup faster than 0.5 seconds of real ringing as a machine. That value is the parallel dialer's proven production setting: voicemail answers within a few hundred milliseconds of ring start, a person never does.
Both modes fail open, so an unmeasurable call is put through, because missing a machine costs seconds and dropping a real person costs the conversation.
[ 04 ] // Tools
Over 35 tools, one API key.
Dialing and run control
Numbers
Outcomes and follow-up
Usage and analytics
Call records
get_call returns full detail including transcript, AI summary, rep notes, and a signed recording URL.
Webhooks
Web dialer data
The same key also manages CallCloud's rep-driven web dialer: its lists, contacts, campaigns, analytics, and account view. Everything except dialing, because web campaigns are started by a rep in the browser, never over the API.
[ 05 ] // Events
Register a webhook, stop polling.
Every delivery is signed with HMAC-SHA256. The answer to bridge path is handled server side and never waits on your endpoint, so nothing you build sits between a prospect answering and your rep hearing them.
call.ringing
The call is ringing.
call.connected
Fires while the call is live.
call.voicemail
Screened out as a machine and hung up on, never bridged, never recorded.
call.failed
The call did not complete.
call.completed
The call ended.
call.transcript
Transcript is ready.
run.finished
Nothing left to dial in the run.
session.paused
The session was paused.
session.resumed
The session was resumed.
rep.disconnected
With no browser leg online, screened-in humans get hung up on.
[ 06 ] // Pricing
Pay for dials. Nothing else.
CallCloud Agent Dialer
$30/ 1,000 dials
No seat, no subscription
- Buy a block of 1,000 in Settings, Plan
- Every dial placed burns one credit
- Credits do not expire
- No monthly reset
- Charged when the call is handed to the carrier
- A number that never reaches the network is never billed
- Empty balance returns an error and places no calls
- A run in flight stops at the credit that runs out
- run_status returns credits_remaining
[ 07 ] // Developer docs
Public docs, no auth required.
All three are fetchable straight from the CDN, so you can hand an agent the URL and let it read the spec itself.
OpenAPI 3.1 spec
The full machine readable API surface.
openapi.yaml
Integration guide
Request and response shapes, credential model, run lifecycle, browser leg mechanics, usage and spend.
INTEGRATION.md
Build a dialer guide
Architecture, the concurrency model, UI rules, and a pre-ship checklist.
BUILD-A-DIALER.md
[ 08 ] // FAQ
Questions, answered.
Which AI clients work?+
Any MCP client. Claude Desktop, Claude Code, and Cursor are the common ones. Point your agent at the docs URL and it can generate its own client.
Do I need the CallCloud web dialer too?+
No. The Agent Dialer is a separate product with its own pricing. The same API key also reads and manages web dialer data if you do use both.
Is there an API if I am not using MCP?+
Yes. The machine readable OpenAPI 3.1 spec is public and needs no auth.
What happens when my credits run out?+
The dial tool returns an error and places no calls. A run already dialing stops at the credit that runs out. Credits never expire, so you can buy another block whenever you want.
Can it ring my desk phone instead of the browser?+
No, by design. Ringing a phone after the prospect answers reintroduces the pause the product exists to remove.
Can I build my own dialer cockpit on it?+
Yes. There is a published guide covering architecture, the concurrency model, UI rules, and a pre-ship checklist.
[ 09 ] // Start building
Hand your agent the phone.
Mint a key, paste the config, and let your agent place its first call.
Works with any MCP client
