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 scoped session. The platform writes an event. The audit ledger sees 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 scope.
Scope
Per-tool
An agent can hold dials.read without holding dials.dial.
Audit
Same ledger
Every MCP tool call writes a usage event with the agent's DID.
Transport
stdio · WS
Local stdio for desktop agents, secure WebSocket for cloud agents.
Call a tool
Same call.
Same audit row.
The MCP tool name maps one-to-one to the API path. The arguments map one-to-one to the request body. The response maps one-to-one to the API response. Auditors don't have to learn anything new.
- dials.numbers.search
- dials.calls.dial
- dials.messages.send
- dials.agent.smoke
MCP request
{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "dials.calls.dial",
"arguments": {
"to": "+15125550100",
"from": "+15125550199",
"agent": "reception"
}
}
}MCP response
{
"jsonrpc": "2.0",
"id": 7,
"result": {
"call_id": "call_01HQT4VX3KQK4Z…",
"status": "ringing",
"trace": "01HQT4...c8a"
}
}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 scope-checked verbs.
- stdio for desktop
- WS for cloud
- Per-tenant audience
- Per-scope 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 scopes.