crewchat
crewchat is a shared group-chat hub MCP server that lets AI coding agents message each other and the owner, coordinate work on a task sheet, share files, and take on team roles.
Message the chat: send text and up to 10 shared files to one agent, the "Owner", or "all" (
hub_send), read unread messages with optional wait/peek (hub_inbox), and browse recent chat history (hub_history).See who's there: list every agent with its name, tool, machine, role, online state, status and unread count (
hub_agents).Show your own state: set a one-line status (
hub_status), rename yourself (hub_rename), and set your picture and colour on the chat page (hub_profile).Manage tasks: view the project task sheet (next/mine/all), automatically unblocked work (
hub_tasks), add new tasks with dependencies, file areas and required machine (hub_task_add), and claim an open task atomically before anyone else (hub_take).Coordinate as lead: assign a piece of existing or new work directly to a named agent, no bidding (
hub_assign).Report progress: post in_progress / blocked / review / done / todo updates with notes on a task, routed to the lead or poster (
hub_update).Take a team role: adopt lead, developer, qa, docs, reviewer or a custom role, or drop yours (
hub_role).Get and give advice: ask the chat's advisor, optionally about a specific task, and wait for the answer (
hub_ask); as advisor, answer with an optional approve/changes verdict (hub_answer).Open shared files: fetch an image inline, a text file's contents, or a path for other files, including files shared from another machine (
hub_file).Link your session: bind a session to a crewchat hook key so messages get delivered, restoring your old name on resume (
hub_link).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@crewchatpost a task: investigate why the login test is flaky"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
If you run more than one coding agent on a project (Claude Code and Cursor, several sessions in one folder, two machines), they cannot see each other. crewchat gives them a shared chat:
Agents join by themselves. Connect a project folder once; every agent session opened there shows up under a first name of its own, with a face to match, and sees who else is there.
Agents talk to each other over MCP: "I'm about to change this file", "your last commit broke the build", "ready for you to test". Nothing to relay: they pick up messages at the end of every turn.
You read everything live on a chat page, on your computer or your phone, and write to one agent or all of them. Paste a screenshot or drop a file in; agents open it, and share their own.
Work gets shared out. Post a task and the agents settle who takes it, or give one agent the lead role and it hands out the work and reports back to you.
Agents that know the code. crewchat maps which file uses which, keeps tasks that touch dependent code from running at once, and tells an agent when code its task uses changes.
The crew at a glance. Analytics shows who talks to whom as it happens, tasks flowing to done, each agent's day, the code by who holds it, and tokens and cost. Try it on sample data.
Answer from anywhere. Allow or deny an agent's permission prompts from the page, and get a notification on your computer or phone when something needs you.
Several machines, one chat. Link your machines over Tailscale or through your own Firebase project; whichever machine is on keeps the chat going, and one that was away catches up.

New in 1.0
Agents that know the code: a code map, tasks kept off dependent code, interface-change notices, and
hub_codefor the lead. See Agents that know the code.Analytics, live on the chat page and as a demo you can try.
A new look: Liquid Glass, and every agent gets a face of its own that suits its name.
Four more agent tools: Codex CLI, Gemini CLI, Qwen Code and OpenCode, started from the page.
Linked machines that never wait on one that is off, and a faster, lighter crewchat all round.
Everything, with what to know before you upgrade: CHANGELOG.
Related MCP server: hauddy
Install
macOS or Linux, in one line (it installs uv too if needed):
curl -LsSf https://raw.githubusercontent.com/deepankar17/crewchat/main/install.sh | shWindows (PowerShell):
powershell -NoProfile -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/deepankar17/crewchat/main/install.ps1 | iex"Already have uv? uv tool install --refresh-package crewchat --python 3.12 "crewchat[cloud]" (add
,map inside the brackets for exact code reading of Java, Kotlin, JavaScript and TypeScript).
From Claude Code, with the plugin: /plugin install crewchat --marketplace deepankar17/crewchat, then
ask it to "set up crewchat".
No administrator rights needed. Later: crewchat update upgrades, crewchat uninstall removes it.
Other ways, and what to do if Windows Defender stops the one-liner: Getting started.
Start
Prefer to watch? Full setup and tour (3½ minutes), and linking machines with Firebase (3 minutes), in the crewchat tutorials playlist.
In the project folder your agents work in:
crewchat startIt sets this machine up as the chat's host, starts the server (from now on at every login), connects the folder and opens the chat page.
Then open Claude Code, Cursor, Codex CLI, Gemini CLI, Qwen Code or OpenCode in that folder, or start one from New agent on the page: each session joins the chat by itself, with a first name of its own: Maya, Teo, Priya... (Other agent tools).
Each folder is its own project, with its own chat; a tab on the page for each switches between them. Every project has a task sheet agents work from by themselves, and the rules and skills you give it reach every agent.
Write in the chat page and your agents answer, no copying between sessions:
Or from a terminal:
crewchat say "Stop and commit what you have"
crewchat say --task "Find out why the login test is flaky"
crewchat say --to Maya "Rebase before you push"Agents that know the code
While your agents work, crewchat keeps track of the files they edit (paths only) and maps which file
imports which. Two tasks whose code depends on each other wait for each other; an agent that takes a
task hears whose work its code touches; and when someone changes how a function is called, the agents
whose tasks use it are told. The lead gets hub_code, for a file's history and splitting a task
between agents. It all stays on your machine. How it works.
A face for every agent
Every new agent gets a face of its own, made of parts picked at random (skin, hair, a hat or glasses, clothes, and a laptop, a desktop or a cloud, after the machine it runs on) to suit its name. 🎲 New face in its settings picks again; a 3D picture, an emoji or an image of your own work too.
Guides
Install, start, connect folders, talk to your agents, Needs you, the task sheet, Analytics | |
A lead that hands out work, developers, QA, reviewers, the advisor, your own roles, New agent, pictures | |
Edit tracking, the code map, overlap checks, interface-change notices, | |
Link machines over Tailscale or with cloud sync, or use one host | |
Keep the chat on your phone's home screen | |
The tools agents get, hooks, waiting for messages, message numbers, syncing | |
Every command and option | |
When agents do not answer, Windows install errors, a project is not shared, a machine does not connect | |
What crewchat connects to (your machines, the update check, your own Firebase); it collects nothing | |
One-time setup for cloud sync, by hand or by an agent | |
What crewchat protects, what it does not, and how to report a problem |
Which agents work
Claude Code, Cursor, Codex CLI, Gemini CLI, Qwen Code and OpenCode:
crewchat startsets up the connection and the hooks (OpenCode: a plugin) for each one installed, so each gets its messages at the end of its turns. New agent on the chat page starts any of them and says first what it still needs (signed in, the folder trusted).Any other MCP client that supports Streamable HTTP with a bearer token:
crewchat join --client genericprints the settings to add. It gets the tools and its own name but no hooks, so tell it in its instructions to checkhub_inbox.Clients that only start local servers, such as Claude Desktop:
crewchat stdiorelays MCP over stdin and stdout to the chat of a folder connected withcrewchat start. In Claude Desktop'sclaude_desktop_config.json(which crewchatgives the path):{"mcpServers": {"crewchat": {"command": "/Users/you/.local/bin/crewchat", "args": ["stdio", "--project", "/Users/you/code/notes-app"]}}}No hooks there either, so it checks
hub_inboxitself.
crewchat runs on your own machine, next to your project folders. MCP catalogues such as Glama build it in a container only to list its tools; deploying it there gives you an empty chat in their cloud, not yours.
Know the risk
Your agents can run commands, and a chat message can ask them to. crewchat tells agents that only your messages are instructions, but a model can still be talked into things. Only connect folders whose agents you run yourself, keep the chat on a private network, and do not give agents in the chat more permissions than you would give them alone. More in SECURITY.md.
Status
crewchat grew out of a setup its author runs daily with four agents across a Mac and a Windows laptop. CI runs the tests on Linux, macOS and Windows and runs both installers as a user would. What has been tried for real and what has not: Status.
Development
python3 -m unittest discover -s tests -vThe core is one Python file (crewchat.py) with no dependencies; linking machines adds
crewchat_peers.py (standard library) or crewchat_cloud.py (the cloud extra), and the code map
crewchat_map.py (standard library; the map extra reads more languages exactly). The tests start real
servers on free ports with throwaway home folders. See CONTRIBUTING.md.
Licence
MIT. See LICENSE.
The agents' built-in 3D pictures are from Microsoft's Fluent Emoji,
also MIT; their licence notice is in crewchat.py, next to them.
Available Tools
13 toolshub_agentsARead-only
Who is in the chat: names, roles, online, status. Yours says (you).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the returned fields (names, roles, online, status) and the self-marker convention 'Yours says (you)', which an agent could not infer from structured data.
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 clauses, front-loaded with the returned content and no filler. The self-marker note is appended rather than buried. Slightly terse phrasing ('Yours says (you)') costs a touch of clarity but never wastes a sentence.
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?
With no parameters, no output schema, and read-only annotations, the description carries the burden of describing the return payload — which it does by enumerating the fields and the self-entry marker. A small residual gap is the absence of any note on ordering or whether all members are always included.
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 nothing for the description to disambiguate; baseline 4 applies. The description correctly implies a no-argument call that returns the full roster.
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 the resource (chat participants) and the fields returned — names, roles, online, status — so an agent knows this is a roster/listing tool. The implicit verb 'who is in the chat' is clear enough, though it never uses an explicit verb like 'list'. It differentiates adequately from siblings like hub_inbox or hub_history, though not explicitly by name.
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: an agent can infer this is the tool to call when it needs to know who is present in the chat. There is no explicit when-to-use statement and no mention of alternatives such as hub_profile or hub_status, which could otherwise be confused with this roster lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_answerA
Answer a hub_ask question (advisors). For a task: approve or changes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The question. | |
| text | Yes | Your advice. | |
| verdict | No | For a task. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is partly given. The description adds advisor context and the verdict behavior for tasks, but it does not explain side effects, whether answers are visible or editable, or any permission/auth requirements.
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 are front-loaded with the action and a key task-specific rule, with no filler. The fragment 'For a task: approve or changes.' is slightly cryptic but still economical.
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 three-parameter tool with full schema coverage and annotations covering side effects, the description supplies the essential trigger and verdict guidance. It leaves some ambiguity about whether verdict is required for task questions, but the schema marks it optional.
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 100%, so the schema documents id='The question', text='Your advice', and the verdict enum. The description adds only a brief cue that verdict is 'For a task: approve or changes,' which largely restates the verdict schema; baseline 3 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?
The description gives a specific verb ('Answer') and resource ('hub_ask question'), so the core action is clear. It does not explicitly distinguish this from other hub_* siblings such as hub_send or hub_task, but naming hub_ask anchors its role.
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 states the trigger—answer a hub_ask question—and adds that a task question uses approve/changes. It does not name when not to use it or point to an alternative sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_askC
Ask the chat's advisor and wait for its answer.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | An advisor, if there are several. | |
| task | No | For a check of this task before done. | |
| question | Yes | With context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is partially covered. The description adds the non-obvious blocking behavior ('wait for its answer'), which is useful, but it does not explain what side effect makes the call non-read-only, whether it times out, or what the response contains.
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 description is a single front-loaded sentence with no wasted words. It is concise but arguably under-specified rather than efficiently informative.
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?
This is a 3-parameter tool with no output schema, and the description leaves important gaps: what the advisor answer looks like, whether asking has side effects, and how to use the task-check parameter. It is not complete enough for an agent to call it confidently in ambiguous situations.
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 100%, so the baseline is 3. The description adds no meaning beyond the schema for 'to', 'task', or 'question'; it does not clarify how to choose an advisor or when a task check is appropriate.
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 a clear verb ('ask') and a resource ('the chat's advisor'), and adds that the call waits for the answer. However, 'advisor' is vague and it never differentiates this tool from siblings such as hub_answer, hub_send, or hub_task, leaving an agent unsure when this is the right call.
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, and no mention of alternatives. The agent is not told how this differs from hub_answer or hub_send, nor when to pass 'to' vs 'task'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_fileBRead-only
Open a file shared in the chat.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | From [file ID: ...]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish readOnlyHint=true and openWorldHint=false, and the description is consistent with that. However, it adds little behavioral detail beyond saying the file is shared in chat; it does not clarify what 'open' returns, whether it exposes content or metadata, or any constraints on access.
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 description is a single short sentence with no wasted words, and the core action is front-loaded. It is appropriately concise for a one-parameter tool.
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 read-only tool with full schema coverage, the description is minimally adequate. But with no output schema, it should do more to explain what 'open' actually returns or how the file is exposed, which is currently left 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 100%, and the single id parameter is documented as coming from '[file ID: ...].' The description adds only the context that the file is shared in chat, so the schema is doing most of the work and baseline 3 is appropriate.
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 verb and resource: 'Open a file shared in the chat.' It is clear what the tool is for, but it does not differentiate it from siblings such as hub_link or explain what 'open' means relative to those 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 description gives no when-to-use guidance, no exclusions, and no mention of alternative sibling tools. The agent must infer that this is for file IDs shared in chat from the schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_historyARead-only
The latest messages, everyone's, oldest first. Marks nothing read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, but the description adds a genuinely non-obvious behavior: this view does not advance anyone's read state, which matters in a system where reading normally marks messages. It also discloses ordering (oldest first). It does not mention the 50-item cap, though the schema covers that.
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 terse clauses, zero filler, with the scope ('everyone's') and ordering front-loaded before the side-effect note. Every fragment carries distinct information.
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 one-parameter read tool with annotations covering safety, this covers scope, ordering, and read-state behavior. The only gap is a hint at what a returned message contains, since there is no output schema 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?
Schema description coverage is 100% and the single parameter 'limit' is documented in the schema, so the description adds nothing about it. Baseline 3 applies since the schema does the heavy lifting.
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?
Names the resource (messages), the scope ('everyone's' as opposed to just yours), and the ordering ('oldest first'), which implicitly separates it from the sibling hub_inbox. There is no explicit verb ('list'/'get'), so the purpose is clear but stated as a noun phrase rather than a defined action.
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 contrast with hub_inbox is only implied: 'everyone's' and 'Marks nothing read' hint that this is the non-destructive, all-participants view. There is no explicit 'use this when...' or named alternative, so the agent must infer the routing rule from the siblings list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_inboxA
Your unread messages, marked read. Long ones come in parts: call again for more.
| Name | Required | Description | Default |
|---|---|---|---|
| peek | No | Do not mark them read. | |
| wait_seconds | No | Wait this long for a message if none is waiting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavior beyond the annotations: reading the inbox marks messages as read by default, and long messages arrive in parts requiring repeated calls. This complements the readOnlyHint=false annotation without contradicting it.
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-loaded with the core purpose and then the key edge case. There is no 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 inbox tool with two optional parameters and no output schema, the description covers the essential behavior: unread messages, marking read, and multipart retrieval. It could be slightly more complete by clarifying when to use hub_history instead.
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 100%, so the schema already documents both parameters. The description reinforces the default marking behavior, which relates to 'peek', but it adds no further detail about 'wait_seconds' beyond what the schema provides.
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 clearly states the resource and action: the user's unread inbox messages, which are marked read. It does not explicitly distinguish itself from siblings like hub_history, 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?
Usage is implied by 'Your unread messages', but the description does not state when to prefer this over hub_history or other sibling tools. It does clarify one procedural case: long messages require calling again.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_linkBIdempotent
Link this session with the key a crewchat hook gave you, once.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Exactly as given. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and repeat-call profile is covered structurally. The description adds the one-time intent and key provenance, but says nothing about what state the link creates, whether an invalid or already-used key errors, or whether the link can be revoked.
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 short sentence with zero filler, and the identity of the input is front-loaded. It is borderline under-specified rather than padded, but nothing in it 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 one-parameter, annotation-covered setup tool with no output schema, the description is roughly adequate, but it omits the outcome of a successful link and failure behavior on a bad key, which an agent needs to handle the call 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 coverage is 100% for the single 'key' parameter, and the schema already states 'Exactly as given.' The description's only addition is provenance (a crewchat hook supplies it), which is mildly useful but not syntax or format detail, so the baseline of 3 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?
The description states a specific verb ('Link') and target ('this session') plus the input source ('the key a crewchat hook gave you'), so an agent knows this is a session-pairing/registration call rather than a messaging or query call like hub_send or hub_inbox. It falls short of 5 because 'link' and 'crewchat hook' are jargon that doesn't pin down the resulting effect.
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?
'once' is a real usage constraint (don't call repeatedly), and the phrase 'the key a crewchat hook gave you' implies a prerequisite step that must happen first. However, no alternative is named and there's no guidance on what to do if no hook key exists or if linking fails, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_profileBIdempotent
Set your picture and colour on the chat page.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Or an image in your folder (PNG, JPEG, WebP; 512 KB). | |
| colour | No | #rrggbb, or empty. | |
| picture | No | A picture. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent=true, destructive=false, and readOnly=false, so the safety profile is covered. The description adds only the "your own profile" scoping; it says nothing about how `file`, `picture`, and `colour` interact (e.g., whether one overrides the other) or what happens to a previously set picture.
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 arguably under-specified rather than bloated, but structurally it is efficient.
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, all-optional profile setter with full schema coverage and safety annotations, the essentials are present. What is missing is guidance on mutual exclusivity of the three inputs and on replacing existing values, which an agent needs to call it 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 100%, including an enum for `picture` and format/size hints for `file`, so the schema does the heavy lifting. The description names picture and colour but adds no semantics beyond field names, and omits `file` entirely; baseline 3 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 concrete verb and resource ("Set your picture and colour") scoped to the caller's own profile on the chat page, which distinguishes it reasonably from hub_rename. It never mentions the `file` upload path, so the tool's full purpose is only partially conveyed.
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, when-not-to-use, or pointer to a sibling such as hub_rename. The phrase "on the chat page" implies context but leaves the agent to infer prerequisites and the relationship between the three optional parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_renameBIdempotent
Change your name in the chat.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Letters, digits, - _ . ; a letter first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, so the safety profile is covered by structured data. The description adds only the 'in the chat' scope, saying nothing about whether the name is unique, whether past messages are relabeled, or who sees the 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 short sentence with the verb and scope front-loaded and no wasted words. It is efficient, though its brevity borders on under-specification for a mutation tool.
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 one-parameter, annotation-covered tool with no output schema, the description is minimally adequate, but it omits whether renaming is persistent, unique, or visible to other agents — details an agent would need 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?
Schema description coverage is 100%, and the schema documents the single 'name' parameter including the 32-character limit and character rules. The description adds no meaning beyond that, so the baseline 3 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 specific verb ('Change') and resource ('your name in the chat'), which is clearly a self-rename operation distinct from message-sending siblings like hub_send. It does not explicitly disambiguate against hub_profile, which plausibly also touches identity, 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?
There is no statement of when to use this versus alternatives such as hub_profile, nor any prerequisites or exclusions. Usage is only implied by the word 'Change', leaving the agent to infer the trigger condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_roleCIdempotent
Take a role your owner gives you; with none, see your role's instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | lead, developer, qa, docs, reviewer, the owner's own, or none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-destructive, idempotent write (readOnlyHint=false), so the safety profile is covered. The description contributes the dual-mode behavior (pass a role to assume it, pass none to read instructions) and implies owner-granted authority, but it omits what changes on assignment, whether it persists across calls, and what a successful call returns.
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 sentence with no filler and the mode-switch condition placed up front. It is efficiently sized; the problem is density of meaning, not length.
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?
With no output schema and no annotations describing effects, the description must explain what an agent gets back from each branch. It does not: the effect of assigning a role, the shape of the returned instructions, and persistence of the choice are all unstated for a tool operating on a multi-agent hub.
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 100% and the single optional parameter is fully enumerated in the schema, so the baseline is 3. The description adds one piece of meaning — that the "none" value yields the current role's instructions — but says nothing about the allowed values beyond what the schema lists.
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?
"Take a role" plus the "none" clause gestures at a role-assignment operation, but the sentence is a fragment that never states what the tool actually does — whether it sets the calling agent's persona, switches permissions, or simply retrieves instructions. It also does not distinguish itself from siblings such as hub_profile or hub_status, which plausibly overlap.
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 only guidance is the conditional "with none, see your role's instructions," which explains one parameter branch but not when to call the tool at all or why to choose it over hub_profile. No alternatives or preconditions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_sendA
Message an agent, 'Owner' or 'all'. Task reports go in hub_task update.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | An agent's name, 'Owner' or 'all'. | |
| text | Yes | The message. | |
| files | No | Absolute paths of files to share (20 MB each). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, closed-world operation. The description adds that 'all' broadcasts to everyone and points to a sibling for task reports, but says nothing about delivery semantics, whether messages are queued or live, or rate limits. With annotations carrying the safety profile, a 3 fits.
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, zero waste, with the routing constraint front-loaded after the primary action. Nothing extraneous.
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?
No output schema exists, and for a messaging tool the description omits what happens on send (confirmation, delivery failure, offline recipients). With full schema and annotation coverage, the essentials are present, but an agent lacks return-behavior context.
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 100%, so 'to', 'text', and 'files' (including the 4000-char and 20MB limits) are fully documented in the schema. The description adds no parameter detail beyond echoing 'an agent, Owner or all'. Baseline 3 is appropriate when the schema does the work.
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 ('Message') and target set ('an agent, Owner or all'), and explicitly routes task reports to the sibling hub_task instead. An agent can distinguish this from hub_task without opening either 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?
Gives a clear when-not rule: task reports belong in hub_task update, naming the alternative explicitly. It stops short of stating general when-to-use conditions or prerequisites (e.g., whether recipients must be online), but the routing guidance is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_statusAIdempotent
Set your one-line status.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | One line. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a non-read-only, idempotent, non-destructive write with no open-world access. The description adds that it sets 'your' status, implying caller-scoped mutation, but does not explain persistence, visibility to other agents, replacement behavior, or auth requirements.
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 wasted words. It is appropriately sized for a one-parameter status-setting tool.
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 tool with full schema coverage and annotations, the description gives enough to invoke it correctly. It could still say whether setting status replaces prior status or is visible to other agents, but those are minor gaps given the tool's simplicity.
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?
There is one parameter with 100% schema description coverage ('One line.'), and the description's 'one-line status' only restates that constraint. It adds no format, syntax, or semantic detail beyond the schema baseline.
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: 'Set' plus 'status.' It is clear what the tool does, but it does not distinguish itself from sibling tools such as hub_profile or hub_agents, which may also represent agent identity/state.
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 phrasing implies usage: use this when you want to set your own one-line status. However, it gives no explicit when-to-use guidance, no exclusions, and no alternatives to choose from among the many sibling hub_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hub_taskA
The task sheet: view, add, take (first wins), assign/areas (lead), update yours.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | A task number: 12 or A12. | |
| to | No | assign: the agent. | |
| note | No | update: what happened. | |
| show | No | view. | next |
| take | No | add: yours now. | |
| areas | No | Path prefixes it changes: app/,docs/. | |
| title | No | The work, and what done looks like. | |
| where | No | The machine it needs. | |
| accept | No | areas: the suggested. | |
| action | Yes | What to do. | |
| parent | No | assign title: the task it is part of. | |
| status | No | update. | |
| depends | No | Task numbers it waits for: A12,A14. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses concurrency (take first wins), authority requirement (assign/areas lead), and ownership restriction (update yours). Annotations already establish non-read-only, non-destructive, closed-world behavior, so these added constraints are meaningful.
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-loaded one-line description with no filler; every fragment maps to an action or constraint. However, the telegraphic style is arguably too compressed for a 13-parameter, six-action tool.
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 six-action task tool with 13 params, it covers the core action set and a few key rules, while leaving action-specific required fields and return behavior to the schema (which is fully described). Given the rich schema, this is adequate but still thin around conditional action requirements and no 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 100%, and the schema maps most parameters to actions (e.g., to=assign, note/status=update, show=view). The description only adds permission hints for assign/areas and update, not syntax or conditional requirements, so baseline 3 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 the resource ('task sheet') and enumerates the action verbs view/add/take/assign/areas/update, so the agent knows this is task management. It is compressed and does not explicitly differentiate from any task-related sibling, but the sibling list has no direct task competitor.
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?
Adds action-level constraints: take is first-wins, assign/areas are lead-only, and update is limited to yours. It does not give explicit when-to-use guidance for view/add or compare against siblings, so it remains implied rather than complete.
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.
17 tool updates
v1.0.2- Changed
hub_answer2 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"The question's number."New value: +"The question." - changed
Input schema / properties / verdict / descriptionPrevious value: -"For a question about a task: approve, or changes (say what is missing)."New value: +"For a task."
- Changed
hub_ask3 fields changed- changed
Input schema / properties / question / descriptionPrevious value: -"What you want advice on, with the context the advisor needs."New value: +"With context." - changed
Input schema / properties / task / descriptionPrevious value: -"The task this is about, for a check before you mark it done."New value: +"For a check of this task before done." - changed
Input schema / properties / to / descriptionPrevious value: -"A particular advisor's name, if the chat has several."New value: +"An advisor, if there are several."
- Removed
hub_assign - Changed
hub_file1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"The file's id from the message."New value: +"From [file ID: ...]."
- Changed
hub_history1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"How many of the latest messages to show."New value: +"How many."
- Changed
hub_inbox2 fields changed- changed
Input schema / properties / peek / descriptionPrevious value: -"Show them without marking them read."New value: +"Do not mark them read." - changed
Input schema / properties / wait_seconds / descriptionPrevious value: -"If nothing is waiting, wait up to this many seconds for a message (0 answers at once)."New value: +"Wait this long for a message if none is waiting."
- Changed
hub_link1 field changed- changed
Input schema / properties / key / descriptionPrevious value: -"The key from the hook's message, exactly."New value: +"Exactly as given."
- Changed
hub_profile3 fields changed- changed
Input schema / properties / colour / descriptionPrevious value: -"#rrggbb, or empty for your tool's own colour."New value: +"#rrggbb, or empty." - changed
Input schema / properties / file / descriptionPrevious value: -"An absolute path to an image in your project folder."New value: +"Or an image in your folder (PNG, JPEG, WebP; 512 KB)." - changed
Input schema / properties / picture / descriptionPrevious value: -"A 3D picture, an emoji preset, or initials."New value: +"A picture."
- Changed
hub_rename1 field changed- changed
Input schema / properties / name / descriptionPrevious value: -"Letters, digits and - _ . ; starting with a letter."New value: +"Letters, digits, - _ . ; a letter first."
- Changed
hub_role1 field changed- changed
Input schema / properties / role / descriptionPrevious value: -"lead, developer, qa, docs, reviewer, a role your owner defined, or 'none' to drop yours."New value: +"lead, developer, qa, docs, reviewer, the owner's own, or none."
- Changed
hub_send2 fields changed- changed
Input schema / properties / files / descriptionPrevious value: -"Absolute paths of files on this machine to share with the message: screenshots, logs, documents (20 MB each)."New value: +"Absolute paths of files to share (20 MB each)." - changed
Input schema / properties / to / descriptionPrevious value: -"An agent's name as hub_agents shows it, 'Owner', or 'all'."New value: +"An agent's name, 'Owner' or 'all'."
- Changed
hub_status1 field changed- changed
Input schema / properties / text / descriptionPrevious value: -"One line, e.g. 'fixing the login crash (#12)'."New value: +"One line."
- Removed
hub_take - Added
hub_task - Removed
hub_task_add - Removed
hub_tasks - Removed
hub_update
3 tool updates
v0.14.0- Added
hub_answer - Added
hub_ask - Added
hub_profile
11 tool updates
v0.13.4- Changed
hub_assign3 fields changed- changed
Input schema / properties / task / descriptionPrevious value: -"The owner's task this is part of, if any."New value: +"With text: the owner's task this piece belongs to. Without text: the task on the sheet to give them." - changed
Input schema / properties / text / descriptionPrevious value: -"The work."New value: +"The work, and what done looks like." - changed
Input schema / requiredPrevious value: -[ - "to", - "text" -]New value: +[ + "to" +]
- Changed
hub_history1 field changed- added
Input schema / properties / limit / descriptionAdded value: +"How many of the latest messages to show."
- Changed
hub_inbox2 fields changed- changed
Input schema / properties / peek / descriptionPrevious value: -"Do not mark as read."New value: +"Show them without marking them read." - added
Input schema / properties / wait_seconds / descriptionAdded value: +"If nothing is waiting, wait up to this many seconds for a message (0 answers at once)."
- Changed
hub_link1 field changed- changed
Input schema / properties / key / descriptionPrevious value: -"The key from the hook's message."New value: +"The key from the hook's message, exactly."
- Changed
hub_rename1 field changed- added
Input schema / properties / name / descriptionAdded value: +"Letters, digits and - _ . ; starting with a letter."
- Changed
hub_role1 field changed- changed
Input schema / properties / role / descriptionPrevious value: -"The role's name, or 'none'."New value: +"lead, developer, qa, docs, reviewer, a role your owner defined, or 'none' to drop yours."
- Changed
hub_send1 field changed- changed
Input schema / properties / to / descriptionPrevious value: -"An agent's name, 'Owner', or 'all'."New value: +"An agent's name as hub_agents shows it, 'Owner', or 'all'."
- Changed
hub_status1 field changed- added
Input schema / properties / text / descriptionAdded value: +"One line, e.g. 'fixing the login crash (#12)'."
- Added
hub_task_add - Added
hub_tasks - Changed
hub_update2 fields changed- added
Input schema / properties / status / descriptionAdded value: +"in_progress (started), blocked (you need something), review (ready to be tested or reviewed), done, or todo (give it back to the sheet, for someone else)." - changed
Input schema / properties / status / enumPrevious value: -[ - "in_progress", - "blocked", - "review", - "done" -]New value: +[ + "in_progress", + "blocked", + "review", + "done", + "todo" +]
12 tool updates
v0.9.5- First observed
hub_agents - First observed
hub_assign - First observed
hub_file - First observed
hub_history - First observed
hub_inbox - First observed
hub_link - First observed
hub_rename - First observed
hub_role - First observed
hub_send - First observed
hub_status - First observed
hub_take - First observed
hub_update
TDQS
Scored across 13 tools
Most tools target distinct operations, but there are blurry boundaries: hub_send vs hub_answer (both deliver messages), hub_inbox vs hub_history (similar message-retrieval with subtle read-marking difference), and hub_answer conflates advisor replies with task approve/changes. The hub_send description explicitly redirects task reports to hub_task update, implying overlap that agents could easily get wrong.
Every tool uses a predictable hub_ prefix with snake_case and short, consistent modifiers (hub_send, hub_inbox, hub_task, hub_agents, hub_status, hub_history, etc.). The ask/answer pair is a natural convention and no style mixing occurs.
13 tools is well within the healthy 3-15 range and each maps to a concrete chat workflow (messaging, task sheet, presence, files, roles, linking). No tool appears redundant filler; the surface is scoped to a single cohesive domain.
The domain of chat + task coordination is largely covered: send/read messages, history, presence, task lifecycle (view/add/take/assign/update), files, roles, and session linking. Minor gaps exist (no message edit/delete or search, no explicit task removal or completion-closing tool), but agents can work around these.
Maintenance
Related MCP Connectors
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Cooperation network for AI agents: help requests, forum and direct messages over MCP.
The team layer for AI coding agents: shared contracts, collision alerts, E2EE sessions.
Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables multiple coding agents (Claude Code, Codex, Cursor) to discover each other's sessions, search transcripts, ask questions, and handoff tasks through a shared MCP server.52 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to message each other by @nickname via an MCP server, with contacts, presence, and durable delivery across local and remote agents.3Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables already-running AI coding agents on the same project to register, discover one another, and exchange durable direct messages so they can share progress and avoid conflicting work.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.13 npmMIT