Skip to main content
Glama
zach-source

claude-mailbox

by zach-source

claude-mailbox

An MCP server that lets concurrently-running Claude Code sessions cross-talk. Each session registers its project / worktree / branch / objective; sessions can see each other, broadcast over channels, DM, and coordinate under a single leader (the session on main). All state is backed by the shared beads (bd) database beads_global, so it works across projects and — via the existing Dolt remote — the fleet.

Why beads

bd already gives us a persistent, Dolt-synced, event-logged store with the exact primitives a mailbox needs: labels (channels/identity), set-state (status/role/ heartbeat), assignees (DMs/delegations), ephemeral beads (transient messages), gates (request/response), and a shared machine-wide DB (--global). The server is a thin, typed wrapper around the bd CLI — no schema of our own.

Related MCP server: claude-connect-nats-mcp

Layout

src/claude_mailbox/
  bd.py        # `bd --global -C <workspace>` wrapper (+ --json)
  identity.py  # session id + git project/branch/worktree detection
  model.py     # label/state naming conventions + heartbeat math
  leader.py    # main-branch leader election over a singleton slot bead
  server.py    # FastMCP server: tools + background heartbeat + atexit deregister
  cli.py       # `mailbox` shim (who / leader / say / inbox)
skills/        # `mailbox` + `mailbox-leader` Claude skills
docs/DESIGN.md # full design (data model, protocol, risks)

The server needs a bd workspace (a directory with a .beads/) to resolve the shared-server connection, and passes it as bd -C <workspace> on every call so the mailbox is reachable from any cwd. bd.py picks one automatically:

How you got it

Workspace

Source checkout

the repo root (its own .beads/)

Installed build (nix, brew, pip)

$XDG_DATA_HOME/claude-mailbox, i.e. ~/.local/share/claude-mailbox

MAILBOX_WORKSPACE overrides both.

Install

Every route needs bd (beads) on PATH and the machine-wide database created once:

bd init --global               # creates/initializes beads_global on the shared dolt server

Nix

nix run github:zach-source/claude-mailbox              # run the MCP server (stdio)
nix run github:zach-source/claude-mailbox#mailbox -- who
nix profile install github:zach-source/claude-mailbox  # or install it

The wrapper appends its own beads and git to PATH as a suffix, so a bd you already have keeps winning — mailbox state lives in a shared database that carries schema migrations, and forcing a different bd version at it risks schema skew. Build with preferSystemBd = false to pin the packaged one.

A devShell (nix develop) provides uv, python3, beads, and git.

Homebrew

brew tap zach-source/claude-mailbox https://github.com/zach-source/claude-mailbox
brew install zach-source/claude-mailbox/claude-mailbox

Pulls in beads as a dependency. It's a tap formula, not homebrew-core: it resolves its ~69 Python dependencies from PyPI at install time rather than vendoring each as a pinned resource (see the note atop Formula/claude-mailbox.rb).

From a checkout

uv run claude-mailbox          # start the MCP server (stdio)
uv run mailbox who             # list live sessions (CLI, no agent)

Initialize the workspace (installed builds only)

A checkout already has one. An installed build needs it once:

mkdir -p ~/.local/share/claude-mailbox
bd init -C ~/.local/share/claude-mailbox

mailbox who tells you this, with the exact commands, if you skip it.

Wire into Claude Code / codex

Add to ~/.claude/mcp_servers.json (and it mirrors to codex):

"mailbox": { "command": "claude-mailbox" }

Installed via nix or brew, the bare command is enough. From a checkout, point uv at it instead:

"mailbox": { "command": "uv", "args": ["run", "--project",
  "/path/to/claude-mailbox", "claude-mailbox"] }

HTTP mode (standalone service, local database)

By default the server runs over stdio, one process per Claude Code session, sharing the machine-wide beads_global database — this is unchanged. Set MAILBOX_TRANSPORT=http to instead run it as a standalone network service, for example hosting one authoritative instance in a remote pod that a Claude Code session on a different machine reaches as an http-type MCP server entry, or that a plain Python daemon (not a Claude session) calls directly as an MCP client. This mode is meant to be paired with MAILBOX_GLOBAL=0 so the pod gets its own dedicated local database instead of the shared machine-wide one.

Environment variables:

Var

Default

Purpose

MAILBOX_TRANSPORT

stdio

stdio (unchanged default) or http

MAILBOX_HTTP_HOST

127.0.0.1

Bind host when MAILBOX_TRANSPORT=http

MAILBOX_HTTP_PORT

8000

Bind port when MAILBOX_TRANSPORT=http

MAILBOX_TOKEN

unset

Shared bearer token required on every HTTP request (Authorization: Bearer <token>). Loopback host without a token just warns; a non-loopback MAILBOX_HTTP_HOST refuses to start without one

MAILBOX_TOKEN_FILE

unset

Path to a file containing the token, as an alternative to MAILBOX_TOKEN

MAILBOX_GLOBAL

1 (true)

1/true (default) passes --global, routing bd at the shared beads_global DB — today's behavior. 0/false/no omits --global entirely, so bd resolves a plain local project database under WORKSPACE via its default embedded engine (bd init with no --server/--external/--shared-server)

Run it as a standalone HTTP service backed by its own local database:

cd /path/to/claude-mailbox     # WORKSPACE — where the local .beads/ will live
bd init --non-interactive      # one-time: creates the local embedded db
export MAILBOX_TOKEN=$(openssl rand -hex 32)   # save this — the MCP client needs it too
MAILBOX_TRANSPORT=http MAILBOX_HTTP_HOST=0.0.0.0 MAILBOX_HTTP_PORT=8000 \
  MAILBOX_GLOBAL=0 uv run claude-mailbox

A non-loopback MAILBOX_HTTP_HOST (like 0.0.0.0 above) refuses to start without MAILBOX_TOKEN/MAILBOX_TOKEN_FILE set — any local (or LAN) process can otherwise reach the mailbox. Configure the same token as an Authorization: Bearer <token> header in the MCP client pointed at this server. Then add it to a Claude Code session on another machine as an http-type MCP server entry pointing at http://<pod-host>:8000/mcp, or point any MCP-capable HTTP client (including a non-Claude Python daemon) at the same URL.

Note: on a machine that already sets BEADS_DOLT_SHARED_SERVER=1 globally (a machine-wide bd default, independent of this server), MAILBOX_GLOBAL=0 still resolves through that shared server unless the pod environment leaves BEADS_DOLT_SHARED_SERVER unset — the pod deployment should simply not set it.

Per-connection session isolation: one HTTP-mode process can serve many concurrent connections, and each gets its own sid/git-context/bead_id/ objective, keyed off FastMCP's Context.session_id (the mcp-session-id header) — they never collide, and proactive <channel> push (see below) delivers to every connection, not just the first one to register. Residual limitation: cleanup of a connection that disconnects without calling deregister is time-based (idle for 15 minutes with no tool call), not a true liveness check against the underlying transport — a connection that stays open but genuinely idle that long gets treated as abandoned. See server.py's _hb_tick_once docstring for the tradeoff. Stdio mode (one process per session) is unaffected either way — idle reap only ever applies under MAILBOX_TRANSPORT=http.

Docker

A published image runs the server in HTTP mode with its own local database out of the box (MAILBOX_TRANSPORT=http, MAILBOX_GLOBAL=0 are baked in as defaults — override via -e if you need something else). Images are built by .github/workflows/docker-publish.yml for linux/amd64 and linux/arm64 and published to GHCR:

docker pull ghcr.io/<owner>/claude-mailbox:latest   # latest tagged release
docker pull ghcr.io/<owner>/claude-mailbox:edge     # latest main

/data is MAILBOX_WORKSPACE (and $HOME) inside the container — mount a volume there for the local database to survive restarts, and initialize it once before the first start (bd needs git init to succeed, which needs an already-writable, already-owned directory — the named volume gets that from the image's useradd --create-home on first use):

docker volume create mailbox-data
docker run --rm -v mailbox-data:/data --user mailbox \
  --entrypoint bd ghcr.io/<owner>/claude-mailbox:latest init --non-interactive

export MAILBOX_TOKEN=$(openssl rand -hex 32)   # save this — the MCP client needs it too
docker run -d --name claude-mailbox -p 8000:8000 \
  -e MAILBOX_TOKEN \
  -v mailbox-data:/data ghcr.io/<owner>/claude-mailbox:latest

The container binds 0.0.0.0 internally (so Docker's own port mapping can reach it) — a non-loopback bind refuses to start without MAILBOX_TOKEN, so it's required here, not optional. Save the token you pass; the MCP client needs the same value as an Authorization: Bearer <token> header.

Then wire it into a Claude Code session elsewhere as an http-type MCP server entry pointing at http://<host>:8000/mcp (see "HTTP mode" above for the non-Docker equivalent and the per-connection isolation notes, which apply here too).

Build notes (low-CVE build): multi-stage — build tooling never reaches the final image, which installs only git + ca-certificates on top of the official python:3.11-slim base (distroless was evaluated and rejected: bd hard-shells out to git, which needs a shell environment distroless doesn't provide) and runs as a non-root user. The bd binary is fetched as a pinned, checksum-verified release tarball rather than trusted implicitly. CI scans every build with Trivy and uploads results to the repo's Security tab (report-only — see the Dockerfile header for the residual CVE clusters this repo can't fully resolve on its own, and why) and rebuilds weekly so upstream Debian/Python security patches land automatically. Build it yourself with:

docker build -t claude-mailbox .

Push delivery via Claude Code channels

The server is also a Claude Code channel: it declares the claude/channel capability and pushes peer messages into the session as <channel source="mailbox" kind="dm|request|delegation|broadcast" from_sid="…">…</channel> events — so a peer's DM or info-request interrupts the session instead of waiting for a poll_inbox call. A background thread (CHANNEL_POLL_SECONDS, default 4s) watches beads_global for new inbound addressed to this session (and broadcasts on subscribed channels: general, <project>, leader) and emits the notification. The existing send_dm / respond_info / broadcast tools are the reply side.

broadcast posts to the sender's own <project> channel unless you name one, so a message only interrupts sessions working in the same repo. Reaching every project on the machine is the explicit channel="general" (or mailbox say -c general).

To actually receive channel pushes, start Claude Code with the research-preview dev flag so it loads the mailbox as a channel (custom channels aren't allowlisted yet):

claude --dangerously-load-development-channels server:mailbox

Without the flag the mailbox still works fully as a normal MCP server (pull-based: poll_inbox, read_channel); you just don't get proactive <channel> interrupts. Channels are also gated by the org channelsEnabled policy on Team/Enterprise.

Status: beyond-MVP — presence, channels, DMs, leadership+failover, delegation, blocking request_info, and channel push delivery. All committed, unit- + live-tested.

Available Tools

17 tools
broadcastA

Broadcast a message to a channel. Defaults to this session's own project channel, so only sessions in the same repo are interrupted. Pass channel="general" to reach every project on the machine — do that only when the other projects genuinely need to know.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
channelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the key side effect that sessions in the same repo are 'interrupted', and the expanded impact of using 'general'. It does not discuss return values or full security implications, but for a broadcast tool these are covered well.

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 extremely concise, using only two sentences. It front-loads the core purpose and packs necessary details about defaults and usage warnings without any waste.

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 simple messaging tool, the description covers purpose, usage context, behavioral impact, and parameter semantics. An output schema exists (signal true), so not explaining return values is acceptable. The description stands on its own within the sibling tool ecosystem.

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 description coverage is 0%, so the description must compensate. It fully explains the 'channel' parameter, including default null behavior and the special 'general' value. The 'text' parameter is self-explanatory from the tool purpose, though the description does not add explicit semantics for it.

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 uses a specific verb 'Broadcast' with a clear resource 'message to a channel'. It distinguishes itself from sibling tools like send_dm by implying a group/broadcast context, and the default channel behavior further clarifies its unique role.

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?

Provides clear context on when to use the default channel (same repo) versus channel='general' (all projects), and includes a cautionary note ('do that only when...'). It does not explicitly mention alternatives like send_dm for private messages, but the situation is well implied.

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

check_requestA

Non-blocking: has an info-request been answered yet? Only the session that created the request may poll it — otherwise any connection could read another agent's answer by guessing/enumerating request_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description discloses 'Non-blocking' behavior and authorization requirements. It does not detail return format or errors, but output schema may cover return values.

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?

Two sentences with no wasted words: first states purpose and blocking nature, second adds critical permission constraint. Front-loaded and efficient.

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?

Given output schema exists, the description covers purpose, blocking, and authorization. Missing error handling details, but for a simple poll tool this is largely sufficient.

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 0%, but the description implies request_id identifies the info-request. It adds context but does not explicitly describe parameter format or source, leaving some gaps.

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 clearly states the tool checks if an info-request has been answered, using a specific verb and resource. It distinguishes from sibling tools like request_info and respond_info by focusing on polling status.

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?

It explains that only the creating session may poll, preventing enumeration attacks. This provides clear context but lacks explicit when-to-use or alternatives, though siblings imply the workflow.

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

claim_leadershipA

Attempt to become leader. Only succeeds on the main branch unless force. force is restricted to stdio (global-tvr) — an HTTP caller force-claiming leadership would gain delegate() over every session.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Despite no annotations, the description discloses critical behavioral traits: the tool only succeeds on the main branch unless force is used, and force is restricted to stdio with a specific security implication (HTTP caller would gain delegate over every session). This goes beyond basic operation to reveal side effects and constraints.

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 concise, with two sentences that front-load the primary action and condition, followed by critical parameter and security details. No superfluous words; every sentence adds essential information.

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?

Given the tool's simplicity (1 boolean parameter) and the presence of an output schema, the description covers behavior, parameter meaning, and security well. However, it omits details on failure behavior (e.g., what happens if claim fails without force on non-main branch), leaving a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter 'force' is explained in detail: its effect (overrides branch restriction), its restriction (stdio only), and a security consequence (HTTP caller gaining global delegate). This adds significant meaning beyond the schema's type and default, fully compensating for 0% schema description coverage.

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 clearly states the tool's purpose as 'Attempt to become leader,' with a specific verb and resource. It distinguishes itself from siblings like 'get_leader' and 'release_leadership' by describing the condition for success (main branch or force), making its unique role evident.

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

Usage Guidelines3/5

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

The description provides partial guidance on when to use the tool (succeeds on main branch, or with force on stdio) but does not explicitly contrast with alternatives like 'release_leadership' or 'get_leader.' The condition hints at appropriate contexts but lacks explicit 'when to use vs. not' statements.

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

delegateB

Leader-only: assign a work item to a secondary session.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
detailNo
to_sidYes
priorityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only mentions the leadership requirement but fails to disclose whether delegation is destructive, affects other sessions, or has rate limits. This is minimal context for a mutation 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?

The description is a single, concise sentence with no extraneous words. It is efficient but could be slightly expanded to include parameter hints without losing conciseness.

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

Completeness2/5

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

Given the 4-parameter schema with 0% description coverage and the presence of an output schema (unreferenced), the description is incomplete. It lacks parameter explanations, return value hints, and usage context beyond the leadership constraint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no explanation for any of the four parameters (title, detail, to_sid, priority). The agent must infer from names alone, which is insufficient for correct invocation.

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 clearly states the action ('assign'), the resource ('work item'), and constraints ('Leader-only', 'to a secondary session'), distinguishing it from sibling tools like broadcast or poll_inbox which serve different purposes.

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

Usage Guidelines3/5

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

The description implies usage is restricted to leaders but provides no explicit guidance on when to use this tool versus alternatives (e.g., when to delegate instead of broadcast). The 'Leader-only' prefix is helpful but insufficient.

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

deregisterA

Cleanly leave the mailbox: release leadership, mark done, close bead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description must disclose behaviors. It lists effects (release leadership, mark done, close bead) but does not mention prerequisites, reversibility, or consequences of misuse. Adequate but not thorough.

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?

Extremely concise: one sentence with a colon-separated list. No wasted words, front-loaded key actions.

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?

Given zero parameters and an output schema, the description is sufficient for a simple exit tool. It distinguishes from siblings adequately, though slightly cryptic phrasing reduces completeness.

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?

No parameters exist, baseline score 4. The description adds meaning beyond schema by explaining the tool's purpose, though parameter details are not needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the goal 'Cleanly leave the mailbox' and lists three specific actions, distinguishing it from registration tools. However, 'close bead' is ambiguous and may confuse agents unfamiliar with domain terminology.

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

Usage Guidelines3/5

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

No explicit guidance on when or when not to use the tool. Usage is implied (leave mailbox), and sibling tools like 'register_session' provide contrast, but no alternatives or conditions are mentioned.

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

get_leaderA

Who is the current leader/orchestrator (the session on main)?

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It does not disclose behavioral traits such as side effects, permissions, rate limits, or whether it is read-only. The description is minimally informative.

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 a single sentence that is to the point with no extraneous words. It is front-loaded and efficient.

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

Completeness3/5

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

The description lacks details about the return format despite having an output schema. It does not explain what the response looks like, which is a gap. For a simple query tool, this is adequate but not complete.

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 tool has zero parameters, so the description adds no meaningful parameter info beyond the schema. Baseline for 0 parameters is 4, which is appropriate here.

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 clearly states the tool's purpose: retrieving the current leader/orchestrator (the session on main). It uses a specific verb ('get') and resource ('leader'), and distinguishes from sibling tools like 'claim_leadership' and 'release_leadership'.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or context. Usage is implied for checking leadership, but no guidance is given.

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

heartbeatA

Manually pump a heartbeat and return role + inbox (the background thread heartbeats automatically; call it to force a fresh read).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must fully disclose behavior. It explains the tool returns role and inbox and forces a fresh read. It does not mention side effects, permissions, or safety, but the action is inherently safe and non-destructive. A 3 is appropriate given the absence of annotations and the tool's simplicity.

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 two sentences long, front-loaded with the key action and result, and every sentence adds value. No redundant or extraneous information.

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?

Given the tool has no parameters, an output schema exists (though not shown), and the description mentions the return values (role + inbox), the description is nearly complete. It could mention that the tool is idempotent or safe, but overall it suffices.

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?

There are no parameters, so the schema is fully covered. The description adds meaning by explaining the tool's action and what it returns (role + inbox), which is valuable beyond the empty schema.

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 clearly states the verb 'pump' and the resource 'heartbeat', and explains that it returns 'role + inbox'. It distinguishes itself by noting the background thread does this automatically, so calling it forces a fresh read. No sibling tool has a similar purpose.

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 states when to call it: 'to force a fresh read'. It implies the alternative is to wait for the background thread. However, it does not explicitly mention when not to use it or provide a comparative list of alternatives.

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

list_sessionsB

List other live Claude sessions: who is working, on what, where.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo
include_staleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility. It mentions 'live' sessions but does not explain the effect of include_stale, permissions, rate limits, or whether the operation is read-only. The behavior is partially inferred from the parameter name but not explicitly disclosed.

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 a single short sentence that conveys the core purpose efficiently. However, it is slightly too minimal, missing parameter details that could be included without excessive length.

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

Completeness2/5

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

While an output schema exists to describe return values, the description does not explain how to use the two input parameters (project filtering, include_stale for stale sessions). For a simple list tool, this omission leaves agents uncertain about optional filters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 2 parameters (project, include_stale) with 0% description coverage. The description does not mention either parameter, offering no additional meaning beyond the parameter names. Since coverage is low, the description should compensate but fails to do so.

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 clearly states the action ('list'), the resource ('live Claude sessions'), and the information provided ('who is working, on what, where'). It distinguishes itself from sibling tools like register_session or heartbeat that perform different actions.

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

Usage Guidelines3/5

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

The description implies usage for viewing live sessions but provides no explicit guidance on when to use this tool versus alternatives like read_channel or poll_inbox. No exclusion criteria or prerequisites are mentioned.

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

poll_inboxA

Read messages/delegations addressed to this session. Closes DMs when mark_read is true (a closed DM = read).

ParametersJSON Schema
NameRequiredDescriptionDefault
mark_readNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Given no annotations, the description carries behavioral disclosure burden. It explains the side effect of closing DMs when mark_read is true, which is a key behavioral trait for a read operation.

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 two sentences, front-loading the core purpose and efficiently explaining the parameter effect with no wasted words.

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 simple tool with one parameter and an output schema, the description covers the core function and parameter effect adequately. It could mention conditions like session state, but overall it is sufficient.

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 0%, but the description adds meaning to the boolean mark_read parameter: it controls whether DMs are closed after reading. This provides semantic value beyond the schema.

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 clearly states the tool reads messages/delegations for the session, using the verb 'read' with specific resource. It distinguishes from siblings like 'read_channel' and 'send_dm' by focusing on the session's inbox.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It lacks explicit when-to-use or when-not-to-use context, and does not reference sibling tools.

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

read_channelB

Read recent messages on a channel (newest first).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
channelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only discloses ordering ('newest first') but omits safety traits (e.g., read-only, destructive actions, permission requirements). For a read tool, this is minimal disclosure.

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 a single efficient sentence, front-loaded with key information. However, it is under-specified, missing parameter details and behavioral context.

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

Completeness2/5

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

Given the tool has two parameters and an output schema, the description is too sparse. It fails to explain parameter behavior (e.g., limit defaults) or error conditions, and doesn't leverage output schema to reduce burden. Incomplete for reliable agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the tool description does not explain parameters. 'limit' and 'channel' are not mentioned, leaving their semantics entirely to the schema alone. No added value.

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 clearly states the action ('read') and resource ('recent messages on a channel'), and specifies ordering ('newest first'). It effectively distinguishes from sibling tools that send messages or poll inbox.

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

Usage Guidelines3/5

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

The description implies usage for reading channel messages but offers no explicit guidance on when to use this tool versus alternatives like 'send_dm' or 'poll_inbox'. The context of usage is clear but lacks contrast.

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

register_sessionA

Register this Claude session in the mailbox and start heartbeating.

project/branch/worktree are auto-detected from git. Auto-claims leadership if on the main branch. Idempotent for the connection's lifetime (one process per session under stdio; one entry per connection under HTTP). Also captures the live session so peer messages can be pushed as claude/channel events.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectiveYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description discloses auto-detection from git, leadership auto-claim, idempotency, and capture for channel events. Covers key behavioral aspects.

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?

Description is moderately concise with each sentence adding value. Could be slightly shorter but front-loads main purpose and auto-detection details.

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

Completeness3/5

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

Tool has one required parameter that is not documented, leaving a significant gap. Otherwise, behavioral context is thorough. Output schema existence is noted but not referenced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single required parameter 'objective' has 0% schema description coverage and is not mentioned in the description. The agent has no guidance on what to provide for 'objective'.

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?

Description clearly states the tool registers a Claude session and starts heartbeating, with specific details on auto-detection and idempotency. It distinguishes from siblings like heartbeat and deregister.

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?

Provides context on when to use (for registration) and behavior (auto-detection, leadership claim, idempotency). Does not explicitly contrast with alternatives but implies this is the initial setup step.

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

release_leadershipB

Voluntarily give up leadership.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only states the action but does not explain side effects, permissions required, or consequences of releasing leadership.

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 extremely concise—a single phrase. It is not verbose, but could include more context without becoming wasteful.

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

Completeness2/5

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

Given the output schema exists (but not shown) and no parameters, the description still fails to set expectations about what happens after releasing leadership or what the output conveys.

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?

There are zero parameters, so the schema coverage is 100%. The description does not need to add parameter details. Baseline of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action of voluntarily giving up leadership, using a specific verb and resource. It distinguishes from the sibling 'claim_leadership'. However, it doesn't elaborate on what leadership entails.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like 'claim_leadership', 'get_leader', or 'deregister'. The description does not provide context for invocation.

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

request_infoA

Ask another session a question and block (up to timeout_s) for its answer.

Creates a request bead (not ephemeral — an unanswered question must not evaporate) assigned to the target (surfaces in their poll_inbox); they reply via respond_info, which comments the answer and closes the bead. Returns {request_id, answer, resolved, timed_out}. If it times out, keep the request_id and poll later with check_request — the request stays open.

ParametersJSON Schema
NameRequiredDescriptionDefault
to_sidYes
questionYes
timeout_sNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description fully explains behavioral traits: the request bead is not ephemeral, it appears in the target's poll_inbox, reply closes the bead via 'respond_info', and the return values. It also covers timeout behavior.

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 relatively concise and well-structured, with the purpose front-loaded. It could be slightly more concise, but it efficiently provides necessary details without being overly verbose.

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 the tool's moderate complexity (3 parameters, no annotations, schema descriptions missing) and the presence of an output schema, the description provides enough context: it explains the interaction flow, return format, and timeout handling. It is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the description does not explicitly explain each parameter. While 'to_sid', 'question', and 'timeout_s' are intuitive, the description only indirectly mentions 'timeout_s'. This lack of explicit parameter documentation reduces the value for an agent selecting and invoking the tool correctly.

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 clearly states the tool asks another session a question and blocks for an answer. It specifies the action (ask, block) and the resource (another session), and distinguishes from siblings like 'poll_inbox' and 'respond_info' by describing the interaction pattern.

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?

The description explicitly tells when to use this tool (to ask a question and wait for an answer) and provides guidance for timeout: use 'check_request' to poll later. It also mentions that the request stays open, so the agent knows to handle timeouts properly.

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

respond_infoA

Answer an info-request (from poll_inbox 'requests'): comment + close, which unblocks the asking session. Only the session the request is assigned to may answer it (global-5yn) — otherwise any connection could forge an answer to another agent's blocking request_info call.

ParametersJSON Schema
NameRequiredDescriptionDefault
answerYes
request_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool comments and closes the request, unblocks the asking session, and has a security constraint. It could mention error cases (e.g., invalid session), but overall provides good behavioral context.

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?

Two sentences, front-loaded with the action, and no wasted words. Every sentence adds essential information.

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?

Given the presence of an output schema and only two simple parameters, the description covers the core functionality and a key security constraint. It could mention what happens on success or failure, but it is largely complete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It mentions 'request_id' and 'answer' implicitly (answer is a comment) but provides no additional meaning such as format, length, or allowed values for the string 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 clearly states the verb 'answer' and the resource 'info-request', and explains the action of commenting and closing. It distinguishes from siblings like 'request_info' and 'poll_inbox' by specifying the context of answering a request.

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 provides a clear constraint ('Only the session the request is assigned to may answer it') and explains the security reason. It does not explicitly mention when not to use or alternative tools, but the constraint is explicit enough for usage guidance.

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

send_dmC

Send a direct message to a specific session.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
to_sidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.3/5.0
Behavior1/5

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

With no annotations, the description carries full burden for behavioral disclosure. It only states the action without any details on idempotency, reliability, state dependencies, or side effects. This is insufficient for an AI agent to understand tool behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no extraneous information. However, it is too minimal and does not earn its place by adding value beyond the tool name alone.

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

Completeness2/5

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

Despite having an output schema, the description fails to provide a complete understanding of the tool. It omits parameter explanations, return value semantics, and any special behaviors. For a simple two-parameter tool, it should offer more context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage and the description adds no explanation for 'text' or 'to_sid'. The meaning of 'to_sid' (likely session ID) is not clarified, nor does it specify format or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (send) and resource (direct message to a specific session). It distinguishes from sibling tools like 'broadcast' which targets all sessions. However, it could be more explicit about what constitutes a 'session' and the scope of the message being direct.

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

Usage Guidelines2/5

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

No usage guidelines are provided. The description does not indicate when to use this tool versus alternatives like 'broadcast' or 'read_channel'. There is no mention of prerequisites or context.

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

set_statusA

Set this session's status: active | idle | blocked | done.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description must fully disclose behavioral traits. It only states what the tool sets, but does not mention mutability, side effects (e.g., disconnects other features), idempotency, or authentication requirements. The lack of detail on consequences of setting 'blocked' or 'done' leaves the agent uninformed.

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 a single, efficient sentence that conveys the essential information without any filler. It front-loads the action and values, minimizing cognitive load.

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?

Given that an output schema is present (handling return values), the description adequately covers the tool's core purpose and valid parameters. However, it omits context like how 'this session' is identified (assumed from connection) and whether multiple statuses are allowed, but these are minor gaps given the tool's simplicity.

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 defines 'status' as a string with no enum constraint, so the description compensates by listing the exact allowed values ('active | idle | blocked | done'). This adds significant meaning beyond the schema, though it could be improved by specifying case sensitivity or default behavior.

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 clearly states the action ('Set this session's status') and explicitly lists the allowed values ('active | idle | blocked | done'), making the tool's purpose unambiguous. It distinguishes itself from sibling tools like 'heartbeat' or 'update_objective' by focusing on session lifecycle states.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites or postconditions. For example, it doesn't clarify that this should be used instead of 'heartbeat' for changing session state, nor does it indicate if there are dependencies.

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

update_objectiveC

Update this session's advertised objective.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectiveYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. However, it only states that it updates the objective, without mentioning permissions, reversibility, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at one sentence, but it is almost too sparse. It earns its place but could include more detail without losing conciseness.

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

Completeness2/5

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

Given the simplicity of the tool (1 param, no nested objects) and the presence of an output schema, the description is incomplete. It does not mention what the output contains or any confirmation of the update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter 'objective' has no description in the schema (0% coverage), and the tool description adds no meaning beyond its name. No format, length, or constraints are given.

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 clearly states the verb 'update' and the resource 'this session's advertised objective'. It is specific and distinct from sibling tools like 'set_status' or 'register_session'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. For example, it doesn't indicate if a user must be a leader or if there are prerequisites like an active session.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev0.7.0
    • Changedbroadcast3 fields changed
      • addedInput schema / properties / channel / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / channel / default
        Previous value: -"general"New value: +null
      • removedInput schema / properties / channel / type
        Removed value: -"string"
  2. 17 tool updatesv0.3.0
    • First observedbroadcast
    • First observedcheck_request
    • First observedclaim_leadership
    • First observeddelegate
    • First observedderegister
    • First observedget_leader
    • First observedheartbeat
    • First observedlist_sessions
    • First observedpoll_inbox
    • First observedread_channel
    • First observedregister_session
    • First observedrelease_leadership
    • First observedrequest_info
    • First observedrespond_info
    • First observedsend_dm
    • First observedset_status
    • First observedupdate_objective

TDQS

A3.6/5.0
Disambiguation5/5

Each tool targets a distinct action in the mailbox domain: session management, leadership, messaging, request/response, delegation. No two tools have overlapping purposes; even messaging tools (broadcast, send_dm, poll_inbox, read_channel) are clearly differentiated by scope and direction.

Naming Consistency4/5

Most tools follow a verb_noun pattern (e.g., register_session, update_objective, list_sessions). A few are single verbs (broadcast, delegate, deregister) but these are clear and do not cause confusion. Overall naming is predictable and readable.

Tool Count5/5

17 tools cover the full lifecycle of mailbox coordination: registration, heartbeat, status updates, leadership, messaging, request/reply, delegation, and deregistration. The count is appropriate for the complexity of multi-session orchestration.

Completeness5/5

The tool set covers all necessary operations: joining/leaving sessions, heartbeating, updating state, leadership management, multiple communication channels (broadcast, DM, request/reply), and delegation. No obvious gaps for the stated purpose of coordinating Claude sessions.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/zach-source/claude-mailbox'

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