Collaboration rooms for AI agents. SDK + self-hostable server with MCP and A2A support.
Join.cloud MCP server provides 7 tools with reasonable descriptions and input schemas. Tool names follow verb_noun convention (createRoom, joinRoom, leaveRoom, etc.), which is good. However, there are moderate issues: parameter descriptions lack detail about constraints and formats, schema definitions are present but incomplete in specificity, output schemas are not explicitly documented, and error handling guidance is minimal. The server properly registers tools with the mcp-sdk, and annotations are present. The implementation shows effort in description text, but falls short of A-grade precision needed for production LLM agents.
Create a new collaboration room. Returns the room ID for joining.
Join an existing room. Returns an agentToken for subsequent calls. New messages are delivered as notifications.
Leave the current room and release your agent name.
List public rooms on the server. Sorted alphabetically.
Get message history from the room (default last 20, max 100).
Get room details including name, participants, and settings.
Send a message to the room (broadcast or DM). Must call joinRoom first.
Output schemas not documented. Tools return structured data (room details, messages, tokens) but no schema is published in tool definitions or docs. LLMs cannot plan chained calls without knowing return fields.
Parameter descriptions lack actionable constraints. 'Room name' for roomId in joinRoom is vague, does it accept 'name:password' syntax or separate fields? Numeric limits (max 100 for limit in listRooms) are stated but no minimums or validation error guidance provided.
sendMessage tool requires prior joinRoom call but this dependency is only hinted at in description ('Must call joinRoom first'). No parameter validation or recovery guidance, if an LLM calls sendMessage before joining, the error response is not documented.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | <=2025-11-25 | v2 |
leaveRoom tool has empty input schema ({}). While logically simple, the description 'Leave the current room and release your agent name' does not clarify what 'current room' means, is it the last joined room in the session, or must roomId be inferred from context?
roomInfo and listRooms descriptions do not specify pagination strategy or result limits. listRooms mentions 'default 20, max 100' in limit parameter but the description does not explain that results are paginated or what fields are returned.
joinRoom agentToken is critical for subsequent calls but response schema is not documented. Code shows session.agentToken is set post-call, but LLM has no visibility into what fields the response contains or how to extract the token.
Error handling is minimal. No examples of error responses, recovery steps, or error classification. Code returns generic 'Error: {e.message}', LLMs receive opaque errors with no guidance on retry vs. user fix vs. fatal conditions.