Multi-Agent Cowork MCP Server with Web UI Dashboard for task orchestration, agent coordination, and workflow management
Server has 19 tools with mostly complete schemas and descriptions. Naming follows verb_noun convention well (register_agent, claim_task, complete_task). Descriptions are present and substantive (avg ~150 chars), explaining WHAT and WHEN. However, several critical gaps: (1) parameter descriptions are inconsistent, some params lack descriptions entirely (e.g., 'result' in complete_task has no guidance on structure); (2) output schemas are not documented, callers don't know what fields to expect from responses; (3) error handling descriptions are absent, tools don't explain recovery paths or retryability; (4) some parameter relationships are undocumented (e.g., 'brain' param in rerun_task says 'Optional brain ID to pin; "" routes via agent chain' but this dual-meaning is fragile); (5) no enum constraints on some string params that should have them (e.g., 'status' in heartbeat accepts 'idle|working|blocked' but is not declared as enum in schema). Strengths: clear action verbs, good task-oriented naming, detailed parameter objects for complex inputs (e.g., brains array with nested properties).
Claim a pending task for execution by an agent. Marks the task as claimed and associates it with the claiming agent.
Mark a task as complete with a result. Runs completion guard: a remote brain reporting soft failure (rate limit/session limit/empty) is handed to fallback brain and task stays pending.
Continue a DONE (successful) task — spawn a follow-up task seeded with the finished run's OUTPUT files + result as inputs, pinned to the same executor.
Create a new task in the inbox with title, description, priority, and optional routing/scheduling parameters.
Remove this worker and every brain it registered (cascading them out of all agent chains). Call on clean shutdown; brains are NOT auto-removed on disconnect.
Get list of active agents, optionally filtered by platform or status.
Output schemas not documented. Tools like get_dashboard, get_agents, get_dispatcher_status, get_chains return data but callers cannot see what fields to expect. LLMs cannot plan downstream tool calls or extract required IDs without documented response structures.
Error handling and recovery guidance missing. No tool description explains what errors can occur, whether they are retryable, or what the LLM should do next. E.g., complete_task mentions 'completion guard' and fallback behavior but does not document the error response structure or recovery path.
Parameter descriptions incomplete or missing. 'result' param in complete_task has no description of expected structure. 'usage' param in heartbeat is complex (nested windows array) but lacks guidance on required vs optional fields. 'context' param in create_task is vague ('Task context (agent, division, brain routing)').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Get brain fallback chains (global default, per-division, per-agent).
Get dashboard status including active agents, task counts, and system metrics.
Get dispatcher status including enabled state, agents, brains, chains, and running tasks.
Send a heartbeat from an agent, optionally carrying usage/rate-limit data. Updates agent status and brain usage metrics.
List tasks in the inbox, optionally filtered by status, platform, or agent. Returns paginated task list.
Purge finished, unremarkable tasks (keeps anything with artifacts or a keep/important/pinned tag). Pass dryRun to preview.
Register this client as a worker and OPTIONALLY declare the models it can run via `brains` (the clients-capability handshake). Each brain {id, location, exec, model, host} is auto-added to the server registry so the orchestrator can send it tasks; brains persist until deregister_agent. Returns the agent id (save it for heartbeat/claim) and registered_brains.
Re-run a FAILED (chain-exhausted) or rejected task — reset it to pending from the top of its chain, keeping its brief + attached inputs.
Run a SCHEDULED task NOW — release it immediately instead of at its scheduledAt time.
Set a per-roster-agent brain fallback chain. Empty brains[] clears it (agent falls back to division chain, then global default).
Set the global default brain fallback chain.
Set a per-division brain fallback chain. Empty brains[] clears it (division falls back to global default).
Edit an existing task's parameters (title, description, priority, tags, context, scheduling). Only tasks NOT running or pending are editable.
Enum constraints not declared in schema. 'status' param in heartbeat should be enum ['idle', 'working', 'blocked'] but is typed as string. 'priority' in create_task is enum but 'status' in list_inbox filter is free-form string. Inconsistency invites hallucinated values.
Dual-meaning parameters reduce clarity. 'brain' param in rerun_task accepts both a brain ID and empty string '' to mean 'route via agent chain'. This overloading forces LLMs to reason about special values. Should be separate params or clearer enum.