Embedded coordination server for multi-agent Claude Code fleets. Implements MCP tools for agent registration, task dispatch, messaging, memory management, and job execution.
Fleet-coord demonstrates solid tool design with 20 well-named, verb-prefixed tools covering agent lifecycle, task dispatch, messaging, and memory management. All tools have descriptions (avg 150 chars) and explicit JSON schemas with typed properties. However, output schemas are undocumented, LLMs cannot predict response structure for downstream chaining. Parameter descriptions are present but often generic ('JSON array of...') without format/constraint details. Error handling is absent from visible code; no recovery guidance or actionable error messages. Security model relies on server-side session validation but lacks explicit permission gates or audit trail documentation. Composition is strong, tools chain well (register_agent → dispatch_task → claim_task → complete_task), but some tools conflate concerns (register_profile handles both creation and archetype definition).
Block an in-progress task (status -> blocked) with a reason.
Claim a pending task (assigns it to you, status -> accepted).
Complete a task (status -> done). Optionally attach a result.
Deactivate an agent so it no longer appears in routing. Reports success even if the agent did not exist.
Dispatch a task to a profile. Routes to agents running that profile and notifies them. Priority is P0-P3 (default P2).
Get your pending messages (queued/surfaced), ordered by priority then recency. Reading surfaces them. unread_only defaults true; content truncates to 300 chars unless full_content.
Output schemas undocumented. LLMs cannot predict response structure (fields, types, nesting) for any tool. Breaks downstream tool chaining and forces agents to guess field names.
Parameter descriptions lack format/constraint details. 'JSON array of soul_keys' does not specify structure, length, or valid values. LLMs cannot validate input before calling.
No error handling or recovery guidance visible. Tools do not document what errors are possible, whether they are retryable, or what the LLM should do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 74 | 2026-07-28+ | v2 |
Get a memory by key. With no scope, cascades agent -> project -> global (first match wins). Multiple active values surface a conflict.
Get your full working context: profile, pending tasks (assigned + dispatched), unread messages, and relevant memories.
Get a single task by id (or a unique id prefix), with full description/result.
List the agents registered in a project (active, sleeping or inactive), ordered by name.
List organizations. Used as the relay health probe.
List tasks in a project, ordered by priority then recency. status='active' excludes done/cancelled. count reflects the returned page.
Mark messages read (acknowledges their delivery so they leave your inbox). Counts only newly-read ids.
Register (or respawn) an agent. Call once at startup. Re-registering the same name+project updates role/description but PRESERVES omitted identity fields (reports_to, profile_slug, is_executive, session_id). is_executive=true auto-creates the 'leadership' admin team and enables broadcast.
Create or update a profile (a reusable agent archetype). Upserts on (project, slug); preserves created_at.
Send a message to another agent. Use '*' to broadcast. Priority accepts P0-P3 or aliases (interrupt/steering/advisory/info).
Store a shared memory under a key. scope is agent/project/global (default project). A changed value versions (archives the old); upsert=false flags a conflict instead.
Start a named conversation thread and get its id. Pass `to` and `content` to also post the opening message in one call. Reply later with send_message(conversation_id=...).
Start working on a task (status -> in-progress).
Identify your Claude Code session. Generate a unique salt (3+ random words), write it in your message, then call this with that salt; the relay finds your session_id by searching ~/.claude transcripts. Use the returned session_id in register_agent.
Permission gates not documented. Tools like deactivate_agent and send_message (broadcast) lack explicit permission checks or scope declarations. Unclear who can call what.
Pagination not implemented. list_agents, list_tasks, list_orgs lack offset/limit or cursor parameters. Large result sets will blow context windows.