Skip to main content
Glama

resolve_messages

Permanently acknowledge specific messages to remove them from the pending queue, ensuring already-handled mail stays archived and never reappears in new sessions.

Instructions

Permanently resolve (ack) specific messages so they leave your pending queue for good (v2.12.0).

When to use: PARTIAL handling — you've actioned some of your mail but not all ("I did these, not those"). For the common "I've handled everything I just drained" path, prefer get_messages(status='pending', ack=true) which drains AND resolves in one call. Resolving is the durable, session-INDEPENDENT counterpart to reading: read is a per-session observation (a fresh terminal re-sees prior-session-read mail so handovers don't drop unfinished work); resolved is a permanent "handled, archive it" that the pending filter honors, so an already-handled message never re-floods a new session.

Behavior: sets resolved_at=now() for the given ids WHERE to_agent is you AND not already resolved, in one transaction. Does NOT mark messages read (orthogonal plane) and does NOT delete them — they remain in status='all'/'history'/'resolved'. Idempotent: re-resolving, unknown ids, or ids addressed to another agent are silently skipped (reflected in the returned counts). Recipient-scoped: you can only resolve your OWN mail (the dispatcher binds your token to agent_name; the DB also filters by to_agent).

Returns: { success: true, agent, resolved_ids: string[], resolved_count, requested_count, note }. resolved_count < requested_count when some ids were already resolved, unknown, or not yours.

Errors: AUTH_FAILED (token missing/mismatched), VALIDATION (empty/oversized id list), RATE_LIMITED.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
agent_nameYesYour agent name (the recipient; only your own mail can be resolved)
agent_tokenNoYour agent token (from register_agent response). Optional here — also resolvable from RELAY_AGENT_TOKEN env or X-Agent-Token header.
message_idsYesThe message ids to permanently resolve (ack). Only ids addressed to you are affected; unknown/foreign ids are silently skipped.
Behavior5/5

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

No annotations were provided, so the description carries full disclosure burden — and it delivers thoroughly. It specifies the exact DB operation (sets resolved_at=now() WHERE to_agent is you AND not already resolved, one transaction), side effects (does NOT mark read, does NOT delete), idempotency (silent skip semantics), recipient scoping (token bound to agent_name, DB filters by to_agent), and the full error set (AUTH_FAILED, VALIDATION, RATE_LIMITED).

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?

The description is organized with clear labeled sections (When to use, Behavior, Returns, Errors) and is front-loaded with the core purpose. It's prose-dense and longer than the TDQS 4.3 exemplar, but every sentence earns its place given the semantic weight of read-vs-resolve-vs-ack. Slight verbosity around the read/resolved contrast, but it's genuinely informative.

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?

This is a mutating, permission-scoped tool with no output schema and no annotations — the highest-risk category. The description covers the transactional atomicity, idempotency, recipient scoping, return-shape semantics (including the count mismatch meaning), and error handling. Nothing material is left ambiguous for an agent to safely invoke this tool.

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. The description adds meaningful semantics beyond the schema: it explains the resolved_count < requested_count asymmetry, the idempotent skip behavior for unknown/foreign ids, and the auth-fallback chain for agent_token (token param vs env var vs header). This elevates it above baseline.

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?

The description clearly states the verb (resolve/ack), the resource (specific messages), and the durable outcome ('leave your pending queue for good'). It also specifies a version (v2.12.0). It powerfully distinguishes from siblings by contrasting with read (session-INDEPENDENT vs per-session) and with get_messages (one-call drain vs partial).

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?

Explicit 'When to use: PARTIAL handling' section gives precise decision context. It names the alternative get_messages(status='pending', ack=true) for the 'handled everything' path, and explains the read vs resolved duality so an agent knows which tool fits which scenario. This is model decision guidance.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Maxlumiere/bot-relay-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server