The Mycelium MCP server exposes 30 tools with basic schemas and descriptions, but exhibits significant quality gaps. All tools have input schemas (positive), and all have descriptions, but many descriptions are sparse (10-40 chars) and lack actionable context for LLM selection. Parameter descriptions are present but often generic (e.g., 'Filter by status'). Output schemas are not documented in the provided source. Error handling guidance is absent. Tool naming follows verb_noun convention consistently, but compositions lack critical details: many tools return integers (task/bug/plan IDs) without documenting what fields those IDs correspond to in responses, forcing agents to make additional lookups. Security patterns (permission gates, audit trails, scope declarations) are not visible. The server is production-oriented (distributed agent platform) but lacks the rigor expected for a 70+ score.
Tools (30)
mycelium_bootread onlyauth50/100
Boot agent session or get admin overview.
mycelium_claim_bugwriteauth50/100
Claim a bug to fix (sets status=in_progress, assignee=self).
mycelium_claim_taskwriteauth50/100
Claim a task to work on (sets status=in_progress, assignee=self).
mycelium_close_bugwriteauth50/100
Close/fix a bug and advance to next work item.
mycelium_close_taskwriteauth50/100
Close/complete a task and advance to next work item.
Output schemas not documented. Tools return IDs (integers) and field lists, but no response schema is visible in source. LLMs cannot plan downstream calls or extract required chaining IDs without seeing the structure.
Sparse descriptions limit LLM tool selection. 18 tools have descriptions under 50 characters (e.g., mycelium_boot='Boot agent session or get admin overview', mycelium_list_projects='List all projects'). These lack context about WHEN to use each tool vs alternatives and what downstream dependencies exist.
Expand tool descriptions to 100 - 250 characters. Include WHEN to use the tool (e.g., 'List all tasks to discover available work, or call mycelium_get_task if you have a task ID'), what it returns, and any prerequisites. Example: mycelium_list_tasks → 'Retrieve tasks filtered by status, assignee, or project. Returns task summaries (id, title, status, assignee). Use this to discover work; for full details, call mycelium_get_task(id).'
Document output schemas for all tools. For mycelium_get_task, specify: {id: integer, title: string, description: string, status: enum[open|in_progress|done], assignee: string, project_id: string, priority: enum[low|normal|high|critical], created_at: ISO8601, updated_at: ISO8601}. This enables LLM planning.
Convert status, severity, priority, and msg_type parameters to enums. E.g., status: {type: 'string', enum: ['open', 'in_progress', 'done'], description: 'Task status. Valid values: open (unstarted), in_progress (claimed), done (completed).'}
Add error handling to create/update/delete tools. Document: (1) what errors can occur (e.g., 'task not found', 'task locked by another agent', 'permission denied'), (2) error classification (retryable vs permanent), (3) recovery guidance (e.g., 'If task_locked, wait 30s and retry. If permission_denied, ask an admin.').
Add confirmation step to destructive operations. mycelium_delete_context and mycelium_close_task should return {confirmation_required: true, message: 'Are you sure? This cannot be undone.'} when called without a dry_run=true parameter. Require explicit confirmation before executing.
Score history
Overall score trend
First recorded score · v2 rubric
53/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-23
D
53
2026-07-28+
v2
mycelium_delete_contextwriteauth50/100
Delete a context key.
mycelium_get_bugread onlyauth50/100
Get full bug details by ID.
mycelium_get_planread onlyauth50/100
Get full plan details with steps.
mycelium_get_projectread onlyauth50/100
Get project details.
mycelium_get_taskread onlyauth50/100
Get full task details by ID.
mycelium_get_work_queueread onlyauth50/100
Get assigned work items (tasks + bugs) for current agent.
mycelium_heartbeatwriteauth50/100
Send a heartbeat to keep this agent registered online.
mycelium_list_agentsread onlyauth50/100
List all agents with status, project, and heartbeat info.
mycelium_list_bugsread onlyauth50/100
List bugs with optional filtering by severity, status, or assignee.
mycelium_list_contextread onlyauth50/100
List all context keys for this agent.
mycelium_list_messagesread onlyauth50/100
List messages (requests, directives, notifications) sent to this agent.
mycelium_list_plansread onlyauth50/100
List plans with optional filtering.
mycelium_list_projectsread onlyauth50/100
List all projects.
mycelium_list_tasksread onlyauth50/100
List tasks with optional filtering by status, assignee, or project.
mycelium_load_contextread onlyauth50/100
Load a context key-value pair from this agent's durable context store.
mycelium_respond_to_requestwriteauth50/100
Respond to a request or directive message.
mycelium_save_contextwriteauth50/100
Save a context key-value pair to this agent's durable context store.
mycelium_send_messagewriteauth50/100
Send a message (request, directive, or notification) to another agent.
No error handling or recovery guidance. Tools (e.g., mycelium_claim_task, mycelium_update_task) modify state but do not document what errors might occur, whether they are retryable, or what the LLM should do if a claim fails or a task is locked.
Parameter descriptions are generic. 'Filter by status', 'Filter by severity', 'Filter by project ID' appear repeatedly but do not explain what statuses are valid, what severities are defined, or whether IDs are case-sensitive. Enums not declared; LLMs will hallucinate invalid values.
Destructive operations lack confirmation patterns. mycelium_delete_context, mycelium_close_task, and mycelium_close_bug are irreversible but do not support dry-run or require explicit confirmation. Agents may accidentally delete context or close items unintentionally.
No permission gates or scope declarations visible. Tools like mycelium_send_message (broadcast to all agents), mycelium_update_plan (modify any plan), and mycelium_delete_context lack permission checks or scope metadata (e.g., 'read:tasks', 'write:plans'). Multi-agent environment requires clear authorization.
No audit trail or logging metadata. No patternRef visible for who called what, when, or with what parameters. In a multi-agent distributed system, audit trails are essential for debugging and compliance.
Ambiguous parameter relationships. mycelium_send_message has 'to_agent' and 'msg_type', but unclear whether msg_type='directive' requires assignee or supervisor role, or if 'broadcast' to 'all' is restricted. Undocumented dependencies cause silent misuse.
mycelium_send_message
Declare scopes and permission requirements. Each tool should have a 'scopes' array in its metadata: mycelium_create_task requires ['write:tasks', 'read:projects'], mycelium_delete_context requires ['write:context']. This guides least-privilege agent configuration.
Add pagination parameters to all list tools. Ensure mycelium_list_tasks, mycelium_list_bugs, mycelium_list_plans, mycelium_list_agents, mycelium_list_messages all accept offset/limit and return a total_count or next_cursor. Cap default limit at 20; max 100.
Enhance parameter descriptions with constraints. E.g., 'limit': {type: 'integer', description: 'Max results (default 20, max 100). Use pagination to fetch large result sets without exhausting context.'}
Add audit trail metadata to responses. Include caller_agent_id, timestamp, action_result (success/failure) in every response. Enable post-hoc tracing of multi-agent operations.
Document tool composition chains. E.g., mycelium_list_tasks → mycelium_get_task → mycelium_claim_task. Explicitly state which outputs feed into which inputs (e.g., 'task_id from list_tasks can be passed to claim_task').
Add tool annotations. Mark mycelium_list_* tools with readOnlyHint=true; mycelium_delete_context, mycelium_close_task, mycelium_close_bug with destructiveHint=true; mycelium_heartbeat with idempotentHint=true. Help LLMs reason about side effects.
Specify natural identifiers. If agents have names (e.g., 'Claude-001') in addition to IDs, accept both in mycelium_send_message(to_agent) and mycelium_claim_task(assignee). Reduce forced lookup calls.
Add rate limit and timeout guidance. Document: 'Heartbeat calls are rate-limited to 1 per minute per agent. If you exceed this, wait before retrying.' Prevent agents from overwhelming the system.