Skip to main content
Glama

check_messages

Retrieve messages other agents sent you, optionally waiting for one to arrive. Also reports unread mail you sent, helping you receive replies without polling.

Instructions

Read messages other agents have sent you, optionally waiting for one to arrive. Receive half of plumb's mailbox; leave_note is the send half. Full etiquette — addressing, delivery, the exchange cap, cross-project rules: the plumb-chat skill.

Omit wait_seconds (or 0) to return immediately with whatever is waiting. A positive wait_seconds BLOCKS until a message arrives or the wait expires — hand your turn to a peer instead of polling. Capped by [collab] max_wait_seconds, kept below the client's own call timeout.

Each message is delivered exactly ONCE, to whichever path sees it first — this tool, the block appended to any tool result, or session_start. Re-calling will not redeliver it. Every message carries a conversation_id; quote it in leave_note to reply in thread.

Also reports your OWN unread mail — any message you sent that nobody has read yet, with its age, since plumb does not push and cannot otherwise tell "read, no answer yet" from "never read". Listing is a read; it never consumes the message on the recipient's behalf.

Requires [collab] mailbox = true.

Parameters: wait_seconds — block up to this long for a message (default 0, no wait).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
wait_secondsNoBlock up to this many seconds waiting for a message. 0 (default) returns immediately. Capped by [collab] max_wait_seconds.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observedv0.16.6

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and exceeds it: it discloses once-only delivery across three paths, that re-calling will not redeliver, that listing consumes nothing on the recipient's behalf, the blocking/timeout capping behavior, the [collab] mailbox = true requirement, and that plumb does not push. This is rich behavioral context far beyond what annotations would have supplied.

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?

The description is long but front-loaded with the core purpose, and nearly every sentence carries unique behavioral or routing information. The final 'Parameters:' line mildly duplicates the schema's wait_seconds description, a small redundancy, but the density of genuinely new information justifies the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with no output schema and no annotations, the description covers an exceptional amount: delivery paths, once-semantics, threading via conversation_id, own-unread reporting with age, config requirement, and wait capping. The one gap is the exact return shape/fields, which the description only touches via conversation_id and age; with no output schema, that duty falls on the description.

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%, so the baseline is 3; the schema already fully defines wait_seconds including the cap. The description adds marginal strategic meaning beyond the schema — that a positive wait 'hands your turn to a peer instead of polling' and that the cap is 'kept below the client's own call timeout' — which an agent cannot infer from the bare parameter description.

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-plus-resource statement — 'Read messages other agents have sent you' — then scopes it precisely: 'Receive half of plumb's mailbox; leave_note is the send half.' It also discloses a second purpose (reporting your own unread mail), so an agent knows the full scope 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?

It names the sibling alternative (leave_note as the send half) and points to the plumb-chat skill for full etiquette rules. It gives explicit when-to conditions for the wait behavior ('hand your turn to a peer instead of polling') and explains the immediate-return path ('Omit wait_seconds (or 0) to return immediately'). Nothing about selection 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.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/plumbkit/plumb'

If you have feedback or need assistance with the MCP directory API, please join our Discord server