Skip to main content
Glama

Hold Queued Messages (cancel scheduled steps)

li_cancel_steps
Destructive

Cancel specific scheduled sequence messages so they are never sent, and NOTHING ELSE. This is the tool for "hold tomorrow's Day-3, the wording is wrong" β€” a narrow hold on the steps you name, and nothing more.

🚨 WHAT MAKES IT DIFFERENT FROM li_mark_stopped AND li_mark_outcome, which were the only way to do this: those hand the SEQUENCE off. They set the message to handed_off and advance the contact, and handed_off is terminal for the sequence β€” no further automated step goes out, the contact reads as closed everywhere, and acceptance can no longer revive them (only a new message from them reopens the conversation, which the inbox sweep (about hourly) still watches for). So "hold one message" could only be said as "this person is finished with". This writes MessageStep.status = 'canceled' on the steps you name and touches no message status, no contact status and no outcome.

SO THE SEQUENCE STAYS ALIVE. The remaining steps are still pending on a live message and the drip carries on from the next one β€” and the next one is RE-CHAINED: if you hold the step the clock was pointing at, the one after it is re-stamped with its own delay so it actually comes due, instead of sitting pending with no time on it for ever. Each result says which step was re-pointed and when, under rescheduled. Absent means no re-chain was needed (the held step was not the scheduled one, or nothing follows it) β€” never that one was skipped.

Step ids come from li_campaign_contacts (every step carries its id) or li_contact_dossier. Holding several at once is fine and expected; a step named later in the same call is never used as a re-chain target, so holding Day-3 and Day-7 together cannot strand Day-14.

Refused per row, with the rest of the batch still applied: a step that is not pending (nothing is queued for it, so holding it would change nothing), a step whose sequence is replied / handed_off / completed / failed (it will never be sent), and a step on a campaign you cannot see (reported as 'Not found', the same as one that does not exist).

⚠️ A HOLD CANNOT CURRENTLY BE UNDONE, and no other tool will do it either β€” stated plainly because an instruction that cannot run is worse than none. li_edit_step only touches a step that is still pending, so it refuses a held one; li_reset_contact refuses a sequence that is pending / in_progress / awaiting_connection, which is exactly what this tool leaves behind. So hold a step when you want it NOT sent, and if the message is one you still want to send, reach for li_edit_step on it BEFORE holding it β€” rewriting the wording is reversible where holding is not. To stop reaching somebody altogether, that IS li_mark_stopped or li_mark_outcome.

Input Schema

NameRequiredDescriptionDefault
reasonNoWhy β€” written onto the timeline, ONE entry per sequence rather than one per step, so six held steps across two people is two entries.
stepIdsYesThe steps to hold, up to 200 β€” their `id` from li_campaign_contacts or li_contact_dossier. Each is applied and reported on its own.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description goes far beyond that: it discloses exactly which field is written, that no message/contact status or outcome is touched, the re-chaining of the next step, per-row refusal semantics, and the critical fact that the hold is irreversible. This is rich behavioral context the annotations alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and its scope before any of the comparison or caveat material. The length is largely justified by the irreversibility warning and sibling disambiguation, though the emphatic ALL-CAPS phrasing and emoji headers add some bulk that a tighter edit could remove.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description explains the return surface (the `rescheduled` field and what its absence means) and covers edge cases an agent must know: batch partial failure, non-pending steps, invisible campaigns reported as 'Not found', and irreversibility. Nothing needed to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: step ids come from li_campaign_contacts or li_contact_dossier, multiple steps can be held in one call, and a step named later in the same call is never used as a re-chain target. The reason field's per-sequence (not per-step) timeline behavior is also clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope: 'Cancel specific scheduled sequence messages so they are never sent, and NOTHING ELSE,' then pins the exact state change (MessageStep.status = 'canceled'). It explicitly distinguishes itself from li_mark_stopped and li_mark_outcome, so an agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the triggering scenario ('hold tomorrow's Day-3, the wording is wrong'), names the alternatives (li_mark_stopped/li_mark_outcome for stopping entirely, li_edit_step for rewording), and states the ordering constraint ('reach for li_edit_step on it BEFORE holding it'). Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources