Skip to main content
Glama

Signal Read Messages

signal_read_messages
Read-only

Reads messages from a specific Signal chat. The chat_id must come from a previous signal_list_chats call. Returns messages in chronological order with sender phone numbers and body text. Only messages cached locally by Signal Desktop are available.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMax messages to return (default 50)
chat_idYesChat ID from signal_list_chats

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
countNoNumber of messages returned
messagesYesMessages from the chat, chronological

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedOutput schema / properties / messages / items / properties / body / description
      Previous value: -"Message body text"New value: +"Message body text (null for messages without text)"
    • changedOutput schema / properties / messages / items / properties / body / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / messages / items / properties / sender / description
      Previous value: -"Sender phone number"New value: +"Sender phone number (null for messages sent by you)"
    • changedOutput schema / properties / messages / items / properties / sender / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description complements these by adding behavioral details: messages are returned in chronological order with sender phone numbers and body text, and only locally cached messages are available. This goes beyond the annotations by describing the return format and data scope, which is valuable for an agent deciding to invoke the tool.

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 description is three concise sentences with no filler. It front-loads the verb and resource, then provides the key dependency, output format, and a constraint. Every sentence earns its place, making it efficient and easily scannable for an agent.

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?

Given that an output schema exists (not shown but noted), the description need not explain return values. It covers the essential operational details: prerequisite chat_id source, message ordering, content fields, and the local-cache limitation. For a read-only tool with straightforward parameters, this is complete enough for an agent to call it correctly without further inference.

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?

The schema descriptions cover both parameters fully (100% coverage), but the description adds critical semantic context beyond the schema: it states that chat_id must originate from signal_list_chats, which is not in the schema. It also implies the limit parameter's default (from schema) without repeating it. This adds meaning beyond the structured fields, so a score above the baseline 3 is warranted.

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 states a specific verb ('Reads') and resource ('messages from a specific Signal chat'), and clearly distinguishes this from sibling tools like signal_search_messages by emphasizing the chat context and chronological order. It also names the required prerequisite (chat_id from signal_list_chats), making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states that chat_id must come from a prior signal_list_chats call, which is a clear usage instruction. It also notes that only locally cached messages are available, which helps the agent decide if this tool is appropriate. However, it does not explicitly mention when NOT to use it (e.g., for searching across chats) or name alternatives, so it lacks a full when/not matrix.

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