Your coding agent can write ClutchCall code that compiles. Point Claude Code, Cursor, Codex CLI, or another agent at the resources below. The agent can then scaffold, dial, and wire up features. You do not need to spell out the wire format by hand. Three things make that work:
  1. A documentation surface that your agent can read directly (no HTML scraping).
  2. An MCP server that it can call as a tool.
  3. A CLI (clutchcall) that scaffolds projects with agent-ready AGENTS.md files included.
Point your agent at these resources before you ask it to write ClutchCall code.

MCP server

The docs MCP server is available at:
It uses Streamable HTTP transport (POST JSON-RPC). It exposes three tools:

Wiring into Claude Code, Cursor, etc.

After configuration, your agent sees list_pages, search_docs, and get_page as callable tools next to its built-in toolbox.

Smoke test

Platform MCP server (control plane)

The docs server above is a read-only reference. A second MCP server runs on the control plane. It lets an agent operate your workspace: list calls, originate, manage agents, and pull analytics. The agent can do anything that your role in the organization allows. See Platform MCP Server for the full usage guide:
It uses the same transport (Streamable HTTP, POST JSON-RPC), but it is authenticated. Mint an MCP access key in the console under Admin → API keys → MCP access keys (owners/admins only). Send the key as a Bearer token. The key acts as the user who minted it, confined to that one organization. Every call runs under your own membership, role, and per-modality grants. The key stops working the moment your membership stops. read scope allows queries. write scope allows mutations. Instead of one tool per API operation (~540), the server exposes four meta-tools: An agent follows this workflow: whoamilist_operationsdescribe_operationcall_operation. For org-scoped operations, the server pins the organization id to the key’s org. An agent cannot be steered into another tenant.

Smoke test

An MCP access key is a durable credential with your role’s reach. Mint it with read scope only, unless the agent genuinely needs to change things. Set an expiry. Name the key after the agent that holds it, so that you can identify the correct key to revoke later.

Plain-text documentation

Some agents do not speak MCP. For them, and for use as a static prompt-context drop-in, every page is also published as plain Markdown: The format follows the llms.txt convention. Put the URL into an LLM’s context window, and the LLM knows how to use it.

CLI: clutch

The clutch CLI does what the MCP server does. After clutch auth login, it also runs telephony operations against the live control-plane API. Docs (no auth):
Auth:
Trunks + calls (after auth):
clutch dial defaults --app to AI_BIDIRECTIONAL_STREAM (=6). If you do not pass --app-args <agent_id>, the runtime has no agent to bridge. The call then lands in silence. For raw audio piping without an AI agent, use --app ANSWER (=5).
Mid-call control verbs (each calls ExecuteDialplan server-side):
Override targets with env vars: CLUTCH_BASE_URL (portal), CLUTCH_DOCS_BASE (docs site).

Scaffolding agent-ready projects

clutchcall init <lang> <name> creates a working starter in your working directory:
Each starter includes:
  • A working dial / event-handling sample (main.clutchcall / main.py / src/index.ts) that compiles against the ClutchCall SDK.
  • An AGENTS.md file tuned for that language. Agents read this file first when they enter the project. It captures the language-specific traps that an agent will otherwise re-discover the hard way (e.g. “Emscripten corrupts byte arrays passed as std::string; use typed_memory_view instead”).
  • A .clutchcall.json project manifest with a pinned schema version for clutchcall migrate.

Best practices for AI-assisted development

These practices apply to any SDK that changes quickly. We list them because the ClutchCall wire format and method-ID table change between minor releases.
  1. Browse before you search. Tell your agent to fetch /llms.txt first, so that it knows what exists. Search excerpts are noisier than full pages.
  2. Fetch full pages, not excerpts. Use get_page (MCP) or get-page (CLI) when you need authoritative answers. The grouped index is for navigation. The page itself is for code.
  3. Never hand-edit serde structs. The Python, TypeScript, Go, Rust, Java, and .NET bindings are auto-generated from the schema. To add an RPC field, your agent should update the upstream schema and regenerate. It should not patch the binding by hand.
  4. Run clutchcall migrate after you bump the SDK. This shows schema drift before runtime does.

Agent Skills

The ClutchCall Agent Skills repository ships end-to-end recipes. A recipe loads into your coding agent’s context when your intent matches. The agent then builds the feature the correct way the first time. Put the repo into .claude/skills/ (Claude Code) or .cursor/skills/ (Cursor). Your agent then gains task-specific knowledge for these workflows: Generic recipes
  • clutchcall-pstn-dial — outbound PSTN dialing (auth, originate, audio frames, hangup).
  • clutchcall-ai-bridge — wire a live call to OpenAI Realtime / Anthropic / Gemini Live with barge-in.
  • clutchcall-call-eventsCallEvent stream consumption, reconnection, Q.850 cause handling.
  • clutchcall-inbound-routingSetInboundRoutingAnswerIncomingCall, IVR menus, queueing.
  • clutchcall-sip-trunk — register a carrier (Twilio, Telnyx, Bandwidth, Plivo), caller-ID rules, codecs.
  • clutchcall-bulk-campaignOriginateBulk with CSV input, pacing, abort + resume.
  • clutchcall-recording — per-call recording, stereo, retrieval, transcription.
  • clutchcall-tool-calling — LLM tool / function calling: the built-in implicit telephony toolset (transfer / hold / DTMF / disconnect / supervisor), custom server-side tools, and client-side tool calls via OpenAI Realtime.
  • clutchcall-rag-integration — pgvector / Pinecone / Weaviate retrieval as a tool call with latency budgets and barge-in safety.
  • clutchcall-crm-enrichment — pre-call enrichment (Salesforce / HubSpot lookup → system prompt overrides) vs. in-call tool lookup.
Vendor bridges
  • clutchcall-vendor-browser-webrtc — capture mic in the browser, send PCMU over WebTransport.
  • clutchcall-vendor-livekit — bridge PSTN into a LiveKit room.
  • clutchcall-vendor-daily — bridge PSTN into a Daily room (Pipecat-friendly).
  • clutchcall-vendor-chime — Amazon Chime SDK Meetings or Voice Connector.
  • clutchcall-vendor-twilio — bridge from existing Twilio Media Streams (TwiML <Stream>) into ClutchCall.
  • clutchcall-vendor-vapi — bridge a Vapi.ai voice agent over Vapi’s WebSocket transport.
Each skill is self-contained. It includes a prereqs checklist, working Python/TypeScript code, a “verify it works” snippet, common gotchas, and pointers back to the docs MCP for deeper reference.