Sequences (Outreach → Sequences) send a series of messages to one contact at a time: emails, chat messages, surveys, push notifications and WhatsApp messages, with waits, if/else checks and actions in between. Contacts join by hand, from a segment, a workflow, a pipeline or an event, and leave when the sequence ends, when its goal is reached or when one of its stop rules matches.
The Gleap MCP server lets AI agents such as Claude, ChatGPT, Cursor or Kai build and run sequences for you: draft a whole sequence from a one-line request, preview every message for a real contact, send test emails, take it live once you agree, and read the results.
Connect
Add the Gleap MCP server to your AI tool and sign in with Gleap. Connect the Gleap MCP has the server URLs per data region, the setup for each AI tool, and how to use several projects in one connection.
Tools
Tool | What it does | Access |
|---|---|---|
| Sequences with status (draft, live, paused), how contacts join, goal, step count, enrollment counts and summary (reply rate, goal rate), unpublished changes and the dashboard link. | Read |
| One sequence in full: who joins, when it stops, goal, sending settings, the steps as an outline with ids plus the editable steps JSON, unpublished changes and what still blocks going live. | Read |
| The starter templates ( | Read |
| New sequence from a template and/or a whole definition. Always a draft: nothing is sent until it goes live. | Draft only |
| Change the name, settings or steps ( | Draft only |
| Renders every email and chat message as one contact would get it and lists variables that resolve empty. Saves and sends nothing. | Read |
| Sends one email step as a test to your own address or up to 5 addresses. A Kai-written step is written by Kai for a real contact and sent to you. Not counted in the results. | Write (to you) |
|
| Write |
| Makes the unpublished changes of a live or paused sequence the version contacts get. | Write |
| Drops the unpublished changes; the published version stays. | Write |
| Adds up to 500 contacts by email, user id or contact id to a live sequence. Returns the skipped ones with a reason. | Write |
| Results: enrollments by status, reply rate, goal rate, exit reasons and, per step, how many reached it, the yes/no split and, for emails, sent, opened, clicked and replied. | Read |
| The contacts in a sequence with their current step, what they wait for and why they left. Filter by status or search a name or email. | Read |
| One contact's timeline: every step done, skipped or failed, the paths taken and the exit reason. | Read |
| Pause, resume or end the sequence for one contact. | Write |
Steps
Steps are read top to bottom. Every step has a unique id (up to 64 characters) and a type. A sequence holds up to 100 steps, and if/else paths nest up to 5 levels deep.
Messages
Step | Type | Fields | Notes |
|---|---|---|---|
|
| Content is plain text (a blank line starts a new paragraph) or a TipTap doc. Later emails reply in the thread of the first one ("Re: …") unless | |
Chat message |
|
| Starts a conversation in your widget from the sender. |
Survey |
|
| Shows one of your surveys in your app or website. A draft survey works: only the people this step sends it to see it, and the survey's own audience and schedule don't apply. |
Push notification |
|
| Sends one of your push notifications to the devices of people who use your mobile app. Skipped when push isn't set up for the project or the contact has no device. |
|
| Sends one of your approved WhatsApp templates to the contact's phone number. Skipped for contacts without a phone number. |
Survey, push and WhatsApp steps send something you already made under Outreach. The agent finds it with list_surveys or list_outbound_messages and puts its id in outboundId.
Emails written by Kai
Add kai: { enabled: true, prompt: "…" } to an email step and Kai writes each contact their own subject and message when the step is due, from their activity, company, conversations, your help center and website. Kai-written emails are billed as AI usage. The step's own subject and content become the fallback for people Kai knows nothing specific about; without a fallback the step is skipped for them.
When they're not online
Chat message and survey steps can wait for the contact to be active in your app instead of being shown the next time they open it:
{
"id": "checkin",
"type": "message",
"content": "Need help setting up? I'm here.",
"online": {
"enabled": true,
"amount": 3,
"unit": "days",
"fallback": "email",
"subject": "Need a hand with the setup?",
"content": "Hi {{session.firstName|there}},\n\nNeed help setting up? Just reply to this email."
}
}The step waits up to amount unit for the contact to come online. If they don't show up in time, they get the fallback email (its own subject and content) or, with fallback: "skip", the step is skipped.
Timing and logic
Step | Type | Fields | Notes |
|---|---|---|---|
Wait |
|
| Units |
Wait until |
|
| Waits until the contact tracks the event, up to the time limit. Did it: |
If / else |
|
| Checks the contact's data when they reach the step (plan, tags, custom data, events). |
If / else on email engagement |
|
| Did they open, click a link in or reply to one email ( |
Empty yes or no paths continue with the step after the if/else. Put a wait before an engagement check to give people time to open or reply. Opens and clicks are only tracked for emails with the personal or company look: plain emails (the default look) don't track them, so check replied for those. Opens are approximate: some email apps block them.
{
"id": "replied_check",
"type": "branch",
"name": "Replied to the welcome email?",
"mode": "engagement",
"engagement": { "action": "replied", "stepId": "welcome" },
"yes": [{ "id": "tag_replied", "type": "tag", "op": "add", "tag": "replied" }],
"no": [{ "id": "nudge", "type": "email", "content": "Hi {{session.firstName|there}},\n\nJust checking in. Anything I can help with?" }]
}Actions
Step | Type | Fields |
|---|---|---|
Add or remove a tag |
|
|
Update contact data |
|
|
Add to pipeline |
|
|
Start another sequence |
|
|
End here |
| none |
Variables work in subjects, content and attribute values: {{session.firstName|there}}, {{session.companyName}}, {{session.customData.role}}, {{project.name}}. Give a fallback after | for anything a contact may lack; preview_sequence lists the variables that resolve empty.
Settings
Setting | What it controls |
|---|---|
| How contacts join: |
| When it stops early (see below). |
| The conversion event ( |
|
|
When it stops
A sequence always stops when the contact unsubscribes or the address bounces, and an out-of-office reply always pauses it until the contact is back. On top of that, exit turns on more reasons:
Field | Default | Effect |
|---|---|---|
|
| "They reply": a reply to one of the sequence's emails or to its chat message ends it. Off, replies keep the sequence going: the contact keeps getting the next steps. |
|
| "They contact you about anything else": a message from them in any other conversation, like a new chat or email, ends it. |
|
| Tracked events that end it, for example |
| none | Contact data that ends it, checked before every step. |
Replies keep the sequence going by default, for every email type. They still count in the results (reply rate, replies per email), and an engagement if/else can send people who replied down another path. The reengage (Win back) template turns onReply on; blank, onboarding and trial leave it off. Sequences created before this change keep the setting they have.
How agents build a sequence
get_targeting_optionsfor the event and attribute names your project really tracks.create_sequencewith a template or the whole definition. Invalid definitions are refused with the exact field that is wrong.preview_sequencefor a real contact, thensend_sequence_test_emailfor the emails.The agent shows you what the sequence sends and to whom (or you open the
reviewUrlin the editor).Once you say "go live", the agent calls
set_sequence_statuswithlive. Later edits go throughupdate_sequenceandpublish_sequence_changes.
Example request to an agent:
Build a trial sequence: a welcome email from me, a survey in the app after a week (email them the question if they don't come back within 3 days), and if they haven't opened the welcome email after 3 days, a WhatsApp reminder.
The agent creates a draft with a welcome email, a 3-day wait, an engagement if/else on opened for welcome with a whatsapp step on the No path, a wait, and a survey step with online and an email fallback. It asks before taking it live.
Guardrails
create_sequencealways saves a draft, andupdate_sequenceon a live sequence only saves unpublished changes. Nothing reaches contacts untilset_sequence_statusorpublish_sequence_changes, which agents call only after you agreed.Going live is checked by the server: every email needs a subject and content (or a Kai prompt), survey, push and WhatsApp steps need the message they send, waits need a duration and if/else steps a condition or an engagement check.
enroll_in_sequencecontacts customers right away, so agents use it only for the contacts you asked for.send_sequence_test_emailgoes only to your own address or addresses you gave.

