Skip to main content
Glama

receive_direct

Receive Signal messages directly via signal-cli when the daemon is stuck and standard receive calls fail. Stops the daemon temporarily, runs receive, and saves messages to the local store.

Instructions

Troubleshooting fallback: receive messages by running signal-cli receive directly, bypassing the daemon. Use only when receive_messages / get_unread fail because the daemon is stuck; it stops the daemon (holding a lock file meanwhile), runs the receive, and the daemon restarts on the next call. timeout: seconds to wait (default 5); max_messages: stop after this many (default: no limit); ignore_attachments, ignore_stories, ignore_avatars, ignore_stickers (all default false) skip downloading those. Received messages are saved to the local store and remote deletes applied; nothing is marked read. Returns a list of messages in the same shape as receive_messages; errors if signal-cli exits non-zero.

Input Schema

NameRequiredDescriptionDefault
timeoutNoSeconds to wait for messages (default: 5)
max_messagesNoReturn after this many messages (default: no limit)
ignore_avatarsNoDon't download avatars
ignore_storiesNoDon't receive story messages
ignore_stickersNoDon't download sticker packs
ignore_attachmentsNoDon't download attachments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv1.40.1
    • addedInput schema / properties / ignore_attachments
      Added value: +{
      +  "default": false,
      +  "description": "Don't download attachments",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / ignore_avatars
      Added value: +{
      +  "default": false,
      +  "description": "Don't download avatars",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / ignore_stickers
      Added value: +{
      +  "default": false,
      +  "description": "Don't download sticker packs",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / ignore_stories
      Added value: +{
      +  "default": false,
      +  "description": "Don't receive story messages",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / max_messages
      Added value: +{
      +  "description": "Return after this many messages (default: no limit)",
      +  "type": "integer"
      +}
  2. Addedv1.33.3

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: it stops the daemon and holds a lock file, the daemon restarts on the next call, received messages are saved locally, remote deletes are applied, nothing is marked read, and it errors on non-zero exit. These are exactly the side effects an agent needs to know before invoking a non-read-only tool.

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?

Front-loads the fallback framing and the daemon/lock caveat before parameters, and each clause carries information. Slightly dense, but no sentence is wasted.

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, the description covers the return shape ('same shape as receive_messages'), error behavior, and local-store side effects. An agent has everything needed to call it correctly.

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 coverage is 100%, so the schema already documents all six parameters with defaults. The description restates timeout, max_messages and the ignore_* flags, adding only marginal framing ('skip downloading those'), so baseline 3 applies.

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 ('receive messages by running signal-cli receive directly, bypassing the daemon') and immediately frames it as a troubleshooting fallback, which distinguishes it from the receive_messages / get_unread siblings.

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 names when to use it ('only when receive_messages / get_unread fail because the daemon is stuck') and the alternatives it replaces, plus the condition that resolves the choice. Nothing is left to inference.

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