Skip to main content
Glama

What Is About To Be Sent, To Whom, And When

li_scheduled_steps
Read-only

Every message step that has a send time on it, soonest first — the queue of what is actually about to go out.

No other read answers this. li_due_messages is what is already LATE, li_accepted_pending_message is an acceptance with no opener yet, and li_job_result lists JOBS — so it can say a send is queued without saying who it is to. This lists PEOPLE with times: stepId, kind, position, the full text, scheduledAt, originalDueAt, deferredSendAt, prospectTimezone, prospectLocalOriginalDue, prospectLocalDeferredSend, the campaign and the account that will really send it.

⚠️ IT DOES NOT FILTER ON CAMPAIGN STATUS, deliberately, and that is the most useful thing about it: PAUSING A CAMPAIGN DOES NOT STOP A STEP THAT IS ALREADY SCHEDULED. The worker never looks at the campaign when it sends a step, so a paused campaign's queued messages still leave. Each row carries campaignStatus so a paused one shows up as context rather than as an absence — and to actually stop those messages, hold them with li_cancel_steps.

A step with NO send time is not here: a later step's time is set when the one before it goes out, so those are sequence positions rather than messages waiting — thousands of them, and they would bury the sixty that are real.

Pass withinHours for a window (withinHours=24 is "what goes out today"), and campaignId to see one campaign's queue on its own — that filter goes into the QUERY, so the soonest steps it returns are the soonest steps OF THAT CAMPAIGN rather than whatever survived a page cut somewhere else. Both narrow on top of the account scope, never instead of it.

requeue is the last time this message was put back in the queue, or null when nothing has. Take the stepId straight to li_cancel_steps or li_edit_step.

Input Schema

NameRequiredDescriptionDefault
limitNoHow many steps to return, soonest first (default 50, max 200).
sessionIdNoScope to one sending account id
campaignIdNoOne campaign only — "what is this campaign about to send". Narrows the QUERY on top of the account scope, so the page is the soonest steps OF THIS CAMPAIGN. From li_list_campaigns.
withinHoursNoOnly steps due within this many hours — "what is going out today" is withinHours=24. Omitted returns the soonest ones whenever they are due.
sessionLabelNoScope to one sending account by label

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 cover safety (readOnlyHint=true, destructiveHint=false, openWorldHint=false), and the description adds non-obvious operational behavior: the worker ignores campaign status when sending, so pausing a campaign does not stop already-scheduled steps, and each row carries campaignStatus as context. It also names the remedy (li_cancel_steps) and enumerates returned fields, which matters since there is no output schema.

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 definition and the sibling disambiguation before the caveats. It is dense and every block carries information, but the campaign-status caveat is stated twice and the parenthetical asides plus ALL-CAPS/emoji add length that could be trimmed without losing signal.

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?

With no output schema, the description correctly carries the return contract, listing stepId, kind, position, full text, scheduledAt, originalDueAt, deferredSendAt, prospectTimezone, prospectLocalOriginalDue, prospectLocalDeferredSend, campaign, account and campaignStatus. Combined with the filter semantics and the deliberate non-filtering on campaign status, an agent has everything needed to call and interpret it.

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 and the parameter docs largely restate the schema. The description still adds relational meaning the per-parameter text does not: both filters narrow on top of the account scope rather than replacing it, and the campaignId filter is applied in the QUERY so paging cannot distort which steps come back.

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 plus scope and ordering: 'Every message step that has a send time on it, soonest first — the queue of what is actually about to go out.' It then explicitly differentiates from three siblings (li_due_messages = LATE, li_accepted_pending_message = acceptance with no opener, li_job_result = JOBS), so an agent can route correctly without opening other schemas.

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 explicit when-to-use (withinHours=24 = 'what goes out today'; campaignId = one campaign's queue), when-not (does NOT filter on campaign status, by design), what is excluded (steps with no send time are sequence positions, not pending messages), and a concrete next action (take stepId to li_cancel_steps or li_edit_step). Nothing is left to inference.

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