Skip to main content
Glama

read_messages

Read-only

Read the message transcript: what users sent the bot and what the bot sent back, newest first. Source is the runtime's own message ledger, written by the bot as it handled each turn — inbound messages are recorded before any routing decision, so messages that matched no trigger are here too. Filter by contactId for one conversation, botId for one channel, direction for one side, and startDate/endDate for a window. Page further into the past by passing the returned nextCursor back as cursor. Text only. A photo or document contributes its caption; the file is not stored. Button taps are NOT messages and never appear here — use get_contact_activity for those. Message wording is redacted after the content retention window (the response says how long), leaving text null on old rows. Read-only. Requires the view_logs permission: this is raw personal message content of your end users.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
botIdNoLimit to messages handled by one bot. Omit to read across every bot of the application.
limitNoMessages to return, 1-100. Defaults to 20.
cursorNoContinue a previous read: pass the nextCursor value from the last response to get the next page of older messages. Omit to start from the newest.
endDateNoOnly messages at or before this moment. ISO 8601.
contactIdNoLimit to one conversation — the globally unique FlowCastle contact id. Find it with list_contacts.
directionNoincoming = messages from the user; outgoing = messages from the bot or a human agent. Omit for both sides interleaved.
startDateNoOnly messages at or after this moment. ISO 8601, e.g. "2026-08-01" or "2026-08-01T00:00:00Z".
applicationIdNoApplication (workspace) id. Optional: an application-scoped key (app_...) defaults to its own application, but a personal key (usr_...) has no default and omitting it fails with MCP_APPLICATION_REQUIRED. Call list_applications to get the id.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description discloses that the source is the runtime message ledger, inbound messages are recorded before routing decisions, media is only represented by captions, text is redacted after the retention window, and view_logs permission is required for raw personal content. This is substantial behavioral context the annotations do not provide.

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?

The first sentence immediately states the operation and ordering, and every subsequent clause adds a necessary caveat: unmatched triggers, media captions, button tap exclusion, redaction, and permissions. Despite its length, it contains no fluff and the wording is efficient.

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?

For a read-only tool with 8 parameters and no output schema, the description is remarkably complete: it covers source behavior, filtering, pagination, media handling, retention redaction, permission requirements, and the key alternative tool. An agent has enough context to select and invoke it correctly without relying on sibling tools.

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 description coverage is 100%, so the baseline is 3. The description's filter summary (contactId for one conversation, botId for one channel, direction for one side, date window, cursor paging) is mostly a restatement of schema semantics rather than new meaning, though it usefully groups related parameters.

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 and resource: 'Read the message transcript: what users sent the bot and what the bot sent back, newest first.' It also distinguishes itself from get_contact_activity by stating that button taps are not messages and never appear here. This clearly separates it from sibling tools without requiring the 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 explicitly tells the agent when to use get_contact_activity instead ('Button taps are NOT messages and never appear here — use get_contact_activity for those'), and explains how to page further into the past using cursor. The filter guidance for contactId, botId, direction, and date range gives clear context for selecting and scoping calls.

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.

TDQS

A4.1/5.0
Disambiguation4/5

Each get_/list_ tool targets a distinct resource and the descriptions carefully separate similar pairs like get_application_context vs get_workspace_summary and get_broadcast_details vs get_broadcast_analytics. The main ambiguity is apply_actions vs validate_actions, since one runs the other's validation, but the descriptions make that relationship explicit.

Naming Consistency4/5

Names consistently follow verb_object snake_case and use familiar verbs like create, get, list, and update. Minor deviations such as read_messages instead of list_messages, apply_actions/validate_actions with plural nouns, and run_flow_autotest are still predictable and readable.

Tool Count2/5

33 tools exceeds the 25-tool threshold and makes the surface feel heavy, even though the domain is broad. Many of the read-only getters are individually useful but could be consolidated, such as merging module catalog/details or workspace/application context.

Completeness4/5

Core workflows are covered: application lifecycle, flow editing through apply_actions, deployment, contacts, broadcasts, modules, and message/event reads. Minor gaps exist, such as no dedicated delete for contacts, applications, or broadcasts, and no rollback for deployments, but agents can work around or avoid these.