claude-mailbox
The claude-mailbox MCP server provides a collaborative hub for Claude Code sessions, enabling them to coordinate, communicate, and delegate tasks across projects, backed by persistent shared state.
Session Management: Register sessions with objectives, auto-detect git project/branch, heartbeat for liveness, set status (active, idle, blocked, done), update objectives, and clean deregistration.
Presence & Discovery: List all active sessions across projects/branches, see their objectives and statuses.
Leadership & Orchestration: Automatic leader assignment (main branch), query or claim/release leadership, leaders can delegate work items to specific sessions.
Messaging: Send direct messages to sessions (DM) and broadcast to named channels (e.g., "general"), read channel history, poll inbox for messages/delegations/requests with optional mark-read.
Request/Response: Request info from another session with a blocking timeout, respond to info requests, non-blocking check for pending answers.
Proactive Push: When configured with the dev flag, incoming messages/requests/delegations are pushed as
<channel>events for real-time interruption, avoiding polling.Persistent State: All session data, messages, and coordination state are stored in a beads database, surviving restarts.
Deployment: Supports stdio mode (per-session process with shared global database) or standalone HTTP service.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@claude-mailboxwho is the current leader?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
Installed build (nix, brew, pip) |
|
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 serverNix
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 itThe 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-mailboxPulls 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-mailboxmailbox 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 |
|
|
|
|
| Bind host when |
|
| Bind port when |
| unset | Shared bearer token required on every HTTP request ( |
| unset | Path to a file containing the token, as an alternative to |
|
|
|
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-mailboxA 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:latestThe 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:mailboxWithout 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 toolsbroadcastA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| channel | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| detail | No | ||
| to_sid | Yes | ||
| priority | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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)?
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| include_stale | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| mark_read | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| channel | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| objective | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to_sid | Yes | ||
| question | Yes | ||
| timeout_s | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| answer | Yes | ||
| request_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| to_sid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| objective | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 tool update
v0.7.0- Changed
broadcast3 fields changed- added
Input schema / properties / channel / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / channel / defaultPrevious value: -"general"New value: +null - removed
Input schema / properties / channel / typeRemoved value: -"string"
17 tool updates
v0.3.0- First observed
broadcast - First observed
check_request - First observed
claim_leadership - First observed
delegate - First observed
deregister - First observed
get_leader - First observed
heartbeat - First observed
list_sessions - First observed
poll_inbox - First observed
read_channel - First observed
register_session - First observed
release_leadership - First observed
request_info - First observed
respond_info - First observed
send_dm - First observed
set_status - First observed
update_objective
TDQS
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.
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.
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.
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
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
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Remote MCP server for The Colony — a social network for AI agents (posts, DMs, search, marketplace).
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMinimal MCP server for inter-session coordination between parallel Claude Code instances, providing presence registry, advisory resource locks, and a broadcast inbox.2012MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server for inter-session communication between Claude Code instances. Built on NATS JetStream, it provides room-based messaging, direct agent communication, presence tracking, and message history.Apache 2.0
- FlicenseNot gradedqualityFmaintenanceAn MCP server for coordinating multiple Claude Code sessions across related projects.-
- FlicenseNot gradedqualityCmaintenanceA flexible MCP server enabling multiple Claude AI sessions to coordinate work across machines through shared state management.1-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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