For AI phone agent builders

MCP for AI Phone Agents

You don't need to build an AI phone agent's telephony layer to build the agent. CallMCP supplies calling, transcripts, call logs, and CRM sync as MCP tools — your agent keeps the conversation logic, CallMCP handles the phone.

Connect your agentRead the docs

Inbound vs. outbound

Outbound is a direct tool call: your agent calls make_call with anagent_id and a number, and CallMCP dials it. Inbound works the other way — you attach a phone number to an agent with attach_number (or buy a new one with search_available_numbers and buy_number), and every call to that number routes to the agent automatically. You don't poll for inbound calls; you register a webhook with set_webhook and CallMCP pushes call, SMS, and lead events to it as they happen, so your agent decides what to do next instead of guessing on a schedule.

Call logs and transcripts

Once a call exists — inbound or outbound — the same read tools cover it:

Human handoff

Handoff is a call-transfer setting on the agent — nothing your agent has to invoke as a separate tool mid-conversation. update_agent_config takes transfer_enabled and transfer_phone_number — when the agent decides a caller needs a person, it transfers the live call to that number. Changing that configuration is itself an audited write: it takes an idempotency_key, and for a live production agent, an authority envelope (human_confirmed, dashboard_session, or system_policy) or queue_for_approval: true to route it through a dashboard sign-off instead of applying immediately.

Writing results back to your CRM

A call is only useful if what happened on it ends up somewhere your team looks. upsert_lead does both sides of that: pass lead with at least a name, phone, or email to create one, or pass updates — an array of { id, ...fields } objects, up to 100 per call — to update existing leads after a call closes (status, notes, address, and the rest). list_leads and get_lead read the other direction: pull a lead's current state, including its latest AI-generated score, before or after the call.

{
  "name": "upsert_lead",
  "arguments": {
    "updates": [
      { "id": "lead_88213", "status": "qualified", "notes": "Confirmed Thursday 2pm, sent directions." }
    ]
  }
}

What this looks like end to end

Call leads

Agent qualifies or follows up with a lead, then writes the outcome back with upsert_lead.

Confirm appointments

Outbound confirmation call; a no-answer or reschedule updates the lead status automatically.

Recover missed calls

Inbound event fires on a missed call; agent calls or texts back and books the next step.

Escalate to a person

Agent transfers the live call when confidence is low or the caller asks for a human.

Connect your agentRead the docsWalk through a full tool call
Connect