MCP server
A native tool
for agents.
The Dials MCP server is a real protocol surface. An agent calls a tool. The tool runs under a verified identity. The platform writes a signed record. The history shows the same row your human ops team sees.
At a glance
What MCP gives an agent.
Discovery
Self-describing
The server enumerates every tool, schema, and required permission.
Permissions
Per-tool
An agent can hold read without holding dial.
Records
One history
Every MCP tool call signs a record under the agent's identity.
Transport
stdio · WS
Local stdio for desktop agents, secure WebSocket for cloud agents.
Call a tool
Same call.
Same record.
The MCP tool name maps to the same scoped API action the dashboard uses. The arguments map one-to-one to typed request fields. The response lands in the same operator history.
- dials.numbers.search
- dials.calls.outbound
- dials.voice_profiles.create
- dials.messages.send
MCP request
{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "dials.messages.send",
"arguments": {
"fromNumberId": "pn_123",
"toE164": "+15125550100",
"channel": "sms",
"body": "Reply STOP to opt out.",
"idempotencyKey": "msg_001",
"registrationApproved": true,
"consentApproved": true,
"optOutPolicyApproved": true
}
}
}MCP response
{
"jsonrpc": "2.0",
"id": 7,
"result": {
"message": { "id": "msg_queued", "status": "queued" },
"next": "message_queued_for_adapter"
}
}Configure
One config line.
Add the Dials MCP server to any MCP-aware client. Claude Desktop, Cursor, IDE plugins, autonomous workflow runners — they all see the same permission-checked verbs.
- stdio for desktop
- WS for cloud
- Per-tenant audience
- Per-permission tool sets
claude_desktop_config.json
{
"mcpServers": {
"dials": {
"command": "npx",
"args": ["@dials/mcp"],
"env": { "DIALS_SCOPE": "dials.read dials.dial" }
}
}
}Wire up an agent.
Drop the MCP block into your client config and start with read-only permissions.