Docs

Everything an agent (or a human) needs to connect and call.

Connect

Endpoint: https://www.patchmcp.com/mcp (Streamable HTTP, OAuth 2.1 with PKCE, dynamic client registration and client-ID metadata documents supported). Discovery lives at /.well-known/oauth-protected-resource/mcp and /.well-known/oauth-authorization-server.

  1. Open Settings → Connectors → Add custom connector.
  2. Paste https://www.patchmcp.com/mcp as the server URL and save.
  3. Click Connect: verify your number, approve access, and you are done.
  4. Ask Claude to call someone.
claude mcp add --transport http patch-mcp https://www.patchmcp.com/mcp

Then run /mcp inside Claude Code to authenticate, or let the first place_call trigger it.

Add to ~/.codex/config.toml:

[mcp_servers.patch-mcp]
url = "https://www.patchmcp.com/mcp"

Add to .cursor/mcp.json (or the global one):

{ "mcpServers": { "patch-mcp": { "url": "https://www.patchmcp.com/mcp" } } }
  1. Enable Developer mode under Settings → Connectors → Advanced.
  2. Create a connector with the MCP server URL https://www.patchmcp.com/mcp and OAuth authentication.
  3. Authorise in the browser window that opens.

Tools

place_call

Start an outbound call from your verified number. Returns immediately with a call_id and a listen_url.

to
Destination in E.164 (+14155551234). US/CA only.
objective
What the call must achieve, with specifics and acceptable fallbacks (10–2000 chars).
callee_name
Who is being called. Optional, improves the conversation.
context
Extra facts the agent may reveal if asked. Optional.
max_duration_minutes
Hard cap, default 6, max 10.

get_call

Status and, once terminal, the resolution, transcript and recording_url. Pass wait_seconds (≤ 50) to long-poll.

end_call

Ends an in-progress call: the agent says goodbye and hangs up within ~10 seconds.

list_calls

Recent calls, newest first, with statuses and outcomes.

Call lifecycle

Statuses: queuedringingin_progress → one of completed, no_answer, busy, voicemail, failed, canceled, declined_recording, opted_out.

Every terminal call carries a resolution: { outcome: achieved | partially_achieved | not_achieved | no_conversation, summary, commitments[], follow_ups[], key_facts[], callee_requested_no_further_calls }. The resolution can lag the terminal status by a few seconds while it is extracted.

Transcript rows are { role: agent | callee, text, at_ms }. recording_status moves from processing to available typically 15–90 s after the call ends; recording_url links expire after about an hour, listen_url after a few hours.

Errors

Rejections come back as tool errors with a machine-readable error code and a human message. Relay the message to the user; do not retry blindly.

invalid_number / unsupported_region / blocked_number
The destination is invalid, outside US/CA, or in a blocked range.
caller_id_not_verified
Finish caller-ID verification at /caller-id.
do_not_call
The destination opted out of calls from this service.
outside_calling_hours
Includes reset_at: the next moment calls are allowed at the destination.
rate_limited / destination_limit_reached
Includes reset_at and retry_after_seconds.
concurrent_call_in_progress
Includes active_call_id; wait or end it first.
objective_rejected
Safety screening declined the objective.
carrier_error / service_unavailable
Temporary provider problems.

Limits