Skip to main content
Glama

list_messages

Read-only

Retrieve recent messages, newest first, optionally filtered by recipient or status to see sent, suppressed, or pending approval messages. Requires messages:read scope.

Instructions

List recent messages, newest first, optionally for one person or status: what someone was already sent, what was suppressed, what waits for approval. Use get_message when you have an id. Needs the messages:read scope; agent keys see only their own messages.

Returns items, each with the same fields as get_message, and next_cursor, which is not null when older messages exist beyond limit. Fails with 404 when recipient is not a known external id.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMost messages to return, 1-100 (other values are clamped).
statusNoOnly messages with this status; omit for any status.
recipientNoExternal id of the person; omit for everyone.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv0.1.1
    • addedInput schema / properties / limit / description
      Added value: +"Most messages to return, 1-100 (other values are clamped)."
    • addedInput schema / properties / recipient / description
      Added value: +"External id of the person; omit for everyone."
    • addedInput schema / properties / status / description
      Added value: +"Only messages with this status; omit for any status."
  2. First observedv0.1.0

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint; the description goes well beyond them by disclosing the auth scope requirement, a visibility restriction ('agent keys see only their own messages'), pagination behavior via next_cursor, and a concrete failure mode (404 for unknown recipient). These are exactly the behavioral traits annotations cannot express.

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

Conciseness5/5

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

Two short paragraphs, front-loaded with purpose and sibling routing, then return shape and error behavior. Every clause carries information; nothing restates the schema verbatim.

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?

There is no output schema, so the description carries the return contract itself: it names `items`, says each item matches get_message's fields, and explains `next_cursor` semantics. Combined with the error and permission notes, an agent has everything needed to call this correctly.

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 description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining what the status values signify in workflow terms and by documenting the 404 that occurs when `recipient` is not a known external id — semantics the enum list alone does not convey.

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 opens with a specific verb+resource plus ordering and scope: 'List recent messages, newest first, optionally for one person or status.' It then explicitly distinguishes itself from the sibling get_message ('Use get_message when you have an id'), so an agent can route 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?

It names the alternative (get_message) and the condition that selects it (having an id), and explains what the optional status filter is for by mapping statuses to user intent ('what was suppressed', 'what waits for approval'). It also states the required `messages:read` scope, which is a real usage precondition.

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