MCP coordination server for URC pane communication and fleet management. Manages agent registration, heartbeat, fleet status, pane dispatch, messaging, and task coordination across tmux panes.
Server has 25 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-200 chars, mostly adequate) and input schemas with types. However, parameter descriptions are sparse or missing context; output schemas are undocumented; error handling lacks recovery guidance; and no tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Naming is verb-forward (register_, get_, send_, team_*) but some tools conflate concerns (dispatch_to_pane combines send + wait). No pagination support on list tools. Security: pane_id is user-supplied but validated; no secrets in params. Composition: tools chain reasonably (register → heartbeat → dispatch), but team_send requires manual msg_type enum validation rather than constrained input.
Validate the URC bootstrap configuration and database schema.
Cancel an in-flight dispatch operation.
Dispatch a message to a target pane and wait for response.
Get the current status of all registered agents in the fleet.
Send a heartbeat signal from an agent to keep it alive in the fleet.
Kill a pane and deregister it from the coordination DB.
Read output from a pane's response file.
Output schemas undocumented. No tool returns a documented schema, LLMs cannot predict response structure or plan downstream calls. get_fleet_status, team_list, team_task_list return arrays but lack field definitions.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Tools marked DESTRUCTIVE (kill_pane, team_delete) or WRITE lack machine-readable hints for agent safety.
team_send msg_type is free-form string with enum values only in description. Should be constrained enum in schema to prevent hallucinated message types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Receive unread messages for a pane.
Register this pane as an agent in the coordination DB.
Rename an agent in the coordination DB.
Send a message to another pane with optional notification.
Add a member to a team.
Broadcast a typed message to all team members except the sender.
Signal task completion and notify team lead.
Create a new team with the given name and lead agent.
Delete a team by name.
Signal idle status and notify team lead.
Get unread messages for a team member, filtered to this team.
List all teams with summary info (name, description, member count, status).
Remove a member from a team by name.
Send a typed message between team members. msg_type must be one of: message, task_assignment, status_update, completion, idle_notification, shutdown_request, shutdown_response, plan_approval_request, plan_approval_response. metadata is an optional dict of extra fields. wake: if True (default), send a tmux wake nudge to the recipient.
Get team details with live agent status for each member.
Create a task with optional dependencies. blocked_by is a list of task IDs (e.g. [1, 3]) that must complete first.
List all tasks for a team with dependency info.
Update a task. When status='done', auto-unblocks dependent tasks. add_blocks and add_blocked_by are lists of task IDs.
No pagination on list tools. get_fleet_status, team_list, team_task_list, team_inbox lack limit/offset/cursor parameters. Large fleets will blow context windows.
Error handling lacks recovery guidance. No visible error responses with actionable next steps (e.g., 'pane not found, try get_fleet_status to list available panes').