board-mcp
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., "@board-mcpclaim files src/api.ts and src/db.ts"
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.
MCP 智能体邮箱
面向本地 AI 智能体的协作邮箱:定向发信、状态回执、共享公告和文件认领。
由早期项目 board-mcp(公告板)演进而来,0.2.0 起本项目主线是智能体邮箱:
在共享公告之外增加点对点消息与状态回执。为避免已有安装失联,客户端注册键 board-mcp
和数据目录 ~/.board-mcp/ 保持不变(见文末"改名与兼容")。
多终端 AI 协作邮箱 MCP 服务器。让并行工作的 Claude Code / Codex / OpenCode / Trae 既能在撞车前协调好"谁在改哪个文件",也能把"这件事只交给某个终端"直接送进它的收件箱。
安装(只注册 MCP 工具)
要求:Python 3.10+、uv,以及至少一个目标终端。
git clone https://github.com/maoxiangzhe/mcp-agent-mailbox.git
cd mcp-agent-mailbox
uv run python install.py # 自动建 .venv + 装依赖 + 检测已装 CLI 并注册
uv run python install.py --target all # 注册到全部 4 个终端
uv run python install.py --target codex # 只注册 Codex(可逗号分隔多个)
uv run python install.py --dry-run # 演练:只看不改
uv run python install.py --check # 检查注册状态uv run 会自动创建 .venv、按 uv.lock 装依赖(唯一依赖 mcp SDK),
并用 .venv 里的 Python 注册服务器——不污染系统 Python。
终端 | MCP 注册位置 |
Claude Code |
|
Codex |
|
OpenCode |
|
Trae |
|
装完重启对应终端会话,即可使用 10 个工具(前 7 个是广播,后 3 个是点对点):
get_board / claim_files / report_done / check_conflict / release_claim
/ post_decision / init_bulletin / send_note / read_notes / ack_notes。
已经在跑的会话不会自动多出这 3 个工具:MCP 的工具列表只在建立连接时拉取一次。 让该会话的邮箱服务进程重启一次即可(客户端默认开启重连,重连后会重新同步工具列表), 或在页面/终端里重开会话。
幂等可重复执行,改动前自动备份到
%TEMP%\board_install_backup\--project只影响 Claude 的注册范围,其余终端按用户级安装
Related MCP server: agent-locks
协作规则
每个项目第一次使用时调用 init_bulletin 初始化共享公告(邮箱的广播区),之后按流程走:
开工 get_board → 认领 claim_files → 干活 → 收尾 report_done。
项目根目录的 AGENTS.md / CLAUDE.md 会自动注入协作纪律(见 template.md)。
定向消息(收件箱)
共享公告解决"所有人看见同一条约定",但解决不了"这条是给我的"。所以另有一组点对点工具:
工具 | 作用 |
| 只发给指定终端( |
| 读收件箱 / 看自己发出的消息被谁回了执 |
| 回执; |
看板取信,不是主动推送:
get_board(agent='你的代号')看板时会把发给你的未读消息贴在最前面, 每次最多取最早 50 条,并只标记实际返回的消息送达;剩余消息留到下一次。 空闲会话不会因此自动唤醒,接收者必须调用看板或收件箱。不传
agent时get_board行为与从前完全一致,老用法不受影响。消息数据独立于公告文件,不会把共享公告撑大;消息不自动删除。收件箱未读优先从最早分页, 无未读时显示最近历史;
limit上限 200。发送方发件箱显示最新历史。分工:全体约定 →
post_decision(进共享公告);点对点一件事 →send_note(进收件箱)。
消息重试、回执和异常数据
request_id为可选发送重试标识。同一发送者使用同一标识发送相同收件人、任务和正文, 返回原消息序号;标识相同但内容不同则拒绝。旧调用不传标识仍可使用。超过 4000 字的正文明确拒绝,不截断。长说明应引用项目文档。
回执状态为
received(已收到,默认)、processing(处理中)、completed(已完成)、blocked(受阻);result可写结果说明,发件箱可见时间和说明。 已完成消息不能退回其他状态,更新已有回执须显式填写ids。acked字段保留以兼容旧数据;旧回执展示为“已收到”,不据此认定任务完成。peek=True只看不推进消息游标;严格只读看板不传agent。消息坏 JSON、缺少必需字段、重复序号或游标损坏时停止读写,并报告文件及行号 (游标为整个 JSON 文件),不会打印坏行内容或自动重写原文件。
文件冲突判断统一分隔符、相对/绝对路径和点段;Windows 下不区分大小写。 路径按服务器当前工作目录进行词法规范化,不要求文件存在、不解析符号链接。 不同工作副本仍建议统一使用项目相对路径。
数据存放
共享公告实体:
~/.board-mcp/boards/<项目ID>.md(所有终端共享同一份)定向消息:
~/.board-mcp/notes/<项目ID>.jsonl(一行一条 JSON)<项目ID>.cursors.json(每个终端的未读游标)
日志:
~/.board-mcp/logs/server.log;心跳:~/.board-mcp/run/可调环境变量:
BOARD_MCP_ROOT(数据目录)、BOARD_MCP_PROJECT(强制项目身份)、BOARD_CLAIM_TTL_MINUTES(认领过期,默认 120 分钟)
结构
mcp-agent-mailbox/
├── server.py # MCP 服务器(共享公告 + 收件箱引擎)
├── install.py # 多终端 MCP 注册安装器
├── test_demo.py # 基础自测(12 项断言,CI 自动跑)
├── test_upgrade.py # 升级/兼容回归(旧数据、游标、路径)
├── template.md # 注入项目的协作规则模板
├── AGENTS.md # AI 协作纪律(本目录)
├── CLAUDE.md # Claude Code 规则副本
├── CONTRIBUTING.md # 贡献指南
├── SECURITY.md # 安全边界与适用范围
├── RELEASE_CHECKLIST.md# 发布前检查
├── CHANGELOG.md # 更新记录
├── LICENSE # MIT(保留原作者版权)
├── pyproject.toml # 项目元数据 + 依赖声明(mcp SDK)
├── uv.lock # 依赖锁(uv sync 精确还原环境)
└── .gitignore # 忽略 .venv / __pycache__ / 备份安全与适用范围
这是本地、可信协作者之间的邮箱,不是电子邮件服务,不提供互联网消息推送或收件人身份认证。收件人名称用于路由,不能作为保密权限。不要发送密码、Cookie、Token、个人敏感信息。
消息仍需接收者主动调用工具取信;回执“已完成”是协作者报告,不替代测试或验收。claim_files 是协作约束,不能阻止其他程序直接修改源码。
开发与验证
uv sync --locked
uv run python -B test_demo.py
uv run python -B test_upgrade.py测试使用隔离临时数据目录,不写真实公告或消息。支持 Windows / Linux 的文件锁;macOS 尚未实际验证。持续集成结果以 GitHub Actions 实际运行结果为准。
开源与发布
MIT 许可证,保留原作者版权声明。参与贡献请阅读 CONTRIBUTING.md,安全边界见 SECURITY.md。发布前检查 RELEASE_CHECKLIST.md。
改名与兼容
展示名称由「MCP 公告板」改为「MCP 智能体邮箱」,发布标识由 board-mcp 改为
mcp-agent-mailbox。为不打断已有安装,以下标识故意保持不变:
客户端注册键:Claude Code 的
board、Codex 的[mcp_servers.board-mcp]、OpenCode / Trae 的board数据目录:
~/.board-mcp/(公告、消息、游标都在里面,不迁移)环境变量:
BOARD_MCP_ROOT/BOARD_MCP_PROJECT/BOARD_CLAIM_TTL_MINUTES工具名与参数:
get_board、init_bulletin等全部沿用,旧调用不受影响
改的只是展示名称和文档表述,不是协议与路径。此项目不包含用户的公告、消息、游标、客户端配置或运行日志。
Available Tools
10 toolsack_notesA
记录回执状态;空 ids 只确认本 agent 已送达且未回执的消息。
status: received / processing / completed / blocked;已完成不能退回其他状态。 更新已有回执必须显式指定 ids;received 不代表任务完成。
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| agent | Yes | ||
| result | No | ||
| status | No | received | |
| project | 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 provided, the description carries the full behavioral burden and meets it well. It discloses the empty-ids special case, the allowed status values, the irreversible transition from completed, and the semantic warning that received does not mean task completion.
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 compact and front-loaded with the main purpose. Every clause earns its place: purpose, empty-ids rule, status enumeration, state constraint, and update requirement. There is no redundant text.
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?
Despite a rich behavioral summary, the description is incomplete for a 5-parameter tool with zero schema coverage and no annotations. It does not explain the required agent field, what result should contain, or how project is used. The output schema mitigates return-value ambiguity but not the input ambiguity.
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 by explaining parameter meanings. It covers status and partly ids, but the required agent parameter and the result/project parameters receive no explanation. An agent cannot confidently fill all fields from the description alone.
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 opening phrase '记录回执状态' clearly identifies a specific verb and resource: recording acknowledgment/receipt statuses. The description further distinguishes this from siblings like send_note and read_notes by focusing on ack state transitions rather than sending or reading messages.
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 concrete usage conditions: empty ids means acknowledging only undelivered/unacked messages for the current agent, while updating existing acknowledgments requires explicit ids. It does not explicitly name alternatives, but the conditions are clear enough to guide when to call this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_conflictA
查冲突:开工前或收尾前调用,确认这些文件没有被别人占用。 files 用逗号分隔。返回冲突清单;没有冲突会明说"没有冲突"。 过期认领(超 TTL 已自动释放)不算冲突,但会提示原属终端。
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | ||
| files | Yes | ||
| project | 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 available, the description carries the behavioral burden. It discloses the return behavior (conflict list or explicit '没有冲突') and an important edge case: expired claims are not conflicts but trigger a hint about the original terminal. An explicit statement that the tool is read-only would make it fully transparent.
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?
Four compact sentences cover purpose, timing, input format, output behavior, and an edge case, with no filler. The key action is front-loaded.
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 description covers when to use the tool, how to format files, what output to expect, and how expired claims are handled; an output schema also exists. The only residual gap is the unstated semantics of the optional agent/project parameters.
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 provides the required format for the 'files' parameter ('用逗号分隔'), which is valuable, but it leaves the optional 'agent' and 'project' parameters 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?
The description opens with '查冲突' and immediately clarifies the resource ('files') and the purpose ('确认这些文件没有被别人占用'). It clearly distinguishes the tool as a check operation relative to the sibling claim/release tools.
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 explicitly states when to call the tool: '开工前或收尾前调用'. It does not name alternatives or give exclusion conditions, but the timing guidance provides a clear selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_filesA
认领:声明"我是谁、我在做什么、我要动哪些文件"。 files 用逗号分隔,例如:src/auth/login.py, src/auth/schemas.py 如果这些文件和别的终端的占用中认领重叠,会被直接拒绝,并告诉你撞了谁。 同 agent 重复认领 = 续期:与本次文件重叠的旧声明作废、TTL 重新计时; 不重叠的认领保留(同 agent 可同时持有多个文件组的认领)。
参数: agent 你的名字/代号(比如 T1、coder-1) task 一句话说明任务 files 要动的文件或目录,逗号分隔
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| agent | Yes | ||
| files | Yes | ||
| project | 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 provided, the description carries the full burden. It discloses important behavioral traits: overlapping claims are rejected with the conflicting party named, repeated claims renew the TTL, and non-overlapping claims are retained. It does not mention TTL duration or explicit release requirements, but the core state-changing behavior is well covered.
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 front-loaded with the purpose, then explains conflict/renewal behavior, and ends with a compact parameter list. Every sentence adds useful information without redundancy or filler.
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?
Given there are no annotations and there is meaningful behavioral complexity, the description is largely complete: it covers claiming semantics, conflict rejection, renewal, TTL reset, and file format. Minor gaps include the undocumented optional project parameter and the lack of explicit guidance to use release_claim when done, but these are not critical for invoking 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%, so the description must compensate. It provides meaningful descriptions for agent, task, and files, including a comma-separated format example. The optional project parameter is not explained, which prevents a perfect score.
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 defines claim_files as a declaration of identity, task, and target files: '声明我是谁、我在做什么、我要动哪些文件'. This distinguishes it from sibling tools like release_claim and check_conflict by specifying the claim operation and its resource (files).
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 clear context for when this tool is used: to claim files before working on them, with conflict rejection if other terminals already hold overlapping claims. It also explains renewal behavior for repeated claims by the same agent. It does not explicitly name alternatives or say when not to use it, but the usage context is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_boardA
看板:读取本项目的共享公告全文(认领区 + 共享决策 + 最新变更)。 开工前必看。返回的就是那个 Markdown 文件的内容。
参数 agent(可选,建议填):填上你的代号后,本工具会把"发给你的未读定向消息" 贴在最前面,并把它们标记为已送达(下次不再重复出现)。别人用 send_note 派给你的活, 就是靠这里收到的。不填 agent = 老行为,完全不碰消息。
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | ||
| project | 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. It discloses that filling the agent parameter will prepend unread directed messages and mark them as delivered (a side effect), and explains the behavior when not filled. It also states it returns the Markdown file content. This is transparent about the conditional behavior, which is critical for a tool with an optional side-effect parameter.
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 concise paragraph that front-loads the purpose and then explains the optional parameter. Each sentence adds value, and it avoids fluff. It's appropriately sized for a tool with two optional 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?
The description is complete for the main function, and the presence of an output schema likely covers the return format. However, the project parameter is left unexplained, which is a gap given the schema has no description. It also doesn't mention error conditions, but for a read operation with optional parameters, this may be acceptable. The missing project parameter explanation prevents a higher score.
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 description thoroughly explains the agent parameter, including its purpose and side effects. However, it does not mention the project parameter at all, despite schema coverage being 0%. Since there are two parameters and only one is explained, the description only partially compensates for the schema's lack of descriptions.
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 tool reads the project's shared announcements (kanban) and returns the Markdown file content, listing the specific sections (claim area, shared decisions, latest changes). This is a specific verb-resource pair that distinguishes it from siblings like send_note or read_notes, making its purpose 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?
It explicitly says '开工前必看' (must read before starting work), providing a clear context for when to use it. It also explains that tasks sent via send_note are received here, which guides the agent to use this tool to check for assigned work. However, it does not explicitly state when not to use it or compare with alternatives like read_notes, though the context implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
init_bulletinA
初始化:每个终端接入邮箱时第一个调用。 做两件事: 1. 在当前目录生成必读文件 AGENTS.md(AI 每次对话都会自动读到它, 里面写着协作纪律,等于给 AI 装上"开工前先看板"的规矩); 2. 创建本项目的共享公告文件(如果还没有)。 幂等:必读文件和共享公告已存在时不会覆盖,所以可以放心反复调用。
参数: project 项目名,不传就自动识别(git remote -> 标记文件 -> 文件夹名) include_claude 设为 True 时额外生成 CLAUDE.md(给 Claude Code 用)
非 git 目录下会自动生成 .board-project 标记文件(内容 = 项目名), 文件夹从此绑定固定项目身份:以后从任何副本/目录进入都解析到同一块板。
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| include_claude | 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 does well: it discloses idempotency, no-overwrite behavior, automatic detection order for project, and the side effect of creating a .board-project marker in non-git directories plus persistent project binding.
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 organized into clear sections and front-loads the initialization purpose. The only slight excess is the metaphor about installing a pre-work board for the AI, which adds flavor rather than actionable detail.
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?
Given the output schema exists and both parameters are optional, the description covers the necessary behaviors: file creation, idempotency, project detection, and the non-git marker side effect. Nothing required to invoke the tool correctly is 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%, so the description must compensate, and it fully does. It explains that project is optional with a fallback detection chain (git remote, marker file, folder name), and that include_claude adds a CLAUDE.md for Claude Code.
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 opens by naming the tool role (initialization, first call on each terminal) and specifies the two concrete artifacts it creates: AGENTS.md and a shared announcement file. This clearly distinguishes init_bulletin from the operational sibling tools like send_note or get_board.
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 an explicit trigger (first call when a terminal connects to the mailbox) and explicitly reassures repeated use because the operation is idempotent. It does not name excluded cases or compare with alternatives, but none of the sibling tools overlap with this setup role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_decisionA
写决策:往共享决策区追加一条约定,所有终端 get_board 时都能读到。 用于定协议、记方案取舍、留踩坑结论——凡是"需要别人看见并遵守"的内容。
共享决策区的内容会被保留和累积,不随认领表滚动清理; 追加时带上 agent 和时间戳,方便追溯是谁、在什么时候定的。
参数: agent 你的名字/代号(要和认领时一致) decision 决策内容,一句话讲清楚"定了什么、为什么"
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| project | No | ||
| decision | 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 disclosure burden. It explicitly discloses persistence ('会被保留和累积,不随认领表滚动清理'), visibility via get_board, and traceability via agent/timestamp. These go beyond the schema; only minor operational details like duplicate/overwrite behavior are 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?
The description is front-loaded with purpose, then retention behavior, then parameter guidance, with bullet-style parameter lines. It is not padded and each section adds value. Minor redundancy with the schema list is acceptable because it adds usage guidance.
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 append tool, the core behavior and the two required parameters are well covered, and output schema exists so return details needn't be described. However, the project parameter is entirely undocumented both in schema and description, and no explicit 'when not to use' boundary is given. This leaves a small but real gap.
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 document parameters. It explains agent ('要和认领时一致') and decision format ('一句话讲清楚定了什么、为什么'), but says nothing about the optional project parameter. Since one of three parameters remains undefined, compensation is incomplete.
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?
Description opens with '写决策:往共享决策区追加一条约定' and states visibility via get_board. It lists concrete use cases (定协议、记方案取舍、留踩坑结论), which distinguishes it from sibling note/claim tools. This is a specific verb+resource with clear 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 description says '用于定协议、记方案取舍、留踩坑结论——凡是"需要别人看见并遵守"的内容', giving clear context. It does not explicitly name alternatives like send_note or state when not to use it, but the category '需要别人看见并遵守' implies the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_notesA
收件箱/发件箱:读定向消息。
参数: agent 你的代号 box 'inbox'(默认)= 别人发给我的;'outbox' = 我发出的(带谁回了执) limit 未读优先按最早顺序分页;无未读时返回最近历史(默认 50,上限 200) peek 仅 inbox 有效:True = 只看不推进未读游标(消息仍算未读)
get_board(agent=...) 也会自动贴出未读消息并标记送达; 本工具用于回看历史、确认没漏读、检查自己发出的消息有没有被回执。
| Name | Required | Description | Default |
|---|---|---|---|
| box | No | inbox | |
| peek | No | ||
| agent | Yes | ||
| limit | No | ||
| project | 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 behavioral burden. It discloses unread-cursor semantics via peek, pagination behavior via limit, and inbox/outbox content differences. However, it does not explicitly state the side effect of a normal (non-peek) read beyond implying the cursor advances.
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 compact, front-loaded with the core purpose, and organizes parameter details in a scannable list. Every line adds useful information without repetition.
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 description covers most operational behavior and parameter semantics, and an output schema exists to describe return values. The main missing piece is the project parameter, which prevents full completeness for a 5-parameter tool with minimal schema descriptions.
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%, so the description must explain parameters. It explains agent, box, limit, and peek with meaningful detail. The project parameter is left undocumented, leaving one gap in an otherwise strong parameter explanation.
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 opens with a clear verb and resource: read directed messages in inbox/outbox. It distinguishes itself from get_board, which auto-displays unread messages and marks them delivered, making the tool's role 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?
The description explicitly states when to use this tool instead of get_board: for reviewing history, confirming no missed messages, and checking receipts on sent messages. This gives an agent concrete routing guidance among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_claimA
取消认领:把某个终端的所有占用中认领标记为"已取消",释放文件。 用在:任务取消了、终端掉线了、认领卡住没人动。 注意:只能取消占用中的认领;已汇报/已取消的不受影响。 认领已过期(超 TTL 自动释放)时无需再取消,工具会提示。
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| project | 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. It discloses the mutation effect (marks claims cancelled, releases files), the restriction to in-progress claims only, and TTL-related expiration behavior. It does not mention permissions or permanence, but the key operational boundaries are well covered.
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 four short sentences, each serving a distinct purpose: main action, use cases, constraint, and TTL edge case. It is front-loaded with the core behavior and contains no filler or redundant restatement.
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?
Given that an output schema exists, the description does not need to explain return values. It adequately covers the operation, when to use it, and the main edge cases. The primary gap is explicit parameter semantics, but overall an agent can infer the correct invocation context from the operational description.
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 needed to compensate for the bare input schema. It only loosely refers to '某个终端' (a terminal), which maps weakly to the agent parameter, and it never explains the optional project parameter or how the parameters relate to the cancellation scope. This is insufficient given the complete lack of schema field descriptions.
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 opens with the specific action '取消认领' and states that it marks all in-progress claims for a terminal as cancelled and releases files. This is a concrete verb+resource+scope statement that clearly differentiates the tool from siblings like claim_files and report_done.
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 explicitly lists when to use the tool: task cancelled, terminal offline, or claim stuck. It also provides negative guidance: reported/cancelled claims are unaffected, and expired claims do not need cancellation because the tool will prompt. However, it does not explicitly name alternative sibling tools or contrast them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_doneA
汇报:干完了。做三件事: 1. 把自己的占用中认领标记为"已汇报"(释放文件); 2. 在"最新变更"里写一条流水(最多保留 MAX_HISTORY 条,旧的自动剪掉); 3. 自动检查这次改动有没有和别人撞车(如果撞了会提醒,不拦截)。 如果自己的认领已超 TTL 过期,会提示先重新 claim_files 再汇报。
参数: agent 你的名字/代号(要和认领时一致) summary 干了什么、结果如何 files 这次实际改动的文件,逗号分隔(建议填,用于自动查冲突)
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| files | No | ||
| project | No | ||
| summary | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations to carry the safety or side-effect profile, so the description takes full responsibility. It explicitly discloses three side effects, including that file claims get released, history is pruned to MAX_HISTORY, and conflict checking is non-blocking (reminds but does not block). It also discloses TTL expiration behavior. This is high-quality behavioral disclosure.
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 compact and well-structured: a one-line summary, a numbered list of effects, an edge-case condition, and parameter clarifications. Every sentence contributes useful information, and the most important behavioral details are front-loaded.
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 tool with three side effects, an edge case, and no annotations, the description covers the essential behavioral and parameter context quite thoroughly. An output schema exists for return values, so that is not needed here. The only notable gap is the undocumented project parameter, which keeps this from being fully 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?
The schema provides no descriptions (0% coverage), so the description must compensate. It explains agent (must match the claim), summary (what was done/result), and files (comma-separated, recommended for conflict checking). However, the project parameter is not explained, leaving one of four parameters 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?
The description names a specific action (reporting task completion) and enumerates three concrete effects: marking a claim as reported, appending a history entry with automatic pruning, and checking for conflicting changes. This clearly differentiates it from siblings like release_claim or send_note, which have narrower purposes.
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 context is clear: this is the tool to call when claimed work is finished. It also gives a conditional rule—if the claim has expired, re-run claim_files first—which helps an agent decide when not to call it directly. It does not explicitly name alternative tools or exclusion cases, but the usage scenario is strongly implied and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_noteA
定向消息:给指定终端发一条点对点消息(对方 get_board 或 read_notes 时收到)。 用在:派活、报缺陷、接口变更通知、要回执的协调。
和 post_decision 的分工: post_decision = 广播:所有终端都该看到并遵守的约定 -> 进共享公告的决策区。 send_note = 定向:只发给某几个终端的一件事 -> 进收件箱,带未读计数和回执。
参数: agent 你的代号(发送方) to 收件人代号,逗号分隔(如 "D-1, D-2");填 * 表示全体 text 正文。派活时请写全:任务号、文件绝对路径、基线 SHA、完成条件 task 可选任务号(如 DS-MVP-D1-FRONT-MODULE-02),便于检索 request_id 可选重试标识;同发送方、同标识、同内容返回原消息,不重复发送
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| task | No | ||
| text | Yes | ||
| agent | Yes | ||
| project | No | ||
| request_id | 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. It discloses when recipients receive the message (via get_board or read_notes), that it lands in an inbox with unread count and receipt, and that request_id makes retries idempotent (same sender/id/content returns original message, no duplicate). This is substantial behavioral context beyond the 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?
The description is front-loaded with purpose and use cases before parameter details, uses compact section labels, and includes examples only where they add value. There is no filler or redundant restatement.
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 6-parameter messaging tool with no annotations and an output schema present, the description thoroughly covers delivery behavior, idempotency, and almost all parameter semantics. The only gap is the undocumented 'project' parameter, so it is nearly 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?
With 0% schema description coverage, the description documents five of six parameters with examples and constraints: agent, to (comma-separated or '*'), text, task, and request_id (idempotency). However, the 'project' parameter is entirely undocumented, which prevents a perfect score.
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 opens with '定向消息:给指定终端发一条点对点消息', specifying a clear verb, resource, and delivery semantics. It also explicitly contrasts with post_decision (广播 vs 定向), so an agent can distinguish it from the closest sibling without opening schemas.
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 names concrete use cases (派活、报缺陷、接口变更通知、要回执的协调) and explains the exact division of labor with post_decision: broadcast decisions go to shared bulletin, while directed notes go to inbox with unread count and receipt. This gives explicit when-to-use and when-not-to-use guidance.
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.
10 tool updates
v0.2.0- First observed
ack_notes - First observed
check_conflict - First observed
claim_files - First observed
get_board - First observed
init_bulletin - First observed
post_decision - First observed
read_notes - First observed
release_claim - First observed
report_done - First observed
send_note
TDQS
Scored across 10 tools
Most tools have clear, distinct purposes: send_note/read_notes/ack_notes form a messaging trio, while claim_files/report_done/release_claim/check_conflict handle file ownership. The only minor overlap is between get_board and read_notes since both surface unread messages, but get_board is the board overview while read_notes is the dedicated mailbox, so the boundary is acceptable.
Tool names mostly follow a verb_noun pattern: send_note, read_notes, ack_notes, claim_files, report_done, check_conflict, release_claim, post_decision. init_bulletin and get_board deviate slightly (init_/get_ instead of a plain verb), but the pattern is still recognizable and readable.
10 tools is well-scoped for a collaboration board MCP server. Each tool covers a distinct workflow: initialization, board reading, messaging, file claiming, conflict checking, and decision posting. No tool feels redundant or unnecessary.
The tool surface covers the core collaboration lifecycle: init_bulletin bootstraps the board, get_board reads it, send_note/read_notes/ack_notes handle directed messaging, claim_files/report_done/release_claim/check_conflict manage file ownership, and post_decision records shared decisions. A minor gap is the lack of a way to edit or remove a posted decision, but agents can work around that by posting a correction.
Maintenance
Related MCP Connectors
- AxisOAuthdev.useaxis
Coding agents from Claude Code, Cursor and Codex claim jobs and lock files on one shared board.
- llm-busOAuthcom.llm-bus
Coordinate multiple AI agents over MCP: atomic claims, leases, shared ledger, handoffs, tasks.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA Redis-backed MCP server that enables multiple AI agents to communicate, coordinate, and collaborate while working on parallel development tasks, preventing conflicts in shared codebases.20MIT
- AlicenseAqualityDmaintenanceA filesystem-based MCP server for AI coding agents to coordinate work across git worktrees by claiming files, checking for conflicts, and logging progress without affecting the repository's git history.5MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for coordinating multiple AI agents across developers and vendors with a shared job board, per-file locking, and live project context.5AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceMCP server that provides cross-session awareness for Claude Code, tracking active sessions, file conflicts, and shared todos to enable agent coordination without blocking tool calls.860 npmMIT