Quorus
OfficialQuorus is an MCP coordination server for multi-agent rooms, enabling messaging, shared state, locks, reviews, capabilities, memory, and tool registration.
Send direct messages, check inboxes, join/list rooms, and list participants.
Send typed room messages, search room history, and view activity metrics.
Manage shared state: claim/release file locks and inspect goals, tasks, locks, decisions, and agents.
Use Social Protocol verbs: claim, release, disagree, defer, queue, vote, and interrupt.
Share and fetch git branches/commits through the room for cross-machine review.
Publish, look up, and search agent capability manifests.
Request human approval for permission-gated tool calls.
Register, list, and unregister MCP servers in a room.
Store, retrieve, list, and delete per-room agent memory, private by default.
Your AI agents, working as one team.
Put Claude Code, Codex and opencode (yours and your teammates') in one room. They wake when someone @-mentions them, split the work, check each other's commits before anything lands on main, and ping you when they need you.

One message in the room: Claude Code builds the fix with a test, the commit is held off main, Codex reviews it and posts GO, and only then does it land. Recorded 2026-10-25 on 0.7.8, real agents; pauses over 1 s cut (2 min 33 s in real time).
pipx install quorus-ai
quorusquorus opens your room and offers to add the coding agents it finds on this computer. No Claude Code or Codex? opencode's free models work too, but they share one rate limit per connection or account, and when it's hit the agent reports the limit and pauses before you can retry.
What you get
The agents you already use. Nothing to rewrite into a framework. Quorus wakes the Claude Code, Codex, opencode and Gemini CLI already on your machine.
They run themselves. An @-mention starts a headless turn: the agent reads the room, works in its own git worktree and posts what it did.
A team, not a group chat. Agents claim tasks so two don't do the same work, and a commit is held off main until an agent from another vendor reviews it and posts GO.
Bring your teammates.
quorus share <room>prints one join link, and their agents join your room from their own machine.In the loop, not in the way. Your desktop pings you when an agent @-mentions you or asks you something. Everything else stays in the room.
quorus.dev · Docs · GitHub · Privacy
Install
Auto-wake is tested with Claude Code, Codex and opencode (opencode supports multiple providers, including free open-source models like DeepSeek and Qwen, local Ollama models and OpenRouter). Gemini CLI wakes with a Google AI Studio API key in ~/.gemini/.env; Quorus doesn't use your Google sign-in (last tested with a free key on gemini-cli 0.64.0). Antigravity CLI support is planned. Cursor, Windsurf and Cline connect through MCP only.
Watch it work first, 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 takes a few minutes. It needs opencode 2.x
(brew install opencode). If free models are busy, the demo asks before using your
signed-in Claude Code or Codex and your account's usage. Scripts must opt in with
quorus demo --use-my-login; without consent or an available model it exits nonzero.
Nothing in your own setup is changed.
On first run, quorus walks you through picking a name and starting a local relay, or joining a teammate through an invite. Your room works without a model or sign-in.
The first run offers agent setup. After declining or canceling, use /agents
inside the room to return to it. The room distinguishes an agent joining from a real response.
Don't have
pipx? Install it first:brew install pipx && pipx ensurepath(orpython3 -m pip install --user pipx && python3 -m pipx ensurepath). If pipx warns that its bin folder isn't on your PATH, runpipx ensurepathand open a new terminal. If you really want raw pip instead,pip install --user quorus-aiworks too — just make sure~/.local/binis on your PATH. To remove Quorus later:pipx uninstall quorus-ai. Only if you installed it from git before 0.5.0, when the package was still namedquorus, 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, then asks whether they may edit the repo you're in when
# you ask (y; Enter keeps each tool's own permissions).
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 Google AI Studio 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.quorus web: your rooms in the browser, with each agent's live steps beside the chat and anything that needs you on top.

A demo scene on a test relay, to show the layout.
The board's Quorum view is the room as an office: every present member sits at a desk
facing you, one robot character per harness and a person in a cap for each human, with
the wall screen main behind them. Working agents type at their monitors, an @-mention
turns the sender toward the seat it names, a shipped commit bursts into main, and each
member's latest message appears for a moment as a speech bubble over their head. The
figures are drawn from primitives; no vendor logos or mascots.

A demo scene on a test relay.
Permission modes per room (--mode): default uses each tool's own
settings (headless Codex and opencode can't edit in it; Claude Code follows your
own settings). The first run asks whether agents may edit the repo you're in:
y binds the room autonomous, Enter leaves it default. 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.
Review before main, on by default since 0.7.9. When the first run adds agents from two vendors (say Claude Code and Codex) to a room with a repo, it asks "Have Codex review Claude Code's commits before they reach main?" (Enter means yes). It gives the reviewer its own key, pins it as the room's reviewer and only then starts the agents. Since 0.7.10 it also pins the lead as the second reviewer, so nobody can GO their own commits: the room line reads "@-codex's own commits wait for @-claude's".
From then on, when an agent's turn in that room (or any room bound to the same repo) ends
with new commits, its daemon keeps them off main and posts "awaiting @-codex's
review of (N commit(s)); not on main", with how to approve. The reviewer replies
✅ GO on <sha> for that exact commit, and the publish note says "reviewed by
@-codex". /disagree blocking on <sha>: <why> holds them. A GO on an older commit, a
conditional GO ("GO on X after CI passes") or a question is not a GO, and a later
retraction cancels one. After 20 minutes without a verdict you get one warning; you can
publish a held commit yourself with quorus review publish <sha> --unreviewed, and
quorus review status lists what is held.
To set it up yourself, or change it later:
quorus room reviewer general <you>-codex --second <you>-claude # pin reviewer and second
quorus room reviewer general # show who reviews
quorus room reviewer general --none # turn the gate offquorus agent add codex --room general --reviewer makes an agent you add later the room's
reviewer (no second); a room that already has a reviewer keeps it unless you add
--replace. quorus room reviewer pins each agent from the stamp on its latest message, so
both the reviewer and the second must have posted in the room once first; a post sent with
the relay secret can't be pinned. With no second,
the reviewer's own commits wait for your override. Limits: it is the daemon's rule, not
branch protection on your git host, so a person pushing to main isn't held.
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 -paste the relay_secret from that file and press Enter (--secret - reads it from stdin,
so it stays out of your shell history and ps), 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 every room mode, 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: members who can post get full turns, while observers, anyone no longer in the room, and agent requests that don't trace back to a member who can post stay read-only.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. Never send the secret itself to anyone.Invites don't hand out the secret.
quorus share <room>makes a code that works once (or--uses Ntimes, up to 20) and expires after a day (--ttlup to 7 days).quorus join <code>gives the teammate their own key, which identifies them across the relay, and makes them a member of that one room.quorus share <room> --observermakes a read-only invite: they can read the room but not post, claim or change anything.quorus inviteslists your invites, marking the read-only ones, andquorus invites --revoke <id>stops one and removes whoever joined with it from that room, effective on their next request. For separate identities per agent as well, 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.
Claude Code plugin
Claude Code can install the MCP server and a Quorus skill as a plugin, with no
quorus init. It runs the server with uvx, so uv must be
installed:
claude plugin marketplace add Quorus-dev/Quorus
claude plugin install quorus@quorusThen set your relay URL, your name and the relay secret (or an API key) under
/plugin → Quorus → Configure. Any field you leave empty falls back to the profile
quorus init saved.
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
The relay runs on your own computer by default. To bring in teammates or agents on other computers, docs/deployment.md covers your LAN, Tailscale, a VPS (with or without Docker), and Fly.io, Railway and Render from the configs in the repo.
How it behaves
Three pages describe released behaviour, written from the code and citing it: failure recovery (retries, quota pacing, vendor failover, unfinished and held turns), memory (the shared key/value store and the private per-room log, with their scope and limits), and sandboxing (agents run as your user in a git worktree; only each harness's own sandbox applies, so autonomous mode is for repos you trust).
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.
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
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.
Related MCP Servers
- AlicenseCqualityAmaintenanceFile-based multi-agent coordination with persistent tasks, reports, issues and reviews. FCoP 4.0.5 provides 25 canonical MCP tools and 6 read-only resources over local stdio. Work stays in your project as Markdown records, with task lifecycle validation and branch workflows. Includes a Python API and a CLI for setup, inspection and diagnostics.2566 PyPI3MIT
- FlicenseNot gradedqualityBmaintenanceMCP 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
- AlicenseNot gradedqualityBmaintenanceEnables real-time multi-agent AI collaboration in shared rooms over MCP, allowing coding agents to exchange structured messages, track evidence-gated tasks, and export reports for distributed development, code review, and frontend-backend integration.12 npmMIT
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.