关于 weeek-mcp
weeek-mcp 是通过 stdio 将 AI 客户端连接到 Weeek 工作区的本地 MCP 服务。它默认仅提供读取能力,并可通过配置选择性启用任务写入工具。
主要功能
- 01读取项目、任务、成员和标签
- 02查看看板及其列
- 03默认隐藏写入工具
- 04按名称允许特定工具
- 05限制响应长度
适用场景
- 01检查 Weeek 工作区中的任务和项目
- 02在只读模式下查询看板数据
- 03按需启用任务创建或更新
MCP 相关
该 MCP 服务通过 stdio 为 AI 客户端提供 Weeek 查询与任务管理工具。默认注册 10 个读取工具;设置 READ_ONLY=false 后,最多开放 5 个写入工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y weeek-mcpWEEEK_ACCESS_TOKEN密钥Weeek Public API v1 access token. Required — the server refuses to start without it.READ_ONLYGate for the write tools. Defaults to 'true': a fresh install exposes only the ten read tools. Set to 'false' to additionally expose the five write tools (create/update/move/complete a task, set an MR link) — an explicit operator opt-in, never the default.ENABLED_TOOLSOptional comma-separated allowlist of tool names to register (still subject to READ_ONLY). Pair with READ_ONLY=false for a granular write rollout, e.g. 'weeek_complete_task'.WEEEK_BASE_URLOverride the Weeek API base URL. Defaults to the public v1 endpoint.WEEEK_TIMEOUT_MSPer-request timeout in milliseconds.MAX_RESPONSE_CHARSUpper bound on the JSON length of a single tool response, protecting the agent's context window from unbounded list/detail payloads.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
weeek-mcp
用于 Weeek 的本地 MCP 服务,默认只读,可选择启用写入工具。
weeek-mcp 通过 stdio 将 AI 客户端(Claude Desktop、Claude Code、Cursor、MCP
Inspector)连接到你的 Weeek 工作区。它默认只读——默认安装只能列出项目、任务、看板、成员和标签,不能进行任何修改——只有在你选择启用 READ_ONLY=false 时,才会提供五个写入工具。
支持 Node ≥ 20;使用 npx 安装,无需克隆或构建。
为什么选择它
- 已发布到 npm。 现在就能运行
npx -y weeek-mcp——无需克隆、构建或使用绝对路径。 - 默认只读,可组合配置限制。 只有选择启用后才会注册写入工具;
ENABLED_TOOLS可将工具限制在指定子集,MAX_RESPONSE_CHARS可限制每个负载的大小。限制由服务端执行,而非依赖客户端约定。 - 双语支持。 EN ↔ RU 文档内容完整对应。
- 细粒度错误模型。 提供九种不同的错误代码和 Agent 可读的消息,让模型无需解析说明文字,就能判断应重试还是放弃。
快速开始
推荐使用 npx 安装——无需克隆或构建。将
examples/claude_desktop.mcp.json 放入你的
MCP 客户端配置中,将 YOUR_WEEEK_TOKEN_HERE 替换为从
https://app.weeek.net/ws/_/settings/apps/api 获取的真实令牌,然后重启客户端:
{
"mcpServers": {
"weeek": {
"command": "npx",
"args": ["-y", "weeek-mcp"],
"env": {
"WEEEK_ACCESS_TOKEN": "YOUR_WEEEK_TOKEN_HERE"
}
}
}
}
首次启动时,npx 会下载 weeek-mcp 并将其缓存。Cursor 和 Cline 使用
相同的 mcpServers 格式——参见 examples/cursor.mcp.json
和 examples/cline.mcp.json。其他环境变量均有安全的
默认值;只覆盖你需要的配置(参见配置)。如果
npx 找不到 node(使用 nvm 时很常见),请参阅
故障排除;如需零依赖冒烟测试,请参阅
docs/smoke.md。
examples/仅托管在 GitHub 上——npm 压缩包仅包含dist/+README.md+README.ru.md+LICENSE。
工具
默认提供十个读取工具。只有在 READ_ONLY=false 时才会提供全部十五个工具(参见启用写入工具)。
| 读取工具 | 返回内容 |
|---|---|
ping | pong: <msg> — 传输健康检查,不调用 API,也不需要令牌 |
weeek_get_me | 已通过身份验证的用户(id、email、name)——用于确认令牌有效 |
weeek_list_projects | 令牌可访问的所有项目 |
weeek_get_project | 按 id 获取单个项目,包括其 description |
weeek_list_tasks | 一页任务(筛选条件 + offset/per_page 分页) |
weeek_get_task | 按 id 获取单个任务,包含多位受指派人字段 |
weeek_list_members | 工作区中的所有成员 |
weeek_list_tags | 所有标签 |
weeek_list_boards | 项目中的所有看板 |
weeek_list_board_columns | 看板中的所有列,按排序顺序排列 |
写入工具(READ_ONLY=false) | 功能 |
|---|---|
weeek_complete_task | 切换完成状态;completed: false 可重新打开任务 |
weeek_move_task | 将任务移至看板列(列即状态) |
weeek_create_task | 创建新任务并返回任务及其新 id |
weeek_update_task | 编辑标题 / 优先级 / 类型 / 截止日期 |
weeek_set_task_mr_link | 将合并请求 / 拉取请求 URL 记录到自定义字段中 |
完整的字段级参考(输入、输出、边缘情况、截断、多位受指派人)→ docs/tools.md。
启用写入工具
默认安装无法更改工作区中的任何内容。 所有五个变更工具都由 READ_ONLY(默认为 true)隐藏——不会注册,因此不会出现在 tools/list 中。将 READ_ONLY=false 设置后,tools/list 中的工具会从十个增加到十五个,并允许 Agent 在令牌可访问的工作区中创建、编辑、移动和完成任务。服务端没有确认步骤——annotations 只是提示,MCP 客户端可以忽略。请将令牌指向一个你愿意让其内容发生变化的工作区。
"env": {
"WEEEK_ACCESS_TOKEN": "YOUR_WEEEK_TOKEN_HERE",
"READ_ONLY": "false"
}
从一个工具开始,而不是五个。 将 READ_ONLY=false 与 ENABLED_TOOLS 配合使用,即可启用写入,但只开放你指定的那个工具:
"env": {
"WEEEK_ACCESS_TOKEN": "YOUR_WEEEK_TOKEN_HERE",
"READ_ONLY": "false",
"ENABLED_TOOLS": "weeek_complete_task"
}
READ_ONLY 是外层门槛:仅在 ENABLED_TOOLS 中列出写入工具,并不会自动启用写入。允许列表不会自动包含其他工具,因此还要一并列出所需的读取工具——examples/claude_desktop.write.mcp.json 是一个可直接编辑的配置,已经按此设置。
每个写入工具能做什么,不能做什么
| 工具 | 更改内容 | 撤销方式 | destructiveHint | idempotentHint |
|---|---|---|---|---|
weeek_complete_task | 一个完成标记 | 再次调用并设置 completed: false | false | true |
weeek_set_task_mr_link | 一个自定义字段的值 | 重新设置该字段 | false | true |
weeek_move_task | 任务的看板列(以及看板) | 将其移回——前提是你知道原位置 | true | false |
weeek_update_task | 标题 / 优先级 / 类型 / 到期日期 | 重新设置每个字段——前提是你知道旧值 | true | false |
weeek_create_task | 创建一个新任务 | 删除该任务,但此服务不支持删除 | true | false |
三个值为 true 的行都标记为“值得由人工确认”,因为Agent 从未看到旧值,也无法将其恢复;尤其要留意 weeek_create_task——无法通过此服务撤销其效果,而且重试创建会再创建一个新任务。除非传入 custom_field_id / custom_field_name,否则 weeek_set_task_mr_link 会按名称解析自定义字段——匹配名称和歧义处理规则见docs/tools.md。
配置
启动时从环境中读取配置,并使用 zod 进行验证;无效值会使启动中止,并在 stderr 中返回非零退出码。服务本身不会读取 .env 文件——请通过 MCP 客户端的 env 块或 shell 传入变量。
| 变量 | 必填 | 默认值 | 用途 |
|---|---|---|---|
WEEEK_ACCESS_TOKEN | 是 | — | 个人 Weeek API 令牌(至少 20 个字符;不接受占位符和带有首尾空白的值)。 |
WEEEK_BASE_URL | 否 | https://api.weeek.net/public/v1 | Weeek HTTP 客户端的基础 URL。可覆盖此值以使用可自托管的代理。 |
WEEEK_TIMEOUT_MS | 否 | 30000 | 每次请求的超时时间(毫秒)。必须为正整数。 |
READ_ONLY | 否 | true | 隐藏写入工具。为 true 时,不会注册任何 readOnlyHint !== true 的工具。接受 true/false/1/0。 |
ENABLED_TOOLS | 否 | (未设置 = 全部) | 以逗号分隔的工具名称允许列表,仍会与 READ_ONLY 取交集。未知名称会发出 WARN;结果为空则启动中止。 |
MAX_RESPONSE_CHARS | 否 | 65536 | 每个响应的字节数上限;超出上限的负载会被截断,并标记 truncated: true。最小值 1024,最大值 1000000。 |
LOG_LEVEL | 否 | info | 日志记录器阈值:debug、info、warn、error。未知值会回退为 info。 |
两道门槛都在服务端执行:隐藏的工具不会注册,因此 Agent 无法调用它。READ_ONLY 至关重要——除非你打算让 Agent 更改工作区,否则请保留默认值。可查看 .env.example 获取可直接复制粘贴的模板。
故障排查
| 症状 | 可能原因 | 解决方法 |
|---|---|---|
| 客户端中未显示服务 | command 指向客户端无法找到的 node,或 dist/index.js 缺失/不可执行 | 运行 npm run build;确认 ls -la dist/index.js 显示 0755。使用 which node 得到的绝对路径(见下文 NVM 说明)。 |
MCP server failed to start 立即出现 | 原因同上,且缺少 node_modules | 在仓库根目录运行 npm install && npm run build。 |
stderr 中出现 invalid env: WEEEK_ACCESS_TOKEN: ... | 令牌包含空格/控制字符,或使用的是占位符 | 在 https://app.weeek.net/ws/_/settings/apps/api 生成真实令牌,并粘贴时不要带前后空格或换行符。 |
出现 invalid env: WEEEK_BASE_URL: ... | URL 使用了非 http(s) 协议,或包含 user:pass@ | 使用纯 https://api.weeek.net/public/v1;通过 WEEEK_ACCESS_TOKEN 传递凭据。 |
启动 dist/index.js 时出现 EACCES | postbuild 跳过了 chmod | 运行 chmod +x dist/index.js。 |
npm start 可以运行,但客户端失败 | 客户端启动时使用的 PATH 与 shell 不同 | 请参阅下文的 NVM 解决方法。 |
NVM 解决方法 — spawn npx ENOENT / spawn node ENOENT
Claude Desktop 和 Cursor 会在非交互式 shell 中启动 MCP 子进程,
该 shell 不会加载 ~/.nvm/nvm.sh,因此如果通过 nvm 安装 Node,裸写 "command": "npx"
会悄无声息地失败。你可以硬编码绝对路径
——运行 which npx,并将结果粘贴为 command(切换 nvm 版本时需更新);首次运行时仍会下载并缓存该包:
{ "command": "/Users/<you>/.nvm/versions/node/v20.18.0/bin/npx", "args": ["-y", "weeek-mcp"] }
——或者将 command 指向一个小型包装脚本,由它先加载 ~/.nvm/nvm.sh
再执行 exec npx "$@",这样切换 nvm 版本后仍可正常使用。
错误
每个 Weeek 工具都会以相同方式失败:isError: true,并附带单行
<tool> failed (<weeek_code>): <one English sentence>。weeek_<code> 标记
是稳定且便于机器检索的约定;句子则为自我纠正提供指引。
九种代码涵盖未授权/禁止/未找到/验证/速率限制/服务/网络/超时/无效响应,每种代码均附有重试指导。
weeek_get_task failed (weeek_not_found): Weeek returned 404 for this resource. Verify the id exists in the configured workspace and was not deleted.
weeek_list_tasks failed (weeek_rate_limited): Weeek rate-limited the request (HTTP 429). Retry after a brief delay or reduce the call frequency.
包含重试语义的完整表格 → docs/errors.md。
贡献 · 安全 · 许可证
- 贡献——欢迎提交问题和功能请求;提交拉取请求前须事先达成一致 (此仓库采用严格的线性增量流程)。 请参阅 CONTRIBUTING.md。
- 安全——如果发现了泄露令牌或 stdout 中字节的方法,请勿公开提交问题;关于私密渠道和 威胁模型,请参阅 SECURITY.md。
- 许可证——MIT。
- 面向 AI 编码 Agent——入口点约定(不变量、固定依赖、合并前检查清单)位于 CLAUDE.md。
CONTRIBUTING.md、SECURITY.md 和 CLAUDE.md 仅托管在 GitHub 上——与
examples/ 一样,它们不包含在 npm 压缩包中。LICENSE 是例外:它包含在
软件包内。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。