Zuuna MCP server
io.github.kenzotp/mcp-server-zuuna·v0.3.0MCP server for Zuuna: coding agents work your git-truth kanban board via the v1 API. 73 tools.
0 stars479 downloads/wk
Reviews
Write oneNobody has reviewed Zuuna yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Zuuna tools (73, 28 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
zuuna_add_cards_to_sprintPull cards into a sprint. Each must belong to the sprint's own group. If the sprint already has a materialized (started) board, a card moves onto it; otherwise it is simply planned in. Response lists which ids were added vs. skipped, with a reason.
zuuna_add_checklist_itemAdd a checklist item to a card (appended at the end).
zuuna_add_relationLink this card to another. `type` is one of the catalog values ("clones" is set automatically by Zuuna and is refused here). `direction` (outward|inward, default outward) picks which card is the semantic SOURCE for a non-symmetric type — e.g. outward "blocks" means THIS card blocks the target. A scheduling type (fs/ss/ff/sf) may carry lagDays and is refused if it would create a dependency cycle.
zuuna_archive_cardArchive a card (reversible — see zuuna_unarchive_card).
zuuna_boardGet one board assembled: its columns (in order, with WIP limits and SLA hours) and its cards (key, title, column, priority, type). The card list pages at 200; when more cards exist the response carries cardsTruncated and a nextCursor — pass that back as cardsCursor for the next page. Accepts the board id, its key (card prefix) or its title.
zuuna_boardsList the workspace's boards (non-archived, non-private). Each entry carries id, title, key (card prefix), groupId. Use the id with zuuna_board.
zuuna_cardGet a card's full detail: description, priority, type, due/start dates, checklist counts, assignees, epic, custom field values, attachment metadata.
zuuna_commentAdd a comment to a card. The author is the user who created the API token. @mentions notify.
zuuna_create_boardwrite actionCreate an empty board (no columns yet — add them with zuuna_create_column) in a group. Body: title, groupId.
zuuna_create_cardwrite actionCreate a card on a board. Title is required; give the target column by id or by title (omitted = the board's first column). idempotencyKey makes a retry safe: re-sending the same key after a lost response or a 5xx returns the ORIGINAL card instead of a duplicate.
zuuna_create_cardswrite actionCreate up to 50 cards on ONE board in a single call. Each item validates exactly like zuuna_create_card (title required; target column by id only) and the answer is one result per item: created (id, key, title, status, columnId) or the error that item alone would have gotten. The card cap counts the whole batch; board, closed-sprint and limit errors stay whole-request.
zuuna_create_columnwrite actionAdd a column to an existing (non-archived) board.
zuuna_create_epicwrite actionCreate an epic in a group: a real ticket with its own key (a board-less group card), referencable and linkable like any other card. Title is required; colour comes from the 8-name palette and defaults to purple.
zuuna_create_recurring_cardwrite actionStart a recurring-card series on a board: every everyN unit(s) (days|weeks|months) it mints a card from the given template, until endAt (if set).
zuuna_create_releasewrite actionPlan or publish a release in a group. Provide releaseId (to fill in an existing planned release), or a name/tag to create one. publish defaults to false when no tag/commits context is given — pass publish: true to mark it RELEASED and fire release.published to webhook subscribers immediately.
zuuna_create_sprintwrite actionCreate a PLANNED sprint in a group.
zuuna_create_webhookwrite actionRegister a webhook endpoint. The response's `secret` is the ONLY time the signing secret is ever shown — store it immediately, there is no way to read it back.
zuuna_delete_attachmentwrite actionRemove an attachment from a card. Requires confirm: true.
zuuna_delete_cardwrite actionMove a card to Trash (restorable for 30 days via zuuna_restore_card, then permanently purged). Refused with time_entries_exist if the card carries logged time, UNLESS confirm is true — passing confirm also acknowledges deleting those hours. Requires confirm: true.
zuuna_delete_checklist_itemwrite actionRemove a checklist item. Requires confirm: true.
zuuna_delete_recurring_cardwrite actionCancel a recurring-card series for good (no trash). Requires confirm: true.
zuuna_delete_relationwrite actionRemove a relation, from either card it connects. Requires confirm: true.
zuuna_delete_releasewrite actionPermanently delete a release (its commit/merge history, sprint links, card-release links and shipped-card archive all cascade with it). Requires confirm: true.
zuuna_delete_time_entrywrite actionRemove a logged time entry. Requires confirm: true.
zuuna_delete_webhookwrite actionRemove a webhook endpoint (its delivery log goes with it). Requires confirm: true.
zuuna_get_attachmentGet one attachment's metadata (filename, MIME type, byte size). Never returns the file's bytes — use zuuna_list_attachments first to find the attachmentId.
zuuna_get_releaseGet one release's detail: state, dates, tag, shipped card/point counts.
zuuna_get_sprintGet a sprint plus the cards currently in it.
zuuna_import_time_entriesBulk-import normalized time entries (up to 200 per call) — from Clockify/Toggl/Harvest or a script. Each entry needs cardKey/cardId (or a PREFIX-N in description) plus seconds or start+end; userEmail attributes it. Idempotent on (source, externalId): repeating one updates it rather than duplicating it. One bad entry does not fail the rest.
zuuna_link_git_branchesREPLACE-ALL snapshot of a repo's in-flight branches in a group (up to 500). Each needs at least name and headSha; a branch named for a card ("ZNA-249-…" or matching the group's prefix) links automatically. An empty branches array is refused unless confirmEmpty is true — that guard exists so a half-failed snapshot cannot silently wipe the page.
zuuna_list_active_timersList every running timer visible to this token, optionally filtered to one member by email.
zuuna_list_attachmentsList a card's attachments (metadata only: id, filename, MIME type, size, who uploaded it).
zuuna_list_automationsRead a board's automation rules: trigger, conditions, actions, enabled, recent run outcomes. Read-only — automations cannot be created or edited through this server, only inspected. A sendWebhook action's URL is redacted (it can carry a chat-app incoming-webhook secret).
zuuna_list_board_cardsList a board's cards, in board order by default (column then position). `archived` narrows to false|true|all (default false); `updatedSince` (ISO 8601) narrows to cards changed after it, for incremental sync.
zuuna_list_board_fieldsRead the custom fields attached to a board: id, name, type, in display order. For SELECT, MULTISELECT and TAGS fields, options is the option vocabulary a card's customFields value may use; for every other type options is null. update_card's customFields argument is keyed by these field ids.
zuuna_list_card_timeList logged time entries on a card, newest first, plus the card's total seconds.
zuuna_list_checklistRead a card's checklist: every item plus the total/completed counts the card face shows.
zuuna_list_columnsList a board's columns in order — id, title, isDone, statusCategory, position, WIP limit, SLA hours. These columnId values are what a card move expects.
zuuna_list_commentsRead a card's discussion, oldest first — the order it happened, and the order an incremental sync appends in.
zuuna_list_deploymentsList deployment history, optionally narrowed to a group and/or environment.
zuuna_list_epicsList a group's epics — id, key, title, colour. An epic is a real card (Prisma model Label; the UI calls it an Epic), so its key resolves through the ordinary card tools too.
zuuna_list_group_cardsList every card in a group, whether it stands on a board or in the group's backlog (a board-less card, columnId null). Use this to discover backlog cards — no other list surfaces them. `placement` narrows to board|backlog|all (default all).
zuuna_list_group_membersList a group's members: id, name, email. These ids are the valid values for a card's assigneeIds.
zuuna_list_groupsList the workspace's groups (Prisma model Team; the UI calls this a Group — it owns boards, sprints, releases and the card-key prefix). A restricted group this token may not act in is omitted, not merely flagged. The returned id is what every groupId argument elsewhere expects.
zuuna_list_recurring_cardsList a board's recurring-card series, paused and active both.
zuuna_list_relationsList a card's relations to other cards (blocks, depends on, subtask of, scheduling links, ...), each with its direction relative to this card.
zuuna_list_releasesList a group's releases, optionally narrowed to a state (PLANNED|RELEASED|ARCHIVED).
zuuna_list_sprintsList the workspace's sprints, optionally narrowed to one group and/or state (PLANNED|ACTIVE|CLOSED).
zuuna_list_webhook_deliveriesRead an endpoint's last 20 delivery attempts (payload truncated to 2 KB; a payload naming a board this token cannot read is redacted).
zuuna_list_webhooksList this workspace's webhook endpoints. Never returns a signing secret (only the create call does, once).
zuuna_log_timeLog a CLOSED time entry on a card — work already done. Provide seconds or a duration string ("2h 30m"). For an ongoing timer use zuuna_start_timer / zuuna_stop_timer instead.
zuuna_meShow the identity of the Zuuna API token in use: organization, plan, granted scopes and — only when the workspace's subscription has lapsed — the grace-window deadline after which every call here will start failing. Also lists, as hiddenTools, every tool this token's scopes hide, each with the scope(s) that would unlock it. Call this first to learn what this token may do; a tool absent from the to
zuuna_move_cardMove a card to another column on the SAME board. Give the target column by id or by title (resolved against the card's own board). For moving to a DIFFERENT board use zuuna_move_card_to_board.
zuuna_move_card_to_boardMove a card to a DIFFERENT board (cross-board move). Optional targetColumnId; omitted, the card lands in the target's default column for its current status category.
zuuna_record_git_eventsRecord git events (commit/branch/pr, up to 1000 per call) via smart-commits ("PREFIX-123" in the ref or message) to link them to cards.
zuuna_remove_card_from_sprintwrite actionTake a card out of its sprint (clears its sprint membership). A card standing on the sprint's OWN materialized board leaves it for the group's backlog; a card on an ordinary board stays exactly where it is.
zuuna_report_ci_checksRecord CI status checks (up to 1000 per call), each attached to whichever card its commit/branch/PR or description names.
zuuna_report_deploymentReport a deployment's progress (building|succeeded|failed|...) or update the one in flight. Idempotent on (environment, externalId) — repeat callbacks from the same CI run update ONE row. groupId binds it to a release/board pipeline; omitted, it is still recorded workspace-wide.
zuuna_restore_cardPull a card back out of Trash. Refused if the workspace is at its card limit (an archived+trashed card is exempt).
zuuna_search_cardsSearch cards workspace-wide: the one list that needs no board or group id up front. Filters narrow: q (case-insensitive text in title + description), groupId, boardId, columnId, assigneeId, epicId, priority (HIGHEST|HIGH|NORMAL|LOW|LOWEST), label (a tag option id or "<fieldId>:<optionId>" token). archived narrows to false|true|all (default false); updatedSince (ISO 8601) narrows to cards changed a
zuuna_start_timerStart a running timer on a card. Idempotent: starting an already-running timer for the same person is a no-op, not an error. Optional userEmail delegates the timer to another workspace member (e.g. relaying a Slack action) — resolved against THIS workspace's membership only.
zuuna_stop_timerStop a card's running timer, closing it at the elapsed duration. A no-op (not an error) if nothing is running.
zuuna_test_webhookwrite actionSend a real `ping` delivery to one endpoint, regardless of its subscribed events, and report the fresh delivery status.
zuuna_unarchive_cardRestore an archived card to active (the inverse of zuuna_archive_card). Refused if the workspace is at its card limit.
zuuna_update_cardwrite actionEdit a card. Only the fields you send change: title, description, priority, type, dueDate, startDate, estimateSeconds, storyPoints, ready, columnId (move within the SAME board — a cross-board move is zuuna_move_card_to_board), assigneeIds (REPLACES the full set; [] clears everyone), customFields (object keyed by field id; null/empty clears one — zuuna_list_board_fields names the ids and the option
zuuna_update_checklist_itemwrite actionRename and/or tick a checklist item. Only the fields you send change.
zuuna_update_epicwrite actionEdit an epic. Only the fields you send change: title, description, colour.
zuuna_update_recurring_cardwrite actionEdit a series' interval, end date and/or pause state (enabled). Resuming a paused series re-schedules its next run from now, so it never bursts out catch-up cards.
zuuna_update_releasewrite actionCorrect a release. action=edit changes name/description/releaseDate/notes/tag (only the fields you send); unpublish reverts a RELEASED release to PLANNED (keeps its shipped-card archive); archive/unarchive is a display filter, not a data lock.
zuuna_update_sprintwrite actionUpdate a sprint's name/goal/dates. Only the fields you send change. Sprint lifecycle (start/close) is not exposed here — it materializes boards and archival metrics and stays an in-app action.
zuuna_update_time_entrywrite actionCorrect a logged time entry's duration and/or note. Refused while the entry's timer is still running — stop it first.
zuuna_update_webhookwrite actionEdit a webhook endpoint. Only the fields you send change; enabled: false is how a subscriber pauses itself without losing the registration.
zuuna_upload_attachmentwrite actionUpload a file onto a card from a local file path, or from base64 plus a filename. The same limits the REST upload route enforces apply and its errors surface verbatim: 10 MB per file, the workspace storage cap (409 limit_reached), executable extensions refused, and the token creator needs a verified email.
Public scan report
scanner v0.1.10 · 2026-10-02 · same rubric, same numbers if you re-run it
- Code scan53 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenancelast push 7 days ago15/15
- Maintainer identityregistry namespace matches repository owner6/10
How Zuuna compares
Against every graded Developer tools MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 80/100
- higher than 55% of 1,119 Developer tools servers
- Tools
- 73
- the typical Developer tools server has 7
- Tools that change things
- 38%
- typical: 5%. Fewer write tools means less an agent can break
- Downloads a week
- 479
- more than 85% of 436 Developer tools servers with a package
What its tools let an agent do: 45 read · 28 change
Release history: 4 versions in the registry since 2026-09-18, latest 2026-09-26, typically one every 3 days.
Install Zuuna in Claude Code, Cursor or VS Code
Runs npx -y mcp-server-zuuna on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add mcp-server-zuuna -- npx -y mcp-server-zuuna
What the publisher says
From the Zuuna repository's README, as published. We do not edit it. Read it on GitHub
mcp-server-zuuna
Agent-native board access for Zuuna — 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, Zuuna's git integration moves the card. Zuuna
provides the interface and the verifiable board truth — the agent writes the code, not Zuuna.
Status
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.
Tools
Behavioral notes:
message plus status and machine code) — e.g. 409 wiplimitreached when a HARD WIP limit refuses a move.
- Errors come back as MCP tool errors with the API's own message (the v1 envelope's
15 s (configurable) and surface as network errors.
- One request, no retries: 4xx answers are never re-sent. Requests time out after
the key as the handle.
- Card display keys like ZNA-2001 work anywhere a card is addressed — the v1 API accepts
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_board pages the card list (200 cards per page, the v1 API's own cap) so a big
same key after a lost response or a 5xx returns the original card (200) instead of minting a duplicate.
- zuunacreatecard accepts an optional client-chosen idempotencyKey: re-sending the
Setup
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:
Claude Code
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Zuuna: common questions
- Is Zuuna MCP server safe?
- Mostly: it is graded B (80/100). Read the Zuuna safety report
- How do I install Zuuna?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does Zuuna need an API key?
- Yes. The registry entry asks for
ZUUNA_API_TOKEN. - Is Zuuna maintained?
- The last commit was 39 days ago (2026-09-26). The latest release is v0.3.0.
- What can I use instead of Zuuna?
- Servers from other publishers that do the same job: Agent Memory MCP server, Repowise MCP server and Foremerge MCP server. Compare all Zuuna alternatives.
- How does Zuuna compare with other Developer tools MCP servers?
- safety score 80/100 (higher than 55% of 1,119 Developer tools servers); tools 73 (the typical Developer tools server has 7); tools that change things 38% (typical: 5%. Fewer write tools means less an agent can break). Full comparison.
Alternatives to Zuuna
Same job from other publishers: the closest match first, then the best rated.
- Agent MemoryGit-native project memory for AI coding agents: Markdown source of truth, reviewable, secret-safe.not reviewedGrowingA
RepowiseCodebase intelligence for AI coding agents — graph, git history, docs, decisions, code health.not reviewedEstablishedB- ForemergeCoordinate parallel coding agents, above Gitnot reviewedGrowingA
- NexusmemLocal-first memory for AI coding agents: shell history with exit codes, git diffs, docs, MCP.not reviewedGrowingA
- komnetLets AI coding agents coordinate asynchronously through a private git repository. No server.not reviewedGrowingA