Model Context Protocol server — live

One endpoint.
Every phone action your agent needs.

Give any MCP client — Claude Code, Cursor, the Claude API — a phone. Send texts, place AI voice calls, manage personas and numbers, and wait on replies. One server, your account, scoped to your key.

API reference
POST https://klaw-voice.netlify.app/api/mcp
tools/call · send_message
# your agent calls a tool
POST /api/mcp
{
"method": "tools/call",
"params": {
"name": "send_message",
"arguments": { "to": "+1555…", "body": "Confirmed" }
}
}
 
# klawvoice answers
{ "result": { "content": [{ "type": "text",
"text": "{ status: 202, provider_sid: SM… }" }] }
Connect

Add it to your client

{
  "mcpServers": {
    "klawvoice": {
      "type": "http",
      "url": "https://klaw-voice.netlify.app/api/mcp",
      "headers": { "Authorization": "Bearer ${KLAWVOICE_API_KEY}" }
    }
  }
}

Generate a key in Settings → API key (prefix klw_). The handshake is unauthenticated; only tools/call needs the key, so every action is scoped to that account. Or one line: claude mcp add --transport http klawvoice https://klaw-voice.netlify.app/api/mcp --header "Authorization: Bearer $KLAWVOICE_API_KEY"

14 tools

Everything your agent can do on the phone

POST /v1/messages
send_message

Text someone from one of your numbers (SMS/WhatsApp).

POST /v1/calls
place_call

Place an outbound AI voice call with an objective.

GET /v1/numbers
list_numbers

List the phone numbers connected to your account.

your agents
list_personas

List your AI personas — id, name, and number.

GET /numbers/available
search_numbers

Find purchasable numbers by US area code.

POST /v1/events/wait
wait_for_event

Long-poll for the next reply or finished call.

POST /v1/agents
create_persona

Spin up a persona — and a number — in one call.

POST /v1/numbers
provision_number

Buy a number and attach it to a persona.

PATCH /agents/{id}
update_persona

Edit a persona’s prompt, voice, or first line.

GET /calls
list_calls

Recent calls with status, summary, and sentiment.

GET /v1/calls/{id}/transcript
get_call_transcript

Full transcript and summary of a call.

GET /v1/usage
get_usage

Calls, minutes, and messages over a period.

GET /leads
list_leads

Leads from calls — intent, urgency, next action.

POST /v1/agents/{id}/knowledge-base
add_knowledge

Teach a persona so it answers smarter on calls.

JSON-RPC 2.0 over HTTP

Streamable transport. initialize, notifications/initialized, tools/list, tools/call, ping — version-negotiated.

Scoped to your key

Bearer klw_ on tools/call. Discovery and handshake are open; account actions never are.

100 calls / min

Per-key rate limit with Retry-After. Co-located with the app — no extra host to run.