kanboard-mcp

bivex/kanboard-mcp

3.3

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.

Tools
  1. get_projects

    List all projects

  2. create_project

    Create new projects

  3. get_tasks

    Get project tasks

  4. create_task

    Create new tasks

  5. update_task

    Modify existing tasks

  6. delete_task

    Remove tasks

  7. get_task_details

    Get detailed task info

  8. move_task

    Move tasks between columns

  9. get_users

    List all users

  10. get_user_by_name

    Get user by name

  11. create_user

    Create a new user

  12. update_user

    Modify an existing user

  13. 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.

Go License MCP

āš ļø Warning: To avoid issues like these:

Proxy error example 1 Proxy error example 2

We recommend using mcpproxy as a proxy solution.

šŸ“‹ Table of Contents

✨ 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

  1. Clone the repository:

    git clone https://github.com/bivex/kanboard-mcp.git
    cd kanboard-mcp
    
  2. 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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
get_boardšŸ“‹ Get all necessary information to display a board"Show me the board for project 123"

šŸ§‘ā€šŸ’» Current User Management

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

ToolDescriptionExample
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

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

šŸ“„ License

This project is licensed under the MIT License - see the file for details.


Made with ā¤ļø for the Kanboard community

GitHub stars GitHub forks GitHub issues