MCP App Store
by KeenEthics
Business & Operations
Reply.io icon

Reply.io

by ReplyApp Inc.

Overview

Reply.io is a sales engagement platform. In ChatGPT it lets a user run their own Reply workspace in conversation: find sequences and check how they are performing, look up contacts and their activity history, review and answer replies in the shared inbox, work the AI SDR approval queue (see pending drafts, regenerate, approve, or reject them), manage mailboxes, sending schedules and safety limits, and diagnose why a sequence or mailbox is not sending. Every tool acts on the workspace the connected account already has access to, under that account's existing Reply permissions and API scopes.

Tools

reply_add_account_note

ChatGPT
Writes a free-text note onto one account (company) and returns the stored note with its numeric ID. Mutation. Use it to persist company-level context gathered elsewhere (CRM facts, funding rounds, hiring signals, research) so people and later agent runs can read it back with reply_list_account_notes. REQUIRES the exact numeric account ID from a prior reply_search_accounts result and the note text (1-512 characters; longer text must be shortened before calling). Never invent the ID, and never ask the user for it. Every call appends a new note; it never edits or replaces an existing one, so do not resend the same text to update it. Does NOT change the account's fields; use reply_update_account for that. For a fact about one person, use reply_add_contact_note instead. Failure modes: InvalidArguments (AccountId must be greater than 0; Notes must be 1-512 characters); NotFound (no account with that ID in this workspace, or the user is not allowed to see it; search for it instead of retrying); InvalidInput (the note was empty once trimmed and sanitized); Forbidden (the notes API is not enabled for this team; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_add_blacklist_domains

ChatGPT
Adds one or more domains to the workspace blacklist. Mutation. Enter bare domains like 'example.com' (no scheme, no 'www'). Domains already on the blacklist are reported in Failed with reason 'Duplicate' and are NOT hard errors. Failure modes: InvalidArguments (provide at least one domain); Forbidden (workspace cannot modify the blacklist; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user). Already-blacklisted domains appear in Failed with reason 'Duplicate'.

reply_add_contact_note

ChatGPT
Writes a free-text note onto one contact's timeline and returns the stored note with its numeric ID. Mutation. Use it to persist context gathered elsewhere (CRM facts, funding news, call summaries, research) so people and later agent runs can read it back with reply_list_contact_notes. REQUIRES the exact numeric contact ID and the note text (1-512 characters; longer text must be shortened before calling). Do NOT guess, fabricate, or estimate the ID. If only the email or LinkedIn URL is known, call reply_search_contacts first. Do NOT ask the user for a numeric contact ID; users do not know internal IDs. Every call appends a new note; it never edits or replaces an existing one, so do not resend the same text to update it. Does NOT change the contact's fields or sequence status; use reply_update_contact for profile edits. Failure modes: InvalidArguments (ContactId must be > 0; Notes must be 1-512 characters); NotFound (the contact does not exist in this workspace; re-fetch via reply_search_contacts); InvalidInput (the note was empty once trimmed); Forbidden (the notes API is not enabled for this team; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_add_contact_to_sequence

ChatGPT
Adds one or more existing contacts to a sequence so they begin receiving its steps. Mutation, high-stakes: starting outreach to people. REQUIRES the exact numeric sequence ID and a non-empty list of contact IDs. All must come from prior tool output (reply_search_sequences, reply_search_contacts, reply_filter_contacts). Never invent, estimate, or ask the user. ContactIds is ALWAYS a JSON array, even for a single contact, e.g. {"sequenceId":1,"contactIds":[123]}. It takes numeric contact IDs only, never emails or names; when only an email or name is known, call reply_search_contacts first and pass the returned Id. To start contacts at a specific step instead of the first one, pass that step's numeric Id as StartStepId; otherwise omit it to begin at the first step. Per-contact failures (already in sequence, opted out, etc.) are returned in NotProcessed; the call as a whole still succeeds. Accepts up to 100 contact IDs per call. Does NOT change the sequence's active/paused state; pair with reply_start_sequence when the sequence is paused. Failure modes: InvalidArguments (SequenceId > 0; ContactIds non-empty and <= 100 entries, all > 0; StartStepId > 0 when supplied; split into batches if needed); SequenceNotFound (re-fetch via reply_search_sequences); ContactNotFound (re-fetch contact IDs via reply_search_contacts); NoStepsInSequence (the sequence has no steps; tell the user to add steps before retrying); ContactLimitExceeded (the workspace plan has hit its sequence-contact limit; tell the user, do not retry); SequenceArchived (the sequence is archived; tell the user before retrying); Forbidden (workspace cannot operate on this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user). Per-contact reasons (e.g. ContactAlreadyInSequence, ContactInBlackList) appear in NotProcessed and are NOT hard failures.

reply_add_knowledge_base_source

ChatGPT
Adds a web-page URL as a source to an AI SDR (Jason) knowledge base, so Jason can use that page's content when answering prospects. Mutation. REQUIRES the exact numeric knowledge base ID from a prior reply_list_knowledge_bases result. Never invent, estimate, default, or ask the user for this value. This tool adds web-page URLs only. To save typed text guidance, edit the knowledge base Instructions with reply_update_knowledge_base; to add a templated answer use reply_create_reply_handler; to add a win-back card use reply_create_reengagement_card. Uploading documents is done in the app UI, not via chat. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; Url must be non-empty); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); Conflict (this URL is already a source; no action needed); InvalidParameter (the URL was rejected; tell the user); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_add_sequence_steps

ChatGPT
Appends one or more new steps with content to the end of an existing sequence, in the order given. Mutation. Supported Type values: 'Email' (automatic email; Subject + Message), 'LinkedInConnect' (automatic LinkedIn connection request; optional note in Message, max 300 chars), 'LinkedInMessage' (automatic LinkedIn message; Message). Other step types (calls, tasks, SMS, conditions) are not supported here; tell the user to add them in the sequence editor. REQUIRES the exact numeric sequence ID from a prior reply_search_sequences or reply_create_sequence result. Never invent, estimate, default, or ask the user for it. DelayInMinutes is the wait after the previous step (1 day = 1440); use 0 for the first step. The first email step of a sequence must have a Subject; follow-up emails may leave it empty to reply in the same thread. Message may contain merge tags like {{FirstName}}. Adding steps to an Active sequence is allowed and takes effect immediately: contacts still in progress will also receive the new steps, so confirm with the user before adding steps to a running sequence. Each step gets one variant; add more variants with reply_create_sequence_step_variant. Per-step failures are returned in NotProcessed (by Index, with a Reason code and a Details explanation) and are NOT hard failures; later steps are still appended. Common reasons: MissingEmailSubject (the first email needs a Subject), InvalidInput (the sequence contains Condition steps, which this tool cannot append to, or the step content was rejected), InvalidStep (the step would leave the sequence invalid); any other reason means the step could not be saved, e.g. the sequence is archived or not accessible. If every step lands in NotProcessed, re-resolve the sequence via reply_search_sequences. Failure modes: InvalidArguments (SequenceId must be > 0; Steps non-empty and <= 100 entries; each Type must be one of the supported values; Message required for Email and LinkedInMessage; LinkedInConnect Message max 300 chars; DelayInMinutes >= 0); NotFound (the sequence does not exist or is not accessible in this workspace; re-resolve it via reply_search_sequences, do not retry with the same ID; nothing was added); Forbidden (the user's role, plan or sequence ownership does not allow editing this sequence or one of the step types; tell the user, do not retry; nothing was added); ServiceUnavailable (transient; retry once, then tell the user).

reply_approve_message

ChatGPT
Approves a single AI SDR draft and sends it to the contact immediately. Mutation, high-stakes: the message goes out as soon as the call succeeds. Identify the draft by the exact numeric SequenceId and ContactId from a prior reply_list_pending_approvals result. Never invent, estimate, default, or ask the user for these values. Optionally override the drafted Body and/or Subject; omit them to send exactly what Jason drafted. Only call this after the user has explicitly approved sending. Failure modes: InvalidArguments (SequenceId and ContactId must be > 0); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no pending approval exists for this sequence and contact, e.g. it was already sent, rejected, or is regenerating; re-list via reply_list_pending_approvals); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_archive_sequence

ChatGPT
Archives a sequence so it is hidden from the active list and can no longer send. Mutation, high-stakes. REQUIRES the exact numeric sequence ID. Do NOT guess, fabricate, or estimate it. Must come from a prior reply_search_sequences result. Do NOT ask the user for a numeric ID; users do not know internal IDs. Archiving removes every contact from the sequence, so no contact receives further steps; reply_unarchive_sequence restores the sequence but does NOT re-enroll those contacts. Confirm with the user before calling. An active sequence cannot be archived: pause it with reply_pause_sequence first. Failure modes: InvalidArguments (SequenceId must be > 0); NotFound (re-fetch via reply_search_sequences); Forbidden (the user cannot archive this sequence; tell the user, do not retry); Archived (the sequence is already archived; nothing to do, tell the user); Active (the sequence is running; pause it with reply_pause_sequence, then retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_assign_email_account_to_sequence

ChatGPT
Links an email account (mailbox) to a sequence so the sequence can send from it. Mutation. REQUIRES both the exact numeric sequence ID and email account ID. Both must come from prior tool output (reply_search_sequences / reply_list_email_accounts). Never invent, estimate, or ask the user. Idempotent: re-linking an already-linked account is a no-op. Does NOT unlink other accounts; the sequence can be linked to multiple mailboxes. Failure modes: InvalidArguments (SequenceId > 0, EmailAccountId > 0); NotFound (the sequence or email account does not exist or is not accessible to this user; re-fetch via reply_search_sequences or reply_list_email_accounts); Forbidden (either the user lacks permission to modify this sequence, or only the sequence owner can link mailboxes to this sequence and the user is not its owner; tell the user, do not retry); LimitReached (sequence has hit the maximum number of linked email accounts; tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_assign_email_account_to_sequence_contacts

ChatGPT
Repoints contacts ALREADY enrolled in a sequence at a specific sending mailbox. Mutation: it changes which mailbox future emails to those contacts are sent from. This is the fix for contacts left without a sender after their mailbox was removed or disconnected, and the only way to move a subset of contacts rather than the whole sequence. Identify everything by name: the sequence by its exact name, the mailbox by its email address, the contacts by their email addresses. The mailbox must already be linked to the sequence (link it first with reply_assign_email_account_to_sequence). Contacts that are not in the sequence are reported back in notInSequence and are left untouched; a contact already sending from that mailbox counts as reassigned, so repeating the same call is safe. Failure modes: InvalidArguments (no contact emails, more than 100 of them, the sequence name is unknown or ambiguous, or the mailbox address is unknown); SequenceNotFound (the sequence does not exist); InvalidInput (the mailbox is not linked to the sequence - link it first, then retry); SequenceArchived (the sequence is archived; nothing can be reassigned in it); Forbidden (you are not the owner of this sequence, and only the owner can do this; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_assign_linkedin_account_to_sequence

ChatGPT
Links a LinkedIn account to a sequence so the sequence can run LinkedIn steps from it. Mutation. REQUIRES both the exact numeric sequence ID and LinkedIn account ID. Both must come from prior tool output (reply_search_sequences / reply_list_linkedin_accounts). Never invent, estimate, or ask the user. Idempotent: re-linking an already-linked account is a no-op. Does NOT unlink other accounts; the sequence can be linked to multiple LinkedIn accounts. Failure modes: InvalidArguments (SequenceId > 0, LinkedInAccountId > 0); NotFound (the sequence or LinkedIn account does not exist; re-fetch via reply_search_sequences or reply_list_linkedin_accounts); Forbidden (workspace cannot link this LinkedIn account; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_assign_schedule_to_sequence

ChatGPT
Sets the sending schedule (business-hours window) on a sequence. Mutation. REQUIRES both the exact numeric sequence ID and schedule ID. Both must come from prior tool output (reply_search_sequences / reply_list_schedules). Never invent, estimate, or ask the user. Replaces the sequence's current schedule with the supplied one; does not modify other sequence settings. Failure modes: InvalidArguments (SequenceId > 0, ScheduleId > 0); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); ScheduleNotFound (the schedule does not exist; re-fetch via reply_list_schedules); Archived (the sequence is archived; tell the user); Forbidden (workspace cannot modify this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_attach_knowledge_base_to_sequence

ChatGPT
Attaches a knowledge base to an AI SDR sequence so Jason uses it when answering prospects in that sequence. Mutation. Replaces whatever knowledge base the sequence currently uses. REQUIRES the exact numeric SequenceId (from reply_search_sequences) and the exact numeric KnowledgeBaseId (from reply_list_knowledge_bases). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (SequenceId and KnowledgeBaseId must be > 0); Forbidden (the AI SDR feature is not enabled or you cannot access this sequence; tell the user, do not retry); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); InvalidParameter (the sequence is not an AI SDR sequence; tell the user); InvalidKnowledgeBase (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_attach_offer_to_sequence

ChatGPT
Attaches an offer to an AI SDR sequence so Jason pitches it for that sequence's outreach. Mutation. Replaces whatever offer the sequence currently uses. REQUIRES the exact numeric SequenceId (from reply_search_sequences) and the exact numeric OfferId (from reply_list_offers). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (SequenceId and OfferId must be > 0); Forbidden (the AI SDR feature is not enabled or you cannot access this sequence; tell the user, do not retry); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); InvalidParameter (the sequence is not an AI SDR sequence; tell the user); InvalidOffer (no offer with this id; re-fetch via reply_list_offers); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_attach_playbook_to_sequence

ChatGPT
Attaches a playbook to an AI SDR sequence so Jason follows it for that sequence's outreach. Mutation. Replaces whatever playbook the sequence currently uses. REQUIRES the exact numeric SequenceId (from reply_search_sequences) and the exact playbook ID (from reply_list_playbooks). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (SequenceId must be > 0; PlaybookId must be non-empty); Forbidden (the AI SDR feature is not enabled or you cannot access this sequence; tell the user, do not retry); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); InvalidParameter (the sequence is not an AI SDR sequence; tell the user); InvalidIdFormat (the PlaybookId is malformed; re-fetch via reply_list_playbooks); InvalidPlaybook (no playbook with this id; re-fetch via reply_list_playbooks); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_blacklist_contact

ChatGPT
Adds the contact's email and LinkedIn profile URL (or the contact's whole email domain) to the workspace blacklist so future outreach to that contact (or to any address on that domain) is blocked at send time on every channel. Mutation, high-stakes. REQUIRES the exact numeric contact ID. Must come from a prior reply_search_contacts or reply_filter_contacts result. Never invent, estimate, default, or ask the user. When BlockEntireDomain is true, every contact on the same email domain becomes blocked, including ones not yet in the workspace. Use the per-email default unless the user explicitly asks to block the whole company. Different from "opting out": opt-out is a per-prospect flag that stops sending; the blacklist is a workspace-wide email/domain/LinkedIn-URL pattern list that prevents sending even to new contacts matching the pattern. Does NOT delete the contact; their profile and history remain visible. Failure modes: InvalidArguments (ContactId must be > 0; business rejections also arrive under this code with the reason in the message: 'NotFound' means the contact does not exist, re-fetch via reply_search_contacts; 'Forbidden' means blacklisting is not allowed for this workspace, tell the user and do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_bulk_approve_messages

ChatGPT
Approves multiple AI SDR drafts at once and sends them all immediately. Mutation, high-stakes: every listed message goes out as soon as the call succeeds. Pass the exact SequenceId and ContactId pairs from a prior reply_list_pending_approvals result. To approve everything matching a sequence, owner, or channel, first call reply_list_pending_approvals with those filters, show the user the matching drafts and the count, get explicit confirmation, then pass those references here. The batch is atomic: if any reference is not a current pending approval, the whole batch is rejected and nothing is sent. Up to 100 references per call. Failure modes: InvalidArguments (Items must be non-empty, at most 100, each with SequenceId and ContactId > 0); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (at least one reference is not a current pending approval, e.g. already sent, rejected, or regenerating; nothing was sent, the message names every reference that was not found, so retry with the remaining references only); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_bulk_tag_email_accounts

ChatGPT
Adds and/or removes tags on one or more email accounts (mailboxes) in a single call. Mutation. REQUIRES the exact numeric email account IDs from a prior reply_list_email_accounts result. Do NOT invent them or ask the user for numeric IDs. Provide emailAccountIds plus at least one of addTags or removeTags (tag NAMES, not IDs). A tag that does not exist yet is created. Every listed mailbox gets the same add/remove applied. Mailboxes are processed in order; if one fails partway, mailboxes earlier in the list have already been updated and are not rolled back. Failure modes: InvalidArguments (emailAccountIds must be non-empty with IDs > 0; provide at least one of addTags or removeTags); NotFound (a mailbox does not exist; re-fetch via reply_list_email_accounts); Forbidden (workspace cannot modify a mailbox; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_change_contact_owner

ChatGPT
Reassigns one or more contacts to a different Reply.io user. Mutation, high-stakes: changes who sees the contacts and can act on their behalf. REQUIRES a non-empty list of numeric contact IDs and the numeric UserId of the new owner. ContactIds must come from reply_search_contacts or reply_filter_contacts; NewOwnerUserId must come from reply_search_team_members. Never invent, estimate, or ask the user. ReassignTasks: when true, open tasks attached to those contacts are reassigned to the new owner too; when false (default), tasks keep their existing assignee. Accepts up to 100 contact IDs per call. When confirming completion to the user, refer to the new owner by their FullName (from reply_search_team_members), not by the numeric UserId. PARTIAL-SUCCESS HANDLING: AffectedContactIds is the authoritative list of contacts whose owner actually changed. Never claim that an input ContactId was reassigned unless it appears in AffectedContactIds. If AffectedContactIds.Count is less than the number of input ContactIds, report the exact counts (e.g. 'reassigned 48 of 50'). Contact IDs that do not exist, or whose per-contact owner could not be changed, are not reported as errors: they are simply absent from AffectedContactIds. Failure modes: InvalidArguments (ContactIds must be non-empty and <= 100 entries, all > 0; NewOwnerUserId must be > 0; split into batches if needed); NotFound (the target user is not a member of this workspace; re-fetch via reply_search_team_members); LimitExceeded (the reassignment would exceed the contact limit; tell the user, do not retry); Forbidden (workspace cannot reassign these contacts; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_change_inbox_category

ChatGPT
Assigns (or clears) the workspace-defined category on one inbox thread. Mutation. REQUIRES the exact numeric thread ID. Must come from a prior reply_get_inbox_emails result. Never invent, estimate, default, or ask the user. Pass CategoryId = null/omit to clear the category. Categories are workspace-scoped; CategoryId must match a category the workspace has defined (e.g. via the inbox UI). Failure modes: InvalidArguments (ThreadId must be > 0; CategoryId must be > 0 when set); NotFound (the thread or category does not exist; re-fetch thread via reply_get_inbox_emails); Forbidden (workspace cannot modify this thread; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_change_sequence_owner

ChatGPT
Transfers ownership of a sequence to another teammate. Mutation, high-stakes: the new owner's permissions then govern the sequence, its enrolled contacts are reassigned to the new owner within the sequence, and every mailbox linked to the sequence is unlinked, so it cannot send email until a mailbox is linked again with reply_assign_email_account_to_sequence. Tell the user about the unlinked mailboxes when confirming. REQUIRES the exact numeric sequence ID and the numeric UserId of the new owner. SequenceId must come from reply_search_sequences; NewOwnerUserId must come from reply_search_team_members. Never invent, estimate, or ask the user; users do not know internal IDs. Outside organization workspaces only the team owner may change a sequence owner. When confirming completion to the user, refer to the new owner by their FullName (from reply_search_team_members), not by the numeric UserId. Failure modes: InvalidArguments (SequenceId must be > 0, NewOwnerUserId must be > 0); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); TeamMemberNotFound (the new owner is not a member of this team; re-fetch via reply_search_team_members); OwnerLimitExceeded (the new owner would exceed their contact limit; tell the user, do not retry); Forbidden (the user is not allowed to change this sequence's owner; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_change_status_in_sequence

ChatGPT
Sets the per-sequence status of a single contact inside one sequence. Mutation. Use this to pause a contact in a sequence, mark them as Finished, etc. REQUIRES the exact numeric sequence ID and contact ID. Both must come from prior tool output. Do NOT guess, fabricate, or estimate. Do NOT ask the user for numeric IDs; users do not know internal IDs. Allowed status values: 'Active', 'Paused', 'Finished', 'Inactive', 'OutOfOffice'. Does NOT change the contact's overall opt-out state; use a dedicated blacklist tool for that. Does NOT remove the contact from the sequence; use a removal tool for that. Failure modes: InvalidArguments (SequenceId and ContactId must be > 0; Status must be one of the five allowed values); SequenceNotFound (re-fetch via reply_search_sequences); ContactNotFound (re-fetch via reply_search_contacts); NotInSequence (the contact is not in this sequence; add it first via reply_add_contact_to_sequence); InvalidStatusTransition (this status change is not allowed from the current state; read the contact's current status first); SequenceArchived (the sequence is archived; tell the user before retrying); Forbidden (workspace cannot operate on that sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_compare_sequence_performance

ChatGPT
Returns side-by-side email + LinkedIn performance metrics for multiple sequences in a single call. REQUIRES the exact numeric sequence IDs. Do NOT guess, fabricate, or estimate them. Each ID must come from a prior reply_search_sequences result or another tool's output earlier in this conversation. Do NOT ask the user for numeric IDs; users do not know internal IDs. Use this when the caller wants to compare two or more sequences directly. For a single sequence, call reply_get_sequence_stats instead. Accepts up to 100 sequence IDs per call; to compare more, split the IDs into several calls and merge Items by SequenceId. Date window defaults to all-time; pass From/To (UTC ISO-8601) for a custom range. Sequences with no activity in the window, or that you cannot access, are omitted from Items. Align by SequenceId (not by index) and treat a missing row as 'no data'. Does NOT include step content or prospect-level data. Failure modes: InvalidArguments (SequenceIds non-empty and <= 100 entries, each > 0, otherwise split the IDs into several calls and merge Items by SequenceId; From must be <= To); ServiceUnavailable (the stats backend is temporarily offline; retry once, then tell the user). Inaccessible or empty-window sequences silently drop out of Items rather than causing an error.

reply_complete_task

ChatGPT
Marks an existing task as completed. Mutation. REQUIRES the exact numeric task ID. Must come from a prior reply_list_my_tasks result. Never invent, estimate, default, or ask the user. For Call tasks, CallResolution is recommended ('Positive', 'ToCall', 'Negative'). FinishProspectInSequence, when true, also marks the contact as Finished in the related sequence. Failure modes: InvalidArguments (TaskId > 0; CallResolution one of Positive/ToCall/Negative if supplied. Business rejections also arrive under this code with the reason in the message: 'NotFound' means the task does not exist, re-fetch via reply_list_my_tasks; 'CannotComplete' means the task is in a state from which it cannot be completed, e.g. already Finished or Cancelled, tell the user; 'Forbidden' means the workspace cannot complete this task, tell the user and do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_connect_email_account_warmup

ChatGPT
Enrolls a mailbox in email warm-up. Mutation. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. On success the mailbox is added to warm-up. A freshly enrolled mailbox starts in a paused 'Disabled' state and must be switched on from the warm-up page in the app before it starts sending. Enrolling a mailbox already in warm-up succeeds and changes nothing (alreadyConnected=true). This tool never charges a card on its own: when the workspace has no free warm-up slot left and payment is required, it makes NO charge and returns PaymentRequired instead. Failure modes: InvalidArguments (EmailAccountId must be > 0); PaymentRequired (a paid warm-up slot is needed and no charge was made; tell the user to complete the warm-up purchase in the app, do not retry); ConnectFailed (the mailbox could not be enrolled; tell the user to set warm-up up in the app, do not blindly retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_connect_integration

ChatGPT
Returns the in-app link where the user connects and authorizes a CRM or system integration in their own browser, plus whether an account of this type is already connected. LINK-OUT ONLY: this tool never accepts, requests, or transmits a login, password, or API key, and never performs the authorization itself; it only hands back the URL for the user to open. Present the link to the user and let them complete the connection. Identify the integration by its system-type name taken from a prior reply_list_integrations result. Failure modes: InvalidArguments (the integration name is empty or not a known system type; call reply_list_integrations to get valid names); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_account

ChatGPT
Creates an account (company) in the workspace and returns it with its numeric ID. Mutation. REQUIRES Name. Every other field is optional; pass what the user or the external tool gave, do not invent values. Duplicates are NOT prevented: a second account with a name that already exists is created anyway, so search with reply_search_accounts first and update the existing account instead of adding another one. To put a company that came from a connected external tool into Reply together with its contacts, and to keep it updatable on a later run, use reply_sync_mcp_records instead: it remembers which external record each Reply row came from. Failure modes: InvalidArguments (Name is empty or longer than 128 characters, or another field exceeds its cap: DomainName, Country, State and City 128, Industry, Phone and Email 256, LinkedInUrl 512, Description 4000); Forbidden (this workspace or user is not allowed to create accounts; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_call_resolution

ChatGPT
Creates a custom call resolution (a workspace-wide call-outcome label). Mutation. Provide name and resolutionBucket ('positive', 'toCall' or 'negative') that the new resolution rolls up to. Names must be unique across all resolutions. The three system defaults cannot be duplicated. Failure modes: InvalidArguments (name must not be empty; resolutionBucket must be 'positive', 'toCall' or 'negative'); InvalidOperation (a resolution with this name already exists, or the settings service rejected the change; tell the user); Forbidden (workspace cannot change these settings; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_contact

ChatGPT
Creates a new contact in the workspace. Mutation. REQUIRES the contact's name: at least one of FirstName or LastName must be non-empty. If the user did not give a name, ask them for it ("What is the contact's full name?") BEFORE calling this tool; do not invent or default a name. REQUIRES at least one of Email or LinkedInUrl. Other fields are optional. Returns the newly created contact's full profile, including its numeric ID, which can be used in subsequent tool calls. Does NOT add the contact to any sequence; use a dedicated sequence-add tool for that. Does NOT validate or normalize phone / LinkedIn URL formats; pass them as the user provided. On workspaces with the Accounts feature enabled, a supplied Company (with optional Industry) is used to link the contact to a matching Account — found by company name and email domain, or created if none exists — instead of being stored on the contact directly; just pass the company name as Company. When the Accounts feature is off, Company and Industry are stored on the contact directly. CustomFields sets custom field values by name: call reply_list_contact_custom_fields first and pass the field's exact Label as Name (case-insensitive). A Name made only of digits is read as a FieldId on create, so for a Label like '2024' pass that field's FieldId instead. A Name that matches no custom field is silently skipped with no error; check the returned CustomFields (keyed by numeric field ID) before confirming it was set. Failure modes: InvalidArguments (FirstName or LastName must be non-empty, ask the user for the name; Email or LinkedInUrl is required; every CustomFields entry needs a non-empty Name; respect string length caps: Email 256, LinkedInUrl 512, names 128, Title/Industry/Phone 256, City 180, State 100, Country 90, TimeZoneId 90, Notes 512); InvalidInput (upstream rejected the payload after our checks; surface the message); Forbidden (workspace cannot create contacts; tell the user, do not retry); PERMISSION_DENIED (the user lacks permission to create Accounts, needed to link a new Company; surfaced as PERMISSION_DENIED on MCP and as Forbidden on other surfaces; either way do not retry, tell the user to use an existing company/Account or request the permission); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_contact_custom_field

ChatGPT
Creates a new contact custom field for the workspace. Mutation. type must be 'text' or 'number'. The field is created workspace-wide for contacts. Failure modes: InvalidArguments (label must not be empty; type must be 'text' or 'number'); InvalidInput (the workspace rejected the field, e.g. an unsupported label format; tell the user); DuplicateName (a field with this label already exists; tell the user); LimitExceeded (the workspace hit its custom-field limit; tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_knowledge_base

ChatGPT
Creates a new AI SDR (Jason) knowledge base. Mutation. Name is required. Instructions is optional free text telling Jason how to use this knowledge when answering prospects. Add URL sources afterwards with reply_add_knowledge_base_source, then attach it to a sequence with reply_attach_knowledge_base_to_sequence. Failure modes: InvalidArguments (Name must be non-empty); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); Conflict (a knowledge base with this name already exists; choose another name); InvalidParameter (the content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_offer

ChatGPT
Creates a new AI SDR (Jason) offer that Jason can pitch. Mutation. Name is required; the other fields are optional and describe what Jason sells: company context, ideal customer profile (Icp), reason for outreach, and lists of case studies, pain points, proof points, value propositions, and calls to action. To draft these fields automatically from a company website, use reply_generate_offer_from_website first, then pass the results here. Failure modes: InvalidArguments (Name must be non-empty); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); InvalidParameter (the offer content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_playbook

ChatGPT
Creates a new AI SDR (Jason) playbook: a named set of selling instructions. Mutation. Name and Description are short labels; Body is the actual instruction text (the prompt) that tells Jason how to sell. Visibility controls who can use it: 'Team' (default) or 'Organization'. Global playbooks cannot be created here. Failure modes: InvalidArguments (Name, Description, and Body must be non-empty; Visibility must be 'Team' or 'Organization'; the Body must not contain unrecognized personalization variables, the message lists them); Forbidden (the AI SDR feature is not enabled, or you lack permission to create organization playbooks; tell the user, do not retry); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_reengagement_card

ChatGPT
Adds a reengagement card to the default re-engagement flow of an AI SDR (Jason) knowledge base so Jason knows how to win back a prospect who went quiet. Mutation. Name is a short label; Instructions tells Jason how to re-engage; SendAfter is the number of days after the last contact before Jason reaches out. SampleAnswer, ToneOfVoice, ResponseLength, and link URLs are optional. ToneOfVoice (case-insensitive): 'Confident', 'Persuasive', 'Witty', 'Straightforward', 'Empathetic'. ResponseLength (case-insensitive): 'SuperShort', 'Short', 'Medium', 'Long'. IsEnabled turns the card on (default on); DeliveryMode (case-insensitive): 'Draft' (Jason drafts the message for a human to review), 'Auto' (Jason sends automatically without review), defaults to Draft. REQUIRES the exact numeric knowledge base ID from a prior reply_list_knowledge_bases result. Never invent, estimate, default, or ask the user for this value. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; Name and Instructions must be non-empty; SendAfter must be >= 0; ToneOfVoice and ResponseLength must be allowed values); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); Conflict (the SendAfter window overlaps an existing reengagement card in this flow; pick a different SendAfter value); InvalidParameter (the content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_reply_handler

ChatGPT
Adds a reply handler to an AI SDR (Jason) knowledge base so Jason knows how to answer a specific kind of prospect question. Mutation. TypeOfQuestion is the kind of question it covers (for example 'Pricing' or 'Security'); Instructions tells Jason how to respond. SampleAnswer, ToneOfVoice, ResponseLength, and link URLs are optional. ToneOfVoice (case-insensitive): 'Confident', 'Persuasive', 'Witty', 'Straightforward', 'Empathetic'. ResponseLength (case-insensitive): 'SuperShort', 'Short', 'Medium', 'Long'. DeliveryMode (case-insensitive): 'Draft' (Jason drafts the answer for a human to review), 'Auto' (Jason sends automatically without review), 'StopAndNotify' (Jason does not reply — it pauses the contact and emails a rep); defaults to Draft. AdditionalNotificationEmail (only for StopAndNotify): by default the alert goes to the account used to reach the prospect (the sending email account, or the LinkedIn account for LinkedIn steps), and this address is notified in addition to it. REQUIRES the exact numeric knowledge base ID from a prior reply_list_knowledge_bases result. Never invent, estimate, default, or ask the user for this value. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; TypeOfQuestion and Instructions must be non-empty; ToneOfVoice and ResponseLength must be allowed values; AdditionalNotificationEmail must be a valid email); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); InvalidParameter (the content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_schedule

ChatGPT
Creates a new sending schedule with its per-weekday time windows. Mutation. timezoneId is an IANA timezone like 'America/New_York'. Each weekday timing has an active flag and time ranges (hour 0-23, minute 0-59). Set useFollowUpSchedule=true only if you also provide followUpTimings. Failure modes: InvalidArguments (name and timezoneId must not be empty; time ranges must be valid); DuplicateName (a schedule with this name exists; tell the user); Forbidden (workspace cannot create schedules; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_sequence

ChatGPT
Creates a new, empty sequence with the given name and returns its numeric ID. Mutation. The sequence is created in status 'New' with no steps and no contacts, so it sends nothing until steps and contacts are added and it is started with reply_start_sequence. It gets the user's default schedule, the user's default mailbox and first LinkedIn account when available, the workspace's default daily email limit unless EmailsPerDay is given, and the standard default settings (plain-text emails, open tracking off, link tracking off, contact finished on reply). Next steps: reply_add_sequence_steps to add Email/LinkedIn steps, reply_update_sequence_accounts or reply_assign_schedule_to_sequence to change accounts or schedule, reply_update_sequence_general_settings to change sending settings, reply_add_contact_to_sequence to enroll contacts. Before creating, check with reply_search_sequences whether a sequence with that name already exists; names are not unique and a second call creates a second sequence. Failure modes: InvalidArguments (Name must be non-empty and at most 255 chars; EmailsPerDay must be 1-10000 when supplied); Forbidden (the user's plan or role cannot create sequences; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_sequence_step_variant

ChatGPT
Adds one new text content variant (an A/B variation) to an existing sequence step. Mutation: the new variant is enabled by default and becomes eligible to be sent to contacts on that step. Works only for steps whose SupportsVariants is true in reply_get_sequence_steps, except LinkedIn voice-message steps (they need an audio recording). Existing variants are left unchanged; there is no tool to edit an existing variant's content. REQUIRES the exact numeric step ID from a prior reply_get_sequence_steps result. SequenceId is optional: pass it when known, otherwise it is resolved from the step. Never invent, estimate, default, or ask the user for either ID. Message is the body text and may contain merge tags like {{FirstName}}. Subject applies to email and LinkedIn InMail steps only; the first email step of a sequence must have a subject, follow-up emails may leave it empty to reply in the same thread. To create a whole new step use reply_add_sequence_steps instead. Failure modes: InvalidArguments (StepId must be > 0; SequenceId must be > 0 when supplied; Message must not be empty); NotFound (the step or sequence does not exist, is not accessible, or the sequence is archived; re-resolve via reply_get_sequence_steps, and tell the user an archived sequence must be unarchived first); Forbidden (the user's role, plan or sequence ownership does not allow editing this sequence; tell the user, do not retry); UnsupportedOperation (this step type takes no text variants; tell the user, do not retry); MissingEmailSubject (this is the first email step and the variant needs a Subject; retry with one); InvalidInput (the step rejected the variant, e.g. AI SDR template settings; tell the user); InvalidStep (the step would become invalid; tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_task

ChatGPT
Creates a new task (ToDo / Call / Meeting / LinkedIn / ManualEmail / Sms / WhatsApp) for the user. Mutation. REQUIRES TaskType, StartAt, DueTo, Subject, and Body. If TaskType is 'LinkedIn', LinkedInTaskType is required ('Message', 'Connect', 'InMail', 'ViewProfile'). ContactId, if supplied, must come from prior tool output. Never invent, estimate, default, or ask the user. Does NOT schedule the task inside a sequence; this is a standalone (manual) task. Failure modes: InvalidArguments (TaskType and LinkedInTaskType must be from the allowed sets; Subject non-empty and <= 1024 chars; Body non-empty and <= 32000 chars; StartAt must be <= DueTo; ContactId > 0 if set; LinkedInTaskType required when TaskType is LinkedIn. Business rejections also arrive under this code with the reason in the message: 'InvalidInput' means V3 rejected the create payload; 'InvalidDates' means V3 rejected the date window, e.g. dates in the past; 'ContactNotAccessible' means the contact does not exist or this workspace cannot see it, re-fetch via reply_search_contacts; 'RenderError' means the Subject/Body template failed to render, check for stray placeholders; 'Forbidden' means the workspace cannot create tasks, tell the user and do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_create_trigger

ChatGPT
Creates an automation trigger: an event, optional conditions, and one or more actions that run on the matching contact. Mutation with wide blast radius, it acts on every contact that matches from now on, so read back what you created and confirm it with the user. New triggers are created switched OFF unless enabled=true is passed; switch one on later with reply_set_trigger_enabled. event is one of 'contactCreated', 'contactUpdated', 'contactOpenedEmail', 'contactClickedLink', 'emailWasReplied', 'emailWasSent', 'emailWasBounced', 'contactOptedOut', 'callWasLogged', 'inboxCategoryWasSet'. actions support 'updateContactField' (contactField + value, plus customFieldId when contactField is 'customField'), 'setContactStage' (stageId from reply_list_contact_stages) and 'addToList' (listId from reply_search_lists). conditions support 'contactField' (contactField + value), 'contactStage' (stageId), 'contactList' (listId) and 'accountCompanySize' (companySize such as 'fiveHundred' or 'oneThousand'), each with a clause of 'equals', 'notEquals', 'contains', 'greaterThan' or 'lessThan'. COVERAGE LIMIT: Reply supports more action and condition types than the sets above (Pipedrive actions, sequence moves, owner assignment, and the long tail of conditions). If the user asks for one of those, say it must be built in the app under Automations, Triggers, and do NOT substitute a different action. Failure modes: InvalidArguments (name, event and at least one action are required; ids must be > 0); InvalidOperation (an unsupported or malformed event, action, condition, clause or field; the message names the allowed values, fix the call or tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_delete_call_resolution

ChatGPT
Deletes a custom call resolution. Mutation, irreversible. REQUIRES the exact numeric resolution ID from a prior reply_list_call_resolutions result. Do NOT invent it or ask the user for a numeric ID. System default resolutions (Positive, To Call, Negative) cannot be deleted. Failure modes: InvalidArguments (ResolutionId must be > 0; there is no custom resolution with this ID (re-fetch via reply_list_call_resolutions); or the resolution is a system default and cannot be deleted); Forbidden (workspace cannot change these settings; tell the user, do not retry); ServiceUnavailable (transient, or the settings service could not complete the change; retry once, then tell the user).

reply_delete_contact_custom_field

ChatGPT
Permanently removes a contact custom field and its data across all contacts. Mutation, irreversible. REQUIRES the exact numeric field ID from a prior reply_list_contact_custom_fields result. Do NOT invent it or ask the user for a numeric ID. Failure modes: InvalidArguments (FieldId must be > 0); NotFound (the field does not exist; re-fetch via reply_list_contact_custom_fields); Forbidden (workspace cannot delete custom fields; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_delete_email_account

ChatGPT
Permanently removes an email account (mailbox) from the workspace. Mutation, irreversible. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. Failure modes: InvalidArguments (EmailAccountId must be > 0); NotFound (the mailbox does not exist; re-fetch via reply_list_email_accounts); Forbidden (workspace cannot delete this mailbox; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_delete_knowledge_base_source

ChatGPT
Removes a URL source from an AI SDR (Jason) knowledge base. Mutation. REQUIRES the exact numeric knowledge base ID and the source id, both from a prior reply_get_knowledge_base result. Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; SourceId must be a valid source id from reply_get_knowledge_base); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (the knowledge base or source does not exist; re-fetch via reply_get_knowledge_base); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_delete_reengagement_card

ChatGPT
Removes a reengagement card from an AI SDR (Jason) knowledge base by card id (the card may live in any re-engagement flow). Mutation. REQUIRES the exact numeric knowledge base ID (from reply_list_knowledge_bases) and the exact reengagement card id (from reply_list_reengagement_cards). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; ReengagementCardId must be a valid id from reply_list_reengagement_cards); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (the knowledge base or reengagement card does not exist; re-fetch via reply_list_reengagement_cards); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_delete_reply_handler

ChatGPT
Removes a reply handler from an AI SDR (Jason) knowledge base. Mutation. REQUIRES the exact numeric knowledge base ID (from reply_list_knowledge_bases) and the exact reply handler id (from reply_list_reply_handlers). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; ReplyHandlerId must be a valid id from reply_list_reply_handlers); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (the knowledge base or reply handler does not exist; re-fetch via reply_list_reply_handlers); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_delete_schedule

ChatGPT
Permanently removes a sending schedule. Mutation, irreversible. REQUIRES the exact numeric schedule ID from a prior reply_list_schedules result. Do NOT invent it or ask the user for a numeric ID. Fails if the schedule is the default or is still used by a sequence. Failure modes: InvalidArguments (ScheduleId must be > 0); NotFound (the schedule does not exist; re-fetch via reply_list_schedules); DeleteRejected (the schedule is the default or is in use; reassign or set another default first); Forbidden (workspace cannot delete this schedule; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_delete_trigger

ChatGPT
Permanently deletes an automation trigger. Mutation, irreversible. REQUIRES the exact trigger ID (a GUID) from a prior reply_list_triggers result. Do NOT invent it or ask the user for an ID. Failure modes: InvalidArguments (TriggerId must be a valid GUID); NotFound (the trigger does not exist; re-fetch via reply_list_triggers); ServiceUnavailable (transient; retry once, then tell the user).

reply_diagnose

ChatGPT
Explains WHY a Reply.io entity is not sending or not making progress, and WHICH settings the user should change to fix it. Use this when the caller asks things like "why isn't my sequence sending", "why did emails stop", "what's wrong with this sequence", "why aren't messages going out". Returns an overall status ('Healthy', 'Degraded', 'Blocked'), a primary blocking reason, and a list of findings; each finding carries a recommended action code and a plain-language fix. EntityType currently supports only 'sequence'. EntityId is the entity's numeric ID passed as a string. Do NOT guess, fabricate, or estimate it. For a sequence, obtain the ID from a prior reply_search_sequences result; do NOT ask the user for a numeric ID, users do not know internal IDs. A 'Healthy' status with findings is the normal answer to "it is Active but nothing goes out": the sequence is fine and sending is merely deferred. Report the deferral rather than saying nothing is wrong. Contact counts, schedule window and throttling describe the sequence right now; findings taken from the sequence log cover the last 30 days. Two causes this tool does NOT cover, follow up with another call when the user asks about them: a contact stuck on a manual Call/Task/LinkedIn step or an approval-required step (reply_list_my_tasks, reply_list_pending_approvals), and why one specific contact was paused (reply_get_contact_activity). Failure modes: InvalidArguments (EntityType is not a supported value, or EntityId is empty or over 64 characters; fix the call); InvalidEntityId (EntityId is not a valid id for that entity type); NotFound (the entity does not exist or is not in your workspace); Forbidden (delivery diagnostics is not enabled for your team, or you lack access to the entity); ServiceUnavailable (transient backend failure; retry once, then tell the user).

reply_disconnect_email_account_warmup

ChatGPT
Removes a mailbox from email warm-up and stops warming it. Mutation. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. Failure modes: InvalidArguments (EmailAccountId must be > 0); NotFound (the mailbox is not enrolled in warm-up at all, no matter where it was enrolled from, so there is nothing to disconnect; treat as already disconnected); DisconnectFailed (the mailbox IS enrolled but removal failed; tell the user to remove it on the warm-up page in the app, and do NOT tell them it was never enrolled); PaymentRequired (a billing change must be confirmed and no change was made; tell the user to complete it in the app, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_disconnect_integration

ChatGPT
Disconnects one connected integration account, so Reply stops syncing with it. Mutation, DESTRUCTIVE: the connection and its sync configuration are removed and reconnecting requires authorizing the integration again. REQUIRES the exact numeric integrationAccountId from a prior reply_list_integrations result. Do NOT invent it, do NOT pass a system-type name, and do NOT ask the user for a numeric ID. For Pipedrive this also disables that workspace's Pipedrive triggers and removes its service filter, matching what the app does. The Slack app cannot be disconnected here: send the user to the Integrations page. Failure modes: InvalidArguments (IntegrationAccountId must be > 0); NotFound (no connected integration account with this id in the workspace; re-fetch via reply_list_integrations); InvalidOperation (the integration could not be disconnected; tell the user to disconnect it on the Integrations page); ServiceUnavailable (transient; retry once, then tell the user).

reply_disconnect_meetings_calendar_account

ChatGPT
Disconnects the connected meeting account for one provider: 'googleCalendar' clears the Google Calendar connection, 'calendly' revokes the Calendly OAuth connection. Mutation, irreversible: reconnecting requires the user to re-run the provider OAuth flow in Reply. Failure modes: InvalidArguments (provider must be exactly 'googleCalendar' or 'calendly'); InvalidOperation (the meetings service could not disconnect the account; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_duplicate_playbook

ChatGPT
Duplicates an existing AI SDR (Jason) playbook into a new one with the same description and instruction Body. Mutation. Use this when the user wants a copy of a playbook to tweak. The copy is named '<original> (copy)' unless you pass NewName. Visibility of the copy defaults to the original's (Team or Organization); a Global playbook is copied as Team since Global playbooks cannot be created. Pass Visibility to override ('Team' or 'Organization'). Style files are NOT copied. REQUIRES the exact playbook ID from a prior reply_list_playbooks result. Never invent, estimate, default, or ask the user for this value. Failure modes: InvalidArguments (PlaybookId must be non-empty; Visibility must be 'Team' or 'Organization' when provided; the original Body must not contain unrecognized personalization variables, the message lists them); Forbidden (the AI SDR feature is not enabled, or you lack permission to create organization playbooks; tell the user, do not retry); NotFound (no playbook with this id; re-fetch via reply_list_playbooks); InvalidIdFormat (the id is malformed; re-fetch via reply_list_playbooks); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_filter_contacts

ChatGPT
Lists contacts narrowed by list membership, sequence membership and/or a free-text search term applied to name/email/company. Use this when the caller asks for contacts "in list X", "in sequence Y", or matching some text. Numeric IDs (ListId, SequenceId) MUST come from prior tool output: call reply_search_lists to resolve a list name to ListId, reply_search_sequences for SequenceId. Do NOT guess, fabricate, or estimate IDs. Do NOT ask the user for numeric IDs; users do not know internal IDs. When summarising results to the user, refer to the list or sequence by the Name you resolved via reply_search_lists / reply_search_sequences, not by its numeric ID. Does NOT accept rule-based property/condition filters (those require a separate tool). For exact email or LinkedIn URL lookups, call reply_search_contacts instead. A ListId or SequenceId that does not exist produces an empty page, not an error: if you expected matches, re-resolve the ID via reply_search_lists / reply_search_sequences. Failure modes: InvalidArguments (IDs must be > 0; SearchTerm capped at 512 chars); Forbidden (workspace cannot read contacts; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_generate_offer_from_website

ChatGPT
Asks Jason to draft offer content from a company website URL (and optional extra notes). Returns suggested fields (company name and description, ICP, reason for outreach, value propositions, proof points, etc.) for the user to review. Does NOT save anything: to persist the result, review it with the user and then call reply_create_offer with the chosen fields. If ReusedOfferId is set, an existing offer already matches this content and can be used as-is instead of creating a new one. Failure modes: InvalidArguments (Url must be non-empty; Provider, if set, must be 'Claude', 'OpenAi', 'Gemini', or 'Mistral'); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); ServiceUnavailable (generation failed or the backend is unavailable; retry once, then tell the user).

reply_get_account

ChatGPT
Reads one account (company) by its numeric ID and returns its full profile, including how many contacts are linked to it. REQUIRES the exact numeric account ID from a prior reply_search_accounts result. Never invent it, and never ask the user for it. Failure modes: InvalidArguments (AccountId must be greater than 0); NotFound (no account with that ID in this workspace; search for it instead of retrying); Forbidden (this user is not allowed to read accounts; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_account_settings

ChatGPT
Returns the signed-in user's own account settings from Settings > Account: first and last name, company, job title, phone, and the timezone all scheduling and reporting is shown in. These are per-user values, not workspace-wide ones: Reply has no workspace display name and no workspace locale setting, so do not claim to read or change either. This is also NOT a mailbox: for a sending mailbox use reply_get_email_account. Does NOT change anything; to update use reply_update_account_settings. Failure modes: NotFound (settings unavailable for this user; tell the user); Forbidden (cannot read settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_accounts_enrichment_settings

ChatGPT
Returns the workspace Accounts-feature enrichment settings: whether accounts are auto-enriched when a domain is entered, and whether enrichment overwrites existing field values. Applies to the Accounts feature (company records), not individual contacts. Does NOT change anything; to update use reply_update_accounts_enrichment_settings. Failure modes: NotFound (settings unavailable for this workspace; tell the user); Forbidden (workspace cannot read settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_app_map

ChatGPT
Returns the catalog of Reply.io app areas: each entry has a title, a short description, the exact in-app navigation steps, and a relative URL. Use this when the user asks where something is in the app, how to set up or find a feature, or about functionality no other tool covers; call it BEFORE refusing or describing the UI from memory. When the matching entry has a relativeUrl, give the user a direct link by rendering the entry title as a markdown link to it (e.g. '[Email accounts](/settings/email-accounts)'); use the URL exactly as returned, never construct or alter URLs yourself. Entries also state what the chat can already do in that area; when an entry lists a chat capability matching the user's request, use the dedicated tools instead of sending the user to the UI. Does NOT answer workspace-data questions (counts, statuses, contents); those come only from the dedicated tools. Failure modes: ServiceUnavailable (transient; retry once, then tell the user the system is temporarily offline). This tool takes no parameters and reads a static catalog, so InvalidArguments and Forbidden are not expected.

reply_get_billing_info

ChatGPT
Returns the workspace plan and paid-capacity usage from Plans and billing: plan name, plan type, plan state, subscription state, trial end date, and per-feature capacity (team member seats, mailboxes, warm-up slots, LinkedIn accounts, cloud-call seats, website visitors, mailbox procurement) with total, prepaid, still-available and whether the plan includes it or it is unlimited. Read-only: plans, seats and add-ons cannot be bought, upgraded or cancelled through the assistant, and invoices and payment methods are not exposed here (point the user to Plans and billing in the app for those). Failure modes: NotFound (no plan is available for this workspace; tell the user); InvalidOperation (the billing service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_contact_activity

ChatGPT
Returns the activity history for one contact: emails sent / opened / replied, LinkedIn actions, calls, manual events, ordered newest first. Every entry carries its own UTC timestamp, one entry per event: each tracked open of a sequence email is a separate 'OpenTracked' entry and each reply a separate 'CampaignReplyDetected' / 'DirectReplyDetected' / 'LinkedInReply' entry, so this answers "when exactly did they open / reply". Link clicks are NOT recorded here, only as a count (the 'clicks' rule of reply_filter_contacts). REQUIRES the exact numeric contact ID. Do NOT guess, fabricate, or estimate it. If only the email or LinkedIn URL is known, call reply_search_contacts first. Do NOT ask the user for a numeric contact ID; users do not know internal IDs. This is how to answer "why is this contact not receiving anything": a Pausing entry with SourceType 'AutoPauseOnReply' means a reply rule paused them, and reply_get_contact_handling_settings says which of the two rules the workspace has on. The contact's own reply in this history means 'pause contact in all sequences on reply' did it; no reply of their own means somebody else at the same company replied and 'pause all contacts from the same organization on reply' did it (that rule never applies to free-mail domains). Paginated; iterate with Skip until HasMore is false. Does NOT include sequence-level performance metrics (use reply_get_sequence_stats for those). Failure modes: InvalidArguments (ContactId must be > 0); NotFound (the contact does not exist in this workspace; re-fetch via reply_search_contacts using the email/LinkedIn URL); Forbidden (workspace cannot read this contact; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_contact_enrichment_mode

ChatGPT
Returns the workspace contact enrichment mode: whether newly-enriched data overwrites existing contact field values ('overrideWithNew') or only fills empty ones ('keepExisting'). This is CONTACT-level enrichment, distinct from account/company enrichment (reply_get_accounts_enrichment_settings). Does NOT change anything; to update use reply_update_contact_enrichment_mode. Failure modes: NotFound (settings unavailable for this workspace; tell the user); Forbidden (workspace cannot read settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_contact_handling_settings

ChatGPT
Returns the workspace contact-handling rules: whether replying pauses the contact in all sequences (and how: 'automatic' or 'byEmail'), whether a reply pauses all contacts from the same organization (and how), and whether contacts are left in a sequence when moved to another. Does NOT change anything; to update use reply_update_contact_handling_settings. Failure modes: NotFound (settings unavailable for this workspace; tell the user); Forbidden (workspace cannot read settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_email_account

ChatGPT
Returns full detail for one email account (mailbox) in a single call: connection info, safety limits, ramp-up, signature, opt-out, tags, and live sent-today counters. Prefer this over several narrow reads. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. Does NOT change anything; to change a mailbox use the matching update tools for its settings, safety, signature, or opt-out. Failure modes: InvalidArguments (EmailAccountId must be > 0); NotFound (the mailbox does not exist; re-fetch via reply_list_email_accounts); Forbidden (workspace cannot read this mailbox; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_email_account_warmup_status

ChatGPT
Reports whether a mailbox is connected to email warm-up, its current warm-up status, and warm-up progress totals. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. connected is true only while warm-up is actively running (status is not 'Disabled'). A mailbox that was never enrolled, or whose warm-up is switched off, comes back connected=false with status 'Disabled' rather than an error. status is one of 'Disabled', 'Enabled', 'Suspended', 'AtRisk', 'Error', 'Migrating', 'Migrated'. Does NOT change anything; to enroll a mailbox use reply_connect_email_account_warmup, to remove it use reply_disconnect_email_account_warmup. Failure modes: InvalidArguments (EmailAccountId must be > 0); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_email_notification_settings

ChatGPT
Returns the workspace email-notification preferences: the account email report frequency (emailReporting), the team deliverability health-check report frequency (teamDeliverabilityReports), whether daily sequence sending-error reports are sent (sendSequenceErrorReports), whether email-account connection-token-expiry notifications are sent (notifyOnConnectionTokenExpiry), the recipient addresses for sequence-error notifications (notificationRecipients), and whether the owner is warned when the unique-contacts limit is almost reached (notifyWhenUniqueContactsLimitAlmostReached). Applies to the whole workspace. Does NOT change anything; to update use reply_update_email_notification_settings. Failure modes: NotFound (settings unavailable for this user; tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_email_validation_settings

ChatGPT
Returns the workspace's automatic email-validation configuration for CONTACT email addresses: whether auto-validation is on, whether the plan includes the feature, the remaining validation credits, whether a validation run is in progress, and whether the paid add-on is present. This is about validating contacts' email addresses before sending, NOT about mailbox or domain health; for mailbox deliverability use reply_get_email_account and reply_list_email_accounts_by_domain. Does NOT change anything; to switch auto-validation on or off use reply_update_workspace_email_settings with autoValidateEmailsEnabled. Failure modes: NotFound (settings unavailable for this workspace; tell the user); Forbidden (the workspace cannot read settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_inbox_emails

ChatGPT
Returns inbox threads (email + LinkedIn replies), typically newest first by LastActivityDate as ordered by the underlying service, with a short body preview, contact info, sequence link, category, and read state. Use this when the caller asks "what's in my inbox", "any new replies", "unread messages", etc. Does NOT include full message bodies; if the LLM needs the full thread, a future thread-get tool is required. Does NOT accept filter criteria in v1; pagination only. Failure modes: Forbidden (workspace cannot read the inbox; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_inbox_notification_settings

ChatGPT
Returns the user's inbox notification settings: whose threads notify you (receiveFrom), the specific team members when scoped to them, when notifications show (showWhen), whether they auto-hide after 5 seconds, whether a sound plays, whether only relevant replies notify, and which channels (email/linkedin) are enabled. Does NOT change anything; to update use reply_update_inbox_notification_settings. Failure modes: ServiceUnavailable (transient; retry once, then tell the user).

reply_get_integration_config

ChatGPT
Returns the sync configuration of one integration: the Reply-side and integration-side entities available to map (for example Reply contact to a Salesforce Lead), and every sync workflow with its steps, each step's identifier type and its current field mappings. Identify the integration by its system-type name taken from a prior reply_list_integrations result. REQUIRES the exact numeric integrationAccountId of the connected account to read, also from that result: entities, fields and owners belong to one account, and a workspace can have several accounts of the same integration connected. Do NOT invent it and do NOT ask the user for a numeric ID. Field lists are heavy, so they come back only for the one entity named in entity; without it you get each entity's name and field count. Read this before reply_update_integration_config: that tool replaces a step's whole mapping set, so you need the current rows and the valid field names first. Does NOT change anything. Failure modes: InvalidArguments (the integration name is empty or not a known system type, or IntegrationAccountId is not > 0; call reply_list_integrations to get valid names and ids); NotFound (no connected account with this id in the workspace; re-fetch via reply_list_integrations); NotSupported (this system type has no configuration provider; tell the user it cannot be configured here); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_knowledge_base

ChatGPT
Returns one AI SDR (Jason) knowledge base in full: its name, its free-text Instructions, the web-page URL sources it contains (with their source ids), how many reply handlers it holds, and how many reengagement cards its default re-engagement flow holds. Use this to check what Jason already knows before adding or replacing content. To edit the Instructions text use reply_update_knowledge_base. REQUIRES the exact numeric knowledge base ID from a prior reply_list_knowledge_bases result. Never invent, estimate, default, or ask the user for this value. Only URL link sources are listed inline (up to 100); for the reply handlers use reply_list_reply_handlers and for the reengagement cards use reply_list_reengagement_cards. Uploaded documents are managed in the app UI, not via chat. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_knowledge_base_article

ChatGPT
Returns the full text of a single knowledge base article identified by its slug (obtained from reply_search_knowledge_base). Read the most relevant article before answering a how-to or support question, then resolve the question directly in the chat: a short answer in simple words, with concrete numbered steps for how-to questions, never a full article dump and never a bare 'read this article' reply. When sourceUrl is returned (origin 'helpCenter'), you may add it at the end of your answer as a clickable markdown source link; when sourceUrl is null (origin 'internalSpec'), answer from the content in your own words and never mention the document itself or any URLs or ticket references found inside it. Failure modes: ArticleNotFound when the slug does not exist or is misspelled (re-run reply_search_knowledge_base to obtain a valid slug, never invent one); InvalidArguments when Slug is empty or longer than 300 characters.

reply_get_linkedin_account

ChatGPT
Returns full detail for one LinkedIn account: status, type, today's usage counters, per-action safety limits, revoke-connection settings, and the linked voice profile. REQUIRES the exact numeric LinkedIn account ID from a prior reply_list_linkedin_accounts result. Do NOT invent it or ask the user for a numeric ID. Does NOT change anything; to update limits use reply_update_linkedin_safety_limits, to enable/disable use reply_set_linkedin_account_enabled. Failure modes: InvalidArguments (LinkedInAccountId must be > 0); NotFound (the account does not exist; re-fetch via reply_list_linkedin_accounts); Forbidden (workspace cannot read this account; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_meetings_general_settings

ChatGPT
Returns the booking meeting settings for one provider. For 'googleCalendar' it reports whether a Google Calendar is connected, the connected account email, timezone, conferencing link type ('None', 'HangoutsMeet', or 'Zoom'), Zoom account email, and default meeting duration. For 'calendly' it reports whether a Calendly account is connected plus its name, email, status, and connection time. Read-only; to disconnect an account use reply_disconnect_meetings_calendar_account, and for the public booking URL use reply_get_public_calendar_link. Failure modes: InvalidArguments (provider must be exactly 'googleCalendar' or 'calendly'); Forbidden (the workspace cannot read meeting settings; tell the user, do not retry); InvalidOperation (the meetings service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_offer

ChatGPT
Returns one AI SDR (Jason) offer in full: company name and description, ideal customer profile (ICP), reason for outreach, and the lists of case studies, pain points, proof points, value propositions, and calls to action. Use this to review what Jason says about the product before it goes into outreach. REQUIRES the exact numeric offer ID from a prior reply_list_offers result. Never invent, estimate, default, or ask the user for this value. Failure modes: InvalidArguments (OfferId must be > 0); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no offer with this id; re-fetch via reply_list_offers); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_playbook

ChatGPT
Returns one AI SDR (Jason) playbook in full, including its instruction Body (the prompt that tells Jason how to sell), visibility type, and the names of any attached style files. Use this to review how Jason is currently instructed to sell before changing a playbook. REQUIRES the exact playbook ID from a prior reply_list_playbooks result. Never invent, estimate, default, or ask the user for this value. Failure modes: InvalidArguments (PlaybookId must be non-empty); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no playbook with this id; re-fetch via reply_list_playbooks); InvalidIdFormat (the id is malformed; re-fetch via reply_list_playbooks); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_reengagement_card

ChatGPT
Returns one reengagement card from an AI SDR (Jason) knowledge base by card id (the card may live in any re-engagement flow). Returns in full: its name, instructions, sample answer, send-after days, tone of voice, response length, link URLs, attached media file names, enabled flag, and delivery mode. Use this to review how Jason is told to win back a quiet prospect before changing it. REQUIRES the exact numeric knowledge base ID (from reply_list_knowledge_bases) and the exact reengagement card id (from reply_list_reengagement_cards). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; ReengagementCardId must be a valid id from reply_list_reengagement_cards); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (the knowledge base or reengagement card does not exist; re-fetch via reply_list_reengagement_cards); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_reply_handler

ChatGPT
Returns one reply handler from an AI SDR (Jason) knowledge base in full: its question type, instructions, sample answer, tone of voice, response length, link URLs, attached media file names, and delivery mode. Use this to review how Jason is told to answer a question type before changing it. REQUIRES the exact numeric knowledge base ID (from reply_list_knowledge_bases) and the exact reply handler id (from reply_list_reply_handlers). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; ReplyHandlerId must be a valid id from reply_list_reply_handlers); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (the knowledge base or reply handler does not exist; re-fetch via reply_list_reply_handlers); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_schedule

ChatGPT
Returns full detail for one sending schedule, including its per-weekday time windows (main and, if used, follow-up). REQUIRES the exact numeric schedule ID from a prior reply_list_schedules result. Do NOT invent it or ask the user for a numeric ID. Use this before reply_update_schedule to see the current weekday format and time windows to mirror. Failure modes: InvalidArguments (ScheduleId must be > 0); NotFound (the schedule does not exist; re-fetch via reply_list_schedules); Forbidden (workspace cannot read this schedule; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_sequence_accounts

ChatGPT
Returns the email accounts (mailboxes) and LinkedIn accounts currently assigned to a sequence, with each mailbox's per-account daily sending limit. Use this to answer 'which accounts does this sequence send from'. REQUIRES the exact numeric sequence ID from a prior reply_search_sequences result. Do NOT invent it or ask the user for a numeric ID. Does NOT change anything; to assign or replace accounts use reply_update_sequence_accounts. Failure modes: InvalidArguments (SequenceId must be > 0); NotFound (re-fetch via reply_search_sequences); Forbidden (workspace cannot read this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_sequence_calls_settings

ChatGPT
Returns the Call step handling config of a sequence: whether calls run automatically or manually, whether a call is placed automatically after a number of email opens, that opens threshold, and whether the contact is paused on a successful call. REQUIRES the exact numeric sequence ID from a prior reply_search_sequences result. Do NOT invent it or ask the user for a numeric ID. Does NOT change anything; to update use reply_update_sequence_calls_settings. Failure modes: InvalidArguments (SequenceId must be > 0); NotFound (re-fetch via reply_search_sequences); Forbidden (workspace cannot read this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_sequence_email_limit

ChatGPT
Returns the sequence's daily email counter shown in the header bar: emails already sent today and the daily limit (the 'X of Y' value). REQUIRES the exact numeric sequence ID from a prior reply_search_sequences result. Do NOT invent it or ask the user for a numeric ID. Failure modes: InvalidArguments (SequenceId must be > 0); NotFound (re-fetch via reply_search_sequences); Forbidden (workspace cannot read this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_sequence_general_settings

ChatGPT
Returns the General settings of a sequence: plain-text mode, open/click tracking, list-unsubscribe header, same-domain sending limit, matching email providers, max emails per day, the delay between emails, and the new-daily-contacts limit (maxNewDailyContacts / noLimitOnNewDailyContacts). REQUIRES the exact numeric sequence ID from a prior reply_search_sequences result. Do NOT invent it or ask the user for a numeric ID. Does NOT change anything; to update use reply_update_sequence_general_settings. Failure modes: InvalidArguments (SequenceId must be > 0); NotFound (re-fetch via reply_search_sequences); Forbidden (workspace cannot read this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_sequence_stats

ChatGPT
Returns email and LinkedIn performance metrics for one sequence: contact volume, delivered/opened/replied/bounced rates, LinkedIn connection and message stats, meetings booked. REQUIRES the exact numeric sequence ID. Do NOT guess, fabricate, or estimate it. If the user refers to a sequence by name (e.g. 'Sales Q1') and the numeric ID is unknown, call reply_search_sequences first to discover it. Do NOT ask the user for a numeric ID; users do not know internal IDs. Date window defaults to all-time; pass From/To (UTC ISO-8601) for a custom range. Does NOT accept multiple sequence IDs. Call once per sequence and aggregate yourself when comparing. Failure modes: InvalidArguments (SequenceId must be > 0; From must be <= To); ServiceUnavailable (the stats backend is temporarily offline; retry once, then tell the user). A sequence the workspace cannot access produces empty Email/LinkedIn summaries rather than an error.

reply_get_sequence_step_variants

ChatGPT
Returns the content variants (A/B variations) of a single sequence step: subject, message body, enabled flag, and attachment flag. Read-only. Use this after reply_get_sequence_steps to read what a step actually says. Call it ONLY for a step whose SupportsVariants is true in the reply_get_sequence_steps output; other step types have no variants and the call fails. REQUIRES the exact numeric step ID from a prior reply_get_sequence_steps result. SequenceId is optional: pass it when known, otherwise it is resolved from the step. Never invent, estimate, default, or ask the user for either ID. To add a new text variant to a step use reply_create_sequence_step_variant. There is no tool to edit the content of an existing variant; tell the user to change it in the sequence editor. Failure modes: InvalidArguments (StepId must be > 0; SequenceId must be > 0 when supplied); NotFound (the step or sequence does not exist or is not accessible; re-resolve via reply_search_sequences then reply_get_sequence_steps); UnsupportedOperation (this step type has no content variants; check SupportsVariants first and do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_sequence_steps

ChatGPT
Returns the ordered steps of a sequence: each step's type, delay, position in the flow, and how many message content variants it has. Use this to inspect a sequence's structure and cadence, or to find a step's numeric ID before reading its content. REQUIRES the exact numeric sequence ID. Must come from a prior reply_search_sequences result or another tool's output. Never invent, estimate, default, or ask the user; if only the name is known, call reply_search_sequences first. Does NOT include the step text (subjects/messages); call reply_get_sequence_step_variants with a StepId to read a step's content, but ONLY for steps whose SupportsVariants is true. Steps with SupportsVariants false (e.g. Sms, WhatsApp, Call, Task, Condition, manual LinkedIn tasks, LinkedIn comment-on-post) have no variants to read. A sequence with no steps returns an empty Steps list. Failure modes: InvalidArguments (SequenceId must be > 0); NotFound (the sequence does not exist or is not in this workspace; re-resolve via reply_search_sequences); Forbidden (workspace cannot read this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_sequence_tasks_settings

ChatGPT
Returns the Task step handling config of a sequence: whether task steps run automatically or manually, and who owns generated tasks. REQUIRES the exact numeric sequence ID from a prior reply_search_sequences result. Do NOT invent it or ask the user for a numeric ID. Does NOT change anything; to update use reply_update_sequence_tasks_settings. Failure modes: InvalidArguments (SequenceId must be > 0); NotFound (re-fetch via reply_search_sequences); Forbidden (workspace cannot read this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_trigger

ChatGPT
Returns full detail for one automation trigger: name, event, status, enabled, and every action and condition with its parameters, in the shape reply_update_trigger accepts. Read a trigger with this tool first when you need to add or change one action or condition, then send the whole set back. An action or condition the app supports but this tool cannot write comes back with editable=false and no parameters: while any of those is present, do NOT send actions or conditions to reply_update_trigger, because replacing the set would drop them. Tell the user to edit that trigger in the app under Automations, Triggers. REQUIRES the exact trigger ID (a GUID) from a prior reply_list_triggers result. Do NOT invent it or ask the user for an ID. Failure modes: InvalidArguments (TriggerId must be a valid GUID); NotFound (the trigger does not exist; re-fetch via reply_list_triggers); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_workspace_calls_settings

ChatGPT
Returns the workspace-level Calls settings: whether team cloud calls are enabled, whether call recording is enabled, and whether consent-based recording is enabled. callRecordingEnabled and isConsentRecordingEnabled are workspace-wide (they apply to all members). isConsentRecordingEnabled depends on callRecordingEnabled: recording must stay on while consent recording is on. Applies to the whole workspace, not a single member or number. For a single member's cloud-calls access use reply_list_cloud_calls_team_access. Does NOT change anything; to update use reply_update_workspace_calls_settings. Failure modes: NotFound (calls settings unavailable for this workspace; tell the user); InvalidOperation (the calls service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_get_workspace_email_settings

ChatGPT
Returns the workspace-level email and deliverability settings: email safety (first-step delay, per-contact daily cap), BCC/forwarding, out-of-office auto-resume, bulk open-tracking, automatic email validation, the reassign-on-account-added defaults, auto-enrichment of missing LinkedIn URLs, and the email quality check shown under Settings > Tools. Applies to the whole workspace, not a single mailbox or sequence. Does NOT change anything; to update use reply_update_workspace_email_settings. Failure modes: NotFound (settings unavailable for this workspace; tell the user); Forbidden (workspace cannot read settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_account_notes

ChatGPT
Returns the free-text notes written on one account (company), newest first, each with its numeric note ID, text, author and UTC timestamp. Use it to read back company-level context that a person or an external agent stored on the account, including notes written earlier with reply_add_account_note. REQUIRES the exact numeric account ID from a prior reply_search_accounts result. Never invent it, and never ask the user for it. Paginated; iterate with Skip until HasMore is false. An account with no notes comes back as an empty list rather than an error. Does NOT return notes written on the account's contacts; use reply_list_contact_notes per contact for those. Failure modes: InvalidArguments (AccountId must be greater than 0); NotFound (no account with that ID in this workspace, or the user is not allowed to see it; search for it instead of retrying); Forbidden (the notes API is not enabled for this team; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_account_stages

ChatGPT
Lists the workspace's account (company) stages (the Accounts-feature status taxonomy, e.g. New, Qualified, Meeting booked, Negotiating, Disqualified, On hold, Closed-won, Closed-lost), each with its ID, name, and color index. This is a separate list from contact stages (see reply_list_contact_stages). Does NOT change anything; to rename or recolor one stage use reply_update_account_stage. The set of account stages is fixed by the product at 8: new stages cannot be created and existing ones cannot be deleted, anywhere in Reply. Failure modes: NotFound (settings unavailable for this workspace; tell the user); Forbidden (workspace cannot read settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_beta_features

ChatGPT
Returns whether the workspace has opted into beta and the beta features it gets while opted in, each with its name and description. Beta is ONE workspace-wide switch: features cannot be enabled individually, so use this to tell the user what the switch would turn on. Does NOT change anything; to opt in or out use reply_set_beta_features_enabled. Failure modes: ServiceUnavailable (transient; retry once, then tell the user).

reply_list_blacklist_domains

ChatGPT
Lists the domains on the workspace blacklist (contacts under these domains are never contacted). Paginated. Optionally filter by a search term. Global domains are inherited workspace-wide and are read-only (they cannot be removed via reply_remove_blacklist_domains). Failure modes: Forbidden (workspace cannot read the blacklist; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_call_resolutions

ChatGPT
Lists the workspace's call resolutions (call outcome labels). Returns the three system defaults (Positive, To Call, Negative) plus any custom resolutions, each with its ID, name, the outcome bucket it rolls up to ('positive', 'toCall' or 'negative'), and whether it is a non-deletable default. Does NOT change anything; to add/rename/remove custom resolutions use reply_create_call_resolution / reply_update_call_resolution / reply_delete_call_resolution. Failure modes: NotFound (settings unavailable for this workspace; tell the user); Forbidden (workspace cannot read settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_cloud_calls_team_access

ChatGPT
Lists the workspace's team members with each member's individual cloud-calls access toggle (enabled or not). Use the returned memberId to change one member's access with reply_update_cloud_calls_team_access. This is per-member access, distinct from the workspace-wide teamCallsEnabled in reply_get_workspace_calls_settings. Does NOT change anything. Failure modes: InvalidOperation (the calls service could not list members; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_contact_custom_fields

ChatGPT
Lists the workspace's contact custom fields, each with its field ID, label, and type ('text' or 'number'). Optionally filter by a label search term. Does NOT change anything; to add use reply_create_contact_custom_field, to remove use reply_delete_contact_custom_field. Failure modes: Forbidden (workspace cannot read custom fields; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_contact_notes

ChatGPT
Returns the free-text notes written on one contact, newest first, each with its numeric note ID, text, author and UTC timestamp. Use it to read back context that a person or an external agent stored on the contact, including notes written earlier with reply_add_contact_note. REQUIRES the exact numeric contact ID. Do NOT guess, fabricate, or estimate it. If only the email or LinkedIn URL is known, call reply_search_contacts first. Do NOT ask the user for a numeric contact ID; users do not know internal IDs. Paginated; iterate with Skip until HasMore is false. A contact with no notes comes back as an empty list rather than an error. Does NOT include emails, calls or other activity; use reply_get_contact_activity for the full timeline. Failure modes: InvalidArguments (ContactId must be > 0); NotFound (the contact does not exist in this workspace; re-fetch via reply_search_contacts using the email/LinkedIn URL); Forbidden (the notes API is not enabled for this team, or the workspace cannot read this contact; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_contact_stages

ChatGPT
Lists the workspace's contact stages (the contact-status taxonomy, e.g. New, Engaging, Replied, Interested, Not interested, Unresponsive, Do not contact, Bad contact info), each with its ID, name, color index, and description. Does NOT change anything; to rename, recolor or redescribe one stage use reply_update_contact_stage. The set of contact stages is fixed by the product at 8: new stages cannot be created and existing ones cannot be deleted, anywhere in Reply. Failure modes: NotFound (settings unavailable for this workspace; tell the user); Forbidden (workspace cannot read settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the read; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_email_account_sequences

ChatGPT
Lists the sequences that send from a given email account (mailbox), each with its name, status, owner, and emails-sent-today from this mailbox. Use this to answer 'which sequences use this mailbox'. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. Paginated: default 20, max 100. Failure modes: InvalidArguments (EmailAccountId must be > 0); Forbidden (workspace cannot read this mailbox's sequences; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_email_accounts

ChatGPT
Returns the email accounts (mailboxes) configured in the workspace, with their connection status, daily send limit, default flag, and tags. Use this when the caller asks "which mailboxes can I send from", "which inbox is disconnected", "daily limits", etc. Does NOT include credentials or SMTP/IMAP settings. Failure modes: Forbidden (workspace cannot list email accounts; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_email_accounts_by_domain

ChatGPT
Returns the workspace's sending domains, each with its setup status, how many mailboxes it holds, the emails sent from the mailboxes it returns, and the mailboxes themselves with their sender name, owner, tags, today's sent/limit counters and connection status. This is the domain-grouped view of the Email Accounts page: use it for "which domain is misconfigured", "how many mailboxes on domain X", "which domains need action"; use reply_list_email_accounts for a flat mailbox list. setupStatus is derived: ConnectivityIssues when any RETURNED mailbox cannot connect, ActionNeeded when the domain's DNS check reports missing or failing records, Configured when DNS is complete and every returned mailbox connects, Unknown while the DNS check has not finished. Paginated over DOMAINS, not mailboxes: default 20, max 100 domains. Optional filters: domains, tags, ownerEmail. tags and ownerEmail narrow the mailboxes, so setupStatus and totalEmailsSent then describe the matching mailboxes only while mailboxCount still counts every mailbox on the domain: to judge a domain's health, call without those two filters. If mailboxesTruncated is true the domain has more mailboxes than one call returns; re-call with that single domain in domains. Failure modes: InvalidArguments (ownerEmail does not match any team member); Forbidden (workspace cannot list email accounts; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_integrations

ChatGPT
Lists the workspace CRM and system integrations (Salesforce, HubSpot, Pipedrive, Close.io, Base CRM, Copper CRM, Rb2b) plus the Slack app, each with its system-type key, display name, whether it is connected, the connected-account count, a status summary, the individual connections with their integrationAccountId, and which follow-up tool applies. Use this first to discover the exact SystemType string to pass to reply_get_integration_config or reply_connect_integration, and the integrationAccountId to pass to reply_disconnect_integration. Coverage limit: these are the integrations Reply stores a connection for. Marketplace and no-code listings on the Integrations page (Zapier, Make and the partner links) have no connection state in Reply, so they are not listed here and their status can only be seen in the app. Does NOT change anything and does NOT return field mappings; use reply_get_integration_config for the mapping configuration. Failure modes: ServiceUnavailable (transient; retry once, then tell the user).

reply_list_knowledge_bases

ChatGPT
Lists the AI SDR (Jason) knowledge bases in the workspace: the bundles of company information Jason uses to answer prospects, which can be attached to sequences. Returns each knowledge base's id, name, and last-updated time. Use this to find a knowledge base and its id before getting, adding sources to, or attaching it. This is NOT the Reply.io Help Center; for product how-to questions use reply_search_knowledge_base instead. Optional case-insensitive name search. Failure modes: Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_linkedin_accounts

ChatGPT
Returns the LinkedIn accounts connected to the workspace, with status, cookie health, account tier, and ownership. Use this when the caller asks "which LinkedIn accounts are connected", "is my LinkedIn cookie valid", "do I have a Sales Navigator account", etc. Does NOT include nested limits/usage/voice-profile blocks; those require a separate detail tool. Does NOT support paging at the underlying layer; the response is the full list. A workspace with no LinkedIn accounts returns an empty Items list, not an error. Failure modes: ServiceUnavailable (transient; retry once, then tell the user).

reply_list_my_tasks

ChatGPT
Returns the user's tasks (To Do, Call, Meeting, LinkedIn, Manual Email, Sms, WhatsApp), filterable by status, type, due window, and contact. Use this when the caller asks "what's on my task list", "any overdue tasks", "my LinkedIn tasks today", etc. Numeric ContactId, if supplied, MUST come from prior tool output. Do NOT guess, fabricate, or estimate IDs. Do NOT ask the user for a numeric contact ID; users do not know internal IDs. Does NOT execute tasks; this is read-only. Does NOT include task body content; that requires a dedicated get-by-id tool. Failure modes: InvalidArguments (TaskType must be one of the seven allowed values if supplied; Status one of the five; ContactId > 0; From must be <= To when both are set); Forbidden (workspace cannot list tasks; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_offers

ChatGPT
Lists AI SDR (Jason) offers: what Jason can pitch to prospects. Returns each offer's id and name only (use reply_get_offer for the full content). Use this to find an offer and its id before getting, updating, or attaching it. Optional case-insensitive name search. Failure modes: Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_pending_approvals

ChatGPT
Returns the queue of AI SDR (Jason) draft messages waiting for the user's approval before they are sent, newest first by default. Each item names the contact and sequence, the channel, the step, the drafted subject and full message text, and whether it is currently being regenerated. Use this when the user asks what is waiting for approval or what Jason has drafted, and before approving, rejecting, or regenerating drafts. Optional filters narrow the queue by a single sequence, a single owner (team member), and the channel; use the same filters to gather references for reply_bulk_approve_messages. Does NOT include already-sent messages or full conversation history. Failure modes: Forbidden (the AI SDR feature is not enabled for this workspace; tell the user, do not retry); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_playbooks

ChatGPT
Lists AI SDR (Jason) playbooks: the named sets of selling instructions Jason can follow. Returns id, name, short description, visibility type (Global, Organization, Team), and last-updated time, but NOT the full instruction body (use reply_get_playbook for that). Use this to find a playbook and its id before getting, updating, or attaching it. Optional filters: visibility type and a name/description substring search. Does NOT list which sequences a playbook is attached to. Failure modes: InvalidArguments (Type must be 'Global', 'Organization', or 'Team'); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_reengagement_cards

ChatGPT
Lists the reengagement cards in the default re-engagement flow of an AI SDR (Jason) knowledge base. A reengagement card tells Jason how to win back a prospect who went quiet, and after how many days to reach out again. Returns each card's id, name, instructions, send-after days, enabled flag, and delivery mode. Use reply_get_reengagement_card for the full detail of one card. REQUIRES the exact numeric knowledge base ID from a prior reply_list_knowledge_bases result. Never invent, estimate, default, or ask the user for this value. Optional case-insensitive search. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_reply_handlers

ChatGPT
Lists the reply handlers in an AI SDR (Jason) knowledge base. A reply handler tells Jason how to answer a specific kind of prospect question (for example pricing or security): it pairs a question type with instructions. Returns each handler's id, question type, instructions, and delivery mode. Use reply_get_reply_handler for the full detail of one handler. REQUIRES the exact numeric knowledge base ID from a prior reply_list_knowledge_bases result. Never invent, estimate, default, or ask the user for this value. Optional case-insensitive search. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_schedules

ChatGPT
Returns all sending schedules (business-hours / sending-window configurations) in the workspace, with timezone, default flag, and counts of main + follow-up time slots. Use this when the caller asks "which schedules exist", "which is the default schedule", "does the EU schedule exist", etc. Does NOT include the per-day time-window slots themselves; only counts. For schedule assignment to a sequence, a dedicated mutation tool is required. Failure modes: ServiceUnavailable (transient; retry once, then tell the user). This tool takes no parameters and only reads, so InvalidArguments and Forbidden are not expected.

reply_list_triggers

ChatGPT
Lists the workspace's automation triggers, each with its ID, name, event, status, whether it is enabled, its action types, and owner. Optionally filter by status. Does NOT change anything; to toggle use reply_set_trigger_enabled, to remove use reply_delete_trigger, to see full detail use reply_get_trigger. Paginated: default 20, max 100. Failure modes: InvalidArguments (status must be 'enabled', 'disabled' or 'failed' when provided); ServiceUnavailable (transient; retry once, then tell the user).

reply_list_voice_profiles

ChatGPT
Lists the workspace's AI voice profiles (the Voices library) that can be linked to a LinkedIn account for AI-powered voice messages. Read-only. Returns each profile's ID, name, language code, and whether it is the team default. Use a returned ID with reply_link_linkedin_voice_profile. Failure modes: Forbidden (workspace cannot read voice profiles; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_mark_contacts_as_opted_out

ChatGPT
Opts one or more contacts out of all outreach (or clears that flag), the same action as marking a contact opted out in Reply.io. Mutation. Opting a contact out stops all further automated outreach to them and finishes them in every sequence they are enrolled in. Opted out is a property of the contact, not of a sequence, so the change always applies across the whole account and cannot be limited to a single sequence. REQUIRES a non-empty list of numeric contact IDs. All must come from prior tool output (reply_search_contacts, reply_filter_contacts). Never invent, estimate, default, or ask the user; users do not know internal IDs. Set IsOptedOut=false only when the user explicitly asks to undo or clear an opt-out; omit it (or pass true) to opt the contacts out. Accepts up to 100 contact IDs per call. Contacts already in the requested state are treated as success and appear in Affected. Per-contact problems (contact not found, contact ineligible) are returned in NotProcessed and are NOT hard failures; the call as a whole still succeeds. Does NOT blacklist the contact, which is a separate and broader action that also blocks future imports of the same email or LinkedIn URL (use reply_blacklist_contact), and does NOT change the contact's per-sequence status (use reply_change_status_in_sequence). Failure modes: InvalidArguments (ContactIds must be non-empty and <= 100 entries, all > 0; split into batches if needed); ServiceUnavailable (transient; retry once, then tell the user). Per-contact reasons appear in NotProcessed and are NOT hard failures: 'NotFound' means the contact ID does not exist in this workspace (re-resolve via reply_search_contacts); 'InvalidInput' means the contact was skipped as ineligible (e.g. the caller may not change that contact's status).

reply_mark_contacts_as_replied

ChatGPT
Marks one or more contacts as having replied (or clears that flag), the same action as manually flagging a reply in Reply.io. Mutation. Marking a contact as replied stops further automated outreach to them in their active sequences. REQUIRES a non-empty list of numeric contact IDs. All must come from prior tool output (reply_search_contacts, reply_filter_contacts). Never invent, estimate, default, or ask the user; users do not know internal IDs. Set IsReplied=false only when the user explicitly asks to undo or clear a replied flag; omit it (or pass true) to mark as replied. Accepts up to 100 contact IDs per call. Contacts already in the requested state are treated as success and appear in Affected. Per-contact problems (contact not found, contact ineligible) are returned in NotProcessed and are NOT hard failures; the call as a whole still succeeds. Does NOT change the contact's per-sequence status directly (use reply_change_status_in_sequence), does NOT opt the contact out (use reply_mark_contacts_as_opted_out) and does NOT blacklist the contact (use reply_blacklist_contact). Failure modes: InvalidArguments (ContactIds must be non-empty and <= 100 entries, all > 0; split into batches if needed); ServiceUnavailable (transient; retry once, then tell the user). Per-contact reasons appear in NotProcessed and are NOT hard failures: 'NotFound' means the contact ID does not exist in this workspace (re-resolve via reply_search_contacts); 'InvalidInput' means the contact was skipped as ineligible (e.g. opted out or not accessible).

reply_pause_sequence

ChatGPT
Pauses a sequence so it stops sending outreach. In-flight scheduled steps are halted. Mutation. REQUIRES the exact numeric sequence ID. Do NOT guess, fabricate, or estimate it. Must come from a prior reply_search_sequences result. Do NOT ask the user for a numeric ID; users do not know internal IDs. Paused sequences can be resumed via reply_start_sequence. Pausing a sequence that is already paused succeeds and changes nothing. Failure modes: InvalidArguments (SequenceId must be > 0); NotFound (re-fetch via reply_search_sequences); Forbidden (workspace cannot pause this sequence; tell the user, do not retry); Archived (the sequence is archived; tell the user); Status (the sequence is in a state from which it cannot be paused, e.g. it was never started; tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_regenerate_message

ChatGPT
Asks the AI SDR to rewrite a single pending draft, optionally guided by the user's feedback. Mutation: this replaces the current draft. Identify the draft by the exact numeric SequenceId and ContactId from a prior reply_list_pending_approvals result. Never invent, estimate, default, or ask the user for these values. Pass Recommendations with the user's instructions for the rewrite (for example 'make it shorter and mention the free trial'); omit to regenerate without specific guidance. Regeneration runs in the background: the call returns a job id and the draft reports IsRegenerating = true until the new version is ready. Re-list via reply_list_pending_approvals to see the regenerated draft. Failure modes: InvalidArguments (SequenceId and ContactId must be > 0); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no pending approval exists for this sequence and contact right now: the draft was already sent or rejected, or it is still regenerating from an earlier call; re-list via reply_list_pending_approvals and check IsRegenerating, and never call this tool twice for the same draft while it is regenerating); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_regenerate_optout_message

ChatGPT
Generates a fresh suggested plain-text opt-out message for a mailbox (mirrors the 'Regenerate' button on the Opt-out tab). One-shot: it returns a suggestion and does NOT save anything. To persist it, pass the text to reply_update_email_account_optout_settings. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. Failure modes: InvalidArguments (EmailAccountId must be > 0); NotFound (the mailbox does not exist; re-fetch via reply_list_email_accounts); ServiceUnavailable (transient; retry once, then tell the user).

reply_reject_message

ChatGPT
Rejects a single AI SDR draft. High-stakes and irreversible: this discards the draft AND removes the contact from that sequence entirely, so the contact stops receiving any further steps. Identify the draft by the exact numeric SequenceId and ContactId from a prior reply_list_pending_approvals result. Never invent, estimate, default, or ask the user for these values. Only call this after the user has explicitly confirmed they want the contact removed from the sequence, not merely that they dislike the draft. To only revise the draft instead, use reply_regenerate_message. Failure modes: InvalidArguments (SequenceId and ContactId must be > 0); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no pending approval exists for this sequence and contact; re-list via reply_list_pending_approvals); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_remove_blacklist_domains

ChatGPT
Removes one or more domains from the workspace blacklist. Mutation. Enter bare domains like 'example.com'. Domains that are not on the blacklist are reported in NotFound; global (inherited) domains cannot be removed and are reported in SkippedGlobal; domains that were on the blacklist but the delete failed are reported in Failed with a reason. None of these is a hard error. Failure modes: InvalidArguments (provide at least one domain); Forbidden (workspace cannot modify the blacklist; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_remove_linkedin_account

ChatGPT
Permanently removes a LinkedIn account from the workspace. Mutation, irreversible. REQUIRES the exact numeric LinkedIn account ID from a prior reply_list_linkedin_accounts result. Do NOT invent it or ask the user for a numeric ID. Fails if the account is still used by any sequence; unlink it from its sequences first. Failure modes: InvalidArguments (LinkedInAccountId must be > 0); NotFound (the account does not exist; re-fetch via reply_list_linkedin_accounts); AccountInUse (the account is still used by a sequence; unlink it via reply_unlink_linkedin_account_from_sequence first); VoiceProfileConflict (you have more voice profiles than remaining LinkedIn accounts; unlink a voice profile first, then retry; tell the user); Forbidden (workspace cannot delete this account; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_report_unsupported_request

ChatGPT
Records, for the product team, that the user asked for a capability Reply.io does not currently have. Call this ONLY after you have already confirmed the capability is genuinely missing: the available tools cannot do it, reply_search_knowledge_base has no matching how-to, and reply_get_app_map has no matching place in the app. After calling it, tell the user plainly that this is not something you can do, exactly as you would without this tool; never promise that the feature exists, is planned, or is coming. Do NOT call it for: a tool that failed transiently (ServiceUnavailable) or with bad arguments, an action blocked by the user's plan (Forbidden), a how-to question answered by the knowledge base or app map, or anything you can actually accomplish with another tool. Call it at most once per distinct missing capability in a turn; do not log the same request twice. Always pass a stable RequestKey naming the capability so repeated asks for the same thing aggregate for the product team. Returns a simple acknowledgement; it has no user-visible effect and triggers no notification to the user. Failure modes: InvalidArguments (RequestKey or RequestSummary missing or invalid, or Category not one of the listed values; fix the call and retry once).

reply_search_accounts

ChatGPT
Finds accounts (companies) in the workspace by a text search over their name and domain, and returns the matches with their numeric ID. Use it to get the ID an account tool needs, and to check whether a company already exists before creating it. Search is optional: omit it to page through all accounts, newest created first. Accounts are a workspace feature: a workspace that holds none comes back as an empty list rather than an error. Failure modes: InvalidArguments (Search is longer than 256 characters); Forbidden (this user is not allowed to read accounts; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_search_contacts

ChatGPT
Looks up contacts by exact email address or LinkedIn URL. Returns matching contacts with their full profile: name, company, custom fields, status flags. At least one of Email or LinkedIn must be provided; passing both narrows to contacts that match both. Does NOT accept name substrings, company filters, or other criteria. If the user provides only a name or company, ask them for an email or LinkedIn URL instead of calling this tool. Failure modes: InvalidArguments (at least one of Email or LinkedIn must be non-empty; both are capped at 512 chars); Forbidden (workspace is not allowed to read contacts; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user the system is temporarily offline).

reply_search_knowledge_base

ChatGPT
Searches the Reply.io product knowledge base: public Help Center articles plus internal product specifications that document non-obvious behavior and edge cases beyond the happy path. Use it for questions about how Reply.io features work or how to accomplish something in the product (for example 'how do I add an account', 'what does autopilot mode do', 'why are my emails not sending'), including unusual scenarios; do NOT use it for the user's own workspace data (counts, statuses, contents), which comes only from the dedicated tools. Returns up to 8 short article summaries ordered by relevance, each with a slug, title, section, snippet, origin, and sourceUrl. After choosing the most relevant result, call reply_get_knowledge_base_article with its slug to read the full article, then resolve the user's question directly in the chat with a short, simple answer instead of pasting the article or pointing to a link. Failure modes: an empty Articles list means nothing matched (tell the user you could not find the answer and do not invent one); InvalidArguments when Query is empty or longer than 500 characters (ask the user what they need help with). The catalog is bundled, so ServiceUnavailable and Forbidden are not expected.

reply_search_lists

ChatGPT
Resolves contact lists (a.k.a. prospect lists) in the current workspace to their numeric ListId by name substring. Call this whenever the caller refers to a contact list by name ("contacts in the SaaS Founders list", "add to the Cold Outreach Q2 list") so the next tool gets a real ListId instead of a guess. Returns ListId, name, and shared flag. Do NOT ask the user for a numeric ListId; users do not know internal IDs. When confirming an action to the user, refer to the list by its Name, not the ListId. Failure modes: Forbidden (workspace cannot list contact lists; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_search_sequences

ChatGPT
Returns a paginated list of sequences (campaigns) the user owns or has access to, optionally filtered by name substring, status, and archive flag. Use this both to find sequences by human-friendly name and to retrieve their per-sequence summary fields (status, archived flag, owner, health) in a single call. Call reply_get_sequence_stats afterwards for email/LinkedIn performance metrics on a specific sequence. Does NOT include step content, prospect lists, or detailed stats. Failure modes: InvalidArguments (Status must be one of New/Active/Paused if supplied; Name capped at 256 chars); Forbidden (workspace cannot list sequences; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_search_team_members

ChatGPT
Resolves teammates in the current workspace to their numeric UserId by name or email substring. Call this whenever the caller refers to a teammate by name ("assign to John", "reassign these contacts to Sarah") so the next tool gets a real UserId instead of a guess. Returns UserId, full name, email, role, status. Do NOT ask the user for a numeric UserId; users do not know internal IDs. When confirming an action to the user, refer to the teammate by their FullName, not the UserId. Failure modes: ServiceUnavailable (transient; retry once, then tell the user).

reply_send_inbox_reply

ChatGPT
Sends a reply on an existing inbox thread. Mutation, high-stakes: the message goes to the contact as soon as the call succeeds. REQUIRES the exact numeric thread ID. Must come from a prior reply_get_inbox_emails result. Never invent, estimate, default, or ask the user. Channel ('Email' or 'LinkedIn') must match the thread's channel; reply_get_inbox_emails exposes it. The wrong channel will be rejected. Message is the body, plain text or HTML; the underlying service applies the user's signature for email when applicable. Does NOT support Cc/Bcc, attachments, or scheduling in v1. Use only when the user has explicitly approved the exact text being sent. Failure modes: InvalidArguments (ThreadId > 0; Channel must be Email or LinkedIn; Message non-empty, max 32000 chars); InvalidInput (V3 rejected the payload); NotFound (thread does not exist; re-fetch via reply_get_inbox_emails); ChannelMismatch (the Channel does not match the thread's actual channel; re-read the thread to find its channel); ContactOptedOut (the contact is blacklisted; cannot send, tell the user); ThreadSendFailed (delivery failed at the provider; tell the user, do not retry blindly); Forbidden (workspace cannot send on this thread; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_set_beta_features_enabled

ChatGPT
Opts the whole workspace into or out of beta features. Mutation, affects every team member at once and changes which features they see. There is no per-feature switch in the product: this turns on or off the entire beta set returned by reply_list_beta_features, so confirm with the user before calling it. Opting out also stops the accounts migration for the workspace. Failure modes: Forbidden (this workspace or role cannot change the beta state; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_set_default_schedule

ChatGPT
Marks a sending schedule as the workspace default (used by new sequences). Mutation. REQUIRES the exact numeric schedule ID from a prior reply_list_schedules result. Do NOT invent it or ask the user for a numeric ID. Failure modes: InvalidArguments (ScheduleId must be > 0); NotFound (the schedule does not exist; re-fetch via reply_list_schedules); Forbidden (workspace cannot change the default schedule; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_set_linkedin_account_enabled

ChatGPT
Enables or disables a LinkedIn account (the master on/off toggle). Mutation. REQUIRES the exact numeric LinkedIn account ID from a prior reply_list_linkedin_accounts result. Do NOT invent it or ask the user for a numeric ID. Setting the account to the state it is already in succeeds and changes nothing. An account can only be turned OFF from the enabled state; when it is rate-limited or its session has expired it cannot be disabled through the agent and must be managed in the UI. Enabling an account whose session has expired may not fully activate it until it is reconnected in the UI. Failure modes: InvalidArguments (LinkedInAccountId must be > 0; the account cannot be disabled from its current status, e.g. rate-limited or session-expired - manage it in the UI); NotFound (the account does not exist; re-fetch via reply_list_linkedin_accounts); CookieInvalid (the account's session expired between the read and the toggle; tell the user to reconnect it in the UI, do not retry); Forbidden (workspace cannot modify this account; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_set_sequence_reply_mode

ChatGPT
Sets how the AI SDR (Jason) handles outgoing messages for one sequence. 'Review' means Jason drafts every message and holds it in the approval queue for the user to approve, edit, or reject (use reply_list_pending_approvals to see the queue). 'Autonomous' means Jason sends messages on its own, without approval. Mutation. REQUIRES the exact numeric SequenceId from a prior reply_search_sequences result. Never invent, estimate, default, or ask the user for this value. When switching to Autonomous, set SendExistingDrafts = true to also send the drafts already waiting in the approval queue, or false (default) to leave them in place. SendExistingDrafts is ignored for Review mode. This controls only the reply/approval mode; it does NOT control evergreen contact sourcing (autopilot). Setting a sequence to the mode it is already in succeeds and changes nothing. Failure modes: InvalidArguments (SequenceId must be > 0; Mode must be 'Review' or 'Autonomous'); Forbidden (the AI SDR feature is not enabled or you cannot access this sequence; tell the user, do not retry); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); InvalidParameter (the sequence is not an AI SDR sequence; tell the user, do not retry); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_set_trigger_enabled

ChatGPT
Enables or disables an automation trigger. Mutation. REQUIRES the exact trigger ID (a GUID) from a prior reply_list_triggers result. Do NOT invent it or ask the user for an ID. Failure modes: InvalidArguments (TriggerId must be a valid GUID); NotFound (the trigger does not exist; re-fetch via reply_list_triggers); ServiceUnavailable (transient; retry once, then tell the user).

reply_start_sequence

ChatGPT
Starts (or resumes) a sequence so it begins sending outreach. Mutation. REQUIRES the exact numeric sequence ID. Do NOT guess, fabricate, or estimate it. Must come from a prior reply_search_sequences result. Do NOT ask the user for a numeric ID; users do not know internal IDs. Will fail if the sequence has no contacts, no email accounts attached, or is archived. Starting a sequence that is already running succeeds and changes nothing. Does NOT add contacts; the sequence must already contain prospects. Failure modes: InvalidArguments (SequenceId must be > 0); NotFound (re-fetch via reply_search_sequences); Forbidden (workspace cannot start this sequence; tell the user, do not retry); Archived (the sequence is archived; tell the user before retrying); NoContacts (the sequence has no contacts; call reply_add_contact_to_sequence first); NoEmailAccounts (no mailbox is linked; call reply_assign_email_account_to_sequence first); SalesAgentNotAllowed (AI SDR is not enabled for this sequence; tell the user); Status (the sequence cannot be started from its current state; tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_unarchive_sequence

ChatGPT
Restores an archived sequence to the regular sequence list. Mutation. REQUIRES the exact numeric sequence ID. Do NOT guess, fabricate, or estimate it. Must come from a prior reply_search_sequences result (search with IsArchived=true). Do NOT ask the user for a numeric ID; users do not know internal IDs. Does NOT start the sequence and does NOT re-enroll the contacts that archiving removed; use reply_add_contact_to_sequence and reply_start_sequence afterwards if the user wants it sending again. Failure modes: InvalidArguments (SequenceId must be > 0); NotFound (the sequence does not exist or is not archived; re-fetch via reply_search_sequences); Forbidden (the user cannot unarchive this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_account

ChatGPT
Updates fields on an existing account (company). Patch semantics: only the fields you pass are changed, everything else keeps its stored value; pass an empty string to clear a field, except Name, which cannot be cleared. Mutation. Wide blast radius: renaming the account also rewrites Company on every contact linked to it, and changing Industry rewrites theirs, so an account with 5000 linked contacts means 5000 contact rows rewritten by one call. Say so before renaming an account the user did not name explicitly. REQUIRES the exact numeric account ID from a prior reply_search_accounts or reply_get_account result. Never invent it, and never ask the user for it. Returns the account as it stands after the update. Failure modes: InvalidArguments (AccountId must be greater than 0, no field to update was passed, a field exceeds its cap, or the account's current owner is no longer an active team member and has to be reassigned before the account can be edited); NotFound (no account with that ID in this workspace); InvalidInput (the update changed no row, so the account belongs to another workspace or was already deleted); Forbidden (this workspace or user is not allowed to change accounts; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_account_settings

ChatGPT
Updates the signed-in user's own account settings (partial patch: only the fields you provide change). Mutation. timezone must be an IANA zone id such as 'Europe/Kyiv' or 'America/New_York'; it changes how send windows, schedules and reports are displayed for this user. Per-user only: there is no workspace name and no workspace locale to change, and this does not touch other team members. Provide at least one field. Failure modes: InvalidArguments (provide at least one field); NotFound (settings unavailable for this user; tell the user); Forbidden (cannot change these settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the update, for example an unknown timezone id; retry once with a valid IANA id, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_account_stage

ChatGPT
Renames or recolors ONE existing account (company) stage (partial patch: only the fields you provide change). Mutation, affects the whole workspace. REQUIRES the exact numeric stage ID from a prior reply_list_account_stages result. Do NOT invent it or ask the user for a numeric ID. Provide at least one of name or colorId. Account stages carry no description. This CANNOT create a new stage and CANNOT delete one: the product has exactly 8 account stages and only their name and color are editable, so a request to add or remove a stage must be refused rather than emulated by renaming. The product stores the 8 stages as one set, so this call writes all of them back with the other seven unchanged: an edit someone else makes at the same moment can be overwritten. Change one stage per call and read the list back afterwards. Failure modes: InvalidArguments (StageId must be > 0; provide at least one field); NotFound (no account stage with this ID; re-fetch via reply_list_account_stages); Forbidden (workspace cannot change these settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the change; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_accounts_enrichment_settings

ChatGPT
Updates the workspace Accounts-feature enrichment settings (partial patch: only the fields you provide change). Mutation. This controls enrichment of ACCOUNT (company) records only. It does NOT control contact-level enrichment or how enriched data overwrites individual contact fields (that is a separate setting not currently exposed through the assistant; do not claim to have changed it). Provide at least one field. overwriteWithEnrichedData=true makes account enrichment overwrite all existing account fields; false only fills empty fields. Failure modes: InvalidArguments (provide at least one field); NotFound (settings unavailable for this workspace; tell the user); Forbidden (the workspace cannot change these settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the update; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_call_resolution

ChatGPT
Renames an existing custom call resolution. Mutation. REQUIRES the exact numeric resolution ID from a prior reply_list_call_resolutions result. Do NOT invent it or ask the user for a numeric ID. Only custom resolutions can be renamed; the outcome bucket cannot be changed and system defaults cannot be renamed. Failure modes: InvalidArguments (ResolutionId must be > 0; name must not be empty; there is no custom resolution with this ID (re-fetch via reply_list_call_resolutions); the resolution is a system default and cannot be renamed; or a name collision occurred); Forbidden (workspace cannot change these settings; tell the user, do not retry); ServiceUnavailable (transient, or the settings service could not complete the change; retry once, then tell the user).

reply_update_cloud_calls_team_access

ChatGPT
Enables or disables cloud-calls access for one team member. Mutation. REQUIRES the exact numeric memberId from a prior reply_list_cloud_calls_team_access result. Never invent, estimate, default, or ask the user for this value; if only a name is known, call reply_list_cloud_calls_team_access first. Team cloud calls must be enabled for the workspace before a member can be granted access. Enabling a member may consume a paid cloud-calls seat. Failure modes: InvalidArguments (memberId must be greater than 0); MemberNotFound (the memberId was not found or could not be updated; re-fetch via reply_list_cloud_calls_team_access); TeamCallsDisabled (team calls are off for this workspace; enable them first via reply_update_workspace_calls_settings); PaymentRequired (enabling the member needs a payment card or a payment confirmation completed in the app; tell the user); InvalidOperation (the calls service could not change access; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_contact

ChatGPT
Updates fields on an existing contact. Patch semantics: only the fields you pass are changed; null or omitted fields keep their current value. Mutation. REQUIRES the exact numeric contact ID. Must come from a prior reply_search_contacts or reply_filter_contacts result. Never invent, estimate, default, or ask the user. Does NOT add or remove the contact from sequences. Does NOT change the contact's owner; that requires a separate tool. On workspaces with the Accounts feature enabled, setting Company (with optional Industry) links the contact to a matching Account — found by company name and email domain, or created if none exists — instead of editing the contact directly; pass the company name as Company to relink. When the Accounts feature is off, Company and Industry are stored on the contact directly. CustomFields sets custom field values by name: call reply_list_contact_custom_fields first and pass the field's exact Label as Name (case-insensitive); only the listed fields change. A Name that matches no custom field is silently skipped with no error, so if the returned CustomFields (keyed by numeric field ID) lack the field, tell the user it does not exist instead of claiming success. Failure modes: InvalidArguments (ContactId must be > 0; at least one field other than ContactId must be set; every CustomFields entry needs a non-empty Name; respect string length caps); InvalidInput (V3 rejected the patch; surface the message and correct the field values); NotFound (the contact does not exist; re-fetch via reply_search_contacts); Forbidden (workspace cannot update this contact; tell the user, do not retry); PERMISSION_DENIED (the user lacks permission to create Accounts, needed to link a new Company; surfaced as PERMISSION_DENIED on MCP and as Forbidden on other surfaces; either way do not retry, tell the user to use an existing company/Account or request the permission); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_contact_enrichment_mode

ChatGPT
Sets the workspace contact enrichment mode. Mutation. Provide mode = 'overrideWithNew' (enrichment overwrites existing contact field values) or 'keepExisting' (enrichment only fills empty fields). This is CONTACT-level enrichment, distinct from account/company enrichment (reply_update_accounts_enrichment_settings). Failure modes: InvalidArguments (mode must be 'keepExisting' or 'overrideWithNew'); NotFound (settings unavailable for this workspace; tell the user); Forbidden (the workspace cannot change these settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the update; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_contact_handling_settings

ChatGPT
Updates the workspace contact-handling rules (partial patch: only the fields you provide change). Mutation. Provide at least one field. The OnReply booleans turn a pause rule on/off; the matching Mode field ('automatic' or 'byEmail') chooses HOW that pause happens. Note: enabling pauseAllContactsFromSameOrgOnReply also turns pauseContactInAllSequencesOnReply on, because the organization-wide pause already covers it. Workspaces on the organization permission model always pause automatically: there both Mode fields are forced to 'automatic' and any other value is ignored. The returned settings are read back after the update, so they show what was actually stored. Failure modes: InvalidArguments (provide at least one field; a Mode value must be 'automatic' or 'byEmail'); NotFound (settings unavailable for this workspace; tell the user); Forbidden (the workspace cannot change these settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the update; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_contact_stage

ChatGPT
Renames, recolors or redescribes ONE existing contact stage (partial patch: only the fields you provide change). Mutation, affects the whole workspace. REQUIRES the exact numeric stage ID from a prior reply_list_contact_stages result. Do NOT invent it or ask the user for a numeric ID. Provide at least one of name, colorId or description. This CANNOT create a new stage and CANNOT delete one: the product has exactly 8 contact stages and only their name, color and description are editable, so a request to add or remove a stage must be refused rather than emulated by renaming. The product stores the 8 stages as one set, so this call writes all of them back with the other seven unchanged: an edit someone else makes at the same moment can be overwritten. Change one stage per call and read the list back afterwards. Failure modes: InvalidArguments (StageId must be > 0; provide at least one field); NotFound (no contact stage with this ID; re-fetch via reply_list_contact_stages); Forbidden (workspace cannot change these settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the change; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_email_account_optout_settings

ChatGPT
Updates a mailbox's opt-out settings: the opt-out mode and the plain-text opt-out message. Partial patch (only the fields you provide change). Mutation. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. Provide at least one field. optOutMode is 'plainText' (a plain-text message at the bottom of every email) or 'optOutLink' (a clickable unsubscribe link). Failure modes: InvalidArguments (EmailAccountId must be > 0; provide at least one field; optOutMode must be 'plainText' or 'optOutLink'); NotFound (the mailbox does not exist; re-fetch via reply_list_email_accounts); Forbidden (workspace cannot modify this mailbox; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_email_account_safety_settings

ChatGPT
Updates a mailbox's safety limits: daily sending limit, sending delay, and ramp-up. Partial patch (only the fields you provide change), except ramp-up which is set as a unit. Mutation. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. Provide at least one field. Ramp-up is atomic: to enable it set dailyRampUpEnabled=true and provide both rampUpStartingAmount and rampUpIncrementPerDay; to disable it set dailyRampUpEnabled=false. minDelaySeconds and maxDelaySeconds must each be between 20 and 86400 seconds; out-of-range values are rejected. maxEmailsPerDay is capped by the workspace plan's per-mailbox ceiling; a value above it is rejected, nothing is saved, and the error names the allowed maximum. Failure modes: InvalidArguments (EmailAccountId must be > 0; provide at least one field; ramp-up rules above); InvalidInput (maxEmailsPerDay is above the plan ceiling; tell the user the ceiling and do not retry with the same value); NotFound (the mailbox does not exist; re-fetch via reply_list_email_accounts); Forbidden (workspace cannot modify this mailbox; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_email_account_settings

ChatGPT
Updates the sender name shown on a mailbox's outgoing emails. Mutation. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. Only the sender name is settable here; changing the sending method or reconnecting a mailbox is done in the UI, not through the agent. Failure modes: InvalidArguments (EmailAccountId must be > 0; senderName must not be empty); NotFound (the mailbox does not exist; re-fetch via reply_list_email_accounts); Forbidden (workspace cannot modify this mailbox; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_email_account_signature

ChatGPT
Replaces a mailbox's email signature with the supplied HTML. Mutation. REQUIRES the exact numeric email account ID from a prior reply_list_email_accounts result. Do NOT invent it or ask the user for a numeric ID. signatureHtml fully replaces the current signature (it is not appended). Pass an empty string to clear the signature. Failure modes: InvalidArguments (EmailAccountId must be > 0); NotFound (the mailbox does not exist; re-fetch via reply_list_email_accounts); Forbidden (workspace cannot modify this mailbox; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_email_notification_settings

ChatGPT
Updates the workspace email-notification preferences (partial patch: only the fields you provide change, the rest are preserved). Mutation, affects the whole workspace. Provide at least one field. emailReporting is one of 'daily', 'weekly', 'monthly', 'never'; teamDeliverabilityReports is one of 'weekly', 'monthly', 'never' where 'never' turns team reports off. notificationRecipients replaces the entire sequence-error recipient list; pass an empty array to clear it. Failure modes: InvalidArguments (provide at least one field; emailReporting and teamDeliverabilityReports must be one of the listed values); NotFound (settings unavailable for this user; tell the user); InvalidOperation (the settings service could not save the change; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_inbox_notification_settings

ChatGPT
Updates the user's inbox notification settings (partial patch: only the fields you provide change). Mutation. Provide at least one field. receiveFrom is 'myThreadsOnly', 'allTeamMembersThreads' or 'specificTeamMembersThreads' (with specificMemberIds when scoped to specific members). showWhen is 'anyPageOpen' or 'onlyInboxPageOpen'. channels is any of 'email', 'linkedin'. Failure modes: InvalidArguments (provide at least one field; receiveFrom/showWhen must be one of the allowed values); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_integration_config

ChatGPT
Replaces the field mappings of ONE sync step of ONE integration workflow. Mutation, DESTRUCTIVE: the mapping set is replaced wholesale, so a row you leave out stops syncing and a wrong row writes wrong data into the CRM. Read reply_get_integration_config first, send the existing rows plus your change, and confirm the final set with the user before calling. Identify the integration by system-type name, the workflow by its name, and the step by its entity pair exactly as reply_get_integration_config reports them. Field names must come from that same config; an unknown name is rejected with the list of valid ones. Exactly one row must be the identifier (the field records are matched on). Owner mapping, filters and actions on the step are left untouched. Steps that map contact status to a CRM picklist cannot be edited here. On Account-Company steps the name row and the CRM side of the identifier row are fixed by configuration for the chosen identifierType (Domain or LinkedInUrl): still send exactly one identifier row, on that type's Reply field (domainName or linkedInUrl); its CRM field and the name row are replaced with the configured ones, and an omitted name row is restored. Other rows, identifierType and multipleMatchesResolution stay editable. Failure modes: InvalidArguments (the integration name is not a known system type, no rows given, or not exactly one identifier row); InvalidOperation (unknown workflow, unknown step, unknown field name, duplicate source or target field, or a status-mapping step; the message names what is valid); NotSupported (this system type has no configuration provider); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_knowledge_base

ChatGPT
Updates an existing AI SDR (Jason) knowledge base. Mutation, patch semantics: only the fields you pass are changed; omitted fields are left as-is. This is how you save typed text guidance for Jason: pass it as Instructions (free text telling Jason how to use this knowledge when answering prospects). You can also rename the knowledge base. REQUIRES the exact numeric knowledge base ID from a prior reply_list_knowledge_bases result. Never invent, estimate, default, or ask the user for this value. Changes take effect for any sequence already using this knowledge base. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; provide at least one of Name or Instructions); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no knowledge base with this id; re-fetch via reply_list_knowledge_bases); Conflict (a knowledge base with this name already exists; choose another name); InvalidParameter (the content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_linkedin_safety_limits

ChatGPT
Sets the per-action daily LinkedIn limits of an account (connections, view profile, like recent posts, messages, inMail, revoke connections, endorse skills, follow profile, Sales Navigator connections). This is THE tool for any LinkedIn per-day action limit, whether the user wants a single fixed number or a random range. Partial patch (categories you omit are left unchanged). Mutation. REQUIRES the exact numeric LinkedIn account ID from a prior reply_list_linkedin_accounts result. Do NOT invent it or ask the user for a numeric ID. limitMode selects how each limit is applied: 'maxAmount' = a single fixed daily cap per action (provide max only); 'limitRanges' = a random min-max range per day (provide min and max). A request like 'set 20 connection requests and 40 profile views per day' means limitMode='maxAmount' with those numbers as max. Provide at least one field. Each value must be 0-100 (the plan ceiling); out-of-range values are rejected. Failure modes: InvalidArguments (LinkedInAccountId must be > 0; provide at least one field; each min/max must be 0-100; min must not exceed max); NotFound (the account does not exist; re-fetch via reply_list_linkedin_accounts); Forbidden (workspace cannot modify this account; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_offer

ChatGPT
Updates an existing AI SDR (Jason) offer. Mutation, patch semantics: only the fields you pass are changed; omitted fields are left as-is. A provided list field replaces the whole list. Use this to sharpen the pitch, add proof points, or change the value proposition. REQUIRES the exact numeric offer ID from a prior reply_list_offers result. Never invent, estimate, default, or ask the user for this value. Changes take effect for any sequence already using this offer. Failure modes: InvalidArguments (OfferId must be > 0; provide at least one field to change); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (no offer with this id; re-fetch via reply_list_offers); InvalidParameter (the offer content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_playbook

ChatGPT
Updates an existing AI SDR (Jason) playbook. Mutation, patch semantics: only the fields you pass are changed; omitted fields are left as-is. REQUIRES the exact playbook ID from a prior reply_list_playbooks result. Never invent, estimate, default, or ask the user for this value. Body is the instruction text (the prompt) Jason follows. Changes take effect for any sequence already using this playbook. Failure modes: InvalidArguments (PlaybookId must be non-empty; at least one of Name, Description, or Body should be provided; the Body must not contain unrecognized personalization variables, the message lists them); Forbidden (the AI SDR feature is not enabled, or you lack permission to edit organization playbooks; tell the user, do not retry); NotFound (no playbook with this id; re-fetch via reply_list_playbooks); InvalidIdFormat (the id is malformed; re-fetch via reply_list_playbooks); GlobalPlaybookReadOnly (Global playbooks cannot be edited; tell the user); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_reengagement_card

ChatGPT
Updates a reengagement card in an AI SDR (Jason) knowledge base by card id (the card may live in any re-engagement flow). Mutation, patch semantics: only the fields you pass are changed; omitted fields are left as-is. ToneOfVoice (case-insensitive): 'Confident', 'Persuasive', 'Witty', 'Straightforward', 'Empathetic'. ResponseLength (case-insensitive): 'SuperShort', 'Short', 'Medium', 'Long'. Passing Links replaces the whole link list. Set IsEnabled to false to pause the card. DeliveryMode (case-insensitive): 'Draft', 'Auto'. REQUIRES the exact numeric knowledge base ID (from reply_list_knowledge_bases) and the exact reengagement card id (from reply_list_reengagement_cards). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; ReengagementCardId must be a valid id; provide at least one field to change; SendAfter must be >= 0; ToneOfVoice and ResponseLength must be allowed values); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (the knowledge base or reengagement card does not exist; re-fetch via reply_list_reengagement_cards); Conflict (the new SendAfter window overlaps another reengagement card in this flow; pick a different SendAfter value); InvalidParameter (the content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_reply_handler

ChatGPT
Updates a reply handler in an AI SDR (Jason) knowledge base. Mutation, patch semantics: only the fields you pass are changed; omitted fields are left as-is. ToneOfVoice (case-insensitive): 'Confident', 'Persuasive', 'Witty', 'Straightforward', 'Empathetic'. ResponseLength (case-insensitive): 'SuperShort', 'Short', 'Medium', 'Long'. DeliveryMode (case-insensitive): 'Draft', 'Auto', 'StopAndNotify'. AdditionalNotificationEmail (only for StopAndNotify) is an extra recipient notified in addition to the account used to reach the prospect. Passing Links replaces the whole link list. REQUIRES the exact numeric knowledge base ID (from reply_list_knowledge_bases) and the exact reply handler id (from reply_list_reply_handlers). Never invent, estimate, default, or ask the user for these values. Failure modes: InvalidArguments (KnowledgeBaseId must be > 0; ReplyHandlerId must be a valid id; provide at least one field to change; ToneOfVoice and ResponseLength must be allowed values; AdditionalNotificationEmail must be a valid email); Forbidden (the AI SDR feature is not enabled; tell the user, do not retry); NotFound (the knowledge base or reply handler does not exist; re-fetch via reply_list_reply_handlers); InvalidParameter (the content was rejected; the message explains why); UpstreamFailure (the AI SDR backend is temporarily unavailable; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_revoke_connection_requests_setting

ChatGPT
Updates a LinkedIn account's auto-revoke setting for pending connection requests: whether to auto-revoke, and after how many days. Mutation. REQUIRES the exact numeric LinkedIn account ID from a prior reply_list_linkedin_accounts result. Do NOT invent it or ask the user for a numeric ID. When enabled is true, provide revokeAfterDays. Failure modes: InvalidArguments (LinkedInAccountId must be > 0; revokeAfterDays must be > 0 when enabling); NotFound (the account does not exist; re-fetch via reply_list_linkedin_accounts); Forbidden (workspace cannot modify this account; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_schedule

ChatGPT
Updates an existing sending schedule (partial: fields you omit keep their current value). Mutation. REQUIRES the exact numeric schedule ID from a prior reply_list_schedules result. Do NOT invent it or ask the user for a numeric ID. Provide at least one field. mainTimings/followUpTimings, if provided, REPLACE the whole set of weekday windows; call reply_get_schedule first to see the current windows. Failure modes: InvalidArguments (ScheduleId must be > 0; provide at least one field; time ranges must be valid); NotFound (the schedule does not exist; re-fetch via reply_list_schedules); DuplicateName (another schedule already has this name; tell the user); Forbidden (workspace cannot modify this schedule; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_sequence_accounts

ChatGPT
Assigns or replaces the email account(s) and/or the LinkedIn account a sequence sends from. Mutation. REQUIRES the exact numeric sequence ID from a prior reply_search_sequences result. Account IDs must come from reply_list_email_accounts / reply_list_linkedin_accounts. Never invent IDs or ask the user for a numeric ID. Provide at least one of emailAccountIds or linkedInAccountId. emailAccountIds REPLACES the full set of mailboxes (it is not additive); omit it to leave mailboxes unchanged. linkedInAccountId sets the single LinkedIn account; omit it to leave the LinkedIn account unchanged. Per-mailbox daily limit is a global email-account property, not sequence-scoped; change it on the email account itself, not here. Failure modes: InvalidArguments (SequenceId must be > 0; provide at least one of emailAccountIds or linkedInAccountId; IDs must be > 0); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); Archived (the sequence is archived; tell the user); EmailAccountNotFound (one of the mailboxes does not exist; re-fetch via reply_list_email_accounts); LinkedInAccountNotFound (the LinkedIn account does not exist; re-fetch via reply_list_linkedin_accounts); Forbidden (workspace cannot modify this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_sequence_calls_settings

ChatGPT
Updates a sequence's Call step handling config (partial patch: only the fields you provide change). Mutation. REQUIRES the exact numeric sequence ID from a prior reply_search_sequences result. Do NOT invent it or ask the user for a numeric ID. Provide at least one field. callStepHandlingMode is 'manual' or 'automatic'. automaticallyCallOnOpens turns on placing a call after a number of email opens; emailOpensBeforeCall is that threshold (1-10, product-recommended 4-7). pauseOnSuccessfulCall pauses the contact after a successful call. Failure modes: InvalidArguments (SequenceId must be > 0; provide at least one field; callStepHandlingMode must be 'manual' or 'automatic'; emailOpensBeforeCall must be 1-10); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); Forbidden (workspace cannot modify this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_sequence_general_settings

ChatGPT
Updates any subset of a sequence's General settings (partial patch: only the fields you provide change). Mutation. REQUIRES the exact numeric sequence ID from a prior reply_search_sequences result. Do NOT invent it or ask the user for a numeric ID. Provide at least one field to update. maxSameDomainContactsPerDay only takes effect when maxSameDomainContactsPerDayEnabled is true. maxNewDailyContacts only takes effect when noLimitOnNewDailyContacts is false. Numeric fields are range-checked to the product limits: maxEmailsPerDay 1-10000, delayBetweenEmailsSeconds at least 20 and less than 86400 (24h), maxNewDailyContacts 1-1000. Failure modes: InvalidArguments (SequenceId must be > 0; provide at least one field; a numeric field is out of its allowed range); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); Archived (the sequence is archived; tell the user); Forbidden (workspace cannot modify this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_sequence_tasks_settings

ChatGPT
Updates a sequence's Task step handling config (partial patch: only the fields you provide change). Mutation. REQUIRES the exact numeric sequence ID from a prior reply_search_sequences result. Do NOT invent it or ask the user for a numeric ID. Provide at least one of taskStepHandlingMode ('manual' or 'automatic') or taskOwner ('contact' or 'sequence'). Failure modes: InvalidArguments (SequenceId must be > 0; provide at least one field; taskStepHandlingMode must be 'manual' or 'automatic'; taskOwner must be 'contact' or 'sequence'); NotFound (the sequence does not exist; re-fetch via reply_search_sequences); Archived (the sequence is archived; tell the user); Forbidden (workspace cannot modify this sequence; tell the user, do not retry); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_trigger

ChatGPT
Updates an automation trigger: rename it, change its event, switch it on or off, or replace its actions or conditions. Partial patch, only the parts you provide change. Mutation with wide blast radius, so read back the result and confirm it with the user. REQUIRES the exact trigger ID (a GUID) from a prior reply_list_triggers result. Do NOT invent it or ask the user for an ID. actions and conditions are REPLACED as a whole when provided: to add one action, read the trigger with reply_get_trigger and send the actions it returned plus the new one. Omit them to leave them untouched. The supported events, actions, conditions and clauses are exactly the ones listed on reply_create_trigger, including the same coverage limit: a trigger that uses an unsupported action or condition (reply_get_trigger returns it with editable=false) can still be renamed, switched or deleted, but its actions and conditions must be edited in the app, so do not send actions or conditions for it. Failure modes: InvalidArguments (TriggerId must be a valid GUID); NotFound (the trigger does not exist; re-fetch via reply_list_triggers); InvalidOperation (nothing to update, an empty action list, or an unsupported or malformed event, action, condition, clause or field; the message names the allowed values); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_workspace_calls_settings

ChatGPT
Updates the workspace-level Calls settings (partial patch: only the fields you provide change). Mutation, affects the whole workspace. Provide at least one of teamCallsEnabled or callRecordingEnabled. teamCallsEnabled can be changed only by the team owner. Turning teamCallsEnabled to a value it already has succeeds and changes nothing. You cannot disable callRecordingEnabled while consent recording is on: check isConsentRecordingEnabled via reply_get_workspace_calls_settings first, and disable consent recording before turning recording off. Failure modes: InvalidArguments (provide at least one field); ConsentRecordingDependency (cannot disable call recording while consent recording is on; disable consent recording first, or re-check isConsentRecordingEnabled via reply_get_workspace_calls_settings); Forbidden (only the team owner can change these settings; tell the user, do not retry); PaymentRequired (enabling team calls needs a billing step or payment card completed in the app; tell the user); NotFound (calls settings unavailable for this workspace; tell the user); InvalidOperation (the calls service could not complete the update; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

reply_update_workspace_email_settings

ChatGPT
Updates workspace-level email and deliverability settings (partial patch: only the fields you provide change). Mutation, affects the whole workspace. Provide at least one field. bccOutgoingEmails and forwardRepliesTo are comma-separated email lists. openTrackingDisabled=true turns open tracking OFF workspace-wide. This tool does not enforce upper bounds on this path, so unusually large or unusual values may be accepted as-is; confirm any unusual value with the user before applying it. Failure modes: InvalidArguments (provide at least one field; numeric fields must be positive); NotFound (settings unavailable for this workspace; tell the user); Forbidden (the workspace cannot change these settings; tell the user, do not retry); InvalidOperation (the settings service could not complete the update; retry once, then tell the user); ServiceUnavailable (transient; retry once, then tell the user).

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

App Stats

173

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily