mcpField
P
Plane Mcp Server

Plane Mcp Server

本地服务
github.com/disrex-group生产力161 周前更新

关于 Plane Mcp Server

Plane MCP Server 为 LLM 提供通过 Plane API 管理 Plane Cloud 项目与工作项的能力,适用于使用 Plane 的项目团队。它涵盖迭代、状态、评论、工时等管理,并支持列表分页;不兼容自托管 Plane。

主要功能

  1. 01项目与工作项管理
  2. 02状态、迭代与周期管理
  3. 03标签、成员与评论管理
  4. 04附件、链接与活动记录
  5. 05工时与自定义属性管理
  6. 06列表游标分页

适用场景

  1. 01通过 LLM 创建或更新工作项
  2. 02筛选并翻页查看项目工作项
  3. 03维护迭代、周期与工作项关联
  4. 04记录工时并查看工作项历史

MCP 相关

该 MCP 服务通过 Plane API 向 MCP 客户端暴露项目、工作项及相关管理工具,适用于 Plane Cloud 工作区。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"plane-mcp-server-disrex-group": {
"command": "npx",
"args": [
"-y",
"@disrex/plane-mcp-server"
],
"env": {
"PLANE_API_KEY": "<PLANE_API_KEY>",
"PLANE_WORKSPACE_SLUG": "<PLANE_WORKSPACE_SLUG>"
}
}
}
}
启动命令npx -y @disrex/plane-mcp-server
需要配置的环境变量
PLANE_API_KEY密钥
PLANE_WORKSPACE_SLUG

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@disrex/plane-mcp-server

工具

76

收录的工具列表 · 更新于 2 周前

参数类型必填说明
cursorstring否分页游标,格式为 'value:offset:is_prev'(可选)
per_pagenumber否每页项目数(默认值:100,最大值:100)

详细介绍

Plane MCP 服务

npm version Quality License: MIT Node.js CI TypeScript Plane.so 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:手动设置

如果你更希望手动设置服务,请按照以下步骤操作:

  1. 克隆此存储库:
git clone https://github.com/disrex-group/plane-mcp-server.git
cd plane-mcp-server
  1. 安装依赖项:
npm install
  1. 构建服务:
npm run build

获取 Plane API 凭据

要使用此 MCP 服务,你需要:

  1. Plane API 密钥:在 Plane 的个人设置(而非工作区设置)中生成
  2. 工作区 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:要创建问题的项目 ID
  • name:问题标题
  • description_html:问题的 HTML 描述(Plane API 要求)
  • priority(可选):问题优先级("urgent"、"high"、"medium"、"low"、"none")
  • state_id(可选):此问题的状态 ID
  • assignees(可选):分配给此问题的用户 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:要获取问题的项目 ID
  • state_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:包含该问题的项目 ID
  • issue_id:要获取的问题 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
update-issue

更新项目中的现有问题。

参数:

  • project_id:包含该问题的项目 ID
  • issue_id:要更新的问题 ID
  • name(可选):更新后的问题标题
  • description_html(可选):问题的 HTML 描述(Plane API 要求)
  • priority(可选):更新后的问题优先级
  • state_id(可选):更新后的问题状态 ID
  • assignees(可选):要分配给此问题的用户 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:包含该状态的项目 ID
  • state_id:要获取的状态 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "state_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-state

在项目中创建新状态。

参数:

  • project_id:要创建状态的项目 ID
  • name:状态名称
  • 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:包含该状态的项目 ID
  • state_id:要更新的状态 ID
  • name(可选):更新后的状态名称
  • 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:包含该状态的项目 ID
  • state_id:要删除的状态 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "state_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
模块(冲刺)管理工具
list-modules

列出项目中的所有模块(冲刺),支持分页。

参数:

  • project_id:要获取模块的项目 ID
  • per_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:包含该模块的项目 ID
  • module_id:要获取的模块 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "module_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-module

在项目中创建一个新模块(迭代)。

Parameters:

  • project_id:要创建模块的项目 ID
  • name:模块名称
  • description(可选):模块描述
  • start_date(可选):模块开始日期(YYYY-MM-DD 格式)
  • target_date(可选):模块目标结束日期(YYYY-MM-DD 格式)
  • status(可选):模块状态("planned"、"in-progress"、"paused"、"completed"、"cancelled")
  • lead(可选):模块负责人的用户 ID
  • members(可选):要分配为模块成员的用户 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:包含该模块的项目 ID
  • module_id:要更新的模块 ID
  • name(可选):更新后的模块名称
  • description(可选):更新后的模块描述
  • start_date(可选):更新后的模块开始日期
  • target_date(可选):更新后的模块目标结束日期
  • status(可选):更新后的模块状态
  • lead(可选):更新后的模块负责人的用户 ID
  • members(可选):更新后的模块成员用户 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:包含该模块的项目 ID
  • module_id:要删除的模块 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "module_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
list-module-issues

列出特定模块中的所有工作项。

Parameters:

  • project_id:包含该模块的项目 ID
  • module_id:要获取工作项的模块 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "module_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
add-issues-to-module

将工作项添加到模块。

Parameters:

  • project_id:包含该模块的项目 ID
  • module_id:要添加工作项的模块 ID
  • issues:要添加到模块的工作项 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:包含该模块的项目 ID
  • module_id:要从中移除工作项的模块 ID
  • issue_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:要获取周期的项目 ID
  • per_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:包含该周期的项目 ID
  • cycle_id:要获取的周期 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "cycle_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-cycle

在项目中创建一个新周期。

Parameters:

  • project_id:要创建周期的项目 ID
  • name:周期名称
  • owned_by:将拥有此周期的用户 ID
  • description(可选):周期描述
  • 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:包含该周期的项目 ID
  • cycle_id:要更新的周期 ID
  • name(可选):更新后的周期名称
  • 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:包含该周期的项目 ID
  • cycle_id:要删除的周期 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "cycle_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
list-cycle-issues

列出特定周期中的所有工作项。

Parameters:

  • project_id:包含该周期的项目 ID
  • cycle_id:要获取工作项的周期 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "cycle_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
add-issues-to-cycle

将问题添加到周期中。

参数:

  • project_id:包含该周期的项目 ID
  • cycle_id:要添加问题的周期 ID
  • issues:要添加到周期中的问题 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:包含该周期的项目 ID
  • cycle_id:要从中移除问题的周期 ID
  • issue_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:要获取标签的项目 ID
  • per_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:包含该标签的项目 ID
  • label_id:要获取的标签 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "label_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-label

在项目中创建新标签。

参数:

  • project_id:要在其中创建标签的项目 ID
  • name:标签名称
  • description(可选):标签描述
  • color(可选):标签的颜色代码(例如:“#ff0000”)

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "name": "Bug",
  "description": "Issues related to bugs",
  "color": "#ff0000"
}
update-label

更新项目中的现有标签。

参数:

  • project_id:包含该标签的项目 ID
  • label_id:要更新的标签 ID
  • name(可选):更新后的标签名称
  • 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:包含该标签的项目 ID
  • label_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:包含该问题的项目 ID
  • issue_id:要获取评论的问题 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
get-issue-comment

获取特定评论的详细信息。

参数:

  • project_id:包含该问题的项目 ID
  • issue_id:包含该评论的问题 ID
  • comment_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:包含该问题的项目 ID
  • issue_id:要发表评论的问题 ID
  • comment:评论文本

示例:

{
  "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:包含该问题的项目 ID
  • issue_id:包含该评论的问题 ID
  • comment_id:要更新的评论 ID
  • comment:更新后的评论文本

示例:

{
  "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:包含该问题的项目 ID
  • issue_id:包含该评论的问题 ID
  • comment_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:包含该问题的项目 ID
  • issue_id:要获取链接的问题 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
get-issue-link

获取特定问题链接的详细信息。

参数:

  • project_id:包含该问题的项目 ID
  • issue_id:包含该链接的问题 ID
  • link_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:包含该问题的项目 ID
  • issue_id:要添加链接的问题 ID
  • title:链接的标题/名称
  • 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:包含该问题的项目 ID
  • issue_id:包含该链接的问题 ID
  • link_id:要更新的链接 ID
  • title(可选):更新后的标题/名称
  • 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:包含该问题的项目 ID
  • issue_id:包含该链接的问题 ID
  • link_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:包含该问题的项目 ID
  • issue_id:要获取附件的问题 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
get-issue-attachment-upload-url

获取用于向问题上传文件附件的预签名 URL。

参数:

  • project_id:包含该问题的项目 ID
  • issue_id:要附加文件的问题 ID
  • file_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:包含该问题的项目 ID
  • issue_id:要获取活动记录的问题 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
get-issue-activity

获取特定问题活动的详细信息。

参数:

  • project_id:包含该活动的问题所在项目 ID
  • issue_id:包含该活动的问题 ID
  • activity_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:包含该问题的项目 ID
  • issue_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:包含该问题的项目 ID
  • issue_id:要记录工时的问题 ID
  • duration:记录的工时,单位为小时(例如,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:包含该问题的项目 ID
  • issue_id:包含该工时记录的问题 ID
  • worklog_id:要更新的工时记录 ID
  • duration(可选):更新后的记录工时,单位为小时
  • 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:包含该问题的项目 ID
  • issue_id:包含该工时记录的问题 ID
  • worklog_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:包含该问题类型的项目 ID
  • type_id:要检索的问题类型 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "type_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-issue-type

在项目中创建新的自定义问题类型。

参数:

  • project_id:要在其中创建问题类型的项目 ID
  • name:问题类型名称
  • description(可选):问题类型描述

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "name": "Epic",
  "description": "Large feature that spans multiple sprints"
}
update-issue-type

更新现有的问题类型。

参数:

  • project_id:包含该问题类型的项目 ID
  • type_id:要更新的问题类型 ID
  • name(可选):更新后的名称
  • 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:包含该问题类型的项目 ID
  • type_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 问题的项目 ID
  • issue_id:要获取的 intake 问题 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-intake-issue

创建新的 intake/收件箱问题。

参数:

  • project_id:要在其中创建 intake 问题的项目 ID
  • name: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 问题的项目 ID
  • issue_id:要更新的 intake 问题 ID
  • name(可选):更新后的标题
  • 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 问题的项目 ID
  • issue_id:要删除的 intake 问题 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
list-issue-properties

列出特定问题类型的所有自定义属性。

参数:

  • project_id:项目 ID
  • type_id:要获取其属性的问题类型 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "type_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
get-issue-property

获取特定问题属性的详细信息。

参数:

  • project_id:项目 ID
  • type_id:问题类型 ID
  • property_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:项目 ID
  • type_id:问题类型 ID
  • name:属性的内部名称
  • 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:项目 ID
  • type_id:问题类型 ID
  • property_id:要更新的属性 ID
  • name:属性的内部名称(可选)
  • 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:项目 ID
  • type_id:问题类型 ID
  • property_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:项目 ID
  • property_id:要获取其选项的属性 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "property_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
create-issue-property-option

为下拉/选择型问题属性创建新选项。

参数:

  • project_id:项目的 ID
  • property_id:要添加选项的属性 ID
  • name:选项名称
  • 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:项目的 ID
  • property_id:属性 ID
  • option_id:要更新的选项 ID
  • name:选项名称(可选)
  • 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:项目的 ID
  • parent_issue_id:要获取其子问题的父问题 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "parent_issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
create-sub-issue

在父问题下创建新的子问题。

参数:

  • project_id:项目的 ID
  • parent_issue_id:父问题的 ID
  • name:子问题的标题
  • 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:项目的 ID
  • issue_id:要转换为子问题的问题 ID
  • parent_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:项目的 ID
  • issue_id:要转换为常规问题的子问题 ID

示例:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "issue_id": "01ghi789-0123-45jk-6789-lmnopqrstuvw"
}
transfer-issues

将问题从一个周期转移到另一个周期。

参数:

  • project_id:项目的 ID
  • cycle_id:要从中转移问题的源周期 ID
  • new_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"
}

开发

  1. 安装开发依赖项:
npm install --save-dev typescript @types/node
  1. 以开发模式启动服务:
npm run dev

测试

你可以使用 MCP Inspector 测试服务:

npx @modelcontextprotocol/inspector node dist/index.js

示例

设置好 Plane MCP 服务后,你可以尝试与 Claude 进行以下示例交互:

基本项目和问题管理
  1. “可以列出我 Plane 工作区中的所有项目吗?”
  2. “请在 Marketing 项目中创建一个新的高优先级问题,标题为‘更新社交媒体策略’”
  3. “Development 项目中有哪些高优先级问题?”
  4. “将 QA 项目中的问题 #123 的优先级更新为 urgent”
迭代/模块管理
  1. “在 Development 项目中创建一个名为‘Q1 2024 功能’的新迭代,时长为 2 周”
  2. “显示 Backend 项目当前迭代中的所有问题”
  3. “将问题 #456 和 #789 添加到‘API 开发’模块”
  4. “项目中当前有哪些活跃迭代?”
工作流和状态管理
  1. “列出 Frontend 项目中的所有可用工作流状态”
  2. “为 Backend 项目创建一个名为‘代码审查’的新状态”
  3. “将问题 #123 移至‘进行中’状态”
周期和规划管理
  1. “创建一个从 2024 年 1 月 1 日到 3 月 31 日的 2024 年第一季度开发周期”
  2. “显示分配给当前开发周期的所有问题”
  3. “将高优先级问题添加到‘发布准备’周期”
标签和组织
  1. “列出项目中的所有可用标签,并创建一个新的‘安全’标签”
  2. “为问题 #789 添加‘Bug’和‘高优先级’标签”
团队与成员管理
  1. “这个工作区有哪些成员?”
  2. “显示分配到 Backend 项目的团队成员”
  3. “列出当前冲刺中分配给 John 的所有问题”
高级工作流
  1. “创建一个新冲刺,将 5 个指定问题添加到其中,并将开始时间设为下周一”
  2. “显示所有项目中所有逾期问题及其当前状态”
  3. “创建一份全面的项目状态报告,包含问题、冲刺和团队分配情况”

Claude 会使用适当的工具与 Plane 交互,并在创建或修改任何数据前征求你的批准。

安全注意事项

  • API 密钥需要具备适当的 Plane 权限才能正常使用
  • 所有修改数据的操作都需要用户明确批准
  • 应妥善保护环境变量
  • 切勿将 API 密钥提交到版本控制系统

贡献

  1. 从 disrex-group/plane-mcp-server 分叉仓库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交更改(git commit -m 'Add some amazing feature')
  4. 推送到该分支(git push origin feature/amazing-feature)
  5. 发起 Pull Request

徽章

此项目使用多个徽章,帮助快速了解其状态、质量和兼容性:

可用徽章
  • NPM 版本:显示 npm 上最新发布的版本

    [![npm version](https://badge.fury.io/js/@disrex%2Fplane-mcp-server.svg)](https://badge.fury.io/js/@disrex%2Fplane-mcp-server)
    
  • MCP 目录质量:Archestra.ai MCP 目录中的质量评分

    [![Quality](https://www.archestra.ai/mcp-catalog/api/badge/quality/disrex-group/plane-mcp-server)](https://www.archestra.ai/mcp-catalog/server/plane-mcp-server)
    
  • 许可证:MIT 许可证徽章

    [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
    
  • CI 状态:GitHub Actions 工作流状态

    [![Node.js CI](https://github.com/disrex-group/plane-mcp-server/actions/workflows/nodejs-ci.yml/badge.svg)](https://github.com/disrex-group/plane-mcp-server/actions/workflows/nodejs-ci.yml)
    
  • TypeScript:技术徽章

    [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](https://www.typescriptlang.org/)
    
  • Plane.so 兼容性:自定义兼容性徽章

    [![Plane.so](https://img.shields.io/badge/Plane.so-Compatible-blue)](https://plane.so)
    
  • MCP 协议:模型上下文协议徽章

    [![MCP](https://img.shields.io/badge/MCP-Model%20Context%20Protocol-green)](https://modelcontextprotocol.io)
    
创建自定义徽章

你可以使用 Shields.io 创建自定义徽章:

  1. 基本格式:https://img.shields.io/badge/{label}-{message}-{color}
  2. 动态徽章:使用端点获取实时数据(npm 下载量、GitHub 星标数等)
  3. 样式选项:添加 ?style=flat-square、?style=for-the-badge 等

自定义徽章示例:

[![Custom Badge](https://img.shields.io/badge/Custom-Message-brightgreen)](https://your-link.com)
徽章服务

许可证

此项目采用 MIT 许可证授权,详情请参阅 LICENSE 文件。

支持

如果你遇到问题或有疑问:

  1. 查看 GitHub Issues 页面
  2. 查阅 modelcontextprotocol.io 上的 MCP 文档
  3. 提交新问题,并附上详细的复现步骤

仓库历史

此增强版分支基于原始 kelvin6365/plane-mcp-server 的优秀基础构建,新增了全面的项目管理功能。

星标历史

Star History Chart

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。