kanboard-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_LEVEL | No | Pino log level: trace, debug, info, warn, error, fatal | info |
| KANBOARD_URL | No | Base URL of your Kanboard instance, e.g. https://kanboard.example.com | |
| KANBOARD_USERNAME | No | Your Kanboard login username (required in personal mode) | |
| KANBOARD_API_TOKEN | No | API token (personal or application, depending on auth mode) | |
| KANBOARD_AUTH_MODE | No | personal (acts as a Kanboard user) or app (service identity) | personal |
| KANBOARD_TIMEOUT_MS | No | Per-request HTTP timeout in milliseconds | 15000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| add_project_userA | Add a user to a Kanboard project with the given role. Role defaults to 'project-member' if not specified. Use list_project_users to find user ids and list_projects to find project ids; to unlink a member use remove_project_user. Returns { user_id, project_id, role } on success. |
| attach_file_to_taskA | Upload a file to a Kanboard task as an attachment. Provide either file_path (local file) or content_base64 (inline base64 content) — not both. project_id is resolved automatically from the task (no need to provide it). Maximum file size: 5 MB (5,242,880 bytes) — larger files return VALIDATION_ERROR before any HTTP request is made. Returns { file_id } on success. |
| close_taskA | Close (archive) an active Kanboard task. The task is set inactive and leaves the active board but is preserved — this is NOT a delete. Reversible: restore it with reopen_task. To permanently remove a task instead, use delete_task. Returns { ok: true, task_id } on success. |
| create_columnA | Add a column to a Kanboard project board. Project resolved from explicit project_id/project_identifier or .kanboard.yaml. To reorder it use move_column, to rename or change its WIP limit use update_column, to remove it use delete_column. Returns { column_id } on success. |
| create_commentA | Create a comment on a Kanboard task. The comment author is automatically set to the authenticated user (via getMe() cache); do NOT pass user_id — it is injected server-side. To edit a comment's body use update_comment; to remove one use delete_comment. Returns { comment_id } on success. |
| create_projectA | Create a new Kanboard project. Requires a name (1–255 chars). Optionally provide a description, short identifier, owner user id, start_date / end_date (ISO 8601 string or epoch seconds), and email. After creating, adjust the board with create_column / create_swimlane, add members with add_project_user, and edit attributes with update_project. Returns { project_id } on success. |
| create_subtaskA | Create a subtask under an existing Kanboard task. Status: 0 = todo (default), 1 = in progress, 2 = done. To list a task's subtasks use list_subtasks; to edit one use update_subtask. Returns { subtask_id, task_id } on success. |
| create_swimlaneA | Add a swimlane to a Kanboard project. Project resolved from explicit project_id/project_identifier or .kanboard.yaml. To reorder it use move_swimlane, to rename it use update_swimlane, to remove it use delete_swimlane. Returns { swimlane_id } on success. |
| create_taskA | Create a new task in a Kanboard project. Project is resolved from explicit project_id or project_identifier, or from .kanboard.yaml. Optional fields (column_id, owner_id, category_id, swimlane_id) fall back to .kanboard.yaml defaults when not provided. To create many tasks at once use create_tasks_batch; to move the task afterward use move_task_position. Returns { task_id, project_id } on success. |
| create_tasks_batchA | Bulk-create tasks in a Kanboard project using a single JSON-RPC batch request. Accepts 1–100 tasks per call. Non-atomic: partial failure is possible — check failed[] for per-task errors. Optional fields (column_id, owner_id, category_id, swimlane_id) fall back to .kanboard.yaml defaults when not provided. Returns { created: [...], failed: [...] } — never throws on partial failure. |
| delete_columnA | Permanently delete a Kanboard column from a project board. DESTRUCTIVE and irreversible — requires explicit |
| delete_commentA | Permanently delete a Kanboard comment. DESTRUCTIVE and irreversible — requires explicit |
| delete_projectA | Permanently delete a Kanboard project and all its tasks, columns, and swimlanes. DESTRUCTIVE and irreversible — requires explicit |
| delete_subtaskA | Permanently delete a Kanboard subtask. DESTRUCTIVE and irreversible — requires explicit |
| delete_swimlaneA | Permanently delete a Kanboard swimlane from a project. DESTRUCTIVE and irreversible — requires explicit |
| delete_taskA | Permanently delete a Kanboard task. DESTRUCTIVE and irreversible — requires explicit |
| delete_task_fileA | Permanently delete a file attachment from a Kanboard task. DESTRUCTIVE and irreversible — requires explicit |
| get_projectA | Retrieve a single Kanboard project. Provide exactly one of: project_id (number), project_identifier (short string like 'PRJ'), or project_name (full name). Returns the full project object. Returns NOT_FOUND when no match exists. |
| get_taskA | Retrieve a single Kanboard task by its numeric id. Returns the full task entity including status, dates, column, swimlane, and metadata. Returns NOT_FOUND when the task does not exist. |
| list_categoriesA | List all categories for a Kanboard project. Provide project_id or project_identifier, or configure .kanboard.yaml in your project root. Returns an array of category objects with id, name, and color_id. |
| list_columnsA | List all columns (board stages) for a Kanboard project. Provide project_id or project_identifier, or configure .kanboard.yaml in your project root. Returns an array of column objects with id, title, position, and task_limit. |
| list_my_tasksA | List open tasks assigned to the currently authenticated user in the resolved project. Requires a project_id (explicit or from .kanboard.yaml). Uses Kanboard search query: assignee:me status:open. In app mode (jsonrpc user) returns tasks assigned to the jsonrpc system user. Returns { tasks } on success. |
| list_overdue_tasksA | List overdue tasks with configurable scope. scope="mine" (default): overdue tasks for the authenticated user. scope="all": all overdue tasks across all projects (admin token required). scope="project": overdue tasks for a specific project (pass project_id or use .kanboard.yaml). Note: getOverdueTasksByUser is not supported by the Kanboard JSON-RPC API. Returns an empty array when nothing is overdue. |
| list_projectsA | Returns the projects where the authenticated user is a member. Does not list projects in the Kanboard instance that the user has no access to. Returns an array of project objects with id, name, identifier, and status. |
| list_subtasksA | List all subtasks for a given Kanboard task. Returns an array of subtask objects including id, title, status, user_id, time_estimated, and time_spent fields. |
| list_swimlanesA | List active swimlanes for a Kanboard project. Provide project_id or project_identifier, or configure .kanboard.yaml in your project root. Returns an array of swimlane objects with id, name, description, position, and is_active. |
| list_tasksA | List tasks in a Kanboard project. Returns active tasks by default (status_id=1). Pass status_id=0 to list closed/inactive tasks. Project is resolved from explicit project_id or project_identifier, or from .kanboard.yaml. |
| list_project_usersA | List the members of a Kanboard project (user_id + username pairs). Provide project_id or project_identifier, or configure .kanboard.yaml in your project root. Works for any user who can see the project — does not require admin permissions. Use the returned user_ids to assign tasks (create_task owner_id), add comments, etc. |
| move_columnA | Reorder a column on the Kanboard project board. Provide column_id and the new 1-based position (required — no default). Only ordering changes — to rename a column or change its WIP limit use update_column. Returns { ok: true, column_id, position } on success. |
| move_swimlaneA | Reorder a swimlane within a Kanboard project. Provide swimlane_id and the new 1-based position (required — no default). Only ordering changes — to rename a swimlane use update_swimlane. Returns { ok: true, swimlane_id, position } on success. |
| move_task_positionA | Move a Kanboard task to a different column, position, or swimlane — this is the only way to change a task's board placement. Provide exactly one of column_id or column_name (column_name is resolved case-insensitively). If swimlane_id is omitted, it is resolved from .kanboard.yaml or the first active swimlane. Project is resolved from explicit project_id or project_identifier, or from .kanboard.yaml. To change other task attributes (title, dates, owner) use update_task instead. Returns { ok: true, task_id, column_id, swimlane_id, position } on success. |
| remove_project_userA | Unlink a user from a Kanboard project (does not delete the user). DESTRUCTIVE on the project-user relationship — requires explicit |
| reopen_taskA | Reopen a closed (inactive) Kanboard task, restoring it to the active board. The inverse of close_task. Returns { ok: true, task_id } on success. |
| update_columnA | Update an existing Kanboard column (partial update). Only the fields you pass are changed; omitted fields keep their current values, and validation runs before any write, so an invalid call modifies nothing. At least one field besides 'column_id' must be provided — otherwise VALIDATION_ERROR. NOT for reordering — use move_column instead; to delete a column use delete_column. Returns { ok: true, column_id } on success. |
| update_commentA | Update the body of an existing Kanboard comment. To remove a comment use delete_comment instead. Returns { ok: true, comment_id } on success. |
| update_projectA | Update the attributes of an existing Kanboard project (partial update). Only the fields you pass are changed; omitted fields keep their current values, and validation runs before any write, so an invalid call modifies nothing. At least one field besides 'project_id' must be provided — otherwise VALIDATION_ERROR. This tool updates project attributes only: to manage members use add_project_user / remove_project_user, to manage columns use create_column / move_column, and to delete a project use delete_project. Returns { ok: true, project_id } on success. |
| update_subtaskA | Update an existing Kanboard subtask (partial update). Only the fields you pass are changed; omitted fields keep their current values, and validation runs before any write, so an invalid call modifies nothing. Both 'subtask_id' and 'task_id' are required as identity fields. At least one of title, status, user_id, time_estimated, or time_spent must also be provided. Status: 0 = todo, 1 = in progress, 2 = done. Returns { subtask_id, task_id } on success. |
| update_swimlaneA | Update an existing Kanboard swimlane (partial update). Only the fields you pass are changed; omitted fields keep their current values, and validation runs before any write, so an invalid call modifies nothing. At least one field besides 'swimlane_id' must be provided — otherwise VALIDATION_ERROR. NOT for reordering — use move_swimlane instead; to delete a swimlane use delete_swimlane. Returns { ok: true, swimlane_id } on success. |
| update_taskA | Update the attributes of an existing Kanboard task (partial update). Only the fields you pass are changed; omitted fields keep their current values, and validation runs before any write, so an invalid call modifies nothing. At least one field besides 'task_id' must be provided — otherwise VALIDATION_ERROR. Column and swimlane changes must use move_task_position instead. Returns { ok: true, task_id } on success. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ErnestoCorona/kanboard-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server