GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
作者による説明(英語の原文)
MCP server for Zuuna: coding agents work your git-truth kanban board via the v1 API. 73 tools.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
ZUUNA_API_TOKEN, ZUUNA_BASE_URL, ZUUNA_TIMEOUT_MS「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"zuuna": {
"command": "npx",
"args": [
"-y",
"mcp-server-zuuna"
],
"env": {
"ZUUNA_API_TOKEN": "your-value",
"ZUUNA_BASE_URL": "your-value",
"ZUUNA_TIMEOUT_MS": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add zuuna --env ZUUNA_API_TOKEN=your-value --env ZUUNA_BASE_URL=your-value --env ZUUNA_TIMEOUT_MS=your-value -- npx -y mcp-server-zuuna動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"zuuna": {
"command": "npx",
"args": [
"-y",
"mcp-server-zuuna"
],
"env": {
"ZUUNA_API_TOKEN": "your-value",
"ZUUNA_BASE_URL": "your-value",
"ZUUNA_TIMEOUT_MS": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"zuuna": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-server-zuuna"
],
"env": {
"ZUUNA_API_TOKEN": "your-value",
"ZUUNA_BASE_URL": "your-value",
"ZUUNA_TIMEOUT_MS": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
ZUUNA_BASE_URL envZUUNA_TIMEOUT_MS envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月8日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント kenzotp で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:ZUUNA_API_TOKEN
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.3.0)がレジストリに届いたのは43 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:GitHub, Desktop Commander, Cloudflare MCP
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Agent-native board access for [Zuuna](https://zuuna.de/en/kanban-board-for-ai-agents?utm_source=npm&utm_medium=referral&utm_campaign=mcp-server-readme) — a Model Context Protocol server that lets coding agents (Claude Code, Cursor, Codex) read and work a Zuuna board directly.
Agents work the board. Git keeps it honest.
The agent reads the board via this MCP server, does the work in the repo with its own
coding tools, and when the PR merges, a rule on your Zuuna board moves the card. Zuuna
provides the interface and the verifiable board truth — the agent writes the code, not Zuuna.
Working and tested, and published on npm (npx -y mcp-server-zuuna) after an auth review of the token model, scopes and tool surface. Run from source (bottom) if you want to hack on it.
The same 73 tools are also available with nothing to install: Zuuna runs a hosted MCP connector at app.zuuna.de/mcp (OAuth sign-in, Developer plan). Point Claude Code, Cursor or Codex at that URL directly and skip the token and the npx line below. This package exists for the case that does need a local process: a CI runner, an air-gapped agent, or a workflow that wants a plain bearer token instead of an OAuth sign-in. See Kanban board for AI agents for both routes side by side.
73 tools, grouped by area. Every tool works with any valid token; the Scopes column lists what else the token must carry. The 8 marked destructive refuse to run without an explicit confirm: true argument.
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_me | GET /api/v1/me | none |
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_list_groups | GET /api/v1/groups | boards:read |
zuuna_list_group_members | GET /api/v1/groups/{groupId}/members | boards:read |
zuuna_list_epics | GET /api/v1/groups/{groupId}/epics | boards:read |
zuuna_create_epic | POST /api/v1/groups/{groupId}/epics | cards:write |
zuuna_update_epic | PATCH /api/v1/groups/{groupId}/epics/{epicId} | cards:write |
zuuna_list_group_cards | GET /api/v1/groups/{groupId}/cards | cards:read |
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_boards | GET /api/v1/boards | boards:read |
zuuna_board | GET /api/v1/boards/{id}/columns + GET /api/v1/boards/{id}/cards | boards:read, cards:read |
zuuna_create_board | POST /api/v1/boards | boards:write |
zuuna_list_columns | GET /api/v1/boards/{boardId}/columns | boards:read |
zuuna_list_board_fields | GET /api/v1/boards/{boardId}/fields | boards:read |
zuuna_create_column | POST /api/v1/boards/{boardId}/columns | boards:write |
zuuna_list_automations | GET /api/v1/boards/{boardId}/automations | boards:read |
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_card | GET /api/v1/cards/{idOrKey} | cards:read |
zuuna_list_board_cards | GET /api/v1/boards/{boardId}/cards | cards:read |
zuuna_search_cards | GET /api/v1/cards | cards:read |
zuuna_create_card | POST /api/v1/boards/{boardId}/cards | cards:write |
zuuna_create_cards | POST /api/v1/boards/{boardId}/cards ({"cards":[...]}) | cards:write |
zuuna_update_card | PATCH /api/v1/cards/{idOrKey} | cards:write |
zuuna_move_card | PATCH /api/v1/cards/{idOrKey} | cards:write |
zuuna_move_card_to_board | POST /api/v1/cards/{cardId}/move | cards:write |
zuuna_archive_card | POST /api/v1/cards/{cardId}/archive | cards:write |
zuuna_unarchive_card | DELETE /api/v1/cards/{cardId}/archive | cards:write |
zuuna_delete_card (destructive) | DELETE /api/v1/cards/{cardId} | cards:write |
zuuna_restore_card | POST /api/v1/cards/{cardId}/restore | cards:write |
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_list_comments | GET /api/v1/cards/{cardId}/comments | comments:read |
zuuna_comment | POST /api/v1/cards/{cardId}/comments | comments:write |
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_list_checklist | GET /api/v1/cards/{cardId}/checklist | cards:read |
zuuna_add_checklist_item | POST /api/v1/cards/{cardId}/checklist | cards:write |
zuuna_update_checklist_item | PATCH /api/v1/cards/{cardId}/checklist/{itemId} | cards:write |
zuuna_delete_checklist_item (destructive) | DELETE /api/v1/cards/{cardId}/checklist/{itemId} | cards:write |
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_list_relations | GET /api/v1/cards/{cardId}/relations | cards:read |
zuuna_add_relation | POST /api/v1/cards/{cardId}/relations | cards:write |
zuuna_delete_relation (destructive) | DELETE /api/v1/cards/{cardId}/relations/{linkId} | cards:write |
Upload included since ZNA-2170: zuuna_upload_attachment takes a local file path, or base64 bytes plus a filename. List and get still return metadata only, never the bytes themselves.
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_list_attachments | GET /api/v1/cards/{cardId}/attachments | cards:read |
zuuna_upload_attachment | POST /api/v1/cards/{cardId}/attachments | cards:write |
zuuna_get_attachment | GET /api/v1/cards/{cardId}/attachments/{attachmentId} (metadata only) | cards:read |
zuuna_delete_attachment (destructive) | DELETE /api/v1/cards/{cardId}/attachments/{attachmentId} | cards:write |
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_list_card_time | GET /api/v1/cards/{cardId}/time | time:read |
zuuna_log_time | POST /api/v1/cards/{cardId}/time | time:write |
zuuna_start_timer | POST /api/v1/cards/{cardId}/time | time:write |
zuuna_stop_timer | POST /api/v1/cards/{cardId}/time | time:write |
zuuna_list_active_timers | GET /api/v1/time/active | time:read |
zuuna_update_time_entry | PATCH /api/v1/time/{entryId} | time:write |
zuuna_delete_time_entry (destructive) | DELETE /api/v1/time/{entryId} | time:write |
zuuna_import_time_entries | POST /api/v1/time/entries | time:write |
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_list_sprints | GET /api/v1/sprints | boards:read |
zuuna_get_sprint | GET /api/v1/sprints/{sprintId} | boards:read |
zuuna_create_sprint | POST /api/v1/sprints | cards:write |
zuuna_update_sprint | PATCH /api/v1/sprints/{sprintId} | cards:write |
zuuna_add_cards_to_sprint | POST /api/v1/sprints/{sprintId}/cards | cards:write |
zuuna_remove_card_from_sprint | DELETE /api/v1/sprints/{sprintId}/cards/{cardId} | cards:write |
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_list_recurring_cards | GET /api/v1/boards/{boardId}/recurring | boards:read |
zuuna_create_recurring_card | POST /api/v1/boards/{boardId}/recurring | cards:write |
zuuna_update_recurring_card | PATCH /api/v1/recurring/{id} | cards:write |
zuuna_delete_recurring_card (destructive) | DELETE /api/v1/recurring/{id} | cards:write |
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_list_releases | GET /api/v1/releases | boards:read |
zuuna_get_release | GET /api/v1/releases/{releaseId} | boards:read |
zuuna_create_release | POST /api/v1/releases | releases:write |
zuuna_update_release | PATCH /api/v1/releases/{releaseId} | releases:write |
zuuna_delete_release (destructive) | DELETE /api/v1/releases/{releaseId} | releases:write |
Observation only: there is no "trigger a deploy" tool, on the hosted connector either (see "Honest scope").
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_list_deployments | GET /api/v1/deployments | boards:read |
zuuna_report_deployment | POST /api/v1/deployments | deployments:write |
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_list_webhooks | GET /api/v1/webhooks | webhooks:manage |
zuuna_create_webhook | POST /api/v1/webhooks | webhooks:manage |
zuuna_update_webhook | PATCH /api/v1/webhooks/{id} | webhooks:manage |
zuuna_delete_webhook (destructive) | DELETE /api/v1/webhooks/{id} | webhooks:manage |
zuuna_test_webhook | POST /api/v1/webhooks/{id}/test | webhooks:manage |
zuuna_list_webhook_deliveries | GET /api/v1/webhooks/{id}/deliveries | webhooks:manage |
Link commits, branches, PRs and CI status to cards. None of these move a card by themselves (see "Honest scope").
| Tool | Method + path | Scopes |
|---|---|---|
zuuna_link_git_branches | POST /api/v1/git/branches | git:write |
zuuna_report_ci_checks | POST /api/v1/git/checks | git:write |
zuuna_record_git_events | POST /api/v1/git/events | git:write |
Behavioral notes:
message plus status and machine code) — e.g. 409 wip_limit_reached when a HARD WIP limit refuses a move.ZNA-2001 work anywhere a card is addressed — the v1 API accepts the key as the handle.zuuna_board pages the card list (200 cards per page, the v1 API's own cap) so a big board cannot flood the agent's context. When a page is not the whole board, the response says cardsTruncated: true and carries nextCursor; send it back as cardsCursor to fetch the next page.zuuna_create_card accepts an optional client-chosen idempotencyKey: re-sending the same key after a lost response or a 5xx returns the original card (200) instead of minting a duplicate.zuuna_me also returns a hiddenTools list: every tool this token's scopes hide, each with the scope or scopes that would unlock it (the same boundary the startup scope-gating applies).GET /api/v1/me) and registers only the tools they cover, the same scope gating the hosted connector applies. If that read fails (no network yet, an invalid token) it registers every tool instead and prints one line to stderr saying so; every call is still enforced by the API regardless of what got registered.session_start, session_end, triage_board, standup_summary, plan_sprint), starting points for a client that surfaces MCP prompts, not required for using the tools directly.You need an API token from your Zuuna workspace. Give it the scopes for what the agent should be allowed to do — a read-only observer needs only boards:read + cards:read.
The server is configured per client via environment variables:
| Variable | Default | Meaning |
|---|---|---|
ZUUNA_API_TOKEN | — (required) | Bearer API token |
ZUUNA_BASE_URL | https://app.zuuna.de | Zuuna base URL — must be an absolute http(s) URL (invalid values fail at startup); a plain-http value prints a cleartext-token warning to stderr |
ZUUNA_TIMEOUT_MS | 15000 | Per-request timeout |
claude mcp add zuuna \
-e ZUUNA_API_TOKEN=zk_live_your_token \ -- npx -y mcp-server-zuuna
or in the project's .mcp.json:
{
"mcpServers": { "zuuna": { "command": "npx", "args": ["-y", "mcp-server-zuuna"], "env": { "ZUUNA_API_TOKEN":
冒頭だけを表示しています。続きはリポジトリで読めます