Connect a client
Add the hosted endpoint to your MCP client and approve access on first use. The server lives athttps://mcp.dairo.app/mcp over streamable HTTP.
dairo mcp install --client auto configures your installed coding-agent clients
and writes a project .mcp.json where that makes sense.
Once connected, ask in plain language:
“Create an inbox triage@yourapp.com, then show me the last 10 messages it
received.”
The agent picks the right tools, confirms before anything changes, and returns
structured results.
Read tools and write tools
The server exposes Dairo’s surface as verb-first tools, paired so most domains have one read tool and one write tool. Read tools carryreadOnlyHint: true
and never mutate; write tools carry a truthful destructiveHint, and most require
an explicit confirm: true — the message sends are the exception. Most tools take
an action argument that selects the operation within their domain.
Read tools and the action values each accepts:
Write tools. Most actions require
confirm: true (each action’s schema says
which); the three message sends — send_message, send_broadcast, and
text_to_speech — are gated by the messages:send scope and take no confirm:
The tool catalog
A machine-readable index lives atGET https://api.dairo.app/v1/mcp/catalog. It
carries toolCount, the families list, the declared scopes, and a
confirmRequiredTools array — plus one entry per tool with name, a one-line
summary, its scopes, and a confirmRequired flag. The full input schema and
annotations stay in tools/list, so the catalog stays small.
Add ?for=me with a bearer key and each tool entry gains an allowed: bool
computed from that key’s scopes, so an agent can see up front which tools it may
call. The server also publishes a discovery descriptor at
GET https://mcp.dairo.app/.well-known/mcp.
Schedule and cancel a send
send_message can stage a send for later — pass sendAt, an RFC 3339 timestamp
with an explicit timezone offset, up to 30 days out:
“Schedule the welcome email fromA scheduled send returnshello@yourapp.comtouser@example.comfor 9am UTC tomorrow.”
status: "scheduled" with a scheduledAt timestamp.
Cancel it any time before it fires:
“Cancel scheduled email msg_123.”
manage_sent_messages with action: "cancelScheduled" is confirm-required, so the
agent checks first.
Cancel works only while the email is still
scheduled. Once it is no longer
scheduled — already sent, queued, or canceled — the tool returns a 409 conflict.Safe to run on autopilot
Actions that create, delete, or revoke a resource — and real-world spends like placing a phone call or posting a letter — require an explicitconfirm: true, so
an agent cannot accidentally delete a resource, revoke a key, cancel a scheduled
send, or ring a real phone. The message sends — send_message, send_broadcast,
and text_to_speech — are gated by the messages:send scope instead of a confirm
flag, so a key without that scope cannot send at all. Every destructive tool
declares destructiveHint: true in its tools/list annotations, and the catalog’s
confirmRequiredTools array names every tool that requires confirmation.
Tool outputs never echo API keys or signing secrets — a newly created secret is
shown once, then never again. Attachment tools return download links and metadata,
not raw bytes. Strict JSON Schemas give an agent immediate validation instead of a
silent mistake.
A send to a recipient who reported your mail as spam is blocked unless you set
ignoreComplaints: true. See Land in the inbox.
More to try
Once connected, drive Dairo entirely in plain language:“Send a plain-text reply fromsupport@yourapp.comto messagemsg_123thanking them and asking for their order number.”
“Show me every complaint from the past week and which sender it belongs to.”The agent calls the matching tools and reports the results.