> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reply.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Workflow recipes

> Concrete Reply MCP call graphs — resolve IDs, configure, confirm high-stakes steps, verify.

Concrete call graphs an agent can follow. Each one resolves IDs first, configures where needed,
confirms before high-stakes steps, and verifies after. See [Building agents](/mcp/agent-guide) for
the principles behind them.

## Launch a sequence safely

<Steps>
  <Step title="Resolve the sequence">
    `reply_search_sequences` by name → resolve the exact `sequenceId` (ask the user if ambiguous).
  </Step>

  <Step title="Inspect its channels">
    `reply_get_sequence_steps` → see which channels the sequence uses.
  </Step>

  <Step title="Attach a mailbox (if email steps)">
    `reply_list_email_accounts`, then `reply_assign_email_account_to_sequence` if none is attached.
  </Step>

  <Step title="Attach LinkedIn (if LinkedIn steps)">
    `reply_list_linkedin_accounts`, then `reply_assign_linkedin_account_to_sequence`; warn if the
    account is unhealthy.
  </Step>

  <Step title="Set a schedule">
    `reply_list_schedules`, then `reply_assign_schedule_to_sequence` if none is set.
  </Step>

  <Step title="Optional AI SDR config">
    `reply_attach_offer_to_sequence` / `reply_attach_playbook_to_sequence` /
    `reply_attach_knowledge_base_to_sequence`, then `reply_set_sequence_reply_mode`.
  </Step>

  <Step title="Confirm, then start">
    Confirm with the user ("Start sequence X? This begins outreach to its contacts."), then
    `reply_start_sequence` — expect `NoContacts` / `NoEmailAccounts` / `Archived` if configuration
    was skipped.
  </Step>

  <Step title="Verify">
    `reply_get_sequence_stats` or `reply_search_sequences` to confirm it is Active.
  </Step>
</Steps>

## Add a contact to a sequence

<Steps>
  <Step title="Find the contact">
    `reply_search_contacts` by email or LinkedIn URL (the tool does not accept names — ask the user
    for an email if that's all you have).
  </Step>

  <Step title="Create if missing">
    If missing and the user confirms details, `reply_create_contact` (needs a name plus at least one
    of email/LinkedIn URL).
  </Step>

  <Step title="Resolve the sequence">
    `reply_search_sequences` for the target sequence.
  </Step>

  <Step title="Confirm, then enroll">
    Confirm, then `reply_add_contact_to_sequence` (up to 100 IDs; per-contact skips arrive in
    `NotProcessed`, e.g. `ContactAlreadyInSequence`, `ContactInBlackList`).
  </Step>

  <Step title="Verify">
    `reply_get_contact_activity` to verify enrollment.
  </Step>
</Steps>

## Supervise Jason in Review mode

<Steps>
  <Step title="Ensure Review mode">
    `reply_set_sequence_reply_mode` → `Review` (if not already).
  </Step>

  <Step title="Read the queue">
    `reply_list_pending_approvals` — filter by sequence, owner, or channel.
  </Step>

  <Step title="Act on each draft (addressed by sequenceId + contactId)">
    Inspect the contact and context, compare against the attached playbook/knowledge base, then:

    * `reply_approve_message` (optionally overriding body/subject) — **sends immediately**;
    * `reply_regenerate_message` with specific feedback to revise the draft;
    * `reply_reject_message` **only** if the contact should leave the sequence entirely — rejection
      is irreversible and removes them from the sequence.
  </Step>

  <Step title="Bulk approve carefully">
    `reply_bulk_approve_messages` only after every draft in the batch was reviewed — the batch is
    atomic: one stale reference rejects the whole batch and nothing is sent.
  </Step>
</Steps>

## Switch Jason to Autonomous

<Steps>
  <Step title="Verify configuration">
    Verify the sequence has an offer, playbook, and knowledge base attached and reviewed.
  </Step>

  <Step title="Confirm explicitly">
    Autonomous mode sends replies **without per-message approval**. Get explicit confirmation.
  </Step>

  <Step title="Switch">
    `reply_set_sequence_reply_mode` → `Autonomous`.
  </Step>

  <Step title="Keep watching">
    Keep watching `reply_get_inbox_emails` and `reply_get_sequence_stats`.
  </Step>
</Steps>

## Reply to an inbox thread

<Steps>
  <Step title="Find the thread">
    `reply_get_inbox_emails` (pagination only in v1 — no filters; previews only, not full bodies) →
    resolve the exact `threadId` and note its channel.
  </Step>

  <Step title="Draft and confirm">
    Draft the reply and show it to the user for approval.
  </Step>

  <Step title="Send">
    `reply_send_inbox_reply` with the matching channel (`Email` or `LinkedIn`) — v1 supports message
    body only (max 32,000 chars); no Cc/Bcc, attachments, or scheduling. Expect `ChannelMismatch`,
    `ContactOptedOut`, or `ThreadSendFailed` as the named failure modes.
  </Step>

  <Step title="Optionally categorize">
    `reply_change_inbox_category` to reflect the new state.
  </Step>
</Steps>

## Handle an unsupported request

<Steps>
  <Step title="Confirm no tool fits">
    Confirm no tool in `tools/list` can do it.
  </Step>

  <Step title="Check the app map">
    `reply_get_app_map` — the action may be a UI-only setting; return the exact in-app link.
  </Step>

  <Step title="Check the Help Center">
    `reply_search_knowledge_base` + `reply_get_knowledge_base_article` — answer a how-to and cite
    the source.
  </Step>

  <Step title="Report if truly missing">
    Only if genuinely missing, `reply_report_unsupported_request` with a stable kebab-case
    `requestKey` and a `category` from its enum — then tell the user plainly you cannot do it. Offer
    the [REST API](/api-reference/introduction) if it covers the gap.
  </Step>
</Steps>

## Related guides

These recipes power the task-based guides, which add the cross-surface view (CLI, Skills, API):

* [Launch multichannel outreach](/guides/launch-outreach) · [Convert replies into meetings](/guides/convert-replies-to-meetings) ·
  [Build a supervised AI SDR](/guides/build-an-ai-sdr) · [Improve sequences every cycle](/guides/improve-sequences)
