Skip to main content
Glama

Park A Reply Until A Date

li_snooze_reply

Put a conversation down until a date WITHOUT closing it — for "I am away until the 24th", "circle back after the quarter", anything where the answer is simply not now.

Why this exists rather than li_mark_reply_handled: the needs-answer queue sorts oldest-first, so an out-of-office reply sits permanently at the TOP of it, re-read every session in front of everyone genuinely waiting. Marking it handled removes it — and ALSO hands the sequence off, which makes the inbox sweep (about hourly) treat the thread as finished and never read it again. So parking somebody that way ended reply detection for them permanently: they come back on the 24th and nothing notices.

This writes one date and nothing else. The conversation stays open, the sweep keeps watching the thread, and a reply arriving while it is parked is still detected and moves them back up the queue. On the date the row simply reappears in li_replies_to_answer carrying snoozedUntil, so you can see why it was quiet. On a conversation already marked with an outcome (e.g. interested) the date is its CHECK-AGAIN date instead: it reappears in li_marked_conversations(dueOnly=true), not the reply queue.

NOTHING IS SENT when it expires — there is no scheduled follow-up here, deliberately. It reappears in a queue you already read; you decide then.

Pass until: null to un-park a date you set wrongly. Takes profileUrls for several at once.

Input Schema

NameRequiredDescriptionDefault
noteNoWhy — stored on the timeline with the date
untilYesISO 8601 date/time to park until, e.g. "2026-09-24T09:00:00Z". Must be in the future. null un-parks.
contactIdNoOne contact by id (from li_contact_dossier or li_campaign_contacts), instead of profileUrl
messageIdNoThe exact message row, when you already have it from a dossier or a queue read.
sessionIdNoThe account this conversation is on. Only used when the person is in NO campaign: then a light record is created on this account so the mark has something to act on. Needed only when you have more than one account.
campaignIdNoWhich campaign membership to act on. A contact can be in more than one campaign, and without this the row is whichever was touched last — so stopping them in one campaign while leaving the other running was not possible. Pass it whenever the contact might be in two.
profileUrlNoOne contact, by profile URL
profileUrlsNoSeveral contacts in ONE call, max 200. Each is resolved and marked independently: one refusal does not stop the rest, and the reply reports every one by URL.
sessionLabelNoSame, by account label
conversationUrnNoThe thread, straight from li_list_conversations (single-person form). Recorded on the conversation so the live inbox recognises it as decided. On its own it finds the person only when their thread is already stored — pass profileUrl (the participantProfileId / ACoAA… URL) too.
participantNameNoTheir name from li_list_conversations — kept on a newly recorded contact.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / contactId / description
      Added value: +"One contact by id (from li_contact_dossier or li_campaign_contacts), instead of profileUrl"
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare write/non-destructive/non-open-world. The description adds the traits that matter: nothing is sent on expiry, the conversation stays open, the hourly sweep keeps watching and still detects replies while parked, and the row reappears either in li_replies_to_answer (with `snoozedUntil`) or, if already marked with an outcome, in li_marked_conversations(dueOnly=true) as a check-again date.

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-loads the core action in the first clause and every paragraph carries non-obvious information (queue-sort consequence, expiry behavior, check-again vs reply-queue routing). It is long, and the rationale paragraph could be tightened, but no sentence is filler.

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 11 parameters, no output schema, and minimal annotations, the description fills the gaps an agent needs: what state changes, what does not happen on expiry, where the row resurfaces, and how marked vs unmarked conversations diverge. Return behavior is described in queue terms, which compensates for the absent output schema.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all 11 parameters including `until: null` semantics and the batch behavior of `profileUrls`. The description reinforces 'this writes one date and nothing else' and the batch/un-park behavior but adds little syntax or format detail beyond the schema, so baseline 3 applies.

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+scope ('Put a conversation down until a date WITHOUT closing it') and immediately names the sibling it must be distinguished from, li_mark_reply_handled, explaining why it exists instead. An agent can pick between the two without opening either 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 explicit when-to-use triggers ('I am away until the 24th', 'circle back after the quarter') and an explicit when-NOT-to-use with the alternative tool and the concrete harm of choosing wrong (reply detection ends permanently for that contact). Also states the un-park path via `until: null`.

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