MCP server bridging Claude Code with the Kanban Tool API v3.
Project description
kanbantool-mcp
An MCP server that connects Claude Code (and other MCP clients) to a Kanban Tool account.
Why this exists
Kanban Tool holds the authoritative state of your boards, tasks, and workflow — but an LLM can't see any of it without help. This MCP server gives Claude Code (and any other MCP client) read access to boards and tasks, search via Kanban Tool's query DSL, and write tools to create, update, move, archive, comment on, and break down tasks. The point: stop re-explaining your kanban state to the model on every interaction, and let it act on the board directly when you want it to.
Status
Alpha. The 12-tool surface is settled and exercised against a real Kanban Tool account via the Live Integration workflow. Pre-1.0 means the surface may still evolve based on real-world feedback — pin a specific version if you need stability across upgrades.
Install
Configuration
Two environment variables, regardless of how you launch the server:
| Variable | What it is | Where to get it |
|---|---|---|
KANBANTOOL_DOMAIN |
Your account's subdomain prefix — acme for https://acme.kanbantool.com. |
The URL you log into. |
KANBANTOOL_API_TOKEN |
Bearer token for the Kanban Tool API v3. | Profile -> API tokens in your Kanban Tool account. |
From git (current)
Add to your MCP client's mcp.json:
{
"mcpServers": {
"kanbantool": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/VeryLongOrgNameSuchWow/kanbantool-mcp",
"kanbantool-mcp"
],
"env": {
"KANBANTOOL_DOMAIN": "your-account",
"KANBANTOOL_API_TOKEN": "your-token"
}
}
}
}
From PyPI
{
"mcpServers": {
"kanbantool": {
"command": "uvx",
"args": ["kanbantool-mcp"],
"env": {
"KANBANTOOL_DOMAIN": "your-account",
"KANBANTOOL_API_TOKEN": "your-token"
}
}
}
}
Tool reference
| Tool | Purpose | Key params |
|---|---|---|
list_boards |
List boards visible to the authenticated user. | — |
get_board |
Fetch a board with its columns, swimlanes, and custom-field definitions. | board_id |
search_tasks |
Search tasks across boards using Kanban Tool's query DSL (e.g. @alice priority:high tags:bug). Forwarded to the API verbatim. |
query, board_id?, limit?, page? |
get_task |
Fetch a task by id with headline metadata, subtask/comment counts, and tracked time. | task_id |
recent_changes |
Fetch the changelog feed for a board — the change-tracking primitive that stands in for webhooks (Kanban Tool ships none). Poll sparingly, always with since. |
board_id, since? |
create_task |
Create a new task on a board. Optional kwargs are omitted when unset. | name, board_id, description?, lane_id?, priority?, tags?, ... |
update_task |
Partial update of an existing task; only kwargs the caller passes are sent. None means omit, not clear. |
task_id, name?, description?, priority?, ... |
move_task |
Move a task between columns, swimlanes, or positions. At least one target must be set. | task_id, column_id?, swimlane_id?, position? |
archive_task |
Archive a task. Idempotent. | task_id |
add_comment |
Post a comment on a task. | task_id, text |
list_subtasks |
List subtasks attached to a task. | task_id |
add_subtask |
Add a subtask to a task. | task_id, title |
(ping exists as a transport smoke test; not listed above.)
Examples
These transcripts are illustrative — they show the shape of a session, not literal terminal output.
Read flow
User: What's on my Engineering board right now?
Assistant: (calls list_boards) -> finds "Engineering" with id 4217
(calls get_board 4217) -> reads columns: Backlog / Doing / Review / Done
(calls search_tasks
query="archived:false",
board_id=4217) -> 14 active tasks, grouped by column
Engineering has 14 active cards. Doing (3): "Migrate auth to OIDC",
"Flaky CI on macOS", "Add rate-limit headers". Review (2): ...
Write flow
User: Create a high-priority task in Engineering called "Fix login bug",
and leave a comment that I'm picking it up today.
Assistant: (calls list_boards) -> resolves "Engineering" -> id 4217
(calls create_task
name="Fix login bug",
board_id=4217,
priority="high") -> task id 88231 created
(calls add_comment
task_id=88231,
text="Picking this up today.")
Created "Fix login bug" (id 88231) in Engineering at high priority,
and added your comment.
Development
git clone https://github.com/VeryLongOrgNameSuchWow/kanbantool-mcp.git
cd kanbantool-mcp
uv sync
uv run pytest
uv run ruff check .
uv run ty check
Tests are offline-only and mock HTTP via respx — no Kanban Tool account needed to contribute.
Security
See SECURITY.md for how to report vulnerabilities.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kanbantool_mcp-0.1.0.tar.gz.
File metadata
- Download URL: kanbantool_mcp-0.1.0.tar.gz
- Upload date:
- Size: 113.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2de4bc2ecce82ad1620a8d61d3f6ebcaa6790280b534b59a3526403d67a82c6d
|
|
| MD5 |
b310cfab12cf5e04c556fc4b1eb9dbeb
|
|
| BLAKE2b-256 |
232f93c00f290db9e5359b744be6e40edc5e49802d9c0f89af01b4cba31bdd96
|
Provenance
The following attestation bundles were made for kanbantool_mcp-0.1.0.tar.gz:
Publisher:
release.yml on VeryLongOrgNameSuchWow/kanbantool-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kanbantool_mcp-0.1.0.tar.gz -
Subject digest:
2de4bc2ecce82ad1620a8d61d3f6ebcaa6790280b534b59a3526403d67a82c6d - Sigstore transparency entry: 1417634049
- Sigstore integration time:
-
Permalink:
VeryLongOrgNameSuchWow/kanbantool-mcp@483a5cc9e965d3ee33921c4062e074f22b469e66 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/VeryLongOrgNameSuchWow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@483a5cc9e965d3ee33921c4062e074f22b469e66 -
Trigger Event:
push
-
Statement type:
File details
Details for the file kanbantool_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: kanbantool_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 19.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33449e39619069b8353f9672b2ea7687bb68d5b66795e962c716d24d398221ae
|
|
| MD5 |
2c3a484614c58b3a84e1aa887cb4f7c5
|
|
| BLAKE2b-256 |
27c354f2262bd5d06d0665cb64acd853fd0ec05c6e39afd350c2460af1c0797d
|
Provenance
The following attestation bundles were made for kanbantool_mcp-0.1.0-py3-none-any.whl:
Publisher:
release.yml on VeryLongOrgNameSuchWow/kanbantool-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kanbantool_mcp-0.1.0-py3-none-any.whl -
Subject digest:
33449e39619069b8353f9672b2ea7687bb68d5b66795e962c716d24d398221ae - Sigstore transparency entry: 1417634051
- Sigstore integration time:
-
Permalink:
VeryLongOrgNameSuchWow/kanbantool-mcp@483a5cc9e965d3ee33921c4062e074f22b469e66 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/VeryLongOrgNameSuchWow
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@483a5cc9e965d3ee33921c4062e074f22b469e66 -
Trigger Event:
push
-
Statement type: