MCP Server
Verified against backend/internal/mcpserver/ and backend/internal/oauth/ (2026-10-11): the OAuth flow is covered end to end by backend/internal/oauth/oauth_test.go, and every tool's annotations by backend/internal/mcpserver/annotations_test.go.
VoiceMatrix runs a live Model Context Protocol server so Claude, Claude Code, Cursor or any other MCP client can work with your account directly: review what your callers are saying, launch an agent in a new market, compare agents, and plan usage — without you writing REST calls by hand.
https://api.voicematrix.ai/mcpIt runs in-process in the Go API, not as a separate service, on the same tenancy path and the same scope checks as the REST surface.
Connect
Claude (claude.ai, Desktop, mobile)
Settings → Connectors → Add custom connector → paste https://api.voicematrix.ai/mcp → Connect. You sign in to VoiceMatrix, choose which permissions to grant, and you are done. No key to copy.
Claude Code
claude mcp add --transport http voicematrix https://api.voicematrix.ai/mcpThen run /mcp in a session and choose Authenticate. Claude Code opens the VoiceMatrix consent page in your browser and receives the connection on a local port.
Cursor, VS Code and other clients
Add the URL as a remote (HTTP) MCP server; clients that support MCP authorization discover the sign-in automatically.
With an API key instead
Every client that can send a header can still use a key minted in Settings → API keys:
claude mcp add voicematrix \
--transport http https://api.voicematrix.ai/mcp \
--header "X-API-Key: vm_live_your_key_here"How sign-in works
The server is an OAuth 2.1 authorization server, built to what Claude's connector client requires:
| Step | What happens |
|---|---|
| Discovery | A request with no credential gets 401 and WWW-Authenticate: Bearer resource_metadata="…/.well-known/oauth-protected-resource/mcp"; that document names the authorization server https://voicematrix.ai |
| Client identity | Client ID Metadata Documents (Claude and Claude Code) or Dynamic Client Registration (others). Public clients only |
| Consent | You sign in on voicematrix.ai and pick permissions. The page shows where you will be returned |
| Tokens | PKCE (S256) is required. Access tokens last 1 hour; refresh tokens 30 days, single-use and rotated. Presenting a used refresh token revokes the whole connection |
Approving creates a connection that appears in Settings → API keys under the application's name. Revoking it there ends the connection immediately. Who may approve: account owners, admins and managers, on a plan that includes API access — the same rule as minting a key.
Permissions a connection can hold: agents:read, agents:write, calls:read, leads:read, leads:write, webhooks:manage. A connection can never place calls, bind phone numbers, delete agents, or run paid tests — those scopes are not grantable over OAuth at all.
The tools
Every tool declares a title and whether it is read-only or changes data, so Claude can run reads without asking and always confirms a write.
Read
whoami list_agents get_agent list_calls get_call list_leads get_lead
list_webhooks webhook_deliveries list_webhook_events
review_conversations compare_agents estimate_agent_usageWrite
create_agent duplicate_agent update_agent publish_agent unpublish_agent
create_lead update_lead create_webhook| Tool | What it is for |
|---|---|
review_conversations | Summaries, sentiment, urgency and tags of recent calls with counts — for spotting recurring questions and complaints. Never returns transcripts or caller phone numbers |
duplicate_agent | Copy an agent for a new market, changing its name, language, voice, greeting or prompt. The copy is a draft until you publish it |
compare_agents | Two to five agents side by side: which settings differ, which match, and simple inconsistencies |
estimate_agent_usage | Calls and minutes per day, projected minutes for the next 30 days against your plan's included minutes, average model tokens per call, and the relative model-cost change if you switch models |
Each tool checks the same scope its REST equivalent requires; a connection or key missing it gets a clear tool error, not a silently smaller result. Creating or duplicating an agent runs the same account and plan checks as the dashboard. Results are minimized: transcripts are opt-in per call (get_call) and never part of a list.
What you can ask it
"Which topics come up most in my calls this week, and what are callers unhappy about?" "Duplicate my English receptionist for the Israeli market, in Hebrew with a female voice." "Compare my three agents and tell me what's inconsistent." "If I switch this agent to a cheaper model, how does its usage change next month?"
Next
- Authentication — the scopes each tool checks
- SDKs & OpenAPI