关于 Plane Mcp Server
Plane MCP Server 为 LLM 提供通过 Plane API 管理 Plane Cloud 项目与工作项的能力,适用于使用 Plane 的项目团队。它涵盖迭代、状态、评论、工时等管理,并支持列表分页;不兼容自托管 Plane。
主要功能
- 01项目与工作项管理
- 02状态、迭代与周期管理
- 03标签、成员与评论管理
- 04附件、链接与活动记录
- 05工时与自定义属性管理
- 06列表游标分页
适用场景
- 01通过 LLM 创建或更新工作项
- 02筛选并翻页查看项目工作项
- 03维护迭代、周期与工作项关联
- 04记录工时并查看工作项历史
MCP 相关
该 MCP 服务通过 Plane API 向 MCP 客户端暴露项目、工作项及相关管理工具,适用于 Plane Cloud 工作区。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
76收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cursor | string | 否 | 分页游标,格式为 'value:offset:is_prev'(可选) |
| per_page | number | 否 | 每页项目数(默认值:100,最大值:100) |
详细介绍
Plane MCP 服务
一个 Model Context Protocol(MCP)服务,可让大模型与 Plane.so 交互,并通过 Plane 的 API 管理项目和问题。借助此服务,Claude 等大模型可以直接处理项目管理工作流,同时确保用户掌控权和安全性。
⚠️ 重要提示: 此 MCP 服务专为 Plane Cloud 实例设计。它仅适用于托管在
https://app.plane.so/workspace-slug上的工作区。如果你使用的是自托管的 Plane 安装,此服务将无法兼容。
注意: 这是原始 kelvin6365/plane-mcp-server 的增强分支,扩展了全面的 Plane API 功能,包括状态、模块(冲刺)、周期、标签、团队管理、评论、链接、附件、时间跟踪和问题类型。
功能
分页支持
- 所有列表操作(项目、问题、模块、周期、标签)均支持基于游标的分页
- 可配置每页条目数,最多 100 条
- 使用下一页/上一页游标浏览大型数据集
- 所有列表工具均采用一致的分页方式
项目管理
- 分页列出 Plane 工作区中的所有项目
- 获取特定项目的详细信息
问题管理
- 创建具有可自定义属性的新问题
- 列出并筛选项目中的问题
- 获取特定问题的详细信息
- 使用新信息更新现有问题
状态管理
- 列出项目中的所有状态
- 获取特定状态的详细信息
- 创建具有可自定义属性的新状态
- 更新现有状态
- 删除项目中的状态
模块(冲刺)管理
- 列出项目中的所有模块(冲刺)
- 获取特定模块的详细信息
- 创建具有可自定义属性的新模块
- 更新现有模块
- 删除项目中的模块
- 列出分配给特定模块的问题
- 向模块添加问题/从模块中移除问题
周期管理
- 列出项目中的所有周期
- 获取特定周期的详细信息
- 创建具有可自定义属性的新周期
- 更新现有周期
- 删除项目中的周期
- 列出分配给特定周期的问题
- 向周期添加问题/从周期中移除问题
标签管理
- 列出项目中的所有标签
- 获取特定标签的详细信息
- 创建具有可自定义属性的新标签
- 更新现有标签
- 删除项目中的标签
团队和工作区管理
- 列出工作区中的所有成员
- 列出分配给特定项目的成员
问题评论与沟通
- 列出、创建、更新和删除问题评论
- 跟踪讨论历史和协作记录
问题链接与外部引用
- 为问题附加外部链接(文档、PR 等)
- 管理和更新与问题相关的 URL
文件附件
- 列出问题的文件附件
- 为新附件生成上传 URL
问题活动与历史记录
- 查看问题的完整活动历史记录
- 跟踪所有变更和更新
时间跟踪(工作日志)
- 记录特定问题所花费的时间
- 查看项目范围的时间跟踪摘要
- 更新和管理工作日志条目
自定义问题类型
- 创建和管理自定义问题类型
- 定义特定于项目的问题类别
接收问题(分类)
- 处理待分类的接收问题/收件箱问题
- 在分配到项目之前管理问题提交
自定义问题属性
- 为问题类型创建和管理自定义属性
- 支持多种属性类型(文本、数字、日期、选项、布尔值)
- 为选择类属性配置下拉选项
- 设置必填字段和验证规则
子问题与关联关系
- 通过父子关系创建分层的问题结构
- 将现有问题转换为子问题
- 列出和管理子问题树
- 将子问题转换回普通问题
问题转移操作
- 在周期之间转移问题,以便更好地管理冲刺
- 批量将问题移动到不同的项目阶段
前置条件
- Node.js 22.x 或更高版本
- Plane.so API 密钥
- Plane.so 工作区
安装
选项 1:使用 NPM(推荐)
最快的入门方式是使用已发布的 npm 包:
{
"mcpServers": {
"plane": {
"command": "npx",
"args": [
"-y",
"@disrex/plane-mcp-server"
],
"env": {
"PLANE_API_KEY": "your_plane_api_key_here",
"PLANE_WORKSPACE_SLUG": "your_workspace_slug_here"
}
}
}
}
将此配置添加到 Claude for Desktop 配置文件中:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
选项 2:手动设置
如果你更希望手动设置服务,请按照以下步骤操作:
- 克隆此存储库:
git clone https://github.com/disrex-group/plane-mcp-server.git
cd plane-mcp-server
- 安装依赖项:
npm install
- 构建服务:
npm run build
获取 Plane API 凭据
要使用此 MCP 服务,你需要:
- Plane API 密钥:在 Plane 的个人设置(而非工作区设置)中生成
- 工作区 Slug:可在 Plane 工作区 URL 中找到(例如,
https://app.plane.so/workspace-slug/)
获取这些凭据后,请按照上述安装选项中的说明在 Claude 配置中使用它们。
可用工具
注意: 工具名称使用连字符(例如,
list-projects),而非下划线。服务会自动将下划线转换为连字符,以确保兼容性。
list-projects
列出 Plane 工作区中的所有项目,并支持分页。
参数:
per_page(可选):每页项目数(默认值:100,最大值:100)cursor(可选):分页游标,格式为 'value:offset:is_prev'
示例:
{
"per_page": 50
}
分页示例:
{
"per_page": 25,
"cursor": "project_name:25:false"
}
get-project
获取特定项目的详细信息。
参数:
project_id:要获取的项目 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef"
}
create-issue
在指定项目中创建新问题。
参数:
project_id:要创建问题的项目 IDname:问题标题description_html:问题的 HTML 描述(Plane API 要求)priority(可选):问题优先级("urgent"、"high"、"medium"、"low"、"none")state_id(可选):此问题的状态 IDassignees(可选):分配给此问题的用户 ID 数组labels(可选):分配给此问题的标签 ID 数组
注意:
assignees和labels参数必须是 ID 字符串数组。常见错误包括传入字典/对象而非数组,或意外地将整个问题数据嵌套在这些字段中。服务会尝试处理这些情况,但最好使用正确的格式。
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"name": "Implement new feature",
"description_html": "<p>We need to implement the new reporting feature</p>",
"priority": "high",
"assignees": ["user-id-1", "user-id-2"],
"labels": ["446cf3ad-446e-4b7a-8706-14121a0338d7", "ab0c39d4-dcae-4ccd-971a-f4c66d1e7db7"]
}
list-issues
列出指定项目的问题,支持可选筛选和分页。
参数:
project_id:要获取问题的项目 IDstate_id(可选):按状态 ID 筛选priority(可选):按优先级筛选assignee_id(可选):按受派人 ID 筛选per_page(可选):每页的项目数(默认值:100,最大值:100)cursor(可选):分页游标,格式为 'value:offset:is_prev'
示例:
基本筛选:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"priority": "high",
"per_page": 20
}
使用分页(第一页):
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"per_page": 20
}
使用分页(通过上一响应中的游标获取下一页):
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"per_page": 20,
"cursor": "20:1:0"
}
get-issue
获取特定问题的详细信息。
参数:
project_id:包含该问题的项目 IDissue_id:要获取的问题 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
update-issue
更新项目中的现有问题。
参数:
project_id:包含该问题的项目 IDissue_id:要更新的问题 IDname(可选):更新后的问题标题description_html(可选):问题的 HTML 描述(Plane API 要求)priority(可选):更新后的问题优先级state_id(可选):更新后的问题状态 IDassignees(可选):要分配给此问题的用户 ID 数组labels(可选):要分配给此问题的标签 ID 数组
注意:
assignees和labels参数必须是 ID 字符串数组,格式要求与 create-issue 工具相同。
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"priority": "urgent",
"description_html": "<p>Updated description with <strong>more details</strong></p>",
"labels": ["446cf3ad-446e-4b7a-8706-14121a0338d7", "7de2b3d1-ae1a-4651-a3df-717629d70c1a"]
}
状态管理工具
list-states
列出项目中的所有状态。
参数:
project_id:要获取状态的项目 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef"
}
get-state
获取特定状态的详细信息。
参数:
project_id:包含该状态的项目 IDstate_id:要获取的状态 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"state_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-state
在项目中创建新状态。
参数:
project_id:要创建状态的项目 IDname:状态名称group:状态组("unstarted"、"started"、"completed"、"cancelled")description(可选):状态描述color(可选):状态的颜色代码(例如,"#ff0000")
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"name": "In Review",
"group": "started",
"description": "Issues currently under review",
"color": "#ffaa00"
}
update-state
更新项目中的现有状态。
参数:
project_id:包含该状态的项目 IDstate_id:要更新的状态 IDname(可选):更新后的状态名称description(可选):更新后的状态描述color(可选):更新后的状态颜色代码group(可选):更新后的状态组
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"state_id": "01def456-7890-12gh-3456-789ijklmnopq",
"name": "Code Review",
"color": "#00ff00"
}
delete-state
从项目中删除状态。
参数:
project_id:包含该状态的项目 IDstate_id:要删除的状态 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"state_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
模块(冲刺)管理工具
list-modules
列出项目中的所有模块(冲刺),支持分页。
参数:
project_id:要获取模块的项目 IDper_page(可选):每页的项目数(默认值:100,最大值:100)cursor(可选):分页游标,格式为 'value:offset:is_prev'
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"per_page": 50
}
分页示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"per_page": 25,
"cursor": "module_name:25:false"
}
get-module
获取特定模块的详细信息。
参数:
project_id:包含该模块的项目 IDmodule_id:要获取的模块 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"module_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-module
在项目中创建一个新模块(迭代)。
Parameters:
project_id:要创建模块的项目 IDname:模块名称description(可选):模块描述start_date(可选):模块开始日期(YYYY-MM-DD 格式)target_date(可选):模块目标结束日期(YYYY-MM-DD 格式)status(可选):模块状态("planned"、"in-progress"、"paused"、"completed"、"cancelled")lead(可选):模块负责人的用户 IDmembers(可选):要分配为模块成员的用户 ID 数组
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"name": "Sprint 1 - Core Features",
"description": "Initial sprint focusing on core functionality",
"start_date": "2024-01-01",
"target_date": "2024-01-14",
"status": "planned",
"lead": "user-id-1",
"members": ["user-id-1", "user-id-2"]
}
update-module
更新项目中的现有模块。
Parameters:
project_id:包含该模块的项目 IDmodule_id:要更新的模块 IDname(可选):更新后的模块名称description(可选):更新后的模块描述start_date(可选):更新后的模块开始日期target_date(可选):更新后的模块目标结束日期status(可选):更新后的模块状态lead(可选):更新后的模块负责人的用户 IDmembers(可选):更新后的模块成员用户 ID 数组
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"module_id": "01def456-7890-12gh-3456-789ijklmnopq",
"status": "in-progress",
"target_date": "2024-01-21"
}
delete-module
从项目中删除模块。
Parameters:
project_id:包含该模块的项目 IDmodule_id:要删除的模块 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"module_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
list-module-issues
列出特定模块中的所有工作项。
Parameters:
project_id:包含该模块的项目 IDmodule_id:要获取工作项的模块 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"module_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
add-issues-to-module
将工作项添加到模块。
Parameters:
project_id:包含该模块的项目 IDmodule_id:要添加工作项的模块 IDissues:要添加到模块的工作项 ID 数组
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"module_id": "01def456-7890-12gh-3456-789ijklmnopq",
"issues": ["issue-id-1", "issue-id-2", "issue-id-3"]
}
remove-issue-from-module
从模块中移除工作项。
Parameters:
project_id:包含该模块的项目 IDmodule_id:要从中移除工作项的模块 IDissue_id:要从模块中移除的工作项 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"module_id": "01def456-7890-12gh-3456-789ijklmnopq",
"issue_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
Cycle 管理工具
list-cycles
列出项目中的所有周期,支持分页。
Parameters:
project_id:要获取周期的项目 IDper_page(可选):每页项目数(默认值:100,最大值:100)cursor(可选):分页游标,格式为 'value:offset:is_prev'
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"per_page": 50
}
分页示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"per_page": 25,
"cursor": "cycle_name:25:false"
}
get-cycle
获取特定周期的详细信息。
Parameters:
project_id:包含该周期的项目 IDcycle_id:要获取的周期 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"cycle_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-cycle
在项目中创建一个新周期。
Parameters:
project_id:要创建周期的项目 IDname:周期名称owned_by:将拥有此周期的用户 IDdescription(可选):周期描述start_date(可选):周期开始日期(YYYY-MM-DD 格式)end_date(可选):周期结束日期(YYYY-MM-DD 格式)
示例:
{
"project_id": "12345678-1234-5678-9abc-123456789def",
"name": "Q1 2024 Development Cycle",
"owned_by": "87654321-4321-8765-cba9-987654321fed",
"description": "First quarter development cycle",
"start_date": "2024-01-01",
"end_date": "2024-03-31"
}
update-cycle
更新项目中的现有周期。
Parameters:
project_id:包含该周期的项目 IDcycle_id:要更新的周期 IDname(可选):更新后的周期名称description(可选):更新后的周期描述start_date(可选):更新后的周期开始日期(YYYY-MM-DD 格式)end_date(可选):更新后的周期结束日期(YYYY-MM-DD 格式)
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"cycle_id": "01def456-7890-12gh-3456-789ijklmnopq",
"name": "Q1 2024 Development Cycle - Updated",
"end_date": "2024-04-15"
}
delete-cycle
从项目中删除周期。
Parameters:
project_id:包含该周期的项目 IDcycle_id:要删除的周期 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"cycle_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
list-cycle-issues
列出特定周期中的所有工作项。
Parameters:
project_id:包含该周期的项目 IDcycle_id:要获取工作项的周期 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"cycle_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
add-issues-to-cycle
将问题添加到周期中。
参数:
project_id:包含该周期的项目 IDcycle_id:要添加问题的周期 IDissues:要添加到周期中的问题 ID 数组
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"cycle_id": "01def456-7890-12gh-3456-789ijklmnopq",
"issues": ["issue-id-1", "issue-id-2", "issue-id-3"]
}
remove-issue-from-cycle
从周期中移除问题。
参数:
project_id:包含该周期的项目 IDcycle_id:要从中移除问题的周期 IDissue_id:要从周期中移除的问题 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"cycle_id": "01def456-7890-12gh-3456-789ijklmnopq",
"issue_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
标签管理工具
list-labels
列出项目中的所有标签,支持分页。
参数:
project_id:要获取标签的项目 IDper_page(可选):每页项目数(默认值:100,最大值:100)cursor(可选):格式为 'value:offset:is_prev' 的分页游标
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"per_page": 50
}
分页示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"per_page": 25,
"cursor": "label_name:25:false"
}
get-label
获取特定标签的详细信息。
参数:
project_id:包含该标签的项目 IDlabel_id:要获取的标签 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"label_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-label
在项目中创建新标签。
参数:
project_id:要在其中创建标签的项目 IDname:标签名称description(可选):标签描述color(可选):标签的颜色代码(例如:“#ff0000”)
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"name": "Bug",
"description": "Issues related to bugs",
"color": "#ff0000"
}
update-label
更新项目中的现有标签。
参数:
project_id:包含该标签的项目 IDlabel_id:要更新的标签 IDname(可选):更新后的标签名称description(可选):更新后的标签描述color(可选):更新后的标签颜色代码(例如:“#ff0000”)
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"label_id": "01def456-7890-12gh-3456-789ijklmnopq",
"name": "Critical Bug",
"color": "#ff0000",
"description": "Issues that require immediate attention"
}
delete-label
从项目中删除标签。
参数:
project_id:包含该标签的项目 IDlabel_id:要删除的标签 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"label_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
团队与工作区管理工具
list-workspace-members
列出工作区中的所有成员。
参数:无
示例:
{}
list-project-members
列出特定项目中的所有成员。
参数:
project_id:要获取成员的项目 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef"
}
问题评论工具
list-issue-comments
列出特定问题的所有评论。
参数:
project_id:包含该问题的项目 IDissue_id:要获取评论的问题 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
get-issue-comment
获取特定评论的详细信息。
参数:
project_id:包含该问题的项目 IDissue_id:包含该评论的问题 IDcomment_id:要获取的评论 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"comment_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
create-issue-comment
在问题上创建新评论。
参数:
project_id:包含该问题的项目 IDissue_id:要发表评论的问题 IDcomment:评论文本
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"comment": "This looks good, but we need to add unit tests before merging."
}
update-issue-comment
更新问题上的现有评论。
参数:
project_id:包含该问题的项目 IDissue_id:包含该评论的问题 IDcomment_id:要更新的评论 IDcomment:更新后的评论文本
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"comment_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw",
"comment": "Updated: This looks good after the latest changes, ready to merge."
}
delete-issue-comment
从问题中删除评论。
参数:
project_id:包含该问题的项目 IDissue_id:包含该评论的问题 IDcomment_id:要删除的评论 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"comment_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
问题链接工具
list-issue-links
列出附加到问题的所有外部链接。
参数:
project_id:包含该问题的项目 IDissue_id:要获取链接的问题 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
get-issue-link
获取特定问题链接的详细信息。
参数:
project_id:包含该问题的项目 IDissue_id:包含该链接的问题 IDlink_id:要获取的链接 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"link_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
create-issue-link
为问题创建新的外部链接。
参数:
project_id:包含该问题的项目 IDissue_id:要添加链接的问题 IDtitle:链接的标题/名称url:要链接到的 URL
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"title": "Related Pull Request",
"url": "https://github.com/company/repo/pull/123"
}
update-issue-link
更新现有的问题链接。
参数:
project_id:包含该问题的项目 IDissue_id:包含该链接的问题 IDlink_id:要更新的链接 IDtitle(可选):更新后的标题/名称url(可选):更新后的 URL
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"link_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw",
"title": "Updated Documentation Link",
"url": "https://docs.example.com/updated-section"
}
delete-issue-link
从问题中删除外部链接。
参数:
project_id:包含该问题的项目 IDissue_id:包含该链接的问题 IDlink_id:要删除的链接 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"link_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
问题附件工具
list-issue-attachments
列出问题的所有文件附件。
参数:
project_id:包含该问题的项目 IDissue_id:要获取附件的问题 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
get-issue-attachment-upload-url
获取用于向问题上传文件附件的预签名 URL。
参数:
project_id:包含该问题的项目 IDissue_id:要附加文件的问题 IDfile_name:要上传的文件名file_size:文件大小,单位为字节content_type:文件的 MIME 类型(例如,'image/png'、'application/pdf')
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"file_name": "screenshot.png",
"file_size": 1024000,
"content_type": "image/png"
}
问题活动工具
list-issue-activities
列出问题的所有活动/历史记录。
参数:
project_id:包含该问题的项目 IDissue_id:要获取活动记录的问题 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
get-issue-activity
获取特定问题活动的详细信息。
参数:
project_id:包含该活动的问题所在项目 IDissue_id:包含该活动的问题 IDactivity_id:要检索的活动 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"activity_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
工时记录(时间跟踪)工具
list-issue-worklogs
列出特定问题的所有工时记录。
参数:
project_id:包含该问题的项目 IDissue_id:要获取工时记录的问题 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
get-project-total-worklogs
获取项目中所有问题的工时记录总时长。
参数:
project_id:要获取工时记录总时长的项目 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef"
}
create-issue-worklog
为问题创建新的工时记录。
参数:
project_id:包含该问题的项目 IDissue_id:要记录工时的问题 IDduration:记录的工时,单位为小时(例如,2.5 表示 2 小时 30 分钟)description(可选):已完成工作的描述
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"duration": 3.5,
"description": "Fixed the authentication bug and added unit tests"
}
update-issue-worklog
更新现有的工时记录。
参数:
project_id:包含该问题的项目 IDissue_id:包含该工时记录的问题 IDworklog_id:要更新的工时记录 IDduration(可选):更新后的记录工时,单位为小时description(可选):更新后的已完成工作描述
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"worklog_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw",
"duration": 4.0,
"description": "Fixed critical bug and updated documentation"
}
delete-issue-worklog
从问题中删除工时记录。
参数:
project_id:包含该问题的项目 IDissue_id:包含该工时记录的问题 IDworklog_id:要删除的工时记录 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"worklog_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
问题类型工具
list-issue-types
列出项目中的所有自定义问题类型。
参数:
project_id:要获取问题类型的项目 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef"
}
get-issue-type
获取特定问题类型的详细信息。
参数:
project_id:包含该问题类型的项目 IDtype_id:要检索的问题类型 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"type_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-issue-type
在项目中创建新的自定义问题类型。
参数:
project_id:要在其中创建问题类型的项目 IDname:问题类型名称description(可选):问题类型描述
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"name": "Epic",
"description": "Large feature that spans multiple sprints"
}
update-issue-type
更新现有的问题类型。
参数:
project_id:包含该问题类型的项目 IDtype_id:要更新的问题类型 IDname(可选):更新后的名称description(可选):更新后的描述
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"type_id": "01def456-7890-12gh-3456-789ijklmnopq",
"name": "Major Epic",
"description": "Large feature spanning multiple quarters"
}
delete-issue-type
从项目中删除问题类型。
参数:
project_id:包含该问题类型的项目 IDtype_id:要删除的问题类型 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"type_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
Intake 问题工具
list-intake-issues
列出项目中的所有 intake/收件箱问题。
参数:
project_id:要从中获取 intake 问题的项目 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef"
}
get-intake-issue
获取特定 intake 问题的详细信息。
参数:
project_id:包含该 intake 问题的项目 IDissue_id:要获取的 intake 问题 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-intake-issue
创建新的 intake/收件箱问题。
参数:
project_id:要在其中创建 intake 问题的项目 IDname:intake 问题标题description_html(可选):问题的 HTML 描述priority(可选):问题优先级(“urgent”“high”“medium”“low”“none”)
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"name": "User reports login issues on mobile app",
"description_html": "<p>Multiple users experiencing login failures on iOS app version 2.1.3</p>",
"priority": "high"
}
update-intake-issue
更新现有的 intake 问题。
参数:
project_id:包含该 intake 问题的项目 IDissue_id:要更新的 intake 问题 IDname(可选):更新后的标题description_html(可选):更新后的 HTML 描述priority(可选):更新后的优先级
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"name": "Updated: Multiple users experiencing login issues on mobile app",
"priority": "urgent",
"description_html": "<p>Updated: Now affecting Android users as well as iOS. Version 2.1.3 and 2.1.4</p>"
}
delete-intake-issue
删除 intake 问题。
参数:
project_id:包含该 intake 问题的项目 IDissue_id:要删除的 intake 问题 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
list-issue-properties
列出特定问题类型的所有自定义属性。
参数:
project_id:项目 IDtype_id:要获取其属性的问题类型 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"type_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
get-issue-property
获取特定问题属性的详细信息。
参数:
project_id:项目 IDtype_id:问题类型 IDproperty_id:要获取的属性 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"type_id": "01def456-7890-12gh-3456-789ijklmnopq",
"property_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
create-issue-property
为问题类型创建新的自定义属性。
参数:
project_id:项目 IDtype_id:问题类型 IDname:属性的内部名称display_name:属性的显示名称property_type:属性类型(TEXT、NUMBER、DATE、OPTION、MULTI_OPTION、BOOLEAN)description:属性描述(可选)is_required:此属性是否为必填项(可选)is_multi:是否允许多个值(可选)
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"type_id": "01def456-7890-12gh-3456-789ijklmnopq",
"name": "severity",
"display_name": "Bug Severity",
"property_type": "OPTION",
"description": "Severity level of the bug",
"is_required": true,
"is_multi": false
}
update-issue-property
更新现有的问题属性。
参数:
project_id:项目 IDtype_id:问题类型 IDproperty_id:要更新的属性 IDname:属性的内部名称(可选)display_name:属性的显示名称(可选)description:属性描述(可选)is_required:此属性是否为必填项(可选)is_multi:是否允许多个值(可选)
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"type_id": "01def456-7890-12gh-3456-789ijklmnopq",
"property_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw",
"display_name": "Bug Severity Level",
"description": "Updated severity level description"
}
delete-issue-property
删除问题属性。
参数:
project_id:项目 IDtype_id:问题类型 IDproperty_id:要删除的属性 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"type_id": "01def456-7890-12gh-3456-789ijklmnopq",
"property_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
list-issue-property-options
列出下拉/选择类问题属性的所有选项。
参数:
project_id:项目 IDproperty_id:要获取其选项的属性 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"property_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
create-issue-property-option
为下拉/选择型问题属性创建新选项。
参数:
project_id:项目的 IDproperty_id:要添加选项的属性 IDname:选项名称description:选项描述(可选)sort_order:选项的排序顺序(可选)is_default:是否为默认选项(可选)
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"property_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw",
"name": "Critical",
"description": "Critical severity level",
"sort_order": 1,
"is_default": false
}
update-issue-property-option
更新下拉/选择型问题属性的选项。
参数:
project_id:项目的 IDproperty_id:属性 IDoption_id:要更新的选项 IDname:选项名称(可选)description:选项描述(可选)sort_order:选项的排序顺序(可选)is_default:是否为默认选项(可选)
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"property_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw",
"option_id": "01jkl012-3456-78mn-9012-opqrstuvwxyz",
"name": "High Priority",
"description": "High priority severity level"
}
list-sub-issues
列出父问题的所有子问题。
参数:
project_id:项目的 IDparent_issue_id:要获取其子问题的父问题 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"parent_issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-sub-issue
在父问题下创建新的子问题。
参数:
project_id:项目的 IDparent_issue_id:父问题的 IDname:子问题的标题description_html:子问题的 HTML 描述(可选)priority:子问题的优先级(urgent、high、medium、low、none)(可选)state_id:此子问题的状态 ID(可选)assignees:要分配给此子问题的用户 ID 数组(可选)
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"parent_issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"name": "Fix validation bug",
"description_html": "<p>Fix the email validation issue in the login form</p>",
"priority": "high"
}
convert-to-sub-issue
将现有问题转换为另一个问题的子问题。
参数:
project_id:项目的 IDissue_id:要转换为子问题的问题 IDparent_issue_id:父问题的 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw",
"parent_issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
convert-to-issue
将子问题转换回常规问题(移除父级关系)。
参数:
project_id:项目的 IDissue_id:要转换为常规问题的子问题 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
transfer-issues
将问题从一个周期转移到另一个周期。
参数:
project_id:项目的 IDcycle_id:要从中转移问题的源周期 IDnew_cycle_id:要将问题转移到的目标周期 ID
示例:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"cycle_id": "01def456-7890-12gh-3456-789ijklmnopq",
"new_cycle_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
开发
- 安装开发依赖项:
npm install --save-dev typescript @types/node
- 以开发模式启动服务:
npm run dev
测试
你可以使用 MCP Inspector 测试服务:
npx @modelcontextprotocol/inspector node dist/index.js
示例
设置好 Plane MCP 服务后,你可以尝试与 Claude 进行以下示例交互:
基本项目和问题管理
- “可以列出我 Plane 工作区中的所有项目吗?”
- “请在 Marketing 项目中创建一个新的高优先级问题,标题为‘更新社交媒体策略’”
- “Development 项目中有哪些高优先级问题?”
- “将 QA 项目中的问题 #123 的优先级更新为 urgent”
迭代/模块管理
- “在 Development 项目中创建一个名为‘Q1 2024 功能’的新迭代,时长为 2 周”
- “显示 Backend 项目当前迭代中的所有问题”
- “将问题 #456 和 #789 添加到‘API 开发’模块”
- “项目中当前有哪些活跃迭代?”
工作流和状态管理
- “列出 Frontend 项目中的所有可用工作流状态”
- “为 Backend 项目创建一个名为‘代码审查’的新状态”
- “将问题 #123 移至‘进行中’状态”
周期和规划管理
- “创建一个从 2024 年 1 月 1 日到 3 月 31 日的 2024 年第一季度开发周期”
- “显示分配给当前开发周期的所有问题”
- “将高优先级问题添加到‘发布准备’周期”
标签和组织
- “列出项目中的所有可用标签,并创建一个新的‘安全’标签”
- “为问题 #789 添加‘Bug’和‘高优先级’标签”
团队与成员管理
- “这个工作区有哪些成员?”
- “显示分配到 Backend 项目的团队成员”
- “列出当前冲刺中分配给 John 的所有问题”
高级工作流
- “创建一个新冲刺,将 5 个指定问题添加到其中,并将开始时间设为下周一”
- “显示所有项目中所有逾期问题及其当前状态”
- “创建一份全面的项目状态报告,包含问题、冲刺和团队分配情况”
Claude 会使用适当的工具与 Plane 交互,并在创建或修改任何数据前征求你的批准。
安全注意事项
- API 密钥需要具备适当的 Plane 权限才能正常使用
- 所有修改数据的操作都需要用户明确批准
- 应妥善保护环境变量
- 切勿将 API 密钥提交到版本控制系统
贡献
- 从 disrex-group/plane-mcp-server 分叉仓库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交更改(
git commit -m 'Add some amazing feature') - 推送到该分支(
git push origin feature/amazing-feature) - 发起 Pull Request
徽章
此项目使用多个徽章,帮助快速了解其状态、质量和兼容性:
可用徽章
-
NPM 版本:显示 npm 上最新发布的版本
[](https://badge.fury.io/js/@disrex%2Fplane-mcp-server) -
MCP 目录质量:Archestra.ai MCP 目录中的质量评分
[](https://www.archestra.ai/mcp-catalog/server/plane-mcp-server) -
许可证:MIT 许可证徽章
[](https://opensource.org/licenses/MIT) -
CI 状态:GitHub Actions 工作流状态
[](https://github.com/disrex-group/plane-mcp-server/actions/workflows/nodejs-ci.yml) -
TypeScript:技术徽章
[](https://www.typescriptlang.org/) -
Plane.so 兼容性:自定义兼容性徽章
[](https://plane.so) -
MCP 协议:模型上下文协议徽章
[](https://modelcontextprotocol.io)
创建自定义徽章
你可以使用 Shields.io 创建自定义徽章:
- 基本格式:
https://img.shields.io/badge/{label}-{message}-{color} - 动态徽章:使用端点获取实时数据(npm 下载量、GitHub 星标数等)
- 样式选项:添加
?style=flat-square、?style=for-the-badge等
自定义徽章示例:
[](https://your-link.com)
徽章服务
- Shields.io:功能最全面的徽章服务
- Badge Fury:专为包管理器提供服务
- Archestra.ai MCP Catalog:MCP 服务的质量徽章
- GitHub Actions:自动生成的 CI/CD 状态徽章
许可证
此项目采用 MIT 许可证授权,详情请参阅 LICENSE 文件。
支持
如果你遇到问题或有疑问:
- 查看 GitHub Issues 页面
- 查阅 modelcontextprotocol.io 上的 MCP 文档
- 提交新问题,并附上详细的复现步骤
仓库历史
此增强版分支基于原始 kelvin6365/plane-mcp-server 的优秀基础构建,新增了全面的项目管理功能。
星标历史
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。