Agent Discovery (AID + MCP)
KaiCalls is discoverable by any MCP-compatible client (Claude Desktop, OpenClaw, etc.) via the Agent Identity & Discovery standard. A single DNS TXT record (with a .well-known/aid.json HTTP fallback) points clients at our Model Context Protocol server.
Discover the endpoint
Install the AID CLI and run discover:
bashnpm install -g @agentcommunity/aid-doctor aid-doctor discover kaicalls.com # Output: # ✓ Found AID record # Protocol: mcp # URI: https://api.kaicalls.com/mcp # Auth: bearer # Docs: https://kaicalls.com/docs
Or fetch the .well-known fallback directly:
bashcurl https://kaicalls.com/.well-known/aid.json
MCP endpoint
- Endpoint
- https://api.kaicalls.com/mcp
- Protocol
- Model Context Protocol (MCP)
- Auth
- Bearer token — use your KaiCalls API key (
kc_live_...orkc_test_...) - Content-Type
- application/json
Create an API key from the dashboard. Grant the scopes each tool requires (calls:read, calls:write, agents:read).
HTTP routes
Three top-level paths. The first is public; the other two require a Bearer API key.
POST /api/mcp/initialize— MCP handshake. Public.POST /api/mcp/tools/list— list available tools. Requires Bearer.POST /api/mcp/tools/call— execute a tool. Requires Bearer plus the tool's scope.
A JSON-RPC 2.0 handler is also available at POST /api/mcp for clients that speak the full MCP JSON-RPC spec.
Available tools
make_call
Initiate an outbound call. Scope: calls:write.
Arguments:
phone_number(string, required) — E.164agent_id(string, required) — must belong to the key's businesscontext(string, optional) — free-form script hintname(string, optional) — caller namefirst_message(string, optional) — override greeting
bashcurl -X POST https://api.kaicalls.com/mcp/tools/call \ -H "Authorization: Bearer kc_live_..." \ -H "Content-Type: application/json" \ -d '{ "name": "make_call", "arguments": { "phone_number": "+19085551234", "agent_id": "abc123", "context": "Follow up on inquiry" } }'
check_call_status
Get status of a call. Scope: calls:read.
bashcurl -X POST https://api.kaicalls.com/mcp/tools/call \ -H "Authorization: Bearer kc_live_..." \ -d '{"name":"check_call_status","arguments":{"call_id":"<uuid>"}}'
get_transcript
Get transcript + summary of a completed call. Scope: calls:read.
bashcurl -X POST https://api.kaicalls.com/mcp/tools/call \ -H "Authorization: Bearer kc_live_..." \ -d '{"name":"get_transcript","arguments":{"call_id":"<uuid>"}}'
list_recent_calls
List recent calls for the authenticated business. Scope: calls:read.
bashcurl -X POST https://api.kaicalls.com/mcp/tools/call \ -H "Authorization: Bearer kc_live_..." \ -d '{"name":"list_recent_calls","arguments":{"limit":10}}'
get_business_info
Basic metadata about businesses the key can access. Scope: agents:read.
bashcurl -X POST https://api.kaicalls.com/mcp/tools/call \ -H "Authorization: Bearer kc_live_..." \ -d '{"name":"get_business_info","arguments":{}}'
Security & multi-tenancy
- HTTPS-only. HTTP requests are rejected at the edge.
- Every tool call is scoped to the business(es) the API key belongs to.
make_callcannot use an agent from another tenant. - Invalid, revoked, or expired keys return 401.
- Missing scopes return 403.
- Rate limits apply the same way as the rest of the /api/v1 surface.
DNS TXT record (reference)
For transparency, the AID discovery record published at _agent.kaicalls.com:
dns_agent.kaicalls.com. 300 IN TXT "v=aid1;p=mcp;u=https://api.kaicalls.com/mcp;a=bearer;d=https://kaicalls.com/docs"
Verify with dig _agent.kaicalls.com TXT.
Questions? Email support@kaicalls.com or see the full API reference.