bivex/kanboard-mcp
If you are the rightful owner of kanboard-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This project implements a basic Model Context Protocol (MCP) server in Go, designed to interface with Kanboard for task and project management.
get_projects
List all projects
create_project
Create new projects
get_tasks
Get project tasks
create_task
Create new tasks
update_task
Modify existing tasks
delete_task
Remove tasks
get_task_details
Get detailed task info
move_task
Move tasks between columns
get_users
List all users
get_user_by_name
Get user by name
create_user
Create a new user
update_user
Modify an existing user
remove_user
Remove a user
š Kanboard MCP Server
Model Context Protocol (MCP) Server for Kanboard Integration
A powerful Go-based MCP server that enables seamless integration between AI assistants (like Claude Desktop, Cursor) and Kanboard project management system. Manage your Kanboard projects, tasks, users, and workflows directly through natural language commands.
ā ļø Warning: To avoid issues like these:
We recommend using mcpproxy as a proxy solution.
š Table of Contents
- ⨠Features
- š Quick Start
- āļø Configuration
- š ļø Available Tools
- š Usage Examples
- š§ Development
- š License
⨠Features
- š Seamless Kanboard Integration - Direct API communication with Kanboard
- š¤ Natural Language Processing - Use plain English to manage your projects
- š Complete Project Management - Handle projects, tasks, users, columns, and more
- š Secure Authentication - Support for both API key and username/password auth
- ā” High Performance - Built with Go for optimal performance
- šÆ MCP Standard - Compatible with all MCP clients
š Quick Start
Prerequisites
- Go 1.21 or higher
- Kanboard instance with API access
- MCP-compatible client (Cursor, Claude Desktop, etc.)
Installation
-
Clone the repository:
git clone https://github.com/bivex/kanboard-mcp.git cd kanboard-mcp
-
Build the executable:
On Windows:
build-release.bat
On Linux/macOS:
./build-release.sh
Manual build:
go build -ldflags="-s -w" -o kanboard-mcp .
āļø Configuration
1. Environment Variables
Set up your Kanboard credentials using environment variables:
export KANBOARD_API_ENDPOINT="https://your-kanboard-url/jsonrpc.php"
export KANBOARD_API_KEY="your-kanboard-api-key"
export KANBOARD_USERNAME="your-kanboard-username"
export KANBOARD_PASSWORD="your-kanboard-password"
2. MCP Client Configuration
Create the MCP configuration file for your client:
Location:
- Windows:
C:\Users\YOUR_USERNAME\AppData\Roaming\Cursor\.cursor\mcp_config.json
- Linux/macOS:
~/.cursor/mcp_config.json
Configuration:
{
"mcpServers": {
"kanboard-mcp-server": {
"command": "/path/to/your/kanboard-mcp",
"args": [],
"env": {
"KANBOARD_API_ENDPOINT": "https://your-kanboard-url/jsonrpc.php",
"KANBOARD_API_KEY": "your-kanboard-api-key",
"KANBOARD_USERNAME": "your-kanboard-username",
"KANBOARD_PASSWORD": "your-kanboard-password"
}
}
}
}
3. Restart Your Client
After saving the configuration, restart your MCP client (Cursor, Claude Desktop, etc.) for changes to take effect.
š ļø Available Tools
š Project Management
Tool | Description | Example |
---|---|---|
get_projects | š List all projects | "Show me all Kanboard projects" |
create_project | ā Create new projects | "Create a project called 'Website Redesign' with description 'Redesign the company website' and owner 1" |
get_project_by_id | š Get project information by ID | "Get project details for ID 123" |
get_project_by_name | š Get project information by name | "Get project details for name 'My Project'" |
get_project_by_identifier | š Get project information by identifier | "Get project details for identifier 'WEB-APP'" |
get_project_by_email | š Get project information by email | "Get project details for email ''" |
get_all_projects | š Get all available projects | "Show me all available projects" |
update_project | āļø Update a project | "Update project 1 with new name 'New Website' and description 'Updated description'" |
remove_project | šļø Remove a project | "Remove project with ID 456" |
enable_project | ā Enable a project | "Enable project 123" |
disable_project | š« Disable a project | "Disable project 123" |
enable_project_public_access | š Enable public access for a given project | "Enable public access for project 123" |
disable_project_public_access | š Disable public access for a given project | "Disable public access for project 123" |
get_project_activity | š¢ Get activity stream for a project | "Show me activity for project 123" |
get_project_activities | š Get Activityfeed for Project(s) | "Get activities for projects 1, 2, and 3" |
š Task Management
Tool | Description | Example |
---|---|---|
get_tasks | š Get project tasks | "Get tasks for 'Website Redesign' project" |
create_task | ā Create new tasks | "Create task 'Design homepage' in 'Website Redesign'" |
update_task | āļø Modify existing tasks | "Update task 123 with description 'New requirements'" |
delete_task | šļø Remove tasks | "Delete task with ID 456" |
get_task | š Get task by the unique id | "Get details for task 789" |
get_task_by_reference | š Get task by the external reference | "Get task for project 1 with reference 'TICKET-1234'" |
get_all_tasks | š Get all available tasks | "Get all active tasks for project 1" |
get_overdue_tasks | ā° Get all overdue tasks | "Show me all overdue tasks" |
get_overdue_tasks_by_project | ā° Get all overdue tasks for a special project | "Show me overdue tasks for project 1" |
open_task | ā Set a task to the status open | "Open task 123" |
close_task | ā Set a task to the status close | "Close task 123" |
move_task_position | ā”ļø Move a task to another column, position or swimlane inside the same board | "Move task 123 to column 2, position 1, swimlane 1 in project 1" |
move_task_to_project | ā”ļø Move a task to another project | "Move task 123 to project 456" |
duplicate_task_to_project | š Duplicate a task to another project | "Duplicate task 123 to project 456" |
search_tasks | š Find tasks by using the search engine | "Search tasks in project 2 for query 'assignee:nobody'" |
assign_task | š¤ Assign tasks to users | "Assign the API task to John" |
set_task_due_date | š Set task deadlines | "Set due date for login task to 2024-01-15" |
š¬ Comment Management
Tool | Description | Example |
---|---|---|
create_comment | ā Create a new comment | "Create a comment 'Meeting notes' for task 123 by user 1, visible to app-managers" |
get_task_comments | š Get task comments | "Show all comments for task 123" |
get_comment | š Get comment information | "Get details for comment 789" |
update_comment | āļø Update a comment | "Update comment 456 content to 'Revised notes'" |
remove_comment | šļø Remove a comment | "Remove comment with ID 101" |
šļø Column Management
Tool | Description | Example |
---|---|---|
get_columns | š List project columns | "Show me all columns in project 123" |
get_column | š Get a single column | "Get details for column 456" |
create_column | ā Add new columns | "Create a 'Testing' column in project 123 with 5 task limit and description 'For UAT testing'" |
update_column | āļø Modify column settings | "Change column 123 title to 'Review' and limit to 3 tasks, with description 'Needs final review'" |
change_column_position | š Change column positions | "Move column 123 to position 3 in project 456" |
delete_column | šļø Remove columns | "Delete the unused 'Draft' column" |
š·ļø Category Management
Tool | Description | Example |
---|---|---|
get_categories | š List project categories | "Show me all task categories for project 123" |
get_category | š Get category information | "Get details for category 456" |
create_category | ā Add task categories | "Create a 'Bug Fixes' category in project 123 with color 'red'" |
update_category | āļø Modify categories | "Rename category 123 to 'Critical Issues' and set color to 'blue'" |
delete_category | šļø Remove categories | "Delete the unused 'Archive' category" |
š Swimlane Management
Tool | Description | Example |
---|---|---|
get_swimlanes | š List all swimlanes of a project (enabled or disabled) and sorted by position | "Show me all swimlanes for project 1" |
get_active_swimlanes | š Get the list of enabled swimlanes of a project (include default swimlane if enabled) | "Get active swimlanes for project 1" |
get_swimlane | š Get a swimlane by ID | "Get swimlane details for ID 1" |
get_swimlane_by_id | š Get a swimlane by ID | "Get swimlane details for ID 1" |
get_swimlane_by_name | š Get a swimlane by name | "Get swimlane details for project 1 with name 'Swimlane 1'" |
change_swimlane_position | š Move a swimlane's position (only for active swimlanes) | "Change swimlane 2 position to 3 in project 1" |
create_swimlane | ā Add a new swimlane | "Create a swimlane 'Frontend Team' in project 1" |
update_swimlane | āļø Update swimlane properties | "Update swimlane 1 for project 1 with new name 'Cross-Platform Team'" |
remove_swimlane | šļø Remove a swimlane | "Remove swimlane 1 from project 2" |
disable_swimlane | š« Disable a swimlane | "Disable swimlane 1 from project 2" |
enable_swimlane | ā Enable a swimlane | "Enable swimlane 1 from project 2" |
š Board Management
Tool | Description | Example |
---|---|---|
get_board | š Get all necessary information to display a board | "Show me the board for project 123" |
š§āš» Current User Management
Tool | Description | Example |
---|---|---|
get_me | š¤ Get logged user session | "Get my user session information" |
get_my_dashboard | š Get the dashboard of the logged user | "Show me my dashboard" |
get_my_activity_stream | š¢ Get the last 100 events for the logged user | "Show me my recent activity" |
create_my_private_project | ā Create a private project for the logged user | "Create a private project named 'My Secret Project' with description 'For personal tasks'" |
get_my_projects_list | š Get projects of the connected user | "List all projects I'm involved in" |
get_my_overdue_tasks | ā° Get my overdue tasks | "Show me all my tasks that are overdue" |
get_my_projects | š Get projects of connected user with full details | "Get detailed information about all my projects" |
š External Task Link Management
Tool | Description | Example |
---|---|---|
get_external_task_link_types | š Get all registered external link providers | "Show me all external link types" |
get_ext_link_provider_deps | āļø Get available dependencies for a given provider | "Get dependencies for 'weblink' provider" |
create_external_task_link | ā Create a new external link | "Create an external link for task 123 to 'http://example.com/doc.pdf' with dependency 'related' and type 'attachment'" |
update_external_task_link | āļø Update external task link | "Update external link 456 for task 789 with new title 'Updated Document' and URL 'http://new.example.com/doc.pdf'" |
get_external_task_link_by_id | š Get an external task link by ID | "Get external link 456 for task 789" |
get_all_external_task_links | š Get all external links attached to a task | "Show all external links for task 123" |
remove_external_task_link | šļø Remove an external link | "Remove external link 456 from task 789" |
š Internal Task Link Management
Tool | Description | Example |
---|---|---|
create_task_link | ā Create a link between two tasks | "Create a link between task 123 and task 456 with link type 1" |
update_task_link | āļø Update task link | "Update task link 789 between task 123 and task 456 with new link type 2" |
get_task_link_by_id | š Get a task link by ID | "Get details for task link 101" |
get_all_task_links | š Get all links related to a task | "Show all links for task 123" |
remove_task_link | šļø Remove a link between two tasks | "Remove task link 101" |
š Link Management
Tool | Description | Example |
---|---|---|
get_all_links | š Get the list of possible relations between tasks | "Show all possible task relations" |
get_opposite_link_id | š Get the opposite link id of a task link | "Get the opposite link ID for link 2" |
get_link_by_label | š Get a link by label | "Get details for link with label 'blocks'" |
get_link_by_id | š Get a link by ID | "Get details for link with ID 4" |
create_link | ā Create a new task relation | "Create a link 'foo' with opposite label 'bar'" |
update_link | āļø Update a link | "Update link 14 with opposite link 12 and label 'boo'" |
remove_link | šļø Remove a link | "Remove link with ID 14" |
š Project File Management
Tool | Description | Example |
---|---|---|
create_project_file | ā Create and upload a new project attachment | "Create a file 'My Document.pdf' for project 1 with base64 content 'Zm9vYmFy'" |
get_all_project_files | š Get all files attached to a project | "Show all files for project 123" |
get_project_file | š Get file information | "Get details for file 456 in project 123" |
download_project_file | š„ Download project file contents (encoded in base64) | "Download file 456 from project 123" |
remove_project_file | šļø Remove a file associated to a project | "Remove file 456 from project 123" |
remove_all_project_files | šļø Remove all files associated to a project | "Remove all files from project 123" |
š Project Metadata Management
Tool | Description | Example |
---|---|---|
get_project_metadata | š Get Project metadata | "Get all metadata for project 123" |
get_project_metadata_by_name | š Fetch single metadata value | "Get metadata 'my_key' for project 123" |
save_project_metadata | š¾ Add or update metadata | "Save metadata 'key1:value1, key2:value2' for project 123" |
remove_project_metadata | šļø Remove a project metadata | "Remove metadata 'my_key' from project 123" |
š Project Permission Management
Tool | Description | Example |
---|---|---|
get_project_users | š Get all members of a project | "Show all users in project 123" |
get_assignable_users | š„ Get users that can be assigned to a task for a project (all members except viewers) | "Get assignable users for project 123" |
add_project_user | ā Grant access to a project for a user | "Add user 1 to project 123 with role 'project-member'" |
add_project_group | ā Grant access to a project for a group | "Add group 456 to project 123 with role 'project-viewer'" |
remove_project_user | šļø Revoke user access to a project | "Remove user 1 from project 123" |
remove_project_group | šļø Revoke group access to a project | "Remove group 456 from project 123" |
change_project_user_role | āļø Change role of a user for a project | "Change user 1's role in project 123 to 'project-manager'" |
change_project_group_role | āļø Change role of a group for a project | "Change group 456's role in project 123 to 'project-manager'" |
get_project_user_role | š Get the role of a user for a given project | "Get the role of user 1 in project 123" |
š Subtask Management
Tool | Description | Example |
---|---|---|
create_subtask | ā Create a new subtask | "Create a subtask 'Review designs' for task 123 with user 1 assigned" |
get_subtask | š Get subtask information | "Get details for subtask 456" |
get_all_subtasks | š Get all available subtasks for a task | "Show all subtasks for task 123" |
update_subtask | āļø Update a subtask | "Update subtask 456 for task 123 to status 2 (Done)" |
remove_subtask | šļø Remove a subtask | "Remove subtask with ID 456" |
ā° Subtask Time Tracking
Tool | Description | Example |
---|---|---|
has_subtask_timer | ā±ļø Check if a timer is started for the given subtask and user | "Check if a timer is active for subtask 123 by user 4" |
set_subtask_start_time | ā¶ļø Start subtask timer for a user | "Start timer for subtask 123 by user 4" |
set_subtask_end_time | ā¹ļø Stop subtask timer for a user | "Stop timer for subtask 123 by user 4" |
get_subtask_time_spent | š Get time spent on a subtask for a user | "Get time spent on subtask 123 by user 4" |
š·ļø Tag Management
Tool | Description | Example |
---|---|---|
get_all_tags | š Get all tags | "Show all available tags" |
get_tags_by_project | š Get all tags for a given project | "Show tags for project 123" |
create_tag | ā Create a new tag | "Create tag 'backend' for project 123 with color 1" |
update_tag | āļø Rename a tag | "Rename tag 456 to 'frontend' and set color to 2" |
remove_tag | šļø Remove a tag | "Remove tag with ID 456" |
set_task_tags | š·ļø Assign/Create/Update tags for a task | "Set tags 'urgent', 'bug' for task 123 in project 456" |
get_task_tags | š Get assigned tags to a task | "Get tags assigned to task 123" |
š Task File Management
Tool | Description | Example |
---|---|---|
create_task_file | ā Create and upload a new task attachment | "Create a file 'meeting_notes.txt' for project 1 with task 2 and base64 content 'Zm9vYmFy'" |
get_all_task_files | š Get all files attached to task | "Show all files for task 123" |
get_task_file | š Get file information | "Get details for file 456" |
download_task_file | š„ Download file contents (encoded in base64) | "Download file 456" |
remove_task_file | šļø Remove file | "Remove file with ID 456" |
remove_all_task_files | šļø Remove all files associated to a task | "Remove all files from task 123" |
š Task Metadata Management
Tool | Description | Example |
---|---|---|
get_task_metadata | š Get all metadata related to a task by task unique id | "Get all metadata for task 1" |
get_task_metadata_by_name | š Get metadata related to a task by task unique id and metakey (name) | "Get metadata 'metaKey1' for task 1" |
save_task_metadata | š¾ Save/update task metadata | "Save metadata 'metaName:metaValue' for task 1" |
remove_task_metadata | šļø Remove task metadata by name | "Remove metadata 'metaKey1' from task 1" |
āļø Application Management
Tool | Description | Example |
---|---|---|
get_version | š Get the application version | "What is the Kanboard version?" |
get_timezone | š Get the timezone of the connected user | "What is my current timezone?" |
get_default_task_colors | š Get all default task colors | "Show me all default task colors" |
get_default_task_color | šØ Get default task color | "What is the default task color?" |
get_color_list | š Get the list of task colors | "List all available task colors" |
get_application_roles | š„ Get the application roles | "List all application roles" |
get_project_roles | š„ Get the project roles | "List all project roles" |
š¤ Automatic Actions Management
Tool | Description | Example |
---|---|---|
get_available_actions | š Get list of available automatic actions | "Show available automatic actions" |
get_available_action_events | š Get list of available events for actions | "Show available action events" |
get_compatible_action_events | š Get list of events compatible with an action | "Get compatible events for action 'TaskClose'" |
get_actions | š Get list of actions for a project | "Get actions for project 123" |
create_action | ā Create an action | "Create an action for project 1, event 'task.move.column', action '\Kanboard\Action\TaskClose', with params 'column_id:3'" |
remove_action | šļø Remove an action | "Remove action with ID 456" |
š„ Group Management
Tool | Description | Example |
---|---|---|
create_group | ā Create a new group | "Create a group named 'Development Team' with external ID 'dev_001'" |
update_group | āļø Update a group | "Rename group 123 to 'QA Team' and change its external ID to 'qa_001'" |
remove_group | šļø Remove a group | "Remove group with ID 456" |
get_group | š Get one group | "Get details for group 789" |
get_all_groups | š Get all groups | "Show me all user groups" |
š„ Group Member Management
Tool | Description | Example |
---|---|---|
get_member_groups | š Get all groups for a given user | "Show me all groups for user 1" |
get_group_members | š„ Get all members of a group | "List all members of group 123" |
add_group_member | ā Add a user to a group | "Add user 456 to group 789" |
remove_group_member | šļø Remove a user from a group | "Remove user 456 from group 789" |
is_group_member | ā Check if a user is member of a group | "Is user 456 a member of group 789?" |
š„ User Management
Tool | Description | Example |
---|---|---|
get_users | š List all system users | "Show me all users" |
create_user | ā Create a new user | "Create user 'john' with password '123456'" |
create_ldap_user | ā Create a new user authenticated by LDAP | "Create LDAP user 'jane'" |
get_user | š Get user information by ID | "Get user details for ID 123" |
get_user_by_name | š Get user information by username | "Get user details for 'john'" |
update_user | āļø Update a user | "Update user 123 with role 'app-manager'" |
remove_user | šļø Remove a user | "Remove user with ID 456" |
disable_user | ā Disable a user | "Disable user 123" |
enable_user | ā Enable a user | "Enable user 123" |
is_active_user | š Check if a user is active | "Check if user 123 is active" |
assign_user_to_project | š¤ Assign a user to a project with a specific role | "Assign user 1 to project 'Website' with role 'project-member'" |
š ScrumSprint Plugin API
Tool | Description | Example |
---|---|---|
create_sprint | ā Create a new sprint | "Create a sprint named 'Sprint 1' in project 'My Project' starting '2024-01-01' and ending '2024-01-14' with goal 'Complete onboarding features'" |
get_sprint_by_id | š Retrieve a sprint by its ID | "Get details for sprint with ID 123" |
update_sprint | āļø Update an existing sprint | "Update sprint 123 in project 'My Project' to be completed" |
remove_sprint | šļø Remove a sprint by its ID | "Remove sprint with ID 123" |
get_all_sprints_by_project | š Retrieve all sprints for a given project | "Get all sprints for project 'My Project'" |
š Usage Examples
Project Workflow
# Create a new project
"Create a new project called 'Mobile App Development'"
# Add tasks to the project
"Create task 'Design UI mockups' in project 'Mobile App Development'"
"Create task 'Set up development environment' in project 'Mobile App Development'"
# Get all tasks
"Get tasks for 'Mobile App Development' project"
# Move tasks between columns
"Move task 1 to 'In Progress' column"
"Move task 2 to 'Done' column"
Team Management
# Create a new team member
"Create user 'alice.smith' with password 'secure123' and email 'alice@company.com'"
# Assign user to project
"Assign user 'alice.smith' to project 'Mobile App Development' as project-member"
# Assign tasks to team members
"Assign task 1 to user 'alice.smith'"
Task Organization
# Create categories for better organization
"Create category 'Critical Bugs'"
"Create category 'Feature Requests'"
# Add comments to tasks
"Add comment 'This needs urgent attention' to task 5"
# Set deadlines
"Set due date for task 3 to 2024-01-20"
š§ Development
Building from Source
# Clone the repository
git clone https://github.com/bivex/kanboard-mcp.git
cd kanboard-mcp
# Install dependencies
go mod download
# Build the application
go build -o kanboard-mcp .
# Run tests
go test ./...
Project Structure
kanboard-mcp/
āāā main.go # Main application entry point
āāā go.mod # Go module dependencies
āāā go.sum # Dependency checksums
āāā build-release.bat # Windows build script
āāā build-release.sh # Unix build script
āāā README.md # This file
āāā LICENSE.md # License information
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
š License
This project is licensed under the MIT License - see the file for details.