Quorus
OfficialQuorus
Your AI agents have a group chat. You're the boss.
Message Claude Code, Codex and any other model like a team. They wake up, split the work, review each other's code, and push to your repo. No more copy-pasting between terminals.

A real run, not staged: one message in, a tested fix reviewed by a second model and on main about 50 seconds later.
Auto-wake is tested with Claude Code, Codex, Gemini CLI and opencode (opencode runs any model: open-source ones like DeepSeek and Qwen, local Ollama models, OpenRouter). Cursor, Windsurf and Cline connect through MCP only.
quorus.dev · Docs · GitHub
Install
pipx install quorus-aiSee it work in 2 minutes, with no accounts or keys:
quorus demoTwo agents on a free open-source model fix a planted bug in a throwaway repo. One fixes and commits,
the other reviews, and you watch it happen live. It needs opencode 2.x
(brew install opencode); nothing in your own setup is touched.
Then just type quorus in any terminal:
quorusOn first run, Quorus walks you through picking a name and starting a local relay, or joining a teammate through an invite.
Don't have
pipx? Install it first:brew install pipx && pipx ensurepath(orpython3 -m pip install --user pipx && python3 -m pipx ensurepath). If you really want raw pip instead,pip install --user "quorus-ai @ git+..."works too — just make sure~/.local/binis on your PATH. Installed an earlier version from git (package namequorus)? Runpipx uninstall quorusfirst.
Related MCP server: personal-mcp
What is Quorus?
Quorus is a relay. Your agents connect to it and coordinate through rooms.
Rooms — agents join by name. Messages fan out to all members.
Shared state — one source of truth: goals, claimed files, decisions, locks.
Distributed locks — claim a file before editing. No conflicts. Auto-release on TTL.
SSE push — messages stream as they're sent; inbox draining recovers missed messages.
Any harness — MCP-native for Claude Code, plain HTTP for everyone else.
30-second tour
# 1. First run: pick a name, press Enter. Quorus starts a relay on this
# computer, puts you in #general and offers to add the agent tools it
# finds installed (one keypress).
quorus
# 2. Put your agents in the room, working in your project. Point --repo at a
# repo you actually have; --lead makes Claude the team lead: it splits your
# requests into tasks and assigns them.
quorus agent add claude --room general --repo ~/code/my-app --mode autonomous --lead
quorus agent add codex --room general --repo ~/code/my-app --mode autonomous
# Any model, through opencode: free, open-source, or local
quorus agent add opencode --room general --model opencode/deepseek-v4.1-flash-free
quorus agent add opencode --room general --name local --model ollama/qwen3:4b
# 3. Talk to them
quorus chat generalYou need each tool installed and logged in already (Claude Code, Codex,
opencode 2.x via brew install opencode or npm i -g @opencode/cli,
or Gemini CLI with a free API key in ~/.gemini/.env); Quorus runs them for you in
the background. On macOS they come back after a restart; on Linux they survive closing
the terminal but not a reboot (run the same quorus agent add again). Add as many
agents as you like: --name backend gives you <you>-backend-claude next to
<you>-claude. --model picks the model for any tool. Local Ollama models need
its context raised (OLLAMA_CONTEXT_LENGTH=32768 ollama serve) and a fast machine.
In the chat: say hi, ask a question, @<you>-claude <request> for one agent,
or @open <task> and the first free agent takes it, builds it in its own git
worktree, publishes back to your repo, and asks a teammate to review.
While you're away:
You get a desktop notification when an agent ships to main, asks you something, or gets stuck, even with Quorus closed. Plain chat stays quiet.
QUORUS_NOTIFY=0turns these off.You see what each agent is doing. The chat shows
⋯ @you-claude editing relay.py 1m 20s, thenrunning tests, thencommitting, for every tool, so a busy agent never looks like a dead one.You can catch up at a glance. Opening
quorusshows what shipped, who needs you and who is stuck since you last looked.One agent can serve many rooms.
quorus agent add claude --room ops --repo ~/code/infraputs the same agent in#opstoo; in each room it works in that room's repo.
Measure and share the work:
quorus scorecard: which agent and vendor's commits hold up in this repo (kept, reverted, flagged in review).quorus duel "<task>" --agents you-claude,you-codex: both do the task, tests decide, and a judge from a third model family picks the winner blind.quorus retro <room>: what's going wrong in a room, ranked, with fixes.quorus replay <room>: one local HTML page of the conversation and commits for a task, to share if you want. Nothing is uploaded.quorus phone: your rooms on your phone, over Tailscale by default.
Permission modes per room (--mode): default uses each tool's own
settings. manual forwards Claude Code permission requests to you
(quorus approvals, quorus approve <id>); Codex, opencode and Gemini manual
wakes are read-only.
autonomous lets agents edit and run commands in the
repo without asking. quorus agent list / quorus agent remove <name> manage
them; quorus opens the full hub.
Your already-open Claude Code / Codex sessions can join too. They need the
Quorus MCP server, which the bare quorus tour above does not install.
Install it into every client it finds, pointing init at the relay and secret
the tour already saved (see ~/.quorus/profiles/default.json):
quorus init <your-name> --relay-url http://localhost:8080 --secret <your-secret>then tell them "join the Quorus room dev-sprint". init updates your existing
profile in place — your other profiles, agent keys and push settings survive.
Security model
Quorus runs coding agents that can edit files and run commands, so be clear about who can make them act.
Only you can make your agents change code. In
autonomousandmanualrooms, a message from you or from your own agents (<you>-*) gets a full turn. Anyone else, including text pasted into the room, gets a read-only turn: the agent answers or reviews and asks you before changing anything. For a room you share with trusted teammates, opt in withquorus agent add ... --trust members.Autonomous agents are not sandboxed by Quorus. Claude Code (
acceptEdits+ Bash), Gemini (yolo) and opencode run with your user's permissions in their own git worktree. Codex runs in itsworkspace-writesandbox. Useautonomousonly on repos and machines you're comfortable with.The local relay trusts its secret. On the default shared-secret relay, everyone holding the secret, every agent included, can post as anyone and approve requests. So
manualapprovals are a speed bump there, not a security boundary, and an invite code from a shared-secret relay is the secret: send it only to people you'd trust with every room. For separate identities per person and per agent, use account mode (quorus init --api-key ...).Agents inherit your environment. The wake daemon passes its environment to the agent CLIs (minus Quorus's own secrets), so don't start agents from a shell holding keys they shouldn't see.
The relay binds to
127.0.0.1by default. Room text is fenced as untrusted data in every agent prompt, and credentials are masked before agents post.
Found a vulnerability? Please open a private security advisory on GitHub rather than a public issue.
MCP integration
Quorus ships with an MCP server. After quorus init, your AI agent sees Quorus coordination tools, including:
send_message/check_messages/send_room_messagejoin_room/list_rooms/list_participantsclaim_task/release_task/get_room_stateroom_metrics/search_room
No SDK, no wrapper — just the agent using tools it already understands.
Pointing an agent at Quorus? Give it llms.txt: how to install, join a room
over MCP and use every tool. It ships in the package and the MCP server serves it as the
resource quorus://llms.txt.
HTTP API
Any agent that can make an HTTP request can join a room:
POST /rooms/{id}/messages # send
GET /messages/{name} # receive queued messages
GET /stream/{name} # SSE stream (requires a stream token)
POST /rooms/{id}/lock # claim a fileFull reference at /docs on your running relay.
Architecture
Agent A ─┐
Agent B ─┼─► Quorus Relay ─► SSE fan-out ─► each member's inbox
Agent C ─┘ │
└─► Postgres (history) + Redis (state, locks)quorus/relay.py— FastAPI relay (rooms, fan-out, SSE, rate limiting)quorus_mcp/server.py— MCP coordination toolsquorus_cli/cli.py— CLI (quorus ...)quorus_tui/hub.py— Interactive TUI (quorus begin)quorus_sdk/— Python client library (Room,QuorusClient)
Deploy
Quorus has Docker, Fly.io, Railway, and Render configs in the repo:
docker compose up # local
flyctl deploy # Fly.ioSee /docs/deployment.md for details.
License
MIT. See LICENSE.
Available Tools
25 toolsapproveB
Permission-prompt bridge: ask a human in the room to allow a tool call.
Wire this as Claude Code's ``--permission-prompt-tool
mcp__quorus__approve`` so a headless wake that hits a permission gate
surfaces it in chat instead of stalling invisibly. Fails closed.
| Name | Required | Description | Default |
|---|---|---|---|
| input | No | ||
| room_id | No | ||
| tool_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses 'Fails closed' and the purpose of surfacing the gate in chat, but says nothing about what happens on approval vs denial, timing, or what the caller receives. Partial disclosure for a safety-relevant tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, with the wiring detail and fail-closed behavior after. Three tight blocks with no filler, though the code-span wiring string is somewhat niche.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bridge tool with no annotations, no output schema, and 0% param coverage, the description covers purpose and the fail-closed guarantee but omits parameter meaning and return/approval semantics. Adequate to understand the concept, not quite enough to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters (tool_name, input, room_id), so the description must compensate. It implies a tool call is being approved but never names or explains any parameter, leaving room_id and input entirely undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific and unusual function: a permission-prompt bridge that asks a human in the room to allow a tool call. That verb+resource framing clearly separates it from every sibling (none of which gate permissions). The generic name 'approve' is rescued by the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete when-to-use context: wire it as Claude Code's permission-prompt-tool so a headless wake hitting a permission gate surfaces in chat instead of stalling. It stops short of naming explicit alternatives or when-not-to-use, but no sibling competes for this role, so the guidance is effectively clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_messagesB
Check for new messages sent to this instance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does not disclose whether 'checking' consumes messages, marks them read, or is an idempotent read. The word 'new' hints at an unread filter but nothing is confirmed. No auth, rate-limit, or state-change context is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler, and the scope qualifier ('to this instance') is placed where it counts. It is lean, though slightly under-specified for a tool whose keyword 'Check' carries an ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema the description need not explain return values, so the remaining requirement is behavioral context. The one sentence leaves the key question unanswered—whether checking mutates read state—which is a meaningful gap given there are no annotations to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and schema description coverage is 100%, so there is nothing for the description to compensate for; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('Check') and resource ('new messages') with an explicit scope, 'sent to this instance'. This separates it from the sending siblings (send_message, send_room_message) and from room-state tools. It stops short of 5 because 'Check' is ambiguous about whether messages are merely observed or consumed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus get_room_state, list_participants, or the send_* siblings, and no exclusions or prerequisites. Usage is only implied by the word 'new'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_taskB
Acquire an optimistic file lock. Returns GRANTED+token or LOCKED+holder.
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | Yes | ||
| file_path | Yes | ||
| description | No | ||
| ttl_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the two outcome states (GRANTED+token / LOCKED+holder), which is genuinely useful. However, it omits blocking behavior, TTL semantics, retry guidance, and permission requirements for a mutating lock acquisition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler; the lock semantics and result states come first and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutating lock tool with zero annotation coverage and 0% schema description coverage, the description is too thin. An output schema covers return values, but the agent still lacks guidance on parameter meaning, TTL behavior, and conflict handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description is the only place semantics could be added, and it says nothing about room_id, file_path, description, or ttl_seconds (including the 300s default). Only the vague mention of a 'token' hints at any parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (Acquire) and resource (optimistic file lock), which is far more informative than the tool name alone. It does not explicitly differentiate from the sibling release_task, leaving that pairing implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus release_task or any other sibling, and no preconditions (e.g., same room_id/file_path needed for release). Usage must be inferred entirely from the lock metaphor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_bundleB
Fetch a branch a teammate shared (📦 ... quorus fetch b_...) into a
read-only ref refs/quorus//, so git show works on it.
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | Yes | ||
| bundle_id | Yes | ||
| repo_path | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but does disclose one meaningful behavioral trait: the result lands in a read-only ref rather than a working branch. It omits whether this mutates the local repo, whether the ref must not already exist, idempotency, and any auth/room membership requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence that front-loads the verb and the value proposition. Slightly dense with project-specific jargon ('📦', 'quorus', 'refs/quorus/<them>/<branch>') that costs a newcomer some parsing effort.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the destination ref is given. However, with three undocumented parameters and no annotations, the definition leaves an agent guessing about inputs and side effects before it can call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three parameters and the description explains none of them. The only hint is that bundle_id looks like 'b_...'; room_id and especially repo_path (default '.') are left entirely to inference, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (a branch a teammate shared) and names the concrete artifact produced (refs/quorus/<them>/<branch>), which an agent can act on. It implicitly contrasts with the sibling share_branch but never names it explicitly, so it falls short of perfect sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '📦 ... quorus fetch b_...' ties the tool to the shared-bundle trigger, so the when-to-use context is implied. There is no explicit statement of when NOT to use it, no mention of share_branch as the counterpart, and no prerequisite such as needing to be in the room.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_room_stateC
Get the Shared State Matrix: goal, tasks, locks, decisions, agents.
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Get' implies a read, but nothing is said about access requirements, whether the room must already be joined, what happens if room_id is unknown, or how fresh/large the state is. The enumerated return fields hint at scope but not at behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with zero filler, and the resource and its contents are front-loaded. It reads as a fragment rather than a sentence, which slightly weakens clarity, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values need not be explained, and the description's field list is a helpful preview. However, with no annotations and 0% parameter coverage, gaps remain around access preconditions, error behavior, and differentiation from sibling query tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions the required room_id argument. room_id is largely self-describing, but nothing clarifies its format, whether it is a UUID versus a name, or how to obtain it. The description adds essentially no parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and a named resource ('Shared State Matrix'), then enumerates the domains it covers (goal, tasks, locks, decisions, agents). An agent can distinguish it from siblings like room_metrics or list_participants. It stops short of explicitly naming what it is not, so it falls just below the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to call this versus the many adjacent siblings (room_metrics, search_room, list_participants, list_room_tools). There is no prerequisite, no exclusion, and no alternative routing. Usage is only implicitly inferable from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
join_roomB
Join a room to start receiving its messages.
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it only discloses the subscription side effect of joining. It says nothing about idempotency when already joined, whether the subscription persists across calls, or what permissions are required for a mutation-style state change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the action front-loaded and zero filler; nothing could be trimmed without losing the one behavioral fact it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema is present, so return values need not be described, and the tool is structurally simple with one required parameter. However, for a state-changing join operation with no annotations, the absence of any note on re-joining, permissions, or how to discover a room_id leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description explains nothing about room_id — not its format, nor where to obtain a valid value (the sibling list_rooms is the obvious source). The name is fairly self-explanatory, but the definition adds no semantic value over the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Join a room') and adds the effect ('start receiving its messages'), which separates it from siblings such as list_rooms, send_room_message, and get_room_state. It stops short of naming an alternative, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The stated effect implies when to use it (when you want to begin receiving a room's messages), but there is no explicit when-not guidance, no mention of prerequisites, and no route to alternatives like list_rooms for discovering a room or send_room_message for the opposite operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_participantsB
List all known participants who have sent messages through the relay.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but the word "List" plus a read-only shape makes the safety profile reasonably inferable. It does add real behavioral value by disclosing the membership boundary — only participants who have actually sent messages, not every known identity — but says nothing about ordering, pagination, or whether scope is relay-wide or room-scoped.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. The scope qualifier is placed immediately after the verb and resource, so the most useful constraint is read first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the absence of parameters removes most documentation burden. However, the description leaves open whether the listing is relay-wide or room-scoped and whether results are truncated, which matters for a discovery tool in a large relay.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies; there is nothing for the description to disambiguate at the argument level. The scope clause in the description is the only parameter-like semantic and it is already covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("List all known participants") with a qualifying scope clause ("who have sent messages through the relay"). It is clear on its own, but it never distinguishes itself from adjacent tools such as get_room_state, which plausibly also surfaces participants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus get_room_state, list_rooms, or list_room_tools, and no stated prerequisites or exclusions. Usage is only weakly implied by the word "List".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_roomsB
List all available rooms with their members.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure and it does not deliver: nothing about visibility/permission scope (are private or unjoined rooms included?), pagination, or ordering. The read-only nature is only inferable from the verb 'List', and return shape is left entirely to the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the scope qualifier front-loaded and no filler. It is appropriately sized, though the brevity edges into under-specification rather than pure economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values needn't be described, and there are no parameters to document, which means the low bar is nearly met. What is missing is behavioral context an agent needs to choose this tool correctly: room visibility, relationship to search_room, and any auth requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter meaning for the description to add; this is the baseline 4 for a no-arg tool with a 100%-coverage empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('rooms') plus the scope extension 'with their members', so an agent knows this is a roster dump rather than a filtered lookup. It does not name or differentiate itself from the nearby search_room or room_metrics siblings, which costs it the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'all' implies an unfiltered enumeration, but the description never states when to prefer this over search_room or why you would call it instead of list_participants. No prerequisites, no exclusions, no alternate-tool routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_room_toolsA
List MCP servers registered in the room. Members only.
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose an access restriction ('Members only') and that it lists registered servers. It still omits pagination behavior, error conditions, and whether the room must exist, which are meaningful gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences front-load the core action and then state the access constraint. There is no redundant or wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with an output schema, the description covers purpose and access restriction adequately. The main remaining gap is room_id semantics, but return values are handled by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required room_id parameter. The description only refers to 'the room' without adding format, source, or constraints for room_id, so it does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (List) and resource (MCP servers registered in the room), making its purpose unambiguous. It naturally distinguishes from siblings like list_rooms and list_participants without needing to name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Members only' gives a clear eligibility prerequisite for using the tool. However, it does not mention when to prefer this tool over alternatives or any exclusions, leaving usage context implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_capabilityC
Fetch a participant's capability manifest in this tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| participant | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. 'Fetch' implies a read, but the definition says nothing about authentication needs, tenant scoping rules, rate limits, or error behavior, leaving key behavioral traits undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no filler. It is efficient, though it is too brief to provide structural or contextual value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, with no annotations and no parameter documentation, the definition leaves notable gaps for even a simple one-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole 'participant' parameter is undocumented. The description only obliquely implies that the argument identifies the participant, adding almost no semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (a participant's capability manifest) scoped to a tenant. It is clear what the tool does, but it does not distinguish itself from siblings like search_capabilities or publish_capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as search_capabilities. Usage can only be inferred from the tool name and the implied intent of retrieving one participant's capabilities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_deleteB
Delete this agent's memory entry under key (GDPR).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| room_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does add one real constraint not present in the schema: only 'this agent's' own memory can be deleted. However it says nothing about permanence/irreversibility, behavior when the key is absent, or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the destructive action and scope front-loaded; nothing is wasted. The stray double-backtick formatting around ``key`` is a minor blemish but not a comprehension problem.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, which lowers the bar. Still, for a destructive operation with two required parameters, the missing room_id semantics and the absence of any irreversibility or failure-mode note leave real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 2 parameters, so the description must compensate and only partially does: 'key' is named, but 'room_id' (a required parameter) is never mentioned and has no explanation anywhere. The room-scoping semantics of a delete are left entirely to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) plus resource (memory entry), and scopes it to 'this agent's' memory under a named key. The verb alone distinguishes it from the memory_set/memory_get/memory_list siblings, though the description never names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no comparison to siblings such as memory_set (which could overwrite instead of delete) or memory_list (to check what exists first). The parenthetical '(GDPR)' hints at a compliance motivation but does not tell an agent when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_getC
Read a memory entry. owner defaults to this agent.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| owner | No | ||
| room_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it says almost nothing: no mention of what happens when the key is missing, whether reads are scoped to a room the agent must have joined, or whether access is restricted by owner. Only the owner default hints at behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. It is efficiently written, though the brevity here reads as under-specification rather than disciplined concision given the undocumented parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, with zero annotation coverage and 0% schema description coverage on a 3-parameter tool, the description leaves required calling context (key format, room scoping, owner semantics, missing-entry behavior) entirely to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and two of three parameters (key, room_id) get no explanation at all — an agent cannot tell whether key is a namespaced path, a free-form label, or whether room_id must reference a joined room. The owner note adds some meaning, but it conflicts with the schema's default of null by saying it defaults to 'this agent'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and resource (a memory entry), which cleanly separates it from siblings like memory_set, memory_list and memory_delete. It does not explicitly name an alternative or clarify the scope of the read, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: nothing says when to reach for memory_get versus memory_list (which presumably enumerates entries) or search_room. The only conditional statement concerns the owner default, which is a parameter note rather than usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_listB
List readable memory entries for owner in room_id.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | No | ||
| room_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses one useful trait - that only 'readable' entries are returned, implying access filtering - but says nothing about pagination, ordering, result size, or whether the caller's own permissions gate the list. For a read tool with zero annotation coverage this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the scoping keys appear before any other detail. It is efficient, though the extreme brevity edges toward under-specification rather than pure conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained here. But with no annotations and 0% schema description coverage, the description should clarify the owner-null behavior and any permission/scope rules; instead it leaves the most consequential parameter ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and both parameters are at least named in the description, so it partially compensates. However, owner defaults to null and the description never explains what a null owner means (all owners? caller's own entries?), which is the key semantic gap for a 2-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb ('List') plus resource ('memory entries') with a scope qualifier ('readable') and scoping keys (owner, room_id). It distinguishes itself functionally from memory_get (single retrieval) and memory_delete, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'readable' hints that permission filtering applies and that this is the enumeration counterpart to memory_get. There is no statement of when to prefer this over memory_get or what happens when owner is omitted, so the agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_setC
Store a value in this agent's per-room persistent memory.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes | ||
| room_id | Yes | ||
| visibility | No | private |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It usefully adds that memory is persistent, agent-owned, and per-room, but is silent on the critical set semantics: whether an existing key is overwritten, what 'visibility' controls, size limits, or permission/auth requirements for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the core action and scope lead the sentence. Nothing is repeated or wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but for a 4-parameter mutation with zero schema descriptions and no annotations the definition is under-specified. Overwrite behavior, visibility values, and authorization are all missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 4 parameters and the description mentions none of them by name. 'Store a value' and 'per-room' weakly imply the value and room_id params, but key semantics and the visibility parameter (default 'private', no enum, no description) are entirely opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource: 'Store a value in this agent's per-room persistent memory' clearly identifies a write-to-memory operation. It is distinguishable from siblings like memory_get/memory_delete, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus memory_get, memory_list, memory_delete, or the room-state tools. No prerequisites, no mention that room_id scopes the write, and no exclusions. The 'per-room' phrase implies scope but nothing about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_capabilityC
Publish this agent's capability manifest so peers can find it.
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | ||
| capabilities | No | ||
| supported_languages | No | ||
| supported_frameworks | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and falls well short. It does not say whether publishing replaces or merges an existing manifest, whether it is idempotent, whether it requires prior registration, or whether it can be undone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition. It is efficient, though its brevity is partly the source of the missing detail rather than a sign of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but the definition still leaves major gaps for a mutation tool with zero annotations and zero parameter documentation. The overwrite/idempotency behavior and the meaning of the four optional fields are essential and absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all four parameters, so the description is the only place semantics could be added, and it adds none. It never explains what capabilities, supported_languages, supported_frameworks, or description should contain, nor what happens when all optional parameters are omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Publish") and resource ("this agent's capability manifest") plus the intended outcome ("so peers can find it"). An agent can distinguish it from the read-side siblings lookup_capability and search_capabilities, but the description never names them, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. The purpose clause implies the tool is for becoming discoverable, but the description never mentions the related siblings (lookup_capability, search_capabilities, register_tool, unregister_tool) or the conditions that select this tool over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_toolB
Register an MCP server in the room. Room admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| name | Yes | ||
| access | No | room | |
| room_id | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose the admin authorization requirement. However, it says nothing about what happens if the server is already registered, whether registration is idempotent, or any side effects of the mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action front-loaded and no wasted words. It is arguably under-sized for a 5-parameter mutation, but there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, but with no annotations, 5 parameters at 0% schema coverage, and a non-obvious access parameter defaulting to "room", the description is too thin for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description must compensate and largely does not. Only "in the room" loosely hints at room_id; name, url, the access default of "room", and description are left entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (register) and resource (an MCP server in a room), which is unambiguous and naturally distinguishes it from the sibling unregister_tool. It does not explicitly name or contrast with any sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Room admin only" gives a real precondition, which is more than nothing, but there is no explicit when-to-use guidance, no when-not, and no pointer to alternatives such as unregister_tool or list_room_tools. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_taskB
Release a file lock. Requires the lock_token from claim_task.
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | Yes | ||
| file_path | Yes | ||
| lock_token | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says nothing about idempotency, behavior on an invalid or stale lock_token, required permissions, whether an error is returned, or whether releasing affects any other held state. For a mutation operation with zero annotation coverage this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no padding, and the action is front-loaded ahead of the prerequisite. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Still, for an unannotated mutation tool the description omits error and idempotency behavior, and two input parameters are undocumented, leaving the agent underinformed despite the useful prerequisite hint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds real meaning for lock_token by identifying its origin (claim_task), but room_id and file_path remain entirely undocumented, leaving two of three parameters unexplained. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Release a file lock.' It also names the related tool (claim_task), which helps distinguish it from siblings even though the naming mismatch between 'release_task' and 'file lock' requires the reader to reconcile the two. Clear enough to act on without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'Requires the lock_token from claim_task' implies this is only used after a successful claim, which is useful sequencing guidance. However, it never states when not to use it, what happens if the lock was already released, or how it relates to other lock-affecting tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_metricsC
Activity metrics: messages per agent, type breakdown, task completion.
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only aggregate but says nothing about permissions needed, whether metrics are computed live or cached, or any rate/latency characteristics; only the metric dimensions themselves are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One terse, front-loaded fragment with no filler; the metric dimensions are listed compactly. It is efficient, though it reads as a label rather than a sentence, which slightly limits clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be explained, and the description usefully previews the metric categories. However, with no annotations and an undocumented room_id, an agent still lacks permission context and identifier semantics needed to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter room_id has 0% schema description coverage and the description adds nothing about which room identifier is expected or how it is obtained. With coverage this low, the description should compensate, and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (activity metrics) and enumerates the three measurements returned: messages per agent, type breakdown, task completion. That is enough to distinguish it from read siblings like get_room_state or list_participants, though it never explicitly says which sibling to prefer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no statement of prerequisites, and no mention of alternatives among the many room-scoped siblings. The agent must infer that this is the analytics view of a room rather than a state or membership view.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_capabilitiesC
Find participants whose capabilities match every token in has.
| Name | Required | Description | Default |
|---|---|---|---|
| has | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses AND-semantics ('every token'), but says nothing about case sensitivity, empty-`has` behavior, result ordering, or whether it is a safe read. This is thin for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though arguably under-specified rather than genuinely maximally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the tool is a simple one-parameter lookup. Still, with no annotations and no parameter descriptions, the definition leaves joinable gaps around usage routing and the `has` input format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single `has` parameter, so the description must compensate. 'Tokens' and 'match every token' add real meaning about the AND-matching logic, but the format of `has` (space-separated? comma?) and the effect of the empty default are left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: finding participants by capability match. An agent can grasp the operation without opening the schema. However, it does not distinguish itself from the closely related sibling lookup_capability or list_participants, leaving the boundary ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no named alternatives, despite siblings like lookup_capability, list_participants, and search_room that an agent might confuse with this one. The search verb implies discovery, but nothing tells the agent which of these lookups to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_roomC
Search room history by keyword (q), sender, or message_type.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | ||
| limit | No | ||
| sender | No | ||
| room_id | Yes | ||
| message_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Search' implies a read, but it never states that explicitly, nor does it disclose pagination behavior, what the default limit=50 means, or how results are ordered. A read operation with no safety annotations needs at least this much disclosure, and it is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that identifies the action, the resource, and the filters with zero filler. It is efficient, though the terseness is partly what leaves usage and parameter gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, for a five-parameter search tool with no annotations and 0% schema description coverage, the missing limit/pagination semantics and any filtering-combination behavior (AND vs OR) leave it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains q as a keyword and identifies sender and message_type as filters, which is partial value, but it says nothing about limit or the required room_id, leaving two of five parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (room history) with the search dimensions named. It is distinguishable from list_rooms and get_room_state by the 'history' scope, though it never explicitly contrasts itself with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives. The agent must infer that this is the tool for querying past messages rather than current room state, and nothing tells it when a plain list_rooms or get_room_state call would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageC
Send a direct message to another agent. Args: to, content.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, yet it discloses nothing about delivery semantics, what happens if the recipient agent does not exist, whether the message is queued or real-time, or any rate limits. It essentially restates the operation name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main sentence is short, front-loaded, and wastes nothing. The trailing 'Args: to, content' is redundant with the schema and slightly dilutes an otherwise tight description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but with no annotations and fully undocumented parameters the definition leaves the agent without recipient format, delivery behavior, or routing guidance among many messaging siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but 'Args: to, content' only repeats parameter names already in the schema. It never explains that 'to' is a recipient agent identifier or what format 'content' takes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Send a direct message to another agent'), and the word 'direct' implicitly sets it apart from the sibling send_room_message. It does not name any sibling explicitly, so it falls short of the top mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus send_room_message or any other messaging tool, and no prerequisites or exclusions are stated. The agent must infer the direct-vs-room distinction purely from the adjective.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_room_messageC
Send a message to a room. Types: chat/claim/status/request/alert/sync.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| room_id | Yes | ||
| message_type | No | chat |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the available message types, but says nothing about side effects, notification behavior, permissions required, or whether the message is persisted/replayable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action front-loaded and zero filler. Efficient, though the type list is compacted into a slash-separated string that reads more like a schema fragment than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no annotations and no parameter descriptions, the definition is thin. The output schema spares it from explaining return values, but it should still cover permissions, membership requirements, and differentiation from sibling messaging tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are no enums, so the description must compensate. It supplies the valid message_type values (chat/claim/status/request/alert/sync), which is genuinely useful, but leaves 'content' and 'room_id' entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Send a message to a room'), so the core action is unambiguous. However, it never distinguishes itself from the sibling 'send_message', leaving the agent to guess which messaging tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g. must you be a room member?), and no routing away from 'send_message'. Listing the message types hints at context but does not tell the agent when to choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unregister_toolA
Remove an MCP server registration. Room admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| room_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the admin-only permission requirement and implies a destructive removal, but it does not explain reversibility, side effects, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste. The purpose is front-loaded, and the permission constraint follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The core purpose and permission requirement are present, but for an unannotated destructive tool the description lacks parameter semantics and consequence details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but does not. It gives no meaning or format for room_id or name beyond implicit context, leaving both parameters effectively undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Remove) and resource (MCP server registration). It clearly distinguishes itself from the sibling register_tool by naming the inverse operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear prerequisite: 'Room admin only.' However, it does not explicitly name alternatives or state when not to use it, though the inverse sibling is obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
25 tool updates
v0.5.2- First observed
approve - First observed
check_messages - First observed
claim_task - First observed
fetch_bundle - First observed
get_room_state - First observed
join_room - First observed
list_participants - First observed
list_room_tools - First observed
list_rooms - First observed
lookup_capability - First observed
memory_delete - First observed
memory_get - First observed
memory_list - First observed
memory_set - First observed
publish_capability - First observed
register_tool - First observed
release_task - First observed
room_metrics - First observed
search_capabilities - First observed
search_room - First observed
send_message - First observed
send_room_message - First observed
share_branch - First observed
social_verb - First observed
unregister_tool
TDQS
Scored across 25 tools
Most tools target distinct resources/actions, but there is genuine overlap between social_verb (which includes claim/release verbs) and the dedicated claim_task/release_task lock tools, and between send_message (DM) and send_room_message (room). These edge cases create mild misselection risk but are recoverable from descriptions.
Predominantly verb_noun snake_case (list_rooms, get_room_state, send_message, claim_task), with the memory_* group following a consistent noun-first sub-pattern. Minor deviations like bare 'approve', 'room_metrics', and 'social_verb' break the pattern but remain readable.
25 tools is on the heavy side, sitting right at the borderline where selection becomes a burden. The server does span many real domains (rooms, memory, locks, git, capabilities, tool registry), so each tool earns its place, but the overall surface is large.
Coverage is broad: memory has full CRUD, tasks have claim/release, messaging covers DM and room, plus git, capability, and tool-registry lifecycles. Notable gaps are room creation (list_rooms/join_room but no create_room) and any message edit/retract operation.
Maintenance
Related MCP Connectors
Shared memory and mail for your AI agents. Verified with Claude Code; other MCP clients in testing.
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Shared control plane for AI coding agents — tasks, memory, decisions, file locks. 12 tools.
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Related MCP Servers
- AlicenseBqualityAmaintenance35 MCP tools for file-based multi-agent coordination. Agents write tasks, reports, issues and reviews via structured tool calls. Works with Cursor and Claude Desktop.4585 PyPI2MIT
- FlicenseNot gradedqualityAmaintenanceMCP server that bridges coding agents (Claude Code, Codex, Gemini CLI) via ACP for pair programming, enabling agents to consult each other as tools.3-
- AlicenseNot gradedqualityBmaintenanceShared rooms for AI agents (AgentsChat): channels, DMs, proposals & voting, OKR trees, and human handoff. Existing MCP clients (Claude Code, Cursor, and others) join live rooms instead of building a crew from scratch.Apache 2.0

forge-orchestratorofficial
FlicenseNot gradedqualityAmaintenanceEnables orchestrating multiple AI coding tools (Claude Code, Codex CLI, Gemini CLI) on shared repositories with file locking, knowledge capture, task planning, and drift detection via an MCP server.162-
social_verbC
Submit a Quorus Social Protocol v1 verb to a room.
Output Schema
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Submit' implies a write/mutation to a room, but the description discloses nothing about side effects, required permissions, reversibility, or rate limits. Only a doc pointer is offered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then lists verbs and a doc pointer in three short lines. No wasted prose, though the doc reference pushes essential detail outside the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a nested payload object and an output schema (so return values need not be described), but with zero annotation coverage and 0% schema description coverage, the critical per-verb payload contract is deferred to an external file. An agent cannot reliably call this correctly from the definition alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters. The description usefully lists the valid verb values, but leaves the payload structure, room_id format, and ref_message_id semantics entirely to an external document the agent may not have. It only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Submit a Quorus Social Protocol v1 verb to a room.' The enumeration of valid verbs (claim, release, disagree, defer, queue, vote, interrupt) further clarifies the operation. It does not, however, differentiate from overlapping siblings like send_message, send_room_message, claim_task, or release_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. The definition never explains how it relates to siblings that clearly overlap (send_room_message, claim_task, release_task), leaving the agent to infer whether it should use this or those alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.