MCP Server

AgentCall MCP Server

Give Claude Desktop, Cursor, Windsurf, VS Code, Hermes, OpenClaw, Codex, and any other MCP-compatible AI agent direct access to phone numbers, SMS, voice calls, inbound AI virtual agents with live pre-call context, auditable cross-call memory, and automatic OTP extraction. 43 tools and 4 prompts, one install command. Same hosted URL for every client.

Quick Install

1. Get your API key

Sign up at agentcall.co/sign-up and grab your API key from the dashboard. It looks like ac_live_xxxxxxxx

2. Add to your AI tool

Pick your client below. Same MCP URL works everywhere. Paste it, add your API key as the auth header, and you're live.

MCP Server URL
https://api.agentcall.co/mcp

Same URL for every client below. Auth via Authorization: Bearer ac_live_... header.

1

Open Claude Desktop settings

~/Library/Application Support/Claude/claude_desktop_config.json (Mac) — or %APPDATA%\Claude\claude_desktop_config.json (Windows)
2

Paste this config

{
  "mcpServers": {
    "agentcall": {
      "transport": "streamable-http",
      "url": "https://api.agentcall.co/mcp",
      "headers": {
        "Authorization": "Bearer ac_live_xxx"
      }
    }
  }
}
3

Connect

Restart Claude Desktop. The 43 phone tools and 4 prompts (numbers, SMS, voice, inbound AI, auditable call memory, webhooks) will appear in your conversations.
Prefer to run it locally? (Node.js 18+)

Run the MCP server on your machine instead of using the hosted endpoint. Useful for air-gapped setups or local development.

Claude Code (one command)
claude mcp add agentcall --env AGENTCALL_API_KEY=ac_live_xxx -- npx -y @agentcall/mcp-server
Claude Desktop / Cursor config
{
  "mcpServers": {
    "agentcall": {
      "command": "npx",
      "args": ["-y", "@agentcall/mcp-server"],
      "env": {
        "AGENTCALL_API_KEY": "ac_live_xxx"
      }
    }
  }
}

3. Start using it

Once connected, your AI agent can provision phone numbers, send SMS, make calls, and extract OTP codes by simply asking. Try:

“Provision a US local number for my signup agent”
“Send an SMS from my number to +14155551234”
“Wait for an OTP code on my provisioned number”

Running Hermes? Give your agent a phone number.

The hosted MCP works out of the box with the Hermes agent platform. Connect it once, then ask Hermes through Telegram (or whichever messaging platform you use) to provision a number, configure a virtual agent persona, and wire live context from your inbox. Full walkthrough at the Hermes integration guide.

Using OpenClaw?

OpenClaw agents use environment variables instead of MCP config. See the OpenClaw integration guide for the two-line setup.

Install via Smithery

AgentCall is published on Smithery, the MCP server marketplace. One command installs the server into Claude Desktop, Cursor, Windsurf, or any MCP client Smithery supports — no manual config editing.

npx -y @smithery/cli install @agentcall/mcp-server --client claude

Replace --client claude with cursor, windsurf, or any supported client. Smithery prompts you for your AGENTCALL_API_KEY on first run and writes the config file for you.

Tool Reference (43 tools, 4 prompts)

Phone Numbers

provision_numberProvision a new phone numbertype (local/tollfree/mobile), country?, label?
list_numbersList all provisioned numberslimit?, country?, type?
get_numberGet details of a specific numbernumberId
update_number_labelRename a phone number's human-readable label (or pass null to clear)numberId, label
update_number_voiceChange the inbound AI voice on an existing virtual agent without resetting the rest of the config (systemPrompt, contextWebhook, notify, etc. are preserved)numberId, voice
release_numberRelease a phone numbernumberId
configure_inbound_aiConfigure inbound AI voice on a supported number so incoming calls are answered autonomously. Optionally wire a contextWebhook URL so the AI fetches live context (today's brief, current priorities) on every call.numberId, systemPrompt, voice?, firstMessage?, maxDurationSecs?, record?, notify?, contextWebhook?
disable_inbound_aiDisable inbound AI on a number (clears inbound config)numberId

SMS

send_smsSend an SMS messagefrom, to, body
get_inboxGet inbound messages for a numbernumberId, limit?, otpOnly?
get_messageGet a specific messagemessageId
wait_for_otpWait for an OTP code to arrivenumberId, timeout?

Voice Calls

initiate_callStart an outbound phone callfrom, to, record?
list_callsList call historylimit?
get_callGet details of a specific callcallId
hangup_callTerminate an active callcallId
initiate_ai_callStart an AI-powered voice call (Pro plan only)from, to, systemPrompt, voice?, firstMessage?, maxDurationSecs?, record?
get_call_transcriptGet transcript of a completed AI callcallId

Auditable Call Memory (Read)

list_contactsList every contact your numbers have talked tolimit?, search?
get_contactFull contact record including memory entries and recent callscontactId
get_contact_by_phoneLook up a contact by E.164 phone numberphone
get_next_call_contextThe one-paragraph brief loaded into the AI on the next inbound callcontactId
get_current_memoryCurrent memory entries (facts, preferences, commitments, decisions) for a contactcontactId
get_memoryFetch a single memory entry by IDmemoryId
get_memory_timelineFull edit history for a memory entry (extractor writes plus owner edits)memoryId
list_memory_candidatesPending extractor candidates waiting for owner approvalcontactId?, limit?
list_call_reportsList recent structured Call Reports across all your numberslimit?, contactId?, numberId?
get_call_reportStructured Call Report for a single call (summary, intent, urgency, entities, facts, decisions, commitments, tasks, preferences, unresolved, risks, nextAction, nextCallContext, ownerBrief)callId

Auditable Call Memory (Write)

update_contactUpdate displayName, tags, ownerNotes, or verified on a contactcontactId, displayName?, tags?, ownerNotes?, verified?
purge_contactDelete a contact (cascades to memory entries, candidates, briefs)contactId
update_memoryEdit a memory entry's text or expiresAt; prior version is kept in the timelinememoryId, text?, expiresAt?
delete_memoryDelete a memory entry (timeline rows are retained)memoryId
approve_memory_candidatePromote an extractor candidate into a permanent memory entrycandidateId, text?
reject_memory_candidateDrop a candidate so it is not re-suggested from the same source callcandidateId
list_briefsOwner-brief inbox; surfaces items that need human attentionstatus?, urgency?, contactId?
acknowledge_briefMark a brief as seen without resolving itbriefId
resolve_briefClose a brief with an optional notebriefId, note?

Webhooks

create_webhookRegister a webhook endpointurl, events[]
list_webhooksList registered webhooksnone
rotate_webhook_secretRotate the signing secret for a webhookwebhookId
delete_webhookDeactivate and remove a webhookwebhookId

Account

set_memory_enabledTurn Auditable Call Memory on or off at the account level (on by default)enabled
get_usageGet usage and cost breakdown for a billing periodperiod?

Example Workflows

Test your app's SMS verification flow

Ask your AI agent to test the verification end-to-end:

You: “Test the signup flow on our staging app. Provision a number for OTP verification.”
Agent: Calls provision_numberenters number in verification formcalls wait_for_otpenters codedone.

Send a notification via SMS

Agent calls: send_sms
  from: "num_abc123"
  to: "+14155551234"
  body: "Your order #1234 has shipped. Track at https://..."

→ Returns: { id: "msg_xyz", status: "sent", cost: 0.015 }

Make a recorded call

Agent calls: initiate_call
  from: "num_abc123"
  to: "+14155551234"
  record: true

→ Returns: { id: "call_xyz", status: "initiated", record: true }
→ After call: recording URL delivered via webhook

Set up a virtual agent plus email summaries in one prompt

The MCP configure_inbound_ai tool accepts an optional notify block, so the whole setup (provision, configure inbound AI, set the email destination) happens in a single conversation. No dashboard handoff.

You: “Provision a US local number for Acme Plumbing. Configure it to answer calls as the front desk: greet callers, take their name and address and what the issue is, then say someone will call back within 2 hours. Email me a summary of every call at owner@acmeplumbing.com.”
Agent: Calls provision_numbercalls configure_inbound_ai with systemPrompt, voice, firstMessage, and notify.emailTodone.

Email-only for v1. The email contains caller name (when given), phone, intent, urgency, and a 1-2 sentence ask. Spam calls are auto-suppressed.

Configuration

Authentication

The MCP server needs your AgentCall API key. Provide it via environment variable (recommended) or CLI flag:

# Environment variable (recommended)
AGENTCALL_API_KEY=ac_live_xxx agentcall-mcp

# CLI flag
agentcall-mcp --api-key ac_live_xxx

Requirements

  • Node.js 18 or later
  • API Key from agentcall.co (free tier available)
  • AI Tool that supports MCP (Claude Code, Claude Desktop, Cursor, Windsurf, etc.)

How It Works

The MCP server runs locally on your machine as a subprocess of your AI tool. It translates MCP tool calls into secure HTTPS requests to the AgentCall API, which handles phone number provisioning, SMS, and voice calls on your behalf.

Webhook Events

Use create_webhook to subscribe to these events:

sms.inboundNew SMS received on your number
sms.otpOTP code detected and extracted from SMS
call.inboundIncoming call to your number
call.ringingOutbound call is ringing
call.statusCall status changed (includes duration, recording URL)
call.recordingCall recording saved and available
call.transcriptAI voice call transcript available
call.report.readyStructured Call Report ready (fires a few seconds after call.transcript)
number.releasedPhone number was released

Links

# REST API Quickstart

Don't use MCP? You can hit the AgentCall API directly with curl or any HTTP client. Get your API key from the dashboard, then:

1. Provision a phone number

curl -X POST https://api.agentcall.co/v1/numbers/provision \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"country": "US", "type": "local"}'

2. Send an SMS

curl -X POST https://api.agentcall.co/v1/sms/send \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from": "+15672901611", "to": "+14155551234", "body": "Hello from AgentCall!"}'

3. Wait for an OTP code

curl https://api.agentcall.co/v1/sms/inbox/NUMBER_ID?otpOnly=true \
  -H "Authorization: Bearer YOUR_API_KEY"

4. Make an AI voice call

curl -X POST https://api.agentcall.co/v1/calls/ai \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "+15672901611",
    "to": "+14155551234",
    "systemPrompt": "You are calling to confirm a reservation.",
    "voice": "shimmer"
  }'

Full interactive API reference: api.agentcall.co/docs

Ready to get started?

Get your API key and install the MCP server in under 2 minutes.

Get API Key, Free