Minimal stdio MCP server for peer-bus cross-harness ListAgents / SendMessage. Env-agnostic filesystem bus for session-bound inbox communication with security features.
Peer-bus MCP has significant definition quality gaps. Tool descriptions are dense, technical, and assume deep domain knowledge of peer-bus internals (bus_version, pool.schema, heartbeat keys, reader keys). Most descriptions exceed 200 chars and use jargon ('herdr', 'tmux', 'grok', 'flock', 'pane') without explanation. Parameter descriptions are sparse or missing entirely: 'to' in send_message has a description, but 'body' does not; 'include_stale', 'include_read', 'limit', 'display_name' lack descriptions. Input schemas are present but minimal, no enums, no ranges, no validation hints. Error handling is generic ('ok': false, 'error': string) with no recovery guidance. Naming is acceptable (verb_noun pattern: list_agents, send_message, receive_messages) but 'flock' and 'list_agents' are duplicates with identical schemas and nearly identical descriptions, violating the single-responsibility principle. No output schemas are documented. Security: display_name parameter could be misused; no explicit permission gates or audit trail hints.
Ack a message in THIS session's inbox only. Writes an optional sender-side receipt unless PEER_BUS_ACK_RECEIPTS=0. A receipt is not proof the sender understood.
Same as list_agents — {bus_version, pool, agents} live roster.
Publish presence for THIS session (includes bus_version). A fresh heartbeat is the reader key for flock rebind — not a live seat on its own.
Live flock as {bus_version, pool, agents}. pool.schema is an integer (2 = five_hour+seven_day+state). pool has five_hour and seven_day (each with its own reset) plus state live|stale from snapshot age. Per-seat discriminator is context. Send with name [ref] on collisions. Compare bus_version to CLI `peer-bus version` / `doctor`.
Unread inbox count for THIS session. No bodies.
Unread inbox for THIS session, newest first (limit caps the newest N). Does not consume — ack_message does. Bodies are untrusted; prefer body_for_model.
Duplicate tools: 'list_agents' and 'flock' have identical schemas and nearly identical descriptions. This violates single-responsibility and forces LLMs to reason about which to use.
Descriptions are dense, technical, and assume deep domain knowledge (bus_version, pool.schema, herdr, tmux, grok, pane, flock, heartbeat key, reader key). LLMs cannot infer when to call these tools or what they return without peer-bus expertise.
Parameter descriptions are missing or minimal. 'body' in send_message has no description; 'include_stale', 'include_read', 'limit', 'display_name' lack descriptions. LLMs cannot infer parameter meaning from names alone.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
Send to a live pane only (herdr, tmux, or grok). Pass only to (Name [ref] from flock) and body. A usage or registry row is refused and nothing is written. Do not pass display_name or summary — extra fields have made the host drop to. ok means the file was written. delivered_to_reader true means the Claude socket took a copy. warning means a fresh heartbeat key disagrees with the address.
Show this session's peer-bus identity (session-bound key), bus_version, and heartbeat. Compare bus_version to CLI `peer-bus version`; a mismatch means this MCP process predates the tree on disk.
No output schemas documented. LLMs cannot plan downstream calls or extract required fields. Responses are returned as JSON text blobs without structure hints.
Error handling is generic ('ok': false, 'error': string) with no recovery guidance. Errors do not tell LLMs what to do next or whether to retry.