Kanboard MCP服务器

一个基于Go的MCP服务器,实现AI助手与Kanboard项目管理系统的无缝集成,支持通过自然语言命令管理项目、任务和用户。

  • by bivex
  • Go
  • 本地部署
  • 28 星标
  • 更新于
在 GitHub 查看 bivex/kanboard-mcp

使用说明

🚀 Kanboard MCP服务器

用于Kanboard集成的模型上下文协议(MCP)服务器

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

⚠️ 警告: 为了避免此类问题:

我们建议使用 mcpproxy 作为代理解决方案。

📋 目录

✨ 特性

  • 🔗 无缝Kanboard集成 -API与看板直接沟通
  • 🤖 自然语言处理 -用简单的英语管理你的项目
  • 📊 完整的项目管理 -处理项目、任务、用户、列等
  • 🔐 安全认证 -支持API密钥和用户名/密码身份验证
  • ⚡ 高性能 -使用Go构建,实现最佳性能
  • 🎯 MCP标准 -与所有MCP客户端兼容

🚀 快速开始

先决条件

  • 达到1.21或更高
  • 具有API访问权限的看板实例
  • MCP兼容客户端(光标、克劳德桌面等)

安装

  1. 克隆存储库:

    git clone https://github.com/bivex/kanboard-mcp.git
    cd kanboard-mcp
    
  2. 构建可执行文件:

    在Windows上:

    build-release.bat
    

    在Linux/macOS上:

    ./build-release.sh
    

    手动构建:

    go build -ldflags="-s -w" -o kanboard-mcp .
    

⚙️ 配置

1.环境变量

使用环境变量设置Kanboard凭据和RBAC权限:

所需凭据:

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"

RBAC配置(可选):

配置用户角色以进行适当的访问控制。如果未设置,系统将尝试从Kanboard API获取角色,返回到 app-user 角色。

# Application-level roles (comma-separated)
# If not set, roles are automatically retrieved from Kanboard API
export KANBOARD_USER_APP_ROLES="app-manager"

# Project-specific roles (format: "project_id:role,project_id:role")
# If not set, project roles are automatically retrieved from Kanboard API
export KANBOARD_USER_PROJECT_ROLES="1:project-manager,2:project-member"

# Debug mode - shows detailed permission checking logs
export KANBOARD_DEBUG="true"

# Skip RBAC checks for debugging (use with caution!)
export KANBOARD_SKIP_RBAC="false"

可用应用程序角色:

  • app-admin -完全系统管理员访问权限
  • app-manager -可以创建项目和管理用户
  • app-user -基本用户访问权限(默认)

可用项目角色:

  • project-manager -完全的项目管理权限
  • project-member -可以创建/修改任务和评论
  • project-viewer -项目的只读访问权限

🔐 身份验证方法:

Kanboard通过以下方式支持不同的身份验证方法 KANBOARD_AUTH_METHOD:

  • global_token (默认):使用带有的全局API令牌 jsonrpc:<token> 格式

    export KANBOARD_API_KEY="5348e6b4846fe09fd1670e922bc13e086f0827d7a66e45815cd7c3a7f67b"
    export KANBOARD_AUTH_METHOD="global_token"  # or omit (default)
    
  • user_token:使用用户特定的API令牌 <username>:<token> 格式

    export KANBOARD_USERNAME="admin"
    export KANBOARD_API_KEY="81820aeb3454985b0ac12166225f1f072f523175a752541c8670cf44a032d"
    export KANBOARD_AUTH_METHOD="user_token"
    
  • bearer:使用承载令牌身份验证

    export KANBOARD_API_KEY="your-token-here"
    export KANBOARD_AUTH_METHOD="bearer"
    

🔧 解决RBAC问题:

如果您遇到“拒绝访问”错误:

  1. 在Kanboard中检查您的用户角色:

    • 转到Kanboard web界面
    • 检查您的用户配置文件/角色设置
    • 确保您拥有适当的权限
  2. 启用调试日志记录:

    export KANBOARD_DEBUG="true"
    

    这将在控制台中显示您当前的角色和权限检查。

  3. 暂时跳过RBAC进行测试:

    export KANBOARD_SKIP_RBAC="true"
    

    ⚠️ 警告: 仅用于调试!禁用所有权限检查。

  4. 通过环境手动设置角色:

    export KANBOARD_USER_APP_ROLES="app-admin"
    export KANBOARD_USER_PROJECT_ROLES="27:project-manager"
    

2.MCP客户端配置

为您的客户端创建MCP配置文件:

地点:

  • 窗户: C:\Users\YOUR_USERNAME\AppData\Roaming\Cursor\.cursor\mcp_config.json
  • Linux/macOS: ~/.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",
        "KANBOARD_USER_APP_ROLES": "app-manager",
        "KANBOARD_USER_PROJECT_ROLES": "1:project-manager"
      }
    }
  }
}

3.重新启动客户端

保存配置后,重新启动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 🔍 通过外部引用获取任务 “使用引用'TICKET-1234'获取项目1的任务”
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中搜索任务,查询‘受让人:无人’”
assign_task 👤 将任务分配给用户 “将API任务分配给John”
set_task_due_date 📅 设置任务截止日期 “将登录任务的截止日期设置为2024-01-15”

💬 评论管理

工具 说明 示例
create_comment ➕ 创建新评论 “用户1为任务123创建评论‘会议笔记’,应用程序管理员可见”
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 🔄 更改列位置 “将列123移动到项目456中的位置3”
delete_column 🗑️ 删除列 “删除未使用的‘草稿’列”

🏷️ 品类管理

工具 说明 示例
get_categories 📋 列出项目类别 “显示项目123的所有任务类别”
get_category 🔍 获取类别信息 “获取类别456的详细信息”
create_category ➕ 添加任务类别 “在项目123中创建一个颜色为‘红色’的‘Bug Fixes’类别”
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”和类型“attachment”
update_external_task_link ✏️ 更新外部任务链接 “使用新标题“已更新文档”和URL更新任务789的外部链接456”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 ➕ 在两个任务之间创建链接 “使用链接类型1在任务123和任务456之间创建链接”
update_task_link ✏️ 更新任务链接 “用新的链接类型2更新任务123和任务456之间的任务链接789”
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的反向链接标识”
get_link_by_label 🔍 按标签获取链接 “获取带有标签“块”的链接的详细信息”
get_link_by_id 🔍 按ID获取链接 “获取ID为4的链接的详细信息”
create_link ➕ 创建新的任务关系 “创建带有相反标签‘bar’的链接‘foo’”
update_link ✏️ 更新链接 “用相反的链接12和标签'boo'更新链接14”
remove_link 🗑️ 删除链接 “删除ID为14的链接”

📂 项目文件管理

工具 说明 示例
create_project_file ➕ 创建并上传新的项目附件 “为项目1创建一个文件‘My Document.pdf’,其中包含base64内容‘Zm9vYmFy’”
get_all_project_files 📋 获取附加到项目的所有文件 “显示项目123的所有文件”
get_project_file 🔍 获取文件信息 “获取项目123中文件456的详细信息”
download_project_file 📥 下载项目文件内容(以base64编码) “从项目123下载文件456”
remove_project_file 🗑️ 删除与项目关联的文件 “从项目123中删除文件456”
remove_all_project_files 🗑️ 删除与项目关联的所有文件 “从项目123中删除所有文件”

📝 项目元数据管理

工具 说明 示例
get_project_metadata 📋 获取项目元数据 “获取项目123的所有元数据”
get_project_metadata_by_name 🔍 获取单个元数据值 “获取项目123的元数据‘my_key’”
save_project_metadata 💾 添加或更新元数据 “为项目123保存元数据'key1:value1,key2:value2'”
remove_project_metadata 🗑️ 删除项目元数据 “从项目123中删除元数据‘my_key’”

🔐 项目权限管理

工具 说明 示例
get_project_users 📋 获取项目的所有成员 “显示项目123中的所有用户”
get_assignable_users 👥 获取可分配给项目任务的用户(除查看器外的所有成员) “获取项目123的可分配用户”
add_project_user ➕ 授予用户对项目的访问权限 “将用户1添加到角色为“项目成员”的项目123中”
add_project_group ➕ 授予组对项目的访问权限 “将组456添加到具有“项目查看器”角色的项目123中”
remove_project_user 🗑️ 撤销用户对项目的访问权限 “从项目123中删除用户1”
remove_project_group 🗑️ 撤消组对项目的访问权限 “从项目123中删除组456”
change_project_user_role ✏️ 更改项目用户的角色 “将用户1在项目123中的角色更改为“项目经理””
change_project_group_role ✏️ 更改项目组的角色 “将项目123中组456的角色更改为“项目经理””
get_project_user_role 🔍 获取给定项目的用户角色 “获取项目123中用户1的角色”

📝 子任务管理

工具 说明 示例
create_subtask ➕ 创建新的子任务 “为分配了用户1的任务123创建子任务‘审查设计’”
get_subtask 🔍 获取子任务信息 “获取子任务456的详细信息”
get_all_subtasks 📋 获取任务的所有可用子任务 “显示任务123的所有子任务”
update_subtask ✏️ 更新子任务 “将任务123的子任务456更新为状态2(完成)”
remove_subtask 🗑️ 删除子任务 “删除ID为456的子任务”

⏰ 子任务时间跟踪

工具 说明 示例
has_subtask_timer ⏱️ 检查是否为给定的子任务和用户启动了计时器 “检查用户4是否为子任务123激活了计时器”
set_subtask_start_time ▶️ 为用户启动子任务计时器 “用户4为子任务123启动计时器”
set_subtask_end_time ⏹️ 停止用户的子任务计时器 “用户4停止子任务123的计时器”
get_subtask_time_spent 📊 获取用户在子任务上所花的时间 “获取用户4在子任务123上所花费的时间”

🏷️ 标签管理

工具 说明 示例
get_all_tags 📋 获取所有标签 “显示所有可用标签”
get_tags_by_project 📋 获取给定项目的所有标签 “显示项目123的标签”
create_tag ➕ 创建新标签 “为项目123创建颜色为1的标签'backend'”
update_tag ✏️ 重命名标签 “将标签456重命名为'前端'并将颜色设置为2”
remove_tag 🗑️ 删除标签 “删除ID为456的标签”
set_task_tags 🏷️ 为任务分配/创建/更新标签 “为项目456中的任务123设置标签‘紧急’、‘错误’”
get_task_tags 🔍 为任务分配标签 “为任务123分配标签”

📂 任务文件管理

工具 说明 示例
create_task_file ➕ 创建并上传新的任务附件 “为项目1创建一个文件'meeting_notes.txt',其中包含任务2和base64内容'Zm9vYmFy'”
get_all_task_files 📋 获取附加到任务的所有文件 “显示任务123的所有文件”
get_task_file 🔍 获取文件信息 “获取文件456的详细信息”
download_task_file 📥 下载文件内容(base64编码) “下载文件456”
remove_task_file 🗑️ 删除文件 “删除ID为456的文件”
remove_all_task_files 🗑️ 删除与任务关联的所有文件 “从任务123中删除所有文件”

📝 任务元数据管理

工具 说明 示例
get_task_metadata 📋 按任务唯一id获取与任务相关的所有元数据 “获取任务1的所有元数据”
get_task_metadata_by_name 🔍 通过任务唯一id和元键(名称)获取与任务相关的元数据 “获取任务1的元数据'metaKey1'”
save_task_metadata 💾 保存/更新任务元数据 “为任务1保存元数据'metaName:metaValue'”
remove_task_metadata 🗑️ 按名称删除任务元数据 “从任务1中删除元数据'metaKey1'”

⚙️ 应用管理

工具 说明 示例
get_version 📋 获取应用程序版本 “什么是Kanboard版本?”
get_timezone 🌐 获取连接用户的时区 “我当前的时区是什么?”
get_default_task_colors 🌈 获取所有默认任务颜色 “显示所有默认任务色彩”
get_default_task_color 🎨 获取默认任务颜色 “默认任务颜色是什么?”
get_color_list 📋 获取任务颜色列表 “列出所有可用的任务颜色”
get_application_roles 👥 获取应用程序角色 “列出所有应用程序角色”
get_project_roles 👥 获取项目角色 “列出所有项目角色”

🤖 自动操作管理

工具 说明 示例
get_available_actions 📋 获取可用自动操作列表 “显示可用自动操作”
get_available_action_events 📋 获取可用操作事件列表 “显示可用操作事件”
get_compatible_action_events 🔍 获取与操作兼容的事件列表 “获取操作‘TaskClose’的兼容事件”
get_actions 📋 获取项目的操作列表 “获取项目123的操作”
create_action ➕ 创建操作 “为项目1创建操作,事件'task.move.column',操作'\Kanboard\action\TaskClose',参数'column_id:3'”
remove_action 🗑️ 删除操作 “删除ID为456的操作”

👥 组管理

工具 说明 示例
create_group ➕ 创建一个新组 “创建一个名为‘开发团队’的组,外部ID为‘dev_001’”
update_group ✏️ 更新组 “将组123重命名为‘QA团队’,并将其外部ID更改为‘QA_001’”
remove_group 🗑️ 删除组 “删除ID为456的组”
get_group 🔍 获取一个组 “获取789组的详细信息”
get_all_groups 📋 获取所有组 “显示所有用户组”

👥 集团成员管理

工具 说明 示例
get_member_groups 📋 获取给定用户的所有组 “显示用户1的所有组”
get_group_members 👥 获取组的所有成员 “列出组123的所有成员”
add_group_member ➕ 将用户添加到组 “将用户456添加到组789”
remove_group_member 🗑️ 从组中删除用户 “从组789中删除用户456”
is_group_member ❓ 检查用户是否是组的成员 “用户456是组789的成员吗?”

👥 用户管理

工具 说明 示例
get_users 📋 列出所有系统用户 “显示所有用户”
create_user ➕ 创建新用户 “使用密码'123456'创建用户'john'”
create_ldap_user ➕ 创建通过LDAP身份验证的新用户 “创建LDAP用户'jane'”
get_user 🔍 按ID获取用户信息 “获取ID 123的用户详细信息”
get_user_by_name 🔍 按用户名获取用户信息 “获取'john'的用户详细信息”
update_user ✏️ 更新用户 “将用户123更新为“应用程序管理员”角色”
remove_user 🗑️ 删除用户 “删除ID为456的用户”
disable_user ❌ 禁用用户 “禁用用户123”
enable_user ✅ 启用用户 “启用用户123”
is_active_user 🔍 检查用户是否活动 “检查用户123是否活动”
assign_user_to_project 👤 将用户分配给具有特定角色的项目 “将用户1分配给具有角色“项目成员”的项目“网站””

🏃 ScrumPrint插件API

工具 说明 示例
create_sprint ➕ 创建一个新的冲刺 “在‘我的项目’中创建一个名为‘冲刺1’的冲刺,从‘2024-01-01’开始,到‘2024年01月14日’结束,目标是‘完成入职功能’”
get_sprint_by_id 🔍 按ID检索冲刺 “获取ID为123的冲刺的详细信息”
update_sprint ✏️ 更新现有的sprint “更新项目“我的项目”中的sprint 123以完成”
remove_sprint 🗑️ 按ID删除冲刺 “删除ID为123的冲刺”
get_all_sprints_by_project 📋 检索给定项目的所有冲刺 “获取项目“我的项目”的所有冲刺”

📖 使用示例

项目工作流程

# 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"

团队管理

# 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'"

任务组织

# 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"

🔧 发展

从源头构建

# 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 ./...

项目结构

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

贡献

  1. 分叉存储库
  2. 创建要素分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

📄 许可证

此项目根据MIT许可证获得许可-请参阅 许可证.md 文件以获取详细信息。


由以下材料制成❤️ Kanboard社区