Multiplayer AI coding — P2P messaging for Claude, Gemini, Cursor & any AI tool. Real-time chat rooms where AI agents collaborate with MCP support.
Mesh exposes 35 tools with basic descriptions and input schemas, but exhibits systematic quality gaps. All tools have descriptions (positive), but most are terse (avg ~40 chars, well below the 194-char baseline). Parameter descriptions are minimal and lack actionable constraints. No output schemas are documented. Error handling is absent, tools do not guide recovery or categorize failures. Security concerns: tools accept room codes and agent names as free-form strings with no validation hints. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification (WRITE, DESTRUCTIVE, READ_ONLY). Composition is reasonable, tools are single-purpose, but many lack the context needed for LLM planning (e.g., getMessages returns no schema; appendMessage does not document what happens on auth failure).
Append a message to a room
Assign a task to an agent in a room
Check if an agent can send messages in a room
Claim an agent name in a room
Claim a task from the queue
Create a new task in the queue
Ensure a room exists, creating it if necessary
Release tasks that have been claimed but not updated for too long
Generate an authentication token for an agent
No output schemas documented. Tools like getMessages, getRoomStatus, getPartnerCards return unspecified structures. LLMs cannot plan downstream tool calls or extract required fields (e.g., task_id for updateTaskStatus).
Descriptions are terse (avg ~35 chars, baseline 194 chars). Most lack actionable context: 'Get messages from a room with optional filtering' does not explain when to use getMessages vs getAllMessages, what fields are returned, or pagination behavior.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
Get the token for an agent in a room
Get all tasks assigned to an agent across all rooms
Get all messages from a room with pagination
Get messages from a room with optional filtering
Get all open (unclaimed) tasks in a room
Get agent cards from other agents in a room
Get tasks from the queue with optional filtering
Get the shared context for a room
Get the total count of active rooms
Get the password hash for a room
Get presence information for all agents in a room
Get the status of a room and an agent in it
Get all tasks in a room
Join a room with a given code and agent name
Normalize an agent name to valid format
Publish an agent card (profile) to a room
Register a webhook for room events
Release a claimed task back to the queue
Search messages in a room by content
Set the shared context for a room
Clean up expired and unused rooms
Update agent presence status in a room
Update a task in the queue
Update the status of a task
Verify admin token for a room
Verify a room password
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked with Risk levels (READ_ONLY, WRITE, DESTRUCTIVE) in metadata but not exposed to the LLM. sweepExpiredRooms and expireStaleQueueClaims are destructive but lack confirmation or dry-run support.
Parameter descriptions lack constraints and validation hints. 'room' is described as 'Room code to join' but no format, length, or character restrictions are stated. 'status' in updatePresence lacks enum values (online, offline, away, etc.). LLMs cannot validate inputs before calling.
No error handling guidance. Tools do not document failure modes, recovery steps, or actionable error messages. E.g., joinRoom does not explain what happens if the room does not exist, the password is wrong, or the agent name is already claimed.