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.