Kanboard 集成的 Model Context Protocol (MCP) 服务器
这是一个基于 Go 的强大 MCP 服务器,它实现了 AI 助手(如 Claude Desktop、Cursor)与 Kanboard 项目管理系统之间的无缝集成。通过自然语言命令直接管理您的 Kanboard 项目、任务、用户和工作流程。

⚠️ 警告: 为了避免以下问题:
我们建议使用 mcpproxy 作为代理解决方案。
克隆仓库:
git clone https://github.com/bivex/kanboard-mcp.git
cd kanboard-mcp
构建可执行文件:
在 Windows 上:
build-release.bat
在 Linux/macOS 上:
./build-release.sh
手动构建:
go build -ldflags="-s -w" -o kanboard-mcp .
使用环境变量设置您的 Kanboard 凭据:
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"
为您的客户端创建 MCP 配置文件:
位置:
C:\Users\YOUR_USERNAME\AppData\Roaming\Cursor\.cursor\mcp_config.json~/.cursor/mcp_config.json配置:
{
"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"
}
}
}
}
保存配置后,重启您的 MCP 客户端(Cursor、Claude Desktop 等),以便更改生效。
| 工具 | 描述 | 示例 |
|---|---|---|
get_projects | 📋 列出所有项目 | "显示所有 Kanboard 项目" |
create_project | ➕ 创建新项目 | "创建一个名为 '网站重构' 的项目,描述为 '重新设计公司网站',拥有者为 1" |
get_project_by_id | 🔍 通过 ID 获取项目信息 | "获取 ID 123 的项目详情" |
get_project_by_name | 🔍 通过名称获取项目信息 | "获取名称为 '我的项目' 的项目详情" |
get_project_by_identifier | 🔍 通过标识符获取项目信息 | "获取标识符为 'WEB-APP' 的项目详情" |
get_project_by_email | 🔍 通过电子邮件获取项目信息 | "获取电子邮件为 'project@example.com' 的项目详情" |
get_all_projects | 📋 获取所有可用项目 | "显示所有可用项目" |
update_project | ✏️ 更新项目 | "更新项目 1 的新名称为 '新网站' 和描述为 '更新描述'" |
remove_project | 🗑️ 删除项目 | "删除 ID 为 456 的项目" |
enable_project | ✅ 启用项目 | "启用项目 123" |
disable_project | 🚫 禁用项目 | "禁用项目 123" |
enable_project_public_access | 🌐 启用给定项目的公共访问 | "启用项目 123 的公共访问" |
disable_project_public_access | 🔒 禁用给定项目的公共访问 | "禁用项目 123 的公共访问" |
get_project_activity | 📢 获取项目的活动流 | "显示项目 123 的活动" |
get_project_activities | 📊 获取项目的活动源 | "获取项目 1、2 和 3 的活动" |
| 工具 | 描述 | 示例 |
|---|---|---|
get_tasks | 📋 获取项目任务 | "获取 '网站重构' 项目的任务" |
create_task | ➕ 创建新任务 | "在 '网站重构' 中创建任务 '设计首页'" |
update_task | ✏️ 修改现有任务 | "更新任务 123 的描述为 '新的要求'" |
delete_task | 🗑️ 删除任务 | "删除 ID 为 456 的任务" |
get_task | 🔍 通过唯一 ID 获取任务 | "获取任务 789 的详细信息" |
get_task_by_reference | 🔍 通过外部引用获取任务 | "获取项目 1 中引用为 'TICKET-1234' 的任务" |
get_all_tasks | 📋 获取所有可用任务 | "获取项目 1 的所有活动任务" |
get_overdue_tasks | ⏰ 获取所有逾期任务 | "显示所有逾期任务" |
get_overdue_tasks_by_project | ⏰ 获取特定项目的逾期任务 | "显示项目 1 的逾期任务" |
open_task | ✅ 将任务设为打开状态 | "打开任务 123" |
close_task | ❌ 将任务设为关闭状态 | "关闭任务 123" |
move_task_position | ➡️ 在同一板内移动任务到另一列、位置或泳道 | "将任务 123 移动到项目 1 的第 2 列,位置 1,泳道 1" |
move_task_to_project | ➡️ 将任务移动到另一个项目 | "将任务 123 移动到项目 456" |
duplicate_task_to_project | 📋 将任务复制到另一个项目 | "将任务 123 复制到项目 456" |
search_tasks | 🔍 使用搜索引擎查找任务 | "在项目 2 中搜索查询 'assignee:nobody'" |
assign_task | 👤 分配任务给用户 | "将 API 任务分配给 John" |
set_task_due_date | 📅 设置任务截止日期 | "将登录任务的截止日期设置为 2024-01-15" |
| 工具 | 描述 | 示例 |
|---|---|---|
create_comment | ➕ 创建新评论 | "为任务 123 创建评论 '会议记录',由用户 1 发布,可见于应用管理员" |
get_task_comments | 📋 获取任务评论 | "显示任务 123 的所有评论" |
get_comment | 🔍 获取评论信息 | "获取评论 789 的详细信息" |
update_comment | ✏️ 更新评论 | "将评论 456 的内容更新为 '修订笔记'" |
remove_comment | 🗑️ 删除评论 | "删除 ID 为 101 的评论" |
| 工具 | 描述 | 示例 |
|---|---|---|
get_columns | 📋 列出项目列 | "显示项目 123 的所有列" |
get_column | 🔍 获取单个列 | "获取列 456 的详细信息" |
create_column | ➕ 添加新列 | "在项目 123 中创建一个 '测试' 列,任务限制为 5,描述为 '用于 UAT 测试'" |
update_column | ✏️ 修改列设置 | "将列 123 的标题更改为 '审查',任务限制为 3,描述为 '需要最终审查'" |
change_column_position | 🔄 更改列位置 | "将项目 456 中的列 123 移动到位置 3" |
delete_column | 🗑️ 删除列 | "删除未使用的 '草稿' 列" |
| 工具 | 描述 | 示例 |
|---|---|---|
get_categories | 📋 列出项目类别 | "显示项目 123 的所有任务类别" |
get_category | 🔍 获取类别信息 | "获取类别 456 的详细信息" |
create_category | ➕ 添加任务类别 | "在项目 123 中创建一个 '修复 Bug' 类别,颜色为 '红色'" |
update_category | ✏️ 修改类别 | "将类别 123 重命名为 '关键问题',并设置颜色为 '蓝色'" |
delete_category | 🗑️ 删除类别 | "删除未使用的 '归档' 类别" |
| 工具 | 描述 | 示例 |
|---|---|---|
get_swimlanes | 📋 列出项目的泳道(启用或禁用)并按位置排序 | "显示项目 1 的所有泳道" |
get_active_swimlanes | 📋 获取项目的启用泳道列表(包括默认泳道如果已启用) | "获取项目 1 的启用泳道" |
get_swimlane | 🔍 通过 ID 获取泳道 | "获取 ID 为 1 的泳道详细信息" |
get_swimlane_by_id | 🔍 通过 ID 获取泳道 | "获取 ID 为 1 的泳道详细信息" |
get_swimlane_by_name | 🔍 通过名称获取泳道 | "获取项目 1 中名称为 '泳道 1' 的泳道详细信息" |
change_swimlane_position | 🔄 移动泳道的位置(仅限启用泳道) | "将项目 1 中的泳道 2 移动到位置 3" |
create_swimlane | ➕ 添加新泳道 | "在项目 1 中创建一个 '前端团队' 泳道" |
update_swimlane | ✏️ 更新泳道属性 | "更新项目 1 中的泳道 1,新名称为 '跨平台团队'" |
remove_swimlane | 🗑️ 删除泳道 | "从项目 2 中移除泳道 1" |
disable_swimlane | 🚫 禁用泳道 | "禁用项目 2 中的泳道 1" |
enable_swimlane | ✅ 启用泳道 | "启用项目 2 中的泳道 1" |
| 工具 | 描述 | 示例 |
|---|---|---|
get_board | 📋 获取显示板所需的所有信息 | "显示项目 123 的板" |
| 工具 | 描述 | 示例 |
|---|---|---|
get_me | 👤 获取登录用户的会话 | "获取我的用户会话信息" |
get_my_dashboard | 📊 获取登录用户的仪表盘 | "显示我的仪表盘" |
get_my_activity_stream | 📢 获取登录用户的最后 100 个事件 | "显示我最近的活动" |
create_my_private_project | ➕ 为登录用户创建一个私有项目 | "创建一个名为 '我的秘密项目' 的私有项目,描述为 '用于个人任务'" |
get_my_projects_list | 📋 获取连接用户的项目列表 | "列出我参与的所有项目" |
get_my_overdue_tasks | ⏰ 获取我的逾期任务 | "显示我所有逾期的任务" |
get_my_projects | 📝 获取连接用户的项目及其详细信息 | "获取我所有项目的详细信息" |
| 工具 | 描述 | 示例 |
|---|---|---|
get_external_task_link_types | 📋 获取所有注册的外部链接提供者 | "显示所有外部链接类型" |
get_ext_link_provider_deps | ⛓️ 获取给定提供者的可用依赖项 | "获取 'weblink' 提供者的依赖项" |
create_external_task_link | ➕ 创建一个新的外部链接 | "为任务 123 创建一个指向 'http://example.com/doc.pdf' 的外部链接,依赖项为 'related',类型为 '附件'" |
update_external_task_link | ✏️ 更新外部任务链接 | "更新任务 789 的外部链接 456,新标题为 '更新文档',URL 为 'http://new.example.com/doc.pdf'" |
get_external_task_link_by_id | 🔍 通过 ID 获取外部任务链接 | "获取任务 789 的外部链接 456" |
get_all_external_task_links | 📋 获取与任务关联的所有外部链接 | "显示任务 123 的所有外部链接" |
remove_external_task_link | 🗑️ 删除外部链接 | "从任务 789 中删除外部链接 456" |
| 工具 | 描述 | 示例 |
|---|---|---|
create_task_link | ➕ 在两个任务之间创建链接 | "在任务 123 和任务 456 之间创建一个链接,链接类型为 1" |
update_task_link | ✏️ 更新任务链接 | "更新任务 123 和任务 456 之间的任务链接 789,新链接类型为 2" |
get_task_link_by_id | 🔍 通过 ID 获取任务链接 | "获取任务链接 101 的详细信息" |
get_all_task_links | 📋 获取与任务相关的所有链接 | "显示任务 123 的所有链接" |
remove_task_link | 🗑️ 删除两个任务之间的链接 | "删除任务链接 101" |
| 工具 | 描述 | 示例 |
|---|---|---|
get_all_links | 📋 获取任务之间可能关系的列表 | "显示所有可能的任务关系" |
get_opposite_link_id | 🔍 获取任务链接的相反链接 ID | "获取链接 2 的相反链接 ID" |
get_link_by_label | 🔍 通过标签获取链接 | "获取标签为 'blocks' 的链接详细信息" |
get_link_by_id | 🔍 通过 ID 获取链接 | "获取 ID 为 4 的链接详细信息" |
create_link | ➕ 创建一个新的任务关系 | "创建一个标签为 'foo',相反标签为 'bar' 的链接" |
update_link | ✏️ 更新链接 | "更新链接 14,相反链接为 12,标签为 'boo'" |
remove_link | 🗑️ 删除链接 | "删除 ID 为 14 的链接" |
| 工具 | 描述 | 示例 | |------|-------------