mcpField
M
mcp-server-zuuna

mcp-server-zuuna

本地服务
github.com/kenzotp生产力05 周前更新

关于 mcp-server-zuuna

mcp-server-zuuna 通过 v1 API 将编码 Agent 接入 Zuuna 看板。73 种工具涵盖看板与卡片操作、规划、工时记录和 Git 相关信息;代码变更仍在代码库中完成。

主要功能

  1. 0173 种看板与卡片操作工具
  2. 02管理迭代、发布和循环卡片
  3. 03评论、清单与附件操作
  4. 04工时记录和计时器控制
  5. 05记录 Git 事件与 CI 检查
  6. 06按权限范围开放工具并确认破坏性操作

适用场景

  1. 01让编码 Agent 查看和更新看板卡片
  2. 02规划迭代并记录工时
  3. 03将提交、拉取请求和 CI 状态关联到卡片

MCP 相关

将 Zuuna v1 API 操作作为 73 种 MCP 工具开放,并附带五种提示词。可使用 API 令牌本地运行,也可使用 Zuuna 托管的 MCP 连接器。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"kenzotp-mcp-server-zuuna": {
"command": "npx",
"args": [
"-y",
"mcp-server-zuuna"
],
"env": {
"ZUUNA_API_TOKEN": "<ZUUNA_API_TOKEN>",
"ZUUNA_BASE_URL": "<ZUUNA_BASE_URL>",
"ZUUNA_TIMEOUT_MS": "<ZUUNA_TIMEOUT_MS>"
}
}
}
}
启动命令npx -y mcp-server-zuuna
需要配置的环境变量
ZUUNA_API_TOKEN密钥Bearer API token from your Zuuna workspace. Grant only the scopes the agent needs (boards:read + cards:read is enough for a read-only observer).
ZUUNA_BASE_URLZuuna base URL. Defaults to https://app.zuuna.de.
ZUUNA_TIMEOUT_MSPer-request timeout in milliseconds. Defaults to 15000.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmcp-server-zuuna0.3.0

工具

73

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

mcp-server-zuuna

CI

面向 Agent 的 Zuuna 看板访问——一个 Model Context Protocol 服务,让编码 Agent (Claude Code、Cursor、Codex)直接读取和操作 Zuuna 看板。

Agent 负责操作看板,Git 确保一切真实可信。

Agent 通过此 MCP 服务读取看板,使用自己的编码工具在代码仓库中完成工作;PR 合并后,Zuuna 看板上的规则会移动卡片。Zuuna 提供界面和可验证的看板事实——代码由 Agent 编写,而非 Zuuna。

状态

已可运行并经过测试,且已发布到 npm(npx -y mcp-server-zuuna),并已对令牌模型、作用域和工具接口进行身份验证审查。如果想自行修改,可从源码运行(见下文)。

托管式替代方案

相同的 73 个工具也提供免安装版本:Zuuna 在 app.zuuna.de/mcp 提供托管式 MCP 连接器(OAuth 登录,需要 Developer 套餐)。直接将 Claude Code、Cursor 或 Codex 指向该 URL,即可跳过下方的令牌和 npx 命令。此软件包适用于确实需要本地进程的情况:CI 运行器、隔离网络中的 Agent,或需要使用普通 bearer token 而非 OAuth 登录的工作流。请参阅 面向 AI Agent 的看板,了解这两种方式的并列介绍。

工具

共 73 个工具,按类别分组。所有工具都可使用任何有效令牌;Scopes 列出了令牌还必须具备的权限。标记为破坏性的 8 个工具必须提供明确的 confirm: true 参数,否则不会运行。

身份
工具方法 + 路径Scopes
zuuna_meGET /api/v1/me无
群组
工具方法 + 路径Scopes
zuuna_list_groupsGET /api/v1/groupsboards:read
zuuna_list_group_membersGET /api/v1/groups/{groupId}/membersboards:read
zuuna_list_epicsGET /api/v1/groups/{groupId}/epicsboards:read
zuuna_create_epicPOST /api/v1/groups/{groupId}/epicscards:write
zuuna_update_epicPATCH /api/v1/groups/{groupId}/epics/{epicId}cards:write
zuuna_list_group_cardsGET /api/v1/groups/{groupId}/cardscards:read
看板
工具方法 + 路径Scopes
zuuna_boardsGET /api/v1/boardsboards:read
zuuna_boardGET /api/v1/boards/{id}/columns + GET /api/v1/boards/{id}/cardsboards:read、cards:read
zuuna_create_boardPOST /api/v1/boardsboards:write
zuuna_list_columnsGET /api/v1/boards/{boardId}/columnsboards:read
zuuna_list_board_fieldsGET /api/v1/boards/{boardId}/fieldsboards:read
zuuna_create_columnPOST /api/v1/boards/{boardId}/columnsboards:write
zuuna_list_automationsGET /api/v1/boards/{boardId}/automationsboards:read
卡片
工具方法 + 路径权限范围
zuuna_cardGET /api/v1/cards/{idOrKey}cards:read
zuuna_list_board_cardsGET /api/v1/boards/{boardId}/cardscards:read
zuuna_search_cardsGET /api/v1/cardscards:read
zuuna_create_cardPOST /api/v1/boards/{boardId}/cardscards:write
zuuna_create_cardsPOST /api/v1/boards/{boardId}/cards ({"cards":[...]})cards:write
zuuna_update_cardPATCH /api/v1/cards/{idOrKey}cards:write
zuuna_move_cardPATCH /api/v1/cards/{idOrKey}cards:write
zuuna_move_card_to_boardPOST /api/v1/cards/{cardId}/movecards:write
zuuna_archive_cardPOST /api/v1/cards/{cardId}/archivecards:write
zuuna_unarchive_cardDELETE /api/v1/cards/{cardId}/archivecards:write
zuuna_delete_card (破坏性操作)DELETE /api/v1/cards/{cardId}cards:write
zuuna_restore_cardPOST /api/v1/cards/{cardId}/restorecards:write
评论
工具方法 + 路径权限范围
zuuna_list_commentsGET /api/v1/cards/{cardId}/commentscomments:read
zuuna_commentPOST /api/v1/cards/{cardId}/commentscomments:write
检查清单
工具方法 + 路径权限范围
zuuna_list_checklistGET /api/v1/cards/{cardId}/checklistcards:read
zuuna_add_checklist_itemPOST /api/v1/cards/{cardId}/checklistcards:write
zuuna_update_checklist_itemPATCH /api/v1/cards/{cardId}/checklist/{itemId}cards:write
zuuna_delete_checklist_item (破坏性操作)DELETE /api/v1/cards/{cardId}/checklist/{itemId}cards:write
关联关系
工具方法 + 路径权限范围
zuuna_list_relationsGET /api/v1/cards/{cardId}/relationscards:read
zuuna_add_relationPOST /api/v1/cards/{cardId}/relationscards:write
zuuna_delete_relation (破坏性操作)DELETE /api/v1/cards/{cardId}/relations/{linkId}cards:write
附件

自 ZNA-2170 起支持上传:zuuna_upload_attachment 可接收本地文件路径,或 base64 字节数据及文件名。列表和获取操作仍只返回元数据,不会返回文件内容本身。

工具方法 + 路径权限范围
zuuna_list_attachmentsGET /api/v1/cards/{cardId}/attachmentscards:read
zuuna_upload_attachmentPOST /api/v1/cards/{cardId}/attachmentscards:write
zuuna_get_attachmentGET /api/v1/cards/{cardId}/attachments/{attachmentId}(仅元数据)cards:read
zuuna_delete_attachment (破坏性操作)DELETE /api/v1/cards/{cardId}/attachments/{attachmentId}cards:write
时间跟踪
工具方法 + 路径权限范围
zuuna_list_card_timeGET /api/v1/cards/{cardId}/timetime:read
zuuna_log_timePOST /api/v1/cards/{cardId}/timetime:write
zuuna_start_timerPOST /api/v1/cards/{cardId}/timetime:write
zuuna_stop_timerPOST /api/v1/cards/{cardId}/timetime:write
zuuna_list_active_timersGET /api/v1/time/activetime:read
zuuna_update_time_entryPATCH /api/v1/time/{entryId}time:write
zuuna_delete_time_entry (破坏性操作)DELETE /api/v1/time/{entryId}time:write
zuuna_import_time_entriesPOST /api/v1/time/entriestime:write
Sprint
工具方法 + 路径权限范围
zuuna_list_sprintsGET /api/v1/sprintsboards:read
zuuna_get_sprintGET /api/v1/sprints/{sprintId}boards:read
zuuna_create_sprintPOST /api/v1/sprintscards:write
zuuna_update_sprintPATCH /api/v1/sprints/{sprintId}cards:write
zuuna_add_cards_to_sprintPOST /api/v1/sprints/{sprintId}/cardscards:write
zuuna_remove_card_from_sprintDELETE /api/v1/sprints/{sprintId}/cards/{cardId}cards:write
周期性卡片
工具方法 + 路径范围
zuuna_list_recurring_cardsGET /api/v1/boards/{boardId}/recurringboards:read
zuuna_create_recurring_cardPOST /api/v1/boards/{boardId}/recurringcards:write
zuuna_update_recurring_cardPATCH /api/v1/recurring/{id}cards:write
zuuna_delete_recurring_card (有破坏性)DELETE /api/v1/recurring/{id}cards:write
发布版本
工具方法 + 路径范围
zuuna_list_releasesGET /api/v1/releasesboards:read
zuuna_get_releaseGET /api/v1/releases/{releaseId}boards:read
zuuna_create_releasePOST /api/v1/releasesreleases:write
zuuna_update_releasePATCH /api/v1/releases/{releaseId}releases:write
zuuna_delete_release (有破坏性)DELETE /api/v1/releases/{releaseId}releases:write
部署

仅供观察:这里没有“触发部署”工具,托管连接器中也没有(见“范围说明”)。

工具方法 + 路径范围
zuuna_list_deploymentsGET /api/v1/deploymentsboards:read
zuuna_report_deploymentPOST /api/v1/deploymentsdeployments:write
Webhook
工具方法 + 路径范围
zuuna_list_webhooksGET /api/v1/webhookswebhooks:manage
zuuna_create_webhookPOST /api/v1/webhookswebhooks:manage
zuuna_update_webhookPATCH /api/v1/webhooks/{id}webhooks:manage
zuuna_delete_webhook (有破坏性)DELETE /api/v1/webhooks/{id}webhooks:manage
zuuna_test_webhookPOST /api/v1/webhooks/{id}/testwebhooks:manage
zuuna_list_webhook_deliveriesGET /api/v1/webhooks/{id}/deliverieswebhooks:manage
看板上的 Git

将提交、分支、PR 和 CI 状态关联到卡片。这些操作本身都不会移动卡片(见“范围说明”)。

工具方法 + 路径范围
zuuna_link_git_branchesPOST /api/v1/git/branchesgit:write
zuuna_report_ci_checksPOST /api/v1/git/checksgit:write
zuuna_record_git_eventsPOST /api/v1/git/eventsgit:write

行为说明:

  • 错误会作为 MCP 工具错误返回,并包含 API 自身的消息(v1 信封中的 message,以及状态和机器可读的 code)——例如,HARD WIP 限制拒绝移动时会返回 409 wip_limit_reached。
  • 每个请求只发一次,不会重试:绝不会重新发送 4xx 响应。请求会在 15 s 后超时 (可配置),并作为网络错误显示。
  • 卡片显示键(如 ZNA-2001)可用于任何指定卡片的操作——v1 API 接受 该键作为标识符。
  • zuuna_board 会对卡片列表分页(每页 200 张卡片,这是 v1 API 自身的上限),因此大型 看板不会使 Agent 的上下文过载。如果某页不是整个看板的全部内容,响应会包含 cardsTruncated: true,并附带 nextCursor;将其作为 cardsCursor 传回即可 获取下一页。
  • zuuna_create_card 接受可选的、由客户端选择的 idempotencyKey:如果响应丢失或收到 5xx 后使用相同的键重新发送请求,将返回原卡片(200),而不是创建重复卡片。
  • zuuna_me 还会返回一个 hiddenTools 列表:其中列出此令牌的范围所隐藏的每个工具, 以及解锁该工具所需的范围(与启动时适用的范围门控边界相同)。
  • 启动时,服务会读取自身令牌的范围(GET /api/v1/me),并且只注册这些范围所覆盖的工具, 这与托管连接器应用的范围门控相同。如果读取失败(尚无网络连接、令牌无效),则会改为注册 所有工具,并向 stderr 打印一行说明;无论注册了什么,每次调用仍由 API 强制执行权限检查。
  • 除工具外还提供了五个提示词(session_start、session_end、triage_board、 standup_summary、plan_sprint),可作为支持 MCP 提示词的客户端的起点;直接使用工具 并不需要这些提示词。

设置

你需要 Zuuna 工作区的 API 令牌。根据 Agent 应获准执行的操作,为令牌授予相应权限范围——只读观察者只需要 boards:read + cards:read。

每个客户端通过环境变量配置服务:

变量默认值含义
ZUUNA_API_TOKEN—(必填)Bearer API 令牌
ZUUNA_BASE_URLhttps://app.zuuna.deZuuna 基础 URL——必须是绝对 http(s) URL(无效值会在启动时导致失败);使用普通 http 的值会在 stderr 中输出明文令牌警告
ZUUNA_TIMEOUT_MS15000每次请求的超时时间
Claude Code
claude mcp add zuuna \
  -e ZUUNA_API_TOKEN=zk_live_your_token \
  -- npx -y mcp-server-zuuna

或在项目的 .mcp.json 中:

{
  "mcpServers": {
    "zuuna": {
      "command": "npx",
      "args": ["-y", "mcp-server-zuuna"],
      "env": { "ZUUNA_API_TOKEN": "zk_live_your_token" }
    }
  }
}
Cursor

在 ~/.cursor/mcp.json(或项目的 .cursor/mcp.json)中:

{
  "mcpServers": {
    "zuuna": {
      "command": "npx",
      "args": ["-y", "mcp-server-zuuna"],
      "env": { "ZUUNA_API_TOKEN": "zk_live_your_token" }
    }
  }
}
Codex

在 ~/.codex/config.toml 中:

[mcp_servers.zuuna]
command = "npx"
args = ["-y", "mcp-server-zuuna"]
env = { "ZUUNA_API_TOKEN" = "zk_live_your_token" }
从源代码运行
git clone https://github.com/kenzotp/mcp-server-zuuna
cd mcp-server-zuuna && npm install && npm run build

然后将客户端指向构建好的二进制文件,而不是 npx:

claude mcp add zuuna -e ZUUNA_API_TOKEN=zk_live_your_token -- node /path/to/mcp-server-zuuna/dist/index.js

工作循环

  1. zuuna_board — Agent 查看看板并选择一张卡片(或者你告诉它:“处理 ZNA-2001”)。
  2. Agent 使用自己的工具在你的代码仓库中编写代码,并在提交中引用卡片键。
  3. PR 合并后,Git 中的事实会推动卡片流转:Zuuna 的 Git 集成(webhook/CLI)会将提交和 PR 关联到卡片,看板上的规则(例如“PR 已合并 → 移至 Done”)会推动卡片流转。关联开箱即用;你只需在看板的自动化中添加一条规则。此后,Agent 无需再手动操作看板,看板也不会与代码仓库脱节。

指南

  • 面向 AI Agent 的看板:Agent 设置看板、创建和移动卡片、发表评论并记录工时;之后由看板规则推动卡片流转。
  • Claude Code 跨会话项目管理:通过 CLAUDE.md 中的例行流程,将应用的计划保存在看板上,让每个新会话都能从上一个会话停止的地方继续。
  • 面向 AI Agent 的 Zuuna:从卡片到 PR 合并的工作循环,提供英文和德文版本。

明确的功能范围

目前仍没有可触发部署的工具。zuuna_report_deployment(deployments:write)只能记录流水线已经执行的操作(构建、成功、失败);实际发布仍由你自己的 CI 负责,而不是 Agent。

现在有三个 git:write 工具,但它们的功能比名称所暗示的更有限:

  • zuuna_record_git_events 和 zuuna_report_ci_checks 会将提交/分支/PR 历史及 CI 状态关联到智能提交引用或描述所指明的卡片。
  • zuuna_link_git_branches 通过一次调用,整体替换某个代码仓库的所有进行中分支快照。

这三个工具都不会移动卡片。只有看板规则匹配到卡片时(见上文“工作循环”),或直接调用 zuuna_move_card / zuuna_update_card 时,卡片才会移动。此处的自动化本身也只能读取(zuuna_list_automations):没有工具可以创建、编辑或停用自动化。附件上传通过 multipart(ZNA-2170)完成,并遵循 REST 路由自身的限制和错误处理;没有任何工具会读取文件内容。

开发

npm install
npm run lint     # eslint
npm run build    # tsc -> dist/
npm test         # vitest, fully mocked (no network)

可选的实时冒烟测试,严格只读(仅调用 GET /me 和 GET /boards——绝不会创建、移动或评论任何内容):

ZUUNA_E2E=1 ZUUNA_API_TOKEN=zk_live_your_token npm run test:e2e

需要 Node.js >= 20。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。