# MCP Server

> Reply.io's full sales platform as 70 MCP tools — sequences, contacts, inbox, tasks, and the Jason AI SDR autopilot. Live at mcp.reply.io. High-level reference here — all 70 tools, contract essentials, connect snippet; full per-argument details at docs.reply.io.

## Status — available today

Reply MCP is an official, live, remote **Streamable HTTP** MCP server exposing Reply.io's
sales-engagement, inbox, AI SDR (Jason), task, account, and help workflows as **70 tools** for any
MCP-compatible client — Claude, Cursor, Make, n8n, and custom agents.

| | |
|---|---|
| Endpoint | `https://mcp.reply.io/` |
| Transport | Streamable HTTP (JSON-RPC 2.0, MCP protocol `2025-06-18`) |
| Auth | `x-api-key: <key>` **or** `Authorization: Bearer <key>` |
| Rate limit | Hourly window, ~3000/hour (`X-Rate-Limit-*` headers on every response) |
| Sessions | None required — `initialize` and `tools/list` work without `Mcp-Session-Id` |
| Tools | 70 — 31 read-only (`readOnlyHint`), 39 mutations (`destructiveHint`) |

## Connect

```bash
claude mcp add --transport http reply https://mcp.reply.io/ \
  --header "x-api-key: YOUR_REPLY_API_KEY"
```

Or in any MCP client config:

```json
{
  "mcpServers": {
    "reply": {
      "type": "http",
      "url": "https://mcp.reply.io/",
      "headers": { "x-api-key": "YOUR_REPLY_API_KEY" }
    }
  }
}
```

Client-by-client instructions, the OAuth discovery flow, and rate limits:
[docs.reply.io/mcp/connect](https://docs.reply.io/mcp/connect).

## Contract essentials

What an agent needs to know before calling — full rules and the safe-retry matrix at
[docs.reply.io/mcp/tool-contract](https://docs.reply.io/mcp/tool-contract):

- **Responses are SSE frames**; the payload is a JSON string in `result.content[0].text` —
  `{"Success":true,"Data":{...}}` or `{"Success":false,"ErrorCode":"...","ErrorMessage":"..."}`
  (tool errors arrive as HTTP 200 with `isError: true`; branch on `ErrorCode`).
- **Schemas are strict** — `additionalProperties: false`; required fields reject `null`, `""`, `[]`.
- **Pagination is uniform** — `top` (default 20, max 100) + `skip`; iterate until `HasMore` is false.
- **Updates are patches** — omitted fields keep their value; a passed list replaces the whole list.
- **IDs come from resolvers** — resolve exact numeric IDs with `search_*`/`list_*` tools first;
  never invent one, never ask the user for one.
- **Batches cap at 100** and report per-item results (`NotProcessed`, `AffectedContactIds`) —
  report exact counts.
- **Gate high-stakes tools** — anything that sends, starts outreach, enrolls, blacklists, changes
  ownership, rejects a draft (also removes the contact from the sequence!), or switches Jason to
  Autonomous executes immediately with no undo. Confirm with the user first.

## All 70 tools

Grouped by domain: **read** = `readOnlyHint` · **write** = `destructiveHint` · **gate** = confirm
with the user first. Full signatures, arguments, enums, and failure modes:
[docs.reply.io/mcp/tools](https://docs.reply.io/mcp/tools) (site index: [/mcp/tools](/mcp/tools)).

### Sequences — discover & inspect

| Tool | Type | Purpose |
|------|------|---------|
| reply_search_sequences | read | Find sequences by name / status / archive flag |
| reply_get_sequence_steps | read | Ordered steps of a sequence (type, delay, variants) |
| reply_get_sequence_step_variants | read | A/B content variants of one step |
| reply_get_sequence_stats | read | Email + LinkedIn metrics for one sequence |
| reply_compare_sequence_performance | read | Side-by-side metrics for up to 25 sequences |

### Sequences — control & configuration

| Tool | Type | Purpose |
|------|------|---------|
| reply_start_sequence | write · gate | Start or resume a sequence |
| reply_pause_sequence | write | Pause a sequence |
| reply_add_contact_to_sequence | write · gate | Enroll up to 100 contacts |
| reply_change_status_in_sequence | write | Set one contact's per-sequence status |
| reply_assign_email_account_to_sequence | write | Link a mailbox |
| reply_assign_linkedin_account_to_sequence | write | Link a LinkedIn account |
| reply_assign_schedule_to_sequence | write | Set the sending schedule |
| reply_attach_offer_to_sequence | write | Attach an offer (AI SDR) |
| reply_attach_playbook_to_sequence | write | Attach a playbook (AI SDR) |
| reply_attach_knowledge_base_to_sequence | write | Attach a knowledge base (AI SDR) |
| reply_set_sequence_reply_mode | write · gate | Jason Review ↔ Autonomous mode |

### Contacts

| Tool | Type | Purpose |
|------|------|---------|
| reply_search_contacts | read | Look up by exact email or LinkedIn URL |
| reply_filter_contacts | read | Filter by list/sequence/free-text |
| reply_create_contact | write | Create a contact |
| reply_update_contact | write | Patch contact fields |
| reply_get_contact_activity | read | Activity history for one contact |
| reply_mark_contacts_as_replied | write | Mark up to 100 contacts as replied |
| reply_change_contact_owner | write · gate | Reassign contacts to another user |
| reply_blacklist_contact | write · gate | Blacklist an email or whole domain |

### Inbox & conversations

| Tool | Type | Purpose |
|------|------|---------|
| reply_get_inbox_emails | read | List inbox threads with previews |
| reply_send_inbox_reply | write · gate | Send a reply on a thread |
| reply_change_inbox_category | write | Assign/clear a thread category |

### Jason AI SDR — approvals & autopilot

| Tool | Type | Purpose |
|------|------|---------|
| reply_list_pending_approvals | read | The draft approval queue |
| reply_approve_message | write · gate | Approve one draft — sends immediately |
| reply_bulk_approve_messages | write · gate | Approve up to 100 drafts (atomic) |
| reply_reject_message | write · gate | Reject a draft AND remove the contact from the sequence |
| reply_regenerate_message | write | Ask Jason to rewrite a pending draft |

### Jason AI SDR — knowledge bases

| Tool | Type | Purpose |
|------|------|---------|
| reply_list_knowledge_bases | read | List knowledge bases |
| reply_get_knowledge_base | read | One knowledge base in full |
| reply_create_knowledge_base | write | Create a knowledge base |
| reply_update_knowledge_base | write | Rename / edit instructions |
| reply_add_knowledge_base_source | write | Add a URL source |
| reply_delete_knowledge_base_source | write | Remove a URL source |

### Jason AI SDR — reply handlers

| Tool | Type | Purpose |
|------|------|---------|
| reply_list_reply_handlers | read | List reply handlers in a knowledge base |
| reply_get_reply_handler | read | One reply handler in full |
| reply_create_reply_handler | write | Add a handler (question type → instructions) |
| reply_update_reply_handler | write | Patch a handler |
| reply_delete_reply_handler | write | Remove a handler |

### Jason AI SDR — reengagement cards

| Tool | Type | Purpose |
|------|------|---------|
| reply_list_reengagement_cards | read | List win-back cards |
| reply_get_reengagement_card | read | One card in full |
| reply_create_reengagement_card | write | Add a card (with send-after days) |
| reply_update_reengagement_card | write | Patch a card |
| reply_delete_reengagement_card | write | Remove a card |

### Jason AI SDR — offers

| Tool | Type | Purpose |
|------|------|---------|
| reply_list_offers | read | List offers (id + name) |
| reply_get_offer | read | Full offer content (ICP, value props, CTAs) |
| reply_create_offer | write | Create an offer |
| reply_update_offer | write | Patch an offer |
| reply_generate_offer_from_website | read | Draft offer fields from a website (doesn't save) |

### Jason AI SDR — playbooks

| Tool | Type | Purpose |
|------|------|---------|
| reply_list_playbooks | read | List playbooks |
| reply_get_playbook | read | One playbook incl. instruction body |
| reply_create_playbook | write | Create a playbook |
| reply_update_playbook | write | Patch a playbook |
| reply_duplicate_playbook | write | Duplicate a playbook |

### Tasks

| Tool | Type | Purpose |
|------|------|---------|
| reply_list_my_tasks | read | List tasks, filterable |
| reply_create_task | write | Create a standalone task |
| reply_complete_task | write | Mark a task completed |

### Workspace resolvers & accounts

| Tool | Type | Purpose |
|------|------|---------|
| reply_list_email_accounts | read | Mailboxes with status and limits |
| reply_list_linkedin_accounts | read | Connected LinkedIn accounts |
| reply_list_schedules | read | Sending schedules |
| reply_search_lists | read | Resolve a list name to its ListId |
| reply_search_team_members | read | Resolve a teammate to their UserId |

### Help & meta

| Tool | Type | Purpose |
|------|------|---------|
| reply_search_knowledge_base | read | Search the Reply Help Center |
| reply_get_knowledge_base_article | read | Read a Help Center article |
| reply_get_app_map | read | App areas with in-app navigation |
| reply_report_unsupported_request | read | Log a missing capability for the product team |

## The full technical reference lives on docs.reply.io

This page is the high-level surface map. For implementation details:

- **[Connect](https://docs.reply.io/mcp/connect)** — client configs, handshake, auth details, rate limits
- **[Tool contract & errors](https://docs.reply.io/mcp/tool-contract)** — schema rules, pagination,
  response envelopes, error codes, the safe-retry matrix
- **[Building agents](https://docs.reply.io/mcp/agent-guide)** — design principles, high-stakes
  gating, a drop-in system prompt
- **[Workflow recipes](https://docs.reply.io/mcp/recipes)** — launch a sequence safely, supervise
  Jason, reply to a thread, and more
- **[Tool reference](https://docs.reply.io/mcp/tools)** — all 70 tools with per-argument documentation

The always-current runtime source is the server itself: call `tools/list` and trust what it returns.

## FAQ

**Is the MCP server real, and how current is this page?**

Real and live. Endpoint https://mcp.reply.io/, MCP protocol 2025-06-18, 70 tools. The canonical, continuously maintained reference — auth, contract rules, envelopes, error model, full tool catalog — lives at docs.reply.io/mcp/overview. The runtime truth is always tools/list on the live server.

**How does authentication work?**

Send your Reply.io API key as an x-api-key header or an Authorization Bearer token — this server accepts either. Get a key in the Reply.io app under Settings → API Keys. No session header is required. Full details, including the OAuth discovery metadata, at docs.reply.io/mcp/connect.

**How do I know which tools are safe to call?**

The server tells you, machine-readably. Every tool carries MCP annotations — readOnlyHint (31 tools) or destructiveHint (39 tools). Agents can auto-gate on them; anything that reaches a prospect or changes ownership should also get explicit user confirmation. The full contract and safe-retry matrix is at docs.reply.io/mcp/tool-contract.

**When should an agent use MCP instead of the REST API?**

Use MCP for interactive, natural-language work — 70 tools cover most day-to-day operations including the full Jason AI SDR autopilot. Use REST (api.reply.io/v3) for bulk imports, scheduled backend syncs, deep report exports, and anything tools/list does not expose.

**Is the Jason autopilot really callable here?**

Yes. The approval queue, the Review↔Autonomous switch, and the whole knowledge base / offer / playbook / reply-handler / reengagement-card surface are live MCP tools.
