sanban
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., "@sanbancreate a new board for sprint planning"
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.
sanban
Simple kanban that just works. No bloat, no login, no SaaS.
JSON-backed boards with a REST API, MCP server, and a dark UI. For devs who want tasks tracked without the overhead.
Screenshots

Related MCP server: Obsidian Kanban MCP Server
Quick Start
uv sync
uv tool install .
sanban # http://localhost:8900The web server runs independently. Agents connect via MCP separately.
Setup with an AI Agent
Paste this into opencode, Claude Code, Cursor, or any AI agent — it will install sanban, start the server, register MCP, load the skill, and verify everything:
Clone https://github.com/aancw/sanban, run `uv tool install .` from inside the repo (binary lands at ~/.local/bin/sanban — ensure ~/.local/bin is on PATH, e.g. `export PATH="$HOME/.local/bin:$PATH"`), start the server with `sanban` running in the background (or nohup/disown), register it as an MCP server named "sanban" running `sanban --mcp-only`, copy SKILL.md from the cloned repo into the agent's skills folder (e.g. ~/.claude/skills/sanban/SKILL.md or ~/.agents/skills/sanban/SKILL.md), then call `list_boards` to confirm it works.Features
Multiple boards with custom columns
Drag-and-drop between columns
Priority, effort, tags, assignees, due dates
Full-text search and filters
Markdown in titles and descriptions (code blocks with syntax highlighting)
Edit and delete buttons on every card
Keyboard shortcuts (
/search,nnew,eexpand)Agent-ready via MCP server
Why
No database — one JSON file per board in
~/.sanban/boards/, easy to diff, commit, back upNo auth — local-first, runs on localhost
No framework — vanilla JS frontend, Geist font, dark mode
Multi-board — one server, unlimited boards
REST API
Method | Endpoint | Description |
|
| List all boards |
|
| Create board |
|
| Get board with items |
|
| Delete board |
|
| List items ( |
|
| Create item |
|
| Update item |
|
| Delete item |
|
| Search across boards |
MCP Server
Agents interact with boards via MCP stdio. This is a separate process from the web server — both read/write the same JSON files.
Agent Config (opencode.json)
{
"mcp": {
"sanban": {
"type": "local",
"command": ["sanban", "--mcp-only"],
"enabled": true
}
}
}Or running from source:
{
"mcp": {
"sanban": {
"type": "local",
"command": ["uv", "run", "--directory", "/path/to/sanban", "python", "-m", "sanban.server", "--mcp-only"],
"enabled": true
}
}
}Other agents: Adapt the config format for your CLI agent (Claude Desktop, Cursor, etc.). The command is always
sanban --mcp-only— only the config wrapper changes.
Tools
Tool | Description |
| List all boards |
| Create a new board |
| Get board details + items |
| Add an item |
| Update fields |
| Move to column |
| Remove item |
| Search across boards |
Run Modes
sanban # web server (REST API + UI) — keep this running
sanban --mcp-only # MCP stdio — for agent config
sanban --rest-only # REST only, no UI
sanban --port 9000 # custom portTypical setup: run sanban in a terminal (or background it), then add sanban --mcp-only to your agent config. Both use the same ~/.sanban/boards/ data.
Data
Boards live in ~/.sanban/boards/<id>.json. Override with SANBAN_DATA_DIR.
For Agents
See SKILL.md for the full agent reference — API examples, MCP tools, item fields, and keyboard shortcuts.
Tech
Python 3.10+, FastAPI, uvicorn, MCP SDK. No database, no framework, no build step.
License
MIT
Available Tools
8 toolscreate_boardA
Create a new kanban board.
Args: name: Board name columns: Column names (default: backlog, in_progress, done)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| columns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only says 'create' without mentioning side effects, permissions, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two lines, front-loading the purpose and parameter info with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool with an output schema, the description covers purpose and params but lacks usage guidelines and behavioral detail, leaving gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds meaning by stating name is board name and columns are column names with default, exceeding the schema's type-only info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new kanban board' with a specific verb and resource, distinguishing it from sibling tools like create_item and get_board.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives, nor prerequisites or context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_itemB
Create an item on a board.
Args: board_id: Board ID title: Item title status: Column/status to place it in description: Full description priority: critical/high/medium/low/none effort: XS/S/M/L/XL tags: List of tags assignee: Assigned person due_date: Due date (ISO format)
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | ||
| title | Yes | ||
| status | No | backlog | |
| description | No | ||
| priority | No | none | |
| effort | No | ||
| tags | No | ||
| assignee | No | ||
| due_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only lists parameters and does not disclose behavioral traits like side effects, authentication needs, rate limits, or what happens on creation (e.g., success response).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description starts with a clear purpose sentence followed by a bullet-list of parameters. It is concise and well-structured, though the parameter list could be slightly more front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, 0% schema coverage, and no annotations, the description explains all parameters but lacks behavioral context and usage guidance. It does not mention output schema, even though one exists. With sibling tools, some guidance on when to create vs update would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description adds all parameter meaning. It explains each parameter with brief but sufficient descriptions, including enums for priority and effort. Some explanations are terse but overall informative.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create an item on a board.' This is a specific verb and resource that distinguishes it from siblings like create_board, delete_item, update_item, and move_item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. There is no mention of prerequisites, when not to use, or how it compares to update_item or other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_itemC
Delete an item from a board.
Args: board_id: Board ID item_id: Item ID
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | ||
| item_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits such as irreversibility, permission requirements, or side effects. It simply states 'Delete' without implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short but lacks necessary detail. Its brevity comes at the cost of completeness, making it under-specified for an effective tool definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no parameter explanations, and no mention of return values or error handling (despite an output schema existing), the description is insufficient for understanding the full context of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%; the description lists parameter names but adds no explanations beyond the schema. The schema already provides titles, so the description offers no added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete an item from a board,' specifying the verb and resource. It is concise and distinguishes from siblings like create_item, update_item, and move_item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, prerequisites, or exclusions. The description lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_boardB
Get board details and all items.
Args: board_id: Board ID
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It implies a read operation by saying 'Get,' but does not explicitly state that it is non-destructive or safe, nor does it mention permissions, rate limits, or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise at two short sentences, with the key purpose stated first. However, it could be slightly more informative without adding verbosity, such as clarifying the return type or board ID format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter and an output schema exists, the description adequately covers the basic inputs and outputs ('Get board details and all items'). It is complete enough for a simple read action, though it lacks context on filtering or pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% coverage (no description for the parameter), and the description only repeats the parameter name ('board_id: Board ID'), adding no semantic meaning beyond the name. For a tool with one parameter, the description should clarify what constitutes a valid board ID or how to obtain it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies 'Get board details and all items,' clearly indicating the verb (Get) and resource (board details and items). This distinguishes it from sibling tools like list_boards, which likely returns summary information, and create_board, which writes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like list_boards or search. It does not specify prerequisites or when not to use it, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_boardsA
List all kanban boards.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavioral traits. It fails to mention key aspects: whether pagination, filtering, or ordering are supported, or if it returns all fields or summaries. For a list operation, these details are important for effective use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no wasted words. It is front-loaded with the core functionality and perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, output schema exists), the description is mostly complete. However, it could hint at whether the list is comprehensive or filtered, and at the expected return format. Still, it meets the basic needs for a straightforward list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema description coverage. While the description does not add semantic meaning beyond the schema, the absence of parameters makes any additional explanation unnecessary. Baseline 4 for 0 parameters is justified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all kanban boards' clearly states the action (list) and the resource (kanban boards). It is a specific verb+resource pair that distinguishes it from sibling tools like get_board (likely single board) and create_board.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives like get_board or search. However, the simple list operation implicitly suggests it is for obtaining an overview of all boards, which is a typical use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_itemB
Move an item to a different column/status.
Args: board_id: Board ID item_id: Item ID new_status: Target column name
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | ||
| item_id | Yes | ||
| new_status | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only states the action without mentioning side effects, permissions required, idempotency, or whether the move is reversible. This is insufficient for safe tool invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single sentence followed by a clean argument list. No unnecessary words, and the purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (per context signals), the description omits crucial context: it doesn't clarify when to use this over update_item, doesn't specify constraints on new_status (e.g., valid column names), and lacks behavioral details. For a move operation, the description is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides basic descriptions for each parameter: 'Board ID', 'Item ID', and 'Target column name'. The last adds a bit of meaning beyond the parameter name, but overall the descriptions are minimal and redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: moving an item to a different column or status. The verb 'Move' and resource 'item' are specific, and it distinguishes this tool from sibling tools like create, delete, get, list, search, and especially update_item, as moving implies a specific type of update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like update_item. It does not mention prerequisites, when not to use it, or how it relates to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Search items across all boards or within a specific board.
Args: query: Search query board_id: Optional board ID to restrict search
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| board_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry full burden. It only states basic purpose; no details on return format, limitations, sorting, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Highly concise with two clear sentences plus argument list. Every sentence is purposeful and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, return values are covered. Description adequately explains search scope and optional filter, though could mention more context like result set size limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%; description adds brief meaning for query ('search query') and board_id ('optional board ID to restrict search'), but lacks details like query syntax or board ID format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb 'Search' and resource 'items across all boards or within a specific board', clearly differentiating from sibling tools that create, update, or delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly indicates when to use (search items) and specifies the optional board_id to restrict scope, but does not explicitly mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_itemC
Update an item's fields.
Args: board_id: Board ID item_id: Item ID title: New title status: New status/column description: New description priority: New priority effort: New effort estimate tags: New tags list assignee: New assignee due_date: New due date sort_order: New sort order
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | ||
| item_id | Yes | ||
| fields | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits. It states 'Update an item's fields' but does not specify whether updates are overwrites or merges, what happens to unspecified fields, or any permission requirements. The parameter list is misleading as it suggests separate parameters when the schema has only three.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a long, code-style parameter listing that is not concise. It could be shortened and restructured to highlight key points first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity with many fields in an object, the description is incomplete. It does not explain the 'fields' object structure, nor does it mention the output schema content. The description could help by clarifying the parameter hierarchy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage. The description adds a list of field names (title, status, etc.) that are presumably inside the 'fields' object, providing some meaning beyond the bare schema. However, the structure of 'fields' is not explained, leaving ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool name 'update_item' with description 'Update an item's fields' clearly indicates the action and resource. However, it does not differentiate from sibling tools like 'move_item' or 'create_item', which could be confused.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not mention context, prerequisites, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
create_board - First observed
create_item - First observed
delete_item - First observed
get_board - First observed
list_boards - First observed
move_item - First observed
search - First observed
update_item
TDQS
Scored across 8 tools
Each tool has a clear, distinct purpose: board creation, item CRUD, movement, and search. No overlap in functionality.
Most tools follow a verb_noun pattern (e.g., create_item, delete_item). The 'search' tool deviates slightly without a noun, but it's a common, acceptable exception.
8 tools is well-scoped for a kanban board server, covering essential operations without excess.
Covers core item CRUD and board creation/listing, but missing board update and delete operations, which are notable gaps for full lifecycle management.
Maintenance
Related MCP Connectors
Task & board management for AI agents + humans. Kanban, comments, digests via MCP.
Read and manage your EasyKanban kanban boards: to-do summaries, create, update, and move cards.
Remote MCP for Kanban AI boards—manage projects, tasks, and comments from AI tools.
Kanban board for teams and coding agents: manage tasks, subtasks, sprints and wiki pages via MCP.
Related MCP Servers
FlicenseAqualityDmaintenanceEnables AI agents to interact with Yokan Kanban Board API to manage boards, columns, and tasks through a tool-based interface.172-- FlicenseAqualityDmaintenanceEnables users to manage Obsidian Kanban boards within a vault by listing, reading, and creating boards or tasks. It supports moving tasks between columns and adding detailed task metadata via the Obsidian Kanban plugin.51-
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to create, update, list, and delete tasks on a Kanban board via the Model Context Protocol, supporting multi-project management and real-time collaboration.102MIT
- AlicenseNot gradedqualityAmaintenanceEnables agents to read and drive a local-first Kanban board for issue tracking, allowing them to list, create, update, and resolve issues from Claude Code sessions.3 npm1MIT