Design principles
Resolve before you mutate
Almost every mutating tool takes exact numeric IDs (sequence, contact, task, thread, user, email-account, LinkedIn-account, schedule, offer, playbook, knowledge-base). Never invent an ID, and never ask the user for one — users don’t know internal IDs. Search → confirm the match → act → verify:Gate high-stakes actions
Confirm with the user before anything that sends to a prospect, starts outreach, enrolls contacts, changes ownership, blacklists, bulk-approves, or switches Jason to Autonomous. Two traps worth naming:reply_reject_messagedoesn’t just discard a draft — it removes the contact from the sequence entirely. To merely revise a draft, usereply_regenerate_message.reply_send_inbox_replysupports onlythreadId+channel+messagein v1 — no Cc/Bcc, attachments, or scheduling; 32,000-char max; the channel must match the thread’s.
Separate discovery, configuration, and execution
Discover objects and IDs (search_* / list_* / get_*), configure the sequence (mailboxes,
schedules, offers, knowledge bases, playbooks, reply mode), then execute (start, approve, send,
complete). reply_start_sequence fails with NoEmailAccounts or NoContacts if you skip
configuration.
MCP is the interactive surface; REST is the exhaustive one
These 70 tools cover most day-to-day operations. Drop to the REST API (api.reply.io/v3) for bulk imports and updates, background jobs, deep report exports, and anything
absent from tools/list.
High-stakes tools
Each of these reaches a prospect or changes ownership/state the instant it succeeds. Require explicit confirmation in almost any agent UX:
Usually worth confirming too (production-affecting, but not prospect-visible):
reply_pause_sequence,
reply_change_status_in_sequence, the reply_assign_* / reply_attach_* configuration tools,
reply_complete_task, and any create/update/delete on knowledge bases, reply handlers, reengagement
cards, offers, or playbooks. The server’s destructiveHint annotation marks all 39 mutations — use
it as the machine-readable gate.