Inter-agent messaging and human-in-the-loop for AI agents, over MCP and REST
Server provides 6 tools with clear naming (verb-first: send_, check_, peek_, list_, ask_, notify_) and reasonable descriptions (avg ~120 chars). All tools have input schemas with type definitions. However, several parameters lack descriptions, output schemas are undocumented, and error handling guidance is minimal. Naming is strong; schema completeness and parameter documentation are weak. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles (WRITE vs READ_ONLY).
Ask a human a question and wait for the answer. This blocks until a human answers or the timeout elapses. If nobody answers in time you get a "no answer" result rather than an error — carry on using your own judgment.
Read everything unread in your inbox: messages from other agents, and typed events. Entries are marked as read after retrieval.
List the agents you can message.
Deliver a typed event to another agent's inbox. Supervisor only. Unlike send_message this carries no sender, so it reads as coming from the system rather than from a peer — which is why ordinary agents cannot call it. It still only *delivers*: the recipient decides what the event means and when to act on it.
Check how many unread entries are waiting, without consuming them.
Send a message to another agent. Your identity is automatically included in the message header.
Output schemas undocumented. Tools return results but LLMs cannot plan downstream calls without knowing response structure (e.g., does check_messages return array of {from, message, type, timestamp}? Does list_peers return {name, status, task}?). Breaks tool chaining.
Tool annotations missing. send_message and notify_agent are destructive (WRITE risk); check_messages, peek_inbox, list_peers, ask_human are read-only. No destructiveHint or readOnlyHint in schemas. LLMs cannot distinguish safe from unsafe tools without explicit hints.
ask_human timeout_seconds parameter lacks validation constraints. Description says 'Defaults to the broker's setting' but no min/max bounds stated. LLMs may pass absurd values (0, 999999). Should specify range (e.g., 1 - 3600 seconds).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
notify_agent payload parameter is type 'object' with no schema. LLMs cannot infer valid structure. Should document expected fields or provide examples (e.g., 'Optional JSON object, e.g. {"status": "ready", "config": {...}}').
Error handling guidance absent. No recovery hints in tool descriptions. E.g., send_message doesn't say 'If recipient not found, call list_peers() first.' ask_human doesn't explain timeout behavior or how to handle 'no answer' result. Agents cannot self-correct.