Skip to main content
Glama

get_message

Read-only

Fetch a message by ID to check whether and how a recipient was notified: delivery status and reason, channel used, rendered content, and engagement. Use it after sending or with an event message ID.

Instructions

Fetch one message by id to learn whether and how a person was notified: delivery status and its reason, the channel used, the rendered content and engagement. Use it after send_message, or with a message_id from get_event; use list_messages when you have no id. Needs the messages:read scope.

Returns id, status (queued, sending, pending_approval, sent, delivered, failed, suppressed or cancelled), status_reason (why it was suppressed, failed, held or cancelled, e.g. frequency_cap: 3 per 1 day, 0:00:00 or agent_budget: …; null otherwise), category, template, channels (planned, in fallback order), channel (the one used), locale, content (rendered title, body, url… under default and each channel with its own override), importance, agent, event_id, rule_id, reviewed_by, reviewed_at, screening, attempts, send_at, expires_at, sent_at, delivered_at, opened_at, clicked_at, converted_at and created_at. Fails with 404 when the id does not exist or, for an agent key, belongs to another sender.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
message_idYesMessage UUID: the `id` returned by send_message or list_messages, or a `message_id` in get_event's `outcome`.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.1.1
    • addedInput schema / properties / message_id / description
      Added value: +"Message UUID: the `id` returned by send_message or list_messages, or a `message_id` in get_event's `outcome`."
  2. First observedv0.1.0

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnlyHint, openWorldHint=false). The description adds substantial behavior: the required auth scope, the 404 failure condition including the cross-sender check for agent keys, and the meaning of status/status_reason values such as `frequency_cap: 3 per 1 day`. This goes well beyond the structured fields.

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?

Well front-loaded: purpose, then usage/routing, then behavioral details. The return-field enumeration is long, but since no output schema exists it is largely load-bearing rather than 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 no output schema and a single trivial parameter, the description compensates fully by enumerating returned fields, status values, status_reason semantics, and failure modes. Nothing needed to call or interpret the tool 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% and the single parameter is already documented as a UUID. The description still adds real value by explaining the three sources of the id (send_message, list_messages, get_event outcome), which is more than the schema alone conveys.

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 ('Fetch one message by id') plus the exact purpose (learning whether/how a person was notified). It is clearly distinguishable from siblings list_messages, get_event, and send_message without opening any 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?

Explicitly says when to use it ('after send_message, or with a message_id from get_event') and names the alternative for the no-id case ('use list_messages when you have no id'). Prerequisites (the `messages:read` scope) are also stated.

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