项目管理MCP服务器

一个基于Model Context Protocol (MCP)的服务器,使LLM能够通过Plane.so API管理项目和问题,适用于团队协作和项目管理场景。

  • by disrex-group
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 disrex-group/plane-mcp-server

使用说明

平面MCP服务器

一种模型上下文协议(MCP)服务器,使LLM能够与 Plane.so,允许他们通过Plane的API管理项目和问题。使用此服务器,像Claude这样的LLM可以直接与您的项目管理工作流交互,同时保持用户控制和安全性。

⚠️ 重要提示: 此MCP服务器是专门为 飞机云 实例。它仅适用于托管在上的工作区 https://app.plane.so/workspace-slug。如果您使用自托管的Plane安装,则此服务器将不兼容。

注: 这是原始版本的增强版本 kelvin6365/平面mcp服务器,扩展了全面的Plane API功能,包括状态、模块(疾跑)、周期、标签、团队管理、注释、链接、附件、时间跟踪和问题类型。

特性

分页支持

  • 基于光标的分页 适用于所有列表操作(项目、问题、模块、周期、标签)
  • 可配置页面大小,每页最多100个项目
  • 使用下一个/上一个游标浏览大型数据集
  • 所有列表工具的一致分页

项目管理

  • 按页码列出Plane工作区中的所有项目
  • 获取特定项目的详细信息

问题管理

  • 使用可自定义属性创建新问题
  • 列出并筛选项目中的问题
  • 获取有关特定问题的详细信息
  • 用新信息更新现有问题

状态管理

  • 列出项目中的所有状态
  • 获取有关特定州的详细信息
  • 使用可自定义属性创建新状态
  • 更新现有状态
  • 从项目中删除状态

模块(Sprint)管理

  • 列出项目中的所有模块(sprint)
  • 获取特定模块的详细信息
  • 创建具有可自定义属性的新模块
  • 更新现有模块
  • 从项目中删除模块
  • 列出分配给特定模块的问题
  • 在模块中添加/删除问题

周期管理

  • 列出项目中的所有周期
  • 获取特定周期的详细信息
  • 创建具有可自定义属性的新循环
  • 更新现有周期
  • 从项目中删除周期
  • 列出分配给特定周期的问题
  • 在周期中添加/删除问题

标签管理

  • 列出项目中的所有标签
  • 获取特定标签的详细信息
  • 创建具有可自定义属性的新标签
  • 更新现有标签
  • 从项目中删除标签

团队和工作空间管理

  • 列出工作区中的所有成员
  • 列出分配给特定项目的成员

问题评论和沟通

  • 列出、创建、更新和删除对问题的评论
  • 跟踪讨论历史和协作

问题链接和外部参考

  • 将外部链接附加到问题(文档、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
  • 视窗: %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

获取您的飞机API证书

要使用此MCP服务器,您需要:

  1. 平面API键:从您的 个人设置 平面中的(非工作空间设置)
  2. 工作区蛞蝓:在您的Plane工作区URL中找到(例如。, https://app.plane.so/workspace-slug/)

获得这些凭据后,在Claude配置中使用它们,如上面的安装选项所示。

可用工具

注: 工具名称使用连字符(例如。, list-projects),而不是下划线。服务器将自动将下划线转换为连字符以保持兼容性。

列出项目

列出支持分页的Plane工作区中的所有项目。

参数:

  • per_page (可选):每页项目数(默认值:100,最大值:100)
  • cursor (可选):分页光标格式为“value:offset:is_prev”

例子:

{
  "per_page": 50
}

分页示例:

{
  "per_page": 25,
  "cursor": "project_name:25:false"
}

获取项目

获取特定项目的详细信息。

参数:

  • project_id:要检索的项目的ID

例子:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef"
}

创建问题

在指定项目中创建新问题。

参数:

  • project_id:应创建问题的项目的ID
  • name:问题的标题
  • description_html:问题的HTML描述(平面API要求)
  • priority (可选):问题的优先级(“紧急”、“高”、“中”、“低”、“无”)
  • 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"]
}

列出问题

使用可选的筛选和分页列出指定项目中的问题。

参数:

  • 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"
}

得到问题

获取有关特定问题的详细信息。

参数:

  • project_id:包含问题的项目的ID
  • issue_id:要检索的问题的ID

例子:

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

更新问题

更新项目中的现有问题。

参数:

  • project_id:包含问题的项目的ID
  • issue_id:要更新的问题的ID
  • name (可选):更新了问题的标题
  • description_html (可选):问题的HTML描述(API飞机要求)
  • priority (可选):更新了问题的优先级
  • state_id (可选):更新了问题的状态ID
  • assignees (可选):更新了分配给此问题的用户ID数组
  • labels (可选):更新了分配给此问题的标签ID数组

注: 这 assignees 和 labels 参数必须是ID字符串数组,遵循与创建问题工具相同的格式准则。

例子:

{
  "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"]
}

状态管理工具

列表状态

列出项目中的所有状态。

参数:

  • project_id:从中获取状态的项目ID

例子:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef"
}

获取状态

获取特定状态的详细信息。

参数:

  • project_id:包含状态的项目的ID
  • state_id:要检索的州的ID

例子:

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

创建状态

在项目中创建新状态。

参数:

  • project_id:应在其中创建状态的项目的ID
  • name:国家名称
  • group:状态组(“未启动”、“已开始”、“完成”、“取消”)
  • description (可选):状态描述
  • color (可选):州的颜色代码(例如“#ff0000”)

例子:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef",
  "name": "In Review",
  "group": "started",
  "description": "Issues currently under review",
  "color": "#ffaa00"
}

更新状态

更新项目中的现有状态。

参数:

  • 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"
}

删除状态

从项目中删除状态。

参数:

  • project_id:包含状态的项目的ID
  • state_id:要删除的状态的ID

例子:

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

模块(Sprint)管理工具

列出模块

列出具有分页支持的项目中的所有模块(sprint)。

参数:

  • 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模块

获取特定模块的详细信息。

参数:

  • project_id:包含模块的项目的ID
  • module_id:要检索的模块的ID

例子:

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

创建模块

在项目中创建新模块(sprint)。

参数:

  • project_id:应创建模块的项目的ID
  • name:模块名称
  • description (可选):模块说明
  • start_date (可选):模块的开始日期(YYYY-MM-DD格式)
  • target_date (可选):模块的目标结束日期(YYYY-MM-DD格式)
  • status (可选):模块的状态(“计划”、“进行中”、“暂停”、“已完成”、“取消”)
  • 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"]
}

更新模块

更新项目中的现有模块。

参数:

  • 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"
}

删除模块

从项目中删除模块。

参数:

  • project_id:包含模块的项目的ID
  • module_id:要删除的模块的ID

例子:

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

列出模块问题

列出特定模块中的所有问题。

参数:

  • project_id:包含模块的项目的ID
  • module_id:从中获取问题的模块的ID

例子:

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

向模块添加问题

向模块添加问题。

参数:

  • 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"]
}

从模块中删除问题

从模块中删除问题。

参数:

  • 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"
}

循环管理工具

列表周期

列出具有分页支持的项目中的所有周期。

参数:

  • 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"
}

获取循环

获取特定周期的详细信息。

参数:

  • project_id:包含周期的项目的ID
  • cycle_id:要检索的循环的ID

例子:

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

创建循环

在项目中创建新循环。

参数:

  • 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"
}

更新周期

更新项目中的现有循环。

参数:

  • 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"
}

删除周期

从项目中删除循环。

参数:

  • project_id:包含周期的项目的ID
  • cycle_id:要删除的循环的ID

例子:

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

列出循环问题

列出特定周期中的所有问题。

参数:

  • project_id:包含周期的项目的ID
  • cycle_id:从中获取问题的周期ID

例子:

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

在循环中添加问题

将问题添加到循环中。

参数:

  • 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"]
}

从循环中删除问题

从循环中删除问题。

参数:

  • 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"
}

标签管理工具

列表标签

列出具有分页支持的项目中的所有标签。

参数:

  • 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"
}

获取标签

获取特定标签的详细信息。

参数:

  • project_id:包含标签的项目的ID
  • label_id:要检索的标签的ID

例子:

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

创建标签

在项目中创建新标签。

参数:

  • project_id:应创建标签的项目的ID
  • name:标签名称
  • description (可选):标签说明
  • color (可选):标签的颜色代码(例如“#ff0000”)

例子:

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

更新标签

更新项目中的现有标签。

参数:

  • 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"
}

删除标签

从项目中删除标签。

参数:

  • project_id:包含标签的项目的ID
  • label_id:要删除的标签的ID

例子:

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

团队和工作区管理工具

列出工作区成员

列出工作区中的所有成员。

参数:无

例子:

{}

列出项目成员

列出特定项目中的所有成员。

参数:

  • project_id:从中获取成员的项目ID

例子:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef"
}

问题评论工具

列出问题注释

列出对特定问题的所有评论。

参数:

  • project_id:包含问题的项目的ID
  • issue_id:要从中获取评论的问题的ID

例子:

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

获取问题评论

获取特定注释的详细信息。

参数:

  • 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"
}

创建问题注释

对某个问题创建新评论。

参数:

  • 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."
}

更新问题注释

更新对某个问题的现有评论。

参数:

  • 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."
}

删除问题注释

从问题中删除评论。

参数:

  • 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"
}

问题链接工具

列出问题链接

列出附加到问题的所有外部链接。

参数:

  • project_id:包含问题的项目的ID
  • issue_id:要从中获取链接的问题的ID

例子:

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

获取问题链接

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

参数:

  • 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"
}

创建问题链接

为问题创建新的外部链接。

参数:

  • 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"
}

更新问题链接

更新现有问题链接。

参数:

  • 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"
}

删除问题链接

从问题中删除外部链接。

参数:

  • 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"
}

发布附件工具

列出问题附件

列出问题的所有文件附件。

参数:

  • project_id:包含问题的项目的ID
  • issue_id:要从中获取附件的问题的ID

例子:

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

获取问题附件上传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"
}

问题活动工具

列出问题活动

列出问题的所有活动/历史记录。

参数:

  • project_id:包含问题的项目的ID
  • issue_id:从中获取活动的问题ID

例子:

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

获取问题活动

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

参数:

  • 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"
}

工作日志(时间跟踪)工具

列出问题工作日志

列出特定问题的所有时间日志。

参数:

  • project_id:包含问题的项目的ID
  • issue_id:要从中获取工作日志的问题的ID

例子:

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

获取项目总工作日志

获取项目中所有问题记录的总时间。

参数:

  • project_id:从中获取总工作日志的项目ID

例子:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef"
}

创建问题工作日志

为问题创建新的时间日志条目。

参数:

  • 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"
}

更新问题工作日志

更新现有的工作日志条目。

参数:

  • 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"
}

删除问题工作日志

从问题中删除工作日志条目。

参数:

  • 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"
}

问题类型工具

列出问题类型

列出项目中的所有自定义问题类型。

参数:

  • project_id:从中获取问题类型的项目ID

例子:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef"
}

获取问题类型

获取特定问题类型的详细信息。

参数:

  • project_id:包含问题类型的项目的ID
  • type_id:要检索的问题类型的ID

例子:

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

创建问题类型

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

参数:

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

例子:

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

更新问题类型

更新现有问题类型。

参数:

  • 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"
}

删除问题类型

从项目中删除问题类型。

参数:

  • project_id:包含问题类型的项目的ID
  • type_id:要删除的问题类型的ID

例子:

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

进气问题工具

列出入学问题

列出项目中的所有接收/收件箱问题。

参数:

  • project_id:从中获取招生问题的项目ID

例子:

{
  "project_id": "01abc123-4567-89de-0123-456789abcdef"
}

摄入问题

获取有关特定摄入问题的详细信息。

参数:

  • project_id:包含进气问题的项目ID
  • issue_id:要检索的摄入问题的ID

例子:

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

产生摄入问题

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

参数:

  • project_id:在中创建进气问题的项目ID
  • name:招生问题的标题
  • description_html (可选):问题的HTML描述
  • priority (可选):问题的优先级(“紧急”、“高”、“中”、“低”、“无”)

例子:

{
  "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"
}

更新进气问题

更新现有的摄入问题。

参数:

  • project_id:包含进气问题的项目ID
  • issue_id:要更新的进气问题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>"
}

删除进气问题

删除进气问题。

参数:

  • project_id:包含进气问题的项目ID
  • issue_id:要删除的取水问题的ID

例子:

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

列出问题属性

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

参数:

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

例子:

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

获得发行财产

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

参数:

  • 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"
}

创建问题属性

为问题类型创建新的自定义属性。

参数:

  • project_id:项目ID
  • type_id:问题类型的ID
  • name:属性的内部名称
  • display_name:属性的显示名称
  • property_type:属性类型(文本、数字、日期、选项、多选项、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
}

更新问题属性

更新现有问题属性。

参数:

  • 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"
}

删除问题属性

删除问题属性。

参数:

  • 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"
}

列出问题属性选项

列出下拉/选择问题属性的所有选项。

参数:

  • project_id:项目ID
  • property_id:要获取选项的房产ID

例子:

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

创建问题属性选项

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

参数:

  • 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
}

更新问题属性选项

更新下拉/选择问题属性的选项。

参数:

  • 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"
}

列出子问题

列出父问题的所有子问题。

参数:

  • project_id:项目ID
  • parent_issue_id:获取子问题的父问题ID

例子:

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

创建子问题

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

参数:

  • project_id:项目ID
  • parent_issue_id:父问题的ID
  • name:子问题的标题
  • description_html:子问题的HTML描述(可选)
  • priority子问题的优先级(紧急、高、中、低、无)(可选)
  • 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"
}

转换为子问题

将现有问题转换为另一个问题的子问题。

参数:

  • 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"
}

转换为问题

将子问题转换回常规问题(删除父关系)。

参数:

  • project_id:项目ID
  • issue_id:要转换为常规发行的子发行的ID

例子:

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

转让问题

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

参数:

  • 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检查器测试服务器:

npx @modelcontextprotocol/inspector node dist/index.js

例子

以下是一些在设置Plane MCP服务器后可以尝试与Claude进行交互的示例:

基础项目与问题管理

  1. “你能列出我的Plane工作区中的所有项目吗?”
  2. “请在营销项目中创建一个名为“更新社交媒体策略”的新的高优先级问题”
  3. “开发项目中的所有高优先级问题是什么?”
  4. “更新QA项目中的问题#123,将其优先级更改为紧急”

Sprint/模块管理

  1. “在开发项目中创建一个名为'Q1 2024 Features'的新冲刺,持续时间为2周”
  2. “显示后端项目当前冲刺中的所有问题”
  3. “将#456和#789问题添加到“API开发”模块中”
  4. “项目中当前有哪些冲刺活动?”

工作流和状态管理

  1. “列出前端项目中可用的所有工作流状态”
  2. 为后端项目创建一个名为“代码审查”的新状态
  3. “将问题#123移至“进行中”状态”

周期与计划管理

  1. “创建2024年第一季度从1月1日到3月31日的开发周期”
  2. “显示分配给当前开发周期的所有问题”
  3. “将高优先级问题添加到‘发布准备’周期中”

标签和组织

  1. 列出项目中所有可用的标签,并创建新的“安全”标签
  2. “将‘Bug’和‘高优先级’标签应用于问题#789”

团队和成员管理

  1. “此工作区中的所有成员是谁?”
  2. “显示分配给后端项目的团队成员”
  3. “列出当前冲刺中分配给John的所有问题”

高级工作流

  1. 创建一个新的冲刺,添加5个具体问题,并将其设置为下周一开始
  2. “显示所有项目的所有逾期问题及其当前状态”
  3. 创建包含问题、冲刺和团队分配的全面项目状态报告

Claude将使用适当的工具与Plane交互,同时在创建或修改任何数据之前征求您的批准。

安全考虑

  • API密钥需要正确的Plane权限才能运行
  • 所有修改数据的操作都需要明确的用户批准
  • 应适当保护环境变量
  • API密钥不应提交给版本控制

贡献

  1. 从以下位置分叉存储库 discx组/平面mcp服务器
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

徽章

此项目使用几个徽章来提供有关状态、质量和兼容性的快速信息:

可用徽章

  • 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操作工作流状态

    [![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 stars等)
  3. 样式选项:添加 ?style=flat-square, ?style=for-the-badge等等。

自定义徽章示例:

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

徽章服务

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

支持

如果您遇到任何问题或有疑问:

  1. 检查 GitHub问题部分
  2. 请参阅MCP文件 模型上下文协议.io
  3. 以详细的复制步骤打开新一期

存储库历史记录

这款增强型叉子建立在原始叉子的优良基础之上 kelvin6365/平面mcp服务器,增加了全面的项目管理能力。

明星历史