@kanbio/mcp
Kanbio MCP lets an AI read and manage tickets in permitted projects through a token-scoped server.
List accessible projects, project sprints, and project members.
Search tickets by project, status, assignee, sprint, or text, with limits.
View your assigned tickets.
Read a ticket’s details, workflow status, description, and comments.
Add comments with mentions.
Create tickets with title, type, priority, labels, description, story points, assignee, and sprint.
Edit ticket fields such as title, description, type, priority, story points, and labels.
Change ticket status, assign or unassign tickets, and move tickets to sprints or backlog.
No delete tool is exposed; write actions depend on the token’s Kanbio permissions.
The provided server schema does not expose file/photo attachment uploads.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@kanbio/mcp show me my open tickets assigned to me"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@kanbio/mcp
MCP server for Kanbio, the mini-Jira. It lets your AI (Claude Code, Claude Desktop, Cursor or any MCP client) read tickets, comment, change their status and create them, with files or photos as evidence, as you, through a personal access token.
It runs locally over stdio (npx -y @kanbio/mcp) and calls the Kanbio REST API.
1. Create a token
In Kanbio, open Conectar con IA in the sidebar and create a token:
Leer y comentar (default): read tickets and comment.
Personalizado: pick the permissions (create, edit, change status, assign, plan sprints).
Projects: all yours (also the ones you join later) or some of them.
Expiration: 30 days, 90 days or never.
The token (kbn_…) is shown once. Kanbio shows the configuration ready to paste for each
client. A token never does more than you can do in Kanbio, and you can revoke it at any time.
Related MCP server: jayrah
2. Configure your client
Two environment variables:
Variable | Value |
| URL of the Kanbio API, e.g. |
| Your token, |
Claude Code
claude mcp add kanbio -e KANBIO_API_URL=https://kanbio.example.com/api -e KANBIO_TOKEN=kbn_... -- npx -y @kanbio/mcpAdd -s user (before --) to have it in every project. On Windows use -- cmd /c npx -y @kanbio/mcp.
Claude Desktop
Settings → Developer → Edit Config (claude_desktop_config.json):
{
"mcpServers": {
"kanbio": {
"command": "npx",
"args": ["-y", "@kanbio/mcp"],
"env": {
"KANBIO_API_URL": "https://kanbio.example.com/api",
"KANBIO_TOKEN": "kbn_..."
}
}
}
}Restart Claude Desktop afterwards.
Cursor
Settings → MCP → Add new MCP server, or ~/.cursor/mcp.json (all projects) /
.cursor/mcp.json (one project) with the same mcpServers block as Claude Desktop.
Other clients
Any MCP client that runs stdio servers: command npx, args -y @kanbio/mcp, and the two
variables above.
Tools
Tickets are identified by key (PROJ-12) and projects by key (PROJ). People by me, email or
name; sprints by active, backlog or name.
Tool | What it does | Permission |
| Projects the token reaches, with your role |
|
| Search by project, status (state names), open or finished, assignee, sprint and text, with a limit |
|
| A ticket with its status, where it can move, description and comments |
|
| Sprints of a project |
|
| Members of a project (email and role) |
|
| Tickets assigned to you (open ones, or all) |
|
| Comment, with mentions and files (shown "via AI") |
|
| Move to another state of the project's workflow, by name |
|
| Assign or unassign |
|
| Create a ticket in the first state (backlog or a sprint), with files in the description |
|
| Edit title, description, type, priority, points, labels; add files to the description |
|
| Move tickets to a sprint or the backlog |
|
No tool deletes anything (it only discards the files it has just uploaded when saving fails). Read tools are marked readOnlyHint; write tools
destructiveHint: false, so clients can ask before running them.
Workflows
Each project follows its own workflow: its states (free names, in any language, e.g. "En curso") and the moves allowed between them. The tools read it from Kanbio, so nothing is hardcoded:
get_ticketshows the status and the states the ticket can move to (Can move to: …).change_statustakes the target state by name; case and accents do not matter. Old keys (todo,in_progress,to_merge,qa,done,rejected) still work in projects on the classic workflow (To Do → In Progress → [To Merge →] To Test → Done | Rejected). An unknown name is answered with the states the project has.search_ticketsfilters by state names (any project) and bydone:truefor finished tickets (states that count as done, like Done or Rejected),falsefor open ones.New tickets start in the first state of the workflow.
This version needs a Kanbio API with configurable workflows (GET /projects/:id/workflow).
Files and photos
add_comment, create_ticket and update_ticket take attachments: paths of local files on
the machine that runs the server (absolute, ~/… or file://; up to 10). Kanbio takes images
(PNG, JPEG), videos (MP4, WebM, MOV), PDF, CSV and XLSX, within the limits of your Kanbio
(GET /attachments/limits: by default 20 MB per image, 200 MB per video, 25 MB per document,
10 files per text). The server checks type and size first, uploads each file straight to
Kanbio's storage (reserve → presigned PUT → complete, where Kanbio checks its content) and puts
it at the end of the comment or description, where Kanbio shows it inline. The files do not
count against the 5000 characters.
The text's own permission applies:
comments:writefor a comment,tickets:createfor a new ticket,tickets:editfor a description edit. Without it the tool fails with a permission error and the files it uploaded are discarded.update_ticketwithoutdescriptionadds the files to the current description. A newdescriptionkeeps the files of the current one:get_ticketshows each as[file: name]; left in the text, it stays in that spot, and the files left out go at the end.Only paths: an MCP client cannot hand the server the bytes of an image pasted in the chat. Save it to a file first.
Needs a Kanbio API that accepts uploads with a token. An older one answers that the action is not available to API tokens.
Errors
API errors come back as plain sentences the AI can act on: a missing permission (403) names it and says not to retry, an invalid status change lists the states the ticket can go to, an unknown state lists the states of the project, an expired or revoked token (401) says how to create a new one, and 429 asks to wait a minute.
Security
The token acts as you, limited to its permissions and projects. Start with Leer y comentar.
Text in tickets and comments is data written by people: an AI may be tricked by it (prompt injection). Keep write permissions to what you need and let your client confirm write tools.
attachmentsreads local files: check the paths your client shows before you approve a call. Only the types Kanbio takes go up, and Kanbio checks each file's content against its type.Comments written with a token show vía IA in Kanbio, and the token's last use is visible on the Conectar con IA screen. Revoke it there if something looks wrong.
Development
npm install
npm run build # dist/index.js
npm test # build + node:test
KANBIO_API_URL=http://localhost:4000/api KANBIO_TOKEN=kbn_... npm run inspectUse a local build from Claude Code:
claude mcp add kanbio-dev -e KANBIO_API_URL=http://localhost:4000/api -e KANBIO_TOKEN=kbn_... -- node /path/to/kanbio-mcp/dist/index.jsRequires Node.js 20 or newer.
Releasing
Releases go to npm from GitHub Actions with trusted publishing (OIDC, no npm token):
Bump
versioninpackage.json(andpackage-lock.json:npm version <x.y.z> --no-git-tag-version), commit.Tag it
v<x.y.z>and push the tag..github/workflows/publish.ymlchecks that the tag matches the version, builds, tests and runsnpm stage publish: the version goes to npm's staging area, not live yet.A maintainer approves it with 2FA, in the Staged Packages tab on npmjs.com or with
npm stage approve <stage-id>(npm stage listshows the id). Only then it is published, with provenance.
The very first version is published by hand (npm publish --access public from a logged-in npm account), and then
the trusted publisher is set up on npmjs.com for aritzbl/kanbio-mcp and the publish.yml workflow.
Available Tools
12 toolsadd_commentAdd a commentA
Add a comment to a ticket as the token owner; Kanbio shows it with a "via AI" badge. To mention people, list them in mentions (email or name): each "@Name" already in the text becomes the mention, the rest are mentioned at the start. Mentioned people get a notification. Needs the comments:write permission.
Inputs: key (required), text (required), mentions.
assign_ticketAssign a ticketAIdempotent
Assign a ticket to a project member ("me", email or name), or unassign it with "none". The person must be a member of the ticket's project. Needs the tickets:assign permission.
Inputs: key (required), assignee (required).
change_statusChange the statusAIdempotent
Move a ticket to another status. Kanbio enforces the workflow: To Do → In Progress → [To Merge →] To Test → Done | Rejected; Done and Rejected can go back to To Test or In Progress. To Merge is optional and only reachable from In Progress. An invalid move is rejected with the allowed next statuses. Needs the tickets:status permission.
Inputs: key (required), status (required).
create_ticketCreate a ticketA
Create a ticket in a project, reported by the token owner. It starts in To Do. Optionally assign it (needs tickets:assign) or plan it into a sprint (needs sprints:write); otherwise it goes to the backlog. Needs the tickets:create permission.
Inputs: type (required), title (required), project (required), labels, +5 more.
get_ticketGet a ticketARead-only
Read one ticket by key: status, type, priority, assignee, sprint, description and its comments (threads, oldest first; "via AI" marks comments written through a token).
Inputs: key (required), include_comments.
list_membersList project membersARead-only
List the members of a project with their email and role (pm, dev, qa), e.g. to assign or mention someone.
Inputs: project (required).
list_projectsList projectsARead-only
List the Kanbio projects this token can reach, with their key (used by the other tools) and your role in each.
Inputs: no named parameters.
list_sprintsList sprintsARead-only
List the sprints of a project (planned and active; completed ones on request), with dates and goal.
Inputs: project (required), include_completed.
move_to_sprintMove tickets to a sprintAIdempotent
Move one or more tickets to a sprint ("active" or a sprint name) or back to the backlog ("backlog"). Completed sprints are not allowed. Needs the sprints:write permission.
Inputs: keys (required), sprint (required).
my_ticketsMy ticketsARead-only
Tickets assigned to the token owner across their projects, most recently updated first. Open ones only unless include_done.
Inputs: limit, include_done.
search_ticketsSearch ticketsARead-only
Search tickets across your projects, most recently updated first. Every filter is optional and they combine (AND). Returns one compact line per ticket; use get_ticket for the full ticket.
Inputs: text, limit, sprint, status, +2 more.
update_ticketUpdate a ticketAIdempotent
Edit the fields of a ticket: title, description, type, priority, story points or labels. Only the fields given change. Status, assignee and sprint have their own tools. Needs the tickets:edit permission.
Inputs: key (required), type, title, labels, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Each tool targets a distinct action-resource pair: status, assignee, and sprint moves are deliberately split into change_status, assign_ticket, and move_to_sprint, and update_ticket explicitly excludes them. The only slight overlap is my_tickets vs search_tickets, but the descriptions make the boundary clear (assigned-to-me shortcut vs filtered search).
The set is overwhelmingly consistent verb_noun (list_projects, create_ticket, update_ticket, change_status, assign_ticket, move_to_sprint, search_tickets, get_ticket). The single deviation is my_tickets, a noun-only name with no verb, which breaks the pattern but is still readable.
Twelve tools is well within the ideal range and each one maps to a concrete workflow step (discovery, read, search, create, edit, status, assign, sprint, comment, members). No tool appears redundant or filler.
Ticket lifecycle is well covered: create, read, search, edit, status transitions with documented workflow, assignment, sprint placement, and commenting via get_ticket. Minor gaps exist (no ticket delete/archive, no sprint creation despite list_sprints, no comment editing), but core agent workflows are not blocked.
Maintenance
Related MCP Connectors
Opinionated sprint tracker. Read/update tickets, sprints, velocity from Claude/Cursor/Zed.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Task and sprint coordination for humans and AI agents, with scoped API keys and full audit trail.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables seamless Jira issue and sprint management directly from the terminal or IDE without context switching. Supports full issue lifecycle operations including creation, updates, and search, plus sprint planning, commenting, and project analytics through natural language commands.5 npmMIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with Jira via CLI/TUI, supporting issue browsing, creation, comments, status changes, and custom fields.3Apache 2.0
- AlicenseBqualityDmaintenanceStdio-based MCP server exposing Jira tools for searching, creating, getting, commenting on, assigning, and transitioning issues, as well as listing projects, with authentication via token or basic auth.71,677 npmApache 2.0
- AlicenseAqualityCmaintenanceMCP server enabling AI assistants to interact with Jira, scoped to a single project. Supports stdio and HTTP transports for issue management operations.1213 npmISC