MCP tools
ScaiDial registers its tools with ScaiGrid's MCP server, so an agent (a ScaiCore agent, a bot with tools, any MCP client) can look people up and work with live calls. Tools act as the calling identity: its tenant, and the permission each tool lists. Arguments marked ? are optional.
Directory and calls#
| Tool | Arguments | Permission | Does |
|---|---|---|---|
scaidial.directory.lookup |
query, limit? |
scaidial:calls:observe |
Find extensions by number or name |
scaidial.call.list_active |
limit? |
scaidial:calls:observe |
Calls in progress with their legs |
scaidial.extension.get |
extension_id |
scaidial:calls:observe |
One extension's settings |
Personal settings#
| Tool | Arguments | Permission |
|---|---|---|
scaidial.user.set_dnd |
extension_id, enabled, until? |
scaidial:extensions:own |
scaidial.user.set_forward |
extension_id, condition, forward_to, condition_params?, priority? |
scaidial:extensions:own |
scaidial.user.set_ring_timeout |
extension_id, seconds? |
scaidial:extensions:own |
scaidial.user.set_assistant_pickup |
extension_id, seconds? |
scaidial:extensions:own |
Call control#
All need scaidial:calls:observe. leg_id values come from scaidial.call.list_active. Behaviour as in call control.
| Tool | Arguments | Does |
|---|---|---|
scaidial.call.hangup |
leg_id, reason? |
Remove that party |
scaidial.call.hold · scaidial.call.unhold |
leg_id |
Hold with music on hold · take off hold |
scaidial.call.transfer |
leg_id, to_extension, mode? |
mode: "blind" (default) transfers that party by SIP REFER. mode: "attended" starts a consultation from your leg to to_extension (extension number or E.164) and returns {"consult": {"consult_id", "state", …}} |
scaidial.call.transfer_status |
consult_id |
ringing, talking, completed, cancelled, ended |
scaidial.call.transfer_complete |
consult_id |
Hand the caller to the target; your leg ends |
scaidial.call.transfer_cancel |
consult_id |
Drop the target; back to the caller |
scaidial.call.merge |
keep_leg_id, merge_leg_id |
Merge two of your calls into one conference |
scaidial.conference.focus |
leg_id, focus |
all join · kept split · <bridge_id> swap · none hold |
scaidial.conference.drop |
leg_id, bridge_id |
Hang up one merged call |
scaidial.call.speak |
leg_id, text, voice_id?, language? |
Say text (≤ 1,000 characters) into the call; returns {"ok": true, "completed": …} when spoken |
A typical warm handover by a voice agent: scaidial.call.speak ("Let me connect you with a colleague"), scaidial.call.transfer with mode: "attended" from the agent's own leg, brief the colleague once transfer_status says talking, then scaidial.call.transfer_complete.