Reply for agents - Run outbound from Claude Code or Codex

Your agent builds the list. Reply sends it.

Connect Reply to Claude Code, Codex or any MCP client.

70 tools, a CLI, and packaged workflows with confirmation gates.

Run sequences, mailboxes and your unified inbox from the terminal you already have open.

Get API key Read the docs

claude · reply mcp

>

add the 40 leads from ./icp.csv to “Q3 Outbound” and start it

●

reply_list_sequences→12 sequences

●

reply_add_contact_to_sequence ×40→40 enrolled, 3 dupes merged

⚠

reply_start_sequence is annotated destructive. This will send to 40 people. Confirm?

3 warmed mailboxes · 40/day · first send 09:00 your time

>

y

●

reply_start_sequence “Q3 Outbound” → running

claude mcp add –transport http reply https://mcp.reply.io/ –header “Authorization: Bearer YOUR_REPLY_API_KEY”

Every agentic GTM tool stops at the CSV

Your agent finds the accounts, enriches the contacts and writes the copy. Then it writes a file. You open a tab, upload it, map the columns, pick a mailbox, and hope it’s warm. That last step is the only one that generates revenue, and it’s the only one still done by hand.

1

Sourcing tools

Signal feeds, scrapers, and lookalike lists. A crowded, well-served market.

2

Enrichment tools

Waterfall enrichment, verified emails, firmographic fill. Also crowded, also solved.

3

Your agent

Research, qualify, draft. This is what your agent is already good at.

4

Reply

Sequences across email, LinkedIn, calls and SMS, on warmed mailboxes, with replies landing in one inbox.

Four ways in. One account, one key.

MCP

For agents in Claude, Cursor and Claude Code. Annotated read-only or destructive, so your client can gate them.

Skills

Multi-step outreach procedures with confirmation gates and previews. Four more listed as coming soon.

CLI

Sign in once, then call any v3 endpoint as yourself from a shell or CI.

REST API

The exhaustive surface. Webhooks, bulk imports and background jobs live here and nowhere else.

What that looks like in practice

The tools are the surface. These are the sentences. Every chain below is real. The markers show which calls only read, which write, and which Reply flags as high-stakes so your client can stop and ask first.

Who replied this week and hasn’t been followed up

reply_get_inbox_emails

reply_get_contact_activity

Pause anything under a 3% reply rate

reply_search_sequences

reply_get_sequence_stats

reply_pause_sequence

Add the 40 from ./icp.csv to Q3 Outbound and start it

reply_search_contacts

reply_create_contact

reply_add_contact_to_sequence

reply_start_sequence

Draft replies to everyone marked interested, don’t send

reply_list_pending_approvals

reply_regenerate_message

Compare last month’s two sequences, tell me which step loses people

reply_compare_sequence_performance

reply_get_sequence_steps

reply_get_sequence_step_variants

This lead asked to be removed, blacklist them

reply_search_contacts

reply_blacklist_contact

If it speaks MCP, it speaks Reply

A standard MCP server over JSON-RPC 2.0. Anything implementing the protocol can call it.

Claude Code

claude mcp add

Codex

MCP config

Cursor

JSON config

Claude Desktop

OAuth connector

ChatGPT

OAuth connector

Windsurf

MCP config

Cline

MCP config

n8n

HTTP / MCP node

Make

HTTP module

Zapier

REST

Your first ten minutes

Connect, prove the credential, read something, then do one real thing under a confirmation gate. In that order, because it’s the same discover → configure → execute → verify pattern Reply’s own agent guide prescribes.

1

Get your API key

Reply → Settings → API Key. Scope it while you’re there. sequences:read is enough for everything up to step 4, and a read-only key is a good way to start.

Treat your API key like a password. Credentials in a URL are not supported: always the Authorization header.

2

Add the server to your client

Header auth is the recommended path. Clients without header support can add the URL as a remote connector and authorise over OAuth, but that grants the full tool catalogue rather than your key’s scopes.

Claude Code
# one line, then restart your session
claude mcp add --transport http reply https://mcp.reply.io/ \
  --header "Authorization: Bearer YOUR_REPLY_API_KEY"

curl https://api.reply.io/v3/whoami -H “Authorization: Bearer $REPLY_KEY”

3

Check it actually answered

Before you ask an agent to do anything, prove the credential works.

200 and your user → you’re connected.

401 with an empty body → the key is wrong.

4

Read something before you write anything

Ask your agent for a report, not an action. Both of these tools are annotated read-only, so there is nothing to undo.

> list my sequences and show stats for the busiest one

⏺ reply_search_sequences → 12 sequences

⏺ reply_get_sequence_stats → 1,204 sent · 4.1% replied

5

Do one real thing, gated

Now enrol a single contact into a test sequence. Both calls are marked high-stakes, so a well-behaved client will stop and confirm, which is exactly what you want to see happen before you trust it with 400 people.

> add me to “Internal test” and start it

⏺ reply_search_contacts → 1 match

⚠ reply_add_contact_to_sequence is high-stakes.

Confirm?

Then teach it your rules

Drop this in your project root as CLAUDE.md (or AGENTS.md) and your agent inherits your ICP, your voice and your guardrails on every run. The MCP rules below are lifted from Reply’s own agent guide. The irreversible-reject warning and the send constraints are real, documented traps, not hypotheticals.

CLAUDE.md

# Outbound rules for this project

## Who we sell to

[Company size, industry, the titles that matter, and the trigger that\

makes an account worth contacting this week rather than any week.]

## Voice

Short. No exclamation marks. No “I hope this finds you well.”

One ask per message. Never imply we have met before.

## Reply MCP house rules

Resolve before you mutate.

Never invent an ID and never ask me for one. Search for the object,

confirm the match is right, act, then verify.

Discover -> configure -> execute -> verify. In that order, every time.

### Always stop and ask me first

# the tools Reply marks high-stakes

reply_start_sequence

reply_add_contact_to_sequence

reply_send_inbox_reply

reply_approve_message / reply_bulk_approve_messages / reply_reject_message

reply_blacklist_contact

reply_change_contact_owner

reply_set_sequence_reply_mode

### Never without me saying so explicitly

reply_reject_message is irreversible. It removes the contact from the

sequence entirely. It does not just discard a draft.

Switching the AI SDR to Autonomous. Ask me twice.

### Limits

Max [N] new contacts enrolled per day without checking with me.

Never enrol a contact who is already in another live sequence.

reply_send_inbox_reply takes threadId + channel + message only:

no attachments, no scheduling, 32,000 characters maximum.

### When a call fails

Parse Success, branch on ErrorCode.

NoEmailAccounts or NoContacts means a configuration step was skipped.

Go back and fix it. Do not retry the same call.

After a timeout, verify before retrying. Never blind-retry a send.

Paginate with top/skip until HasMore is false.

## Weekly

Every Monday: sequences below [X]% reply rate, which step is losing

people, and one recommendation. Change nothing without asking.

## Packaged workflows that stop and ask

#### Import prospects

CSV in, deduplicated contacts out: mapped, verified, organised into a list.

#### Manage replies

Triage the inbox, categorise threads, draft responses. Sends only after approval.

#### Launch outreach

Verify accounts, build the sequence, enrol contacts, start, all behind a checkpoint.

#### Analyze performance

Pull reporting and identify which sequences to scale, pause or rewrite.

## Documented call graphs, not vibes

Reply publishes the exact sequence of calls for its core workflows. Each one resolves IDs first, configures where needed, confirms before the high-stakes step, and verifies afterwards, so your agent isn’t improvising a send path.

- Read-only
- Writes
- High-stakes, gate this one

### Launch a sequence safely

Resolve the sequence, make sure it has somewhere to send from, then start it, and only then.

#### Discover

reply_search_sequences

reply_get_sequence_steps

#### Configure

reply_list_email_accounts

reply_assign_email_account_to_sequence

reply_assign_schedule_to_sequence

#### Execute , confirm first

reply_start_sequence

#### Verify

reply_get_sequence_stats

### Enrol a contact

Find them before you create them, so you don’t end up with two records and two sequences.

#### Discover

reply_search_contacts

reply_search_sequences

#### Create only if missing

reply_create_contact

#### Execute , confirm first

reply_add_contact_to_sequence

#### Verify

reply_get_contact_activity

### Supervise the AI SDR in review mode

Every generated message queues for approval. Nothing reaches a person until you say so.

#### Configure

reply_set_sequence_reply_mode

#### Review

reply_list_pending_approvals

#### Act on each , one of

reply_approve_message

reply_regenerate_message

reply_reject_message

### Answer an inbox thread

Read the thread, send on the right channel, then re-categorise so the sequence behaves.

#### Discover

reply_get_inbox_emails

#### Execute , confirm first

reply_send_inbox_reply

#### Tidy up

reply_change_inbox_category

## The terminal isn’t a replacement.   It’s a second door.

Faster in the terminal

Better in the dashboard

Bulk work

Enrolling hundreds of contacts, bulk status changes

Reviewing one thread carefully

Reporting

Piping stats into your own dashboard or a scheduled job

Scanning a campaign at a glance

Operations

Start / pause from a script, CI, or a cron

Mailbox health and deliverability warnings

Replies

Triage and draft at volume

Reading tone, deciding what to say

## Top-rated on G2

### 10+

years running outbound

### 3000+

businesses

### 4.6/5

on G2, from 1,480 reviews

### 98%

email delivery rate