mcpField
M
mcp-server-zuuna

mcp-server-zuuna

ローカル
github.com/kenzotp生産性05 週間前に更新

mcp-server-zuuna について

mcp-server-zuunaは、v1 APIを通じてコーディングエージェントをZuunaのカンバンボードに接続します。73種類のツールでボード操作、計画、時間記録、Git関連情報を扱い、コード変更はリポジトリ内で行います。

主な機能

  1. 01ボードとカード操作の73ツール
  2. 02スプリント、リリース、定期カードの管理
  3. 03コメント、チェックリスト、添付ファイル
  4. 04時間記録とタイマー操作
  5. 05GitイベントとCIチェックの記録
  6. 06スコープ別のツール制御と破壊的操作の確認

活用シーン

  1. 01コーディングエージェントによるカードの確認と更新
  2. 02スプリント計画と作業時間の記録
  3. 03コミット、プルリクエスト、CI状況のカードへの紐付け

MCP 対応

Zuuna v1 APIの操作を73種類のMCPツールとして公開し、5種類のプロンプトも提供します。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

Zuunaへのエージェントネイティブなボードアクセス — コーディングエージェント (Claude Code、Cursor、Codex)がZuunaのボードを直接読み取り、操作できる Model Context Protocol サーバーです。

エージェントがボードを操作し、Gitがその内容を正確に保ちます。

エージェントはこのMCPサーバーを介してボードを読み取り、独自のコーディングツールを使ってリポジトリ内で作業します。PRがマージされると、Zuunaのボード上のルールによってカードが移動します。Zuunaが提供するのはインターフェースと検証可能なボードの正確な状態です。コードを書くのはエージェントであり、Zuunaではありません。

ステータス

動作確認済みでテスト済みです。また、トークンモデル、スコープ、ツールの構成をレビューしたうえで、npmに公開済みです(npx -y mcp-server-zuuna)。開発する場合は、下記のソースから実行してください。

ホスト型の代替手段

同じ73個のツールを、何もインストールせずに利用することもできます。Zuunaはapp.zuuna.de/mcpでホスト型MCPコネクターを提供しています(OAuthサインイン、Developerプラン)。Claude Code、Cursor、CodexでこのURLを直接指定すれば、以下のトークンとnpxの手順は不要です。このパッケージは、CIランナー、エアギャップ環境のエージェント、OAuthサインインではなく通常のベアラートークンを使うワークフローなど、ローカルプロセスが必要な場合に利用できます。2つの方法を並べて比較するには、AIエージェント向けカンバンボードをご覧ください。

ツール

73個のツールを領域ごとに分類しています。すべてのツールは有効なトークンで利用できます。Scopes列には、トークンに追加で必要なスコープを記載しています。破壊的と記された8個のツールは、明示的なconfirm: true引数がないと実行されません。

ID
ツールメソッド+パススコープ
zuuna_meGET /api/v1/meなし
グループ
ツールメソッド+パススコープ
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
ボード
ツールメソッド+パススコープ
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
スプリント
ツールメソッド + パススコープ
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

動作に関する注意事項:

  • エラーは、API 独自のメッセージを含む MCP ツールエラーとして返されます(v1 エンベロープの message に、ステータスと機械可読な code が付加されます)。たとえば、HARD WIP 制限により移動が拒否されると、409 wip_limit_reached が返されます。
  • リクエストは 1 回のみで、再試行はありません。4xx の応答が再送されることはありません。リクエストは 15 秒後にタイムアウトし(設定可能)、ネットワークエラーとして通知されます。
  • ZNA-2001 のようなカード表示キーは、カードを指定するあらゆる場所で使用できます。v1 API は キーを識別子として受け付けます。
  • zuuna_board はカード一覧をページ分割します(1 ページあたり 200 枚。v1 API 独自の上限です)。そのため、大きな ボードによってエージェントのコンテキストがあふれることはありません。ページにボード全体が含まれない場合、応答には cardsTruncated: true が設定され、nextCursor が含まれます。次のページを 取得するには、これを cardsCursor として送り返します。
  • zuuna_create_card では、クライアントが任意に選んだ idempotencyKey を指定できます。応答の消失後、または 5xx エラー後に 同じキーで再送すると、カードが重複して作成される代わりに、元のカード(200)が返されます。
  • zuuna_me は hiddenTools リストも返します。トークンのスコープによって非表示になるすべてのツールと、それぞれのツールを使用可能にするスコープを含みます(起動時のスコープゲーティングで適用される境界と同じです)。
  • 起動時にサーバーは自身のトークンのスコープを読み取り(GET /api/v1/me)、それらのスコープで使用できるツールだけを登録します。これはホスト型コネクターで適用されるスコープゲーティングと同じです。この読み取りに失敗した場合(まだネットワークに接続できない、またはトークンが無効など)、代わりにすべてのツールを登録し、その旨を示す 1 行を stderr に出力します。登録されたツールにかかわらず、すべての呼び出しは API によって引き続き強制されます。
  • ツールに加えて 5 つのプロンプト(session_start、session_end、triage_board、 standup_summary、plan_sprint)が同梱されています。MCP プロンプトを表示するクライアントでの出発点として用意されており、ツールを直接使用するために必須ではありません。

セットアップ

Zuuna ワークスペースの API トークンが必要です。エージェントに許可する操作に応じてスコープを設定してください。読み取り専用の監視であれば、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 — エージェントがボードを確認してカードを選びます(または「ZNA-2001 をやって」と指示します)。
  2. エージェントは独自のツールを使ってリポジトリ内でコーディングし、コミットでカードキーを参照します。
  3. PR がマージされると、Git の記録に基づいてカードが移動します。Zuuna の Git 統合機能(webhook/CLI)がコミットと PR をカードに紐付け、ボードのルール(たとえば「PR をマージ → Done に移動」)がカードを移動します。紐付けは最初から機能します。移動のために必要なのは、ボードの「自動化」でルールを一度追加することだけです。その後、エージェントが手動でボードを操作する必要はなくなり、ボードがリポジトリの状態と食い違うこともありません。

ガイド

対応範囲について

デプロイをトリガーするツールは、まだありません。zuuna_report_deployment(deployments:write)は、パイプラインがすでに実行した処理(ビルド中、成功、失敗)を記録するだけです。実際のデプロイはエージェントではなく、独自の CI が行います。

現在、git:write ツールは 3 つありますが、それぞれの機能は名前から想像されるより限定的です。

  • zuuna_record_git_events と zuuna_report_ci_checks は、スマートコミット参照または説明で指定されたカードに、コミット/ブランチ/PR の履歴と CI のステータスを紐付けます。
  • zuuna_link_git_branches は、1 回の呼び出しでリポジトリの進行中ブランチのスナップショット全体を置き換えます。

この 3 つのツールは、どれもカードを移動しません。カードが移動するのは、ボードのルールが適用された場合(上記の「一連の流れ」を参照)、または zuuna_move_card/zuuna_update_card が直接呼び出された場合だけです。自動化もここでは読み取り専用です(zuuna_list_automations)。ツールで自動化を作成、編集、無効化することはできません。添付ファイルはマルチパート形式でアップロードされ(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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。