返回市场
开源项目-MCP服务器

开源项目-MCP服务器

作者:AndyEverything13 星标更新:2025-11-06

项目介绍

<br>状态 欢迎PR<br><br>⚠️ 这是一个早期项目。不要用于生产环境 – 欢迎贡献!

OpenProject MCP 服务器

一个模型上下文协议(MCP)服务器,提供与 OpenProject API v3 的无缝集成。此服务器使LLM应用程序能够与OpenProject进行项目管理、工作包跟踪和任务创建。

功能

  • 🔌 完整的OpenProject API v3 集成
  • 📋 项目管理:列出并筛选项目
  • 📝 工作包管理:创建、列出并筛选工作包
  • 🏷️ 类型管理:列出可用的工作包类型
  • 🔐 安全认证:基于API密钥的认证
  • 🌐 代理支持:可选的HTTP代理配置
  • 🚀 异步操作:使用现代的async/await模式构建
  • 📊 全面的日志记录:可配置的日志级别

先决条件

  • Python 3.10 或更高版本
  • uv(快速的Python包管理器)
  • 一个OpenProject实例(云或自托管)
  • OpenProject API密钥(从您的用户配置文件生成)

安装

1. 安装uv(如果尚未安装)

macOS/Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows:

powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

替代方案(使用pip):

pip install uv

2. 克隆并设置项目

git clone https://github.com/yourusername/openproject-mcp.git
cd openproject-mcp

3. 创建虚拟环境并安装依赖项

# 在一个命令中创建虚拟环境并安装依赖项
uv sync

替代方案(手动步骤):

# 创建虚拟环境
uv venv

# 安装依赖项
uv pip install -r requirements.txt

4. 配置环境

# 复制环境模板
cp env_example.txt .env

编辑.env并添加您的OpenProject配置:

OPENPROJECT_URL=https://your-instance.openproject.com
OPENPROJECT_API_KEY=your-api-key-here

配置

环境变量

变量必需描述示例
OPENPROJECT_URL您的OpenProject实例URLhttps://mycompany.openproject.com
OPENPROJECT_API_KEY您的OpenProject用户配置文件中的API密钥8169846b42461e6e...
OPENPROJECT_PROXY如有需要的HTTP代理URLhttp://proxy.company.com:8080
LOG_LEVEL日志级别(DEBUG, INFO, WARNING, ERROR)INFO
TEST_CONNECTION_ON_STARTUP当服务器启动时测试API连接true

获取API密钥

  1. 登录到您的OpenProject实例
  2. 转到我的账户(点击您的头像)
  3. 导航到访问令牌
  4. 点击**+ 添加**以创建新的令牌
  5. 给它命名并复制生成的令牌

使用

运行服务器

使用uv(推荐):

uv run python openproject-mcp.py

替代方案(手动激活):

# 激活虚拟环境
source .venv/bin/activate  # 在Windows上:.venv\Scripts\activate

# 运行服务器
python openproject-mcp.py

注意: 如果您将文件名从openproject_mcp_server.py更改为其他名称,请相应地更新您的配置。

与Claude Desktop集成

在您的Claude Desktop配置文件中添加以下配置:

Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "openproject": {
      "command": "/path/to/your/project/.venv/bin/python",
      "args": ["/path/to/your/project/openproject-mcp.py"]
    }
  }
}

注意:/path/to/your/project/替换为您项目的实际路径。

使用uv的替代方案(如果uv在您的系统PATH中):

{
  "mcpServers": {
    "openproject": {
      "command": "uv",
      "args": ["run", "python", "/path/to/your/project/openproject-mcp.py"]
    }
  }
}

为什么使用直接的Python路径? 直接使用Python路径的方法更为可靠,因为它:

  • 不需要uv在系统PATH中
  • 避免了uv run尝试将项目作为包安装可能带来的问题
  • 对于MCP服务器配置来说更简单直接

可用工具

1. test_connection

测试与您的OpenProject实例的连接。

示例:

测试OpenProject连接

2. list_projects

列出您有权访问的所有项目。

参数:

  • active_only (布尔值,可选): 仅显示活动项目(默认: true)

示例:

列出所有活动项目

3. list_work_packages

列出工作包,并可选地进行筛选。

参数:

  • project_id (整数,可选): 按特定项目筛选
  • status (字符串,可选): 按状态筛选 - "open", "closed", 或 "all"(默认: "open")

示例:

显示项目5中所有开放的工作包

4. list_types

列出可用的工作包类型。

参数:

  • project_id (整数,可选): 按项目筛选类型

示例:

列出所有工作包类型

5. create_work_package

创建一个新的工作包。

参数:

  • project_id (整数,必需): 项目ID
  • subject (字符串,必需): 工作包标题
  • type_id (整数,必需): 类型ID(例如,1表示任务)
  • description (字符串,可选): 以Markdown格式描述
  • priority_id (整数,可选): 优先级ID
  • assignee_id (整数,可选): 分配给用户的ID

示例:

在项目5中创建一个名为“更新文档”的新任务,类型ID为1

6. list_users

列出OpenProject实例中的所有用户。

参数:

  • active_only (布尔值,可选): 仅显示活跃用户(默认: true)

7. get_user

获取特定用户的详细信息。

参数:

  • user_id (整数,必需): 用户ID

8. list_memberships

列出项目成员关系,显示用户及其角色。

参数:

  • project_id (整数,可选): 按特定项目筛选
  • user_id (整数,可选): 按特定用户筛选

9. list_statuses

列出所有可用的工作包状态。

10. list_priorities

列出所有可用的工作包优先级。

11. get_work_package

获取特定工作包的详细信息。

参数:

  • work_package_id (整数,必需): 工作包ID

12. update_work_package

更新现有工作包。

参数:

  • work_package_id (整数,必需): 工作包ID
  • subject (字符串,可选): 工作包标题
  • description (字符串,可选): 以Markdown格式描述
  • type_id (整数,可选): 类型ID
  • status_id (整数,可选): 状态ID
  • priority_id (整数,可选): 优先级ID
  • assignee_id (整数,可选): 分配给用户的ID
  • percentage_done (整数,可选): 完成百分比(0-100)

13. delete_work_package

删除工作包。

参数:

  • work_package_id (整数,必需): 工作包ID

14. list_time_entries

列出时间条目,并可选地进行筛选。

参数:

  • work_package_id (整数,可选): 按特定工作包筛选
  • user_id (整数,可选): 按特定用户筛选

15. create_time_entry

创建一个新的时间条目。

参数:

  • work_package_id (整数,必需): 工作包ID
  • hours (数字,必需): 花费的时间(例如,2.5)
  • spent_on (字符串,必需): 时间花费的日期(YYYY-MM-DD格式)
  • comment (字符串,可选): 注释/描述
  • activity_id (整数,可选): 活动ID

16. update_time_entry

更新现有的时间条目。

参数:

  • time_entry_id (整数,必需): 时间条目ID
  • hours (数字,可选): 花费的时间
  • spent_on (字符串,可选): 时间花费的日期
  • comment (字符串,可选): 注释/描述
  • activity_id (整数,可选): 活动ID

17. delete_time_entry

删除时间条目。

参数:

  • time_entry_id (整数,必需): 时间条目ID

18. list_time_entry_activities

列出可用的时间条目活动。

19. list_versions

列出项目版本/里程碑。

参数:

  • project_id (整数,可选): 按特定项目筛选

20. create_version

创建一个新的项目版本/里程碑。

参数:

  • project_id (整数,必需): 项目ID
  • name (字符串,必需): 版本名称
  • description (字符串,可选): 版本描述
  • start_date (字符串,可选): 开始日期(YYYY-MM-DD格式)
  • end_date (字符串,可选): 结束日期(YYYY-MM-DD格式)
  • status (字符串,可选): 版本状态(open, locked, closed)

21. create_project

创建一个新的项目。

参数:

  • name (字符串,必需): 项目名称
  • identifier (字符串,必需): 项目标识符(唯一)
  • description (字符串,可选): 项目描述
  • public (布尔值,可选): 是否公开项目
  • status (字符串,可选): 项目状态
  • parent_id (整数,可选): 父项目ID

示例:

创建一个名为“网站重新设计”的新项目,标识符为“web-redesign”

22. update_project

更新现有项目。

参数:

  • project_id (整数,必需): 项目ID
  • name (字符串,可选): 项目名称
  • identifier (字符串,可选): 项目标识符
  • description (字符串,可选): 项目描述
  • public (布尔值,可选): 是否公开项目
  • status (字符串,可选): 项目状态
  • parent_id (整数,可选): 父项目ID

23. delete_project

删除项目。

参数:

  • project_id (整数,必需): 项目ID

24. get_project

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

参数:

  • project_id (整数,必需): 项目ID

25. create_membership

创建一个新的项目成员关系。

参数:

  • project_id (整数,必需): 项目ID
  • user_id (整数,可选): 用户ID(如果未提供group_id,则必须提供)
  • group_id (整数,可选): 组ID(如果未提供user_id,则必须提供)
  • role_ids (数组,可选): 角色ID数组
  • role_id (整数,可选): 单个角色ID(替代role_ids)
  • notification_message (字符串,可选): 可选的通知消息

示例:

将用户5添加到项目2中,角色ID为3(开发者角色)

26. update_membership

更新现有的成员关系。

参数:

  • membership_id (整数,必需): 成员关系ID
  • role_ids (数组,可选): 角色ID数组
  • role_id (整数,可选): 单个角色ID
  • notification_message (字符串,可选): 可选的通知消息

27. delete_membership

删除成员关系。

参数:

  • membership_id (整数,必需): 成员关系ID

28. get_membership

获取特定成员关系的详细信息。

参数:

  • membership_id (整数,必需): 成员关系ID

29. list_project_members

列出特定项目的全部成员。

参数:

  • project_id (整数,必需): 项目ID

示例:

列出项目5的所有成员

30. list_user_projects

列出特定用户被分配的所有项目。

参数:

  • user_id (整数,必需): 用户ID

31. list_roles

列出所有可用的角色。

示例:

列出OpenProject实例中的所有可用角色

32. get_role

获取特定角色的详细信息。

参数:

  • role_id (整数,必需): 角色ID

33. set_work_package_parent

为工作包设置父级(创建父子关系)。

参数:

  • work_package_id (整数,必需): 将成为子级的工作包ID
  • parent_id (整数,必需): 将成为父级的工作包ID

示例:

将工作包15设为工作包10的子级

34. remove_work_package_parent

移除工作包的父级关系(使其成为顶级)。

参数:

  • work_package_id (整数,必需): 将移除父级的工作包ID

35. list_work_package_children

列出父级的所有子级工作包。

参数:

  • parent_id (整数,必需): 父级工作包ID
  • include_descendants (布尔值,可选): 包括孙级及所有后代(默认: false)

示例:

列出工作包10的所有子级包括后代

36. create_work_package_relation

在工作包之间创建关系。

参数:

  • from_id (整数,必需): 源工作包ID
  • to_id (整数,必需): 目标工作包ID
  • relation_type (字符串,必需): 关系类型(blocks, follows, precedes, relates, duplicates, includes, requires, partof)
  • lag (整数,可选): 工作日的滞后(适用于follows/precedes)
  • description (字符串,可选): 关系的可选描述

示例:

创建一个“阻止”关系,其中工作包5阻止工作包8

37. list_work_package_relations

列出工作包关系,并可选地进行筛选。

参数:

  • work_package_id (整数,可选): 筛选涉及此工作包ID的关系
  • relation_type (字符串,可选): 按关系类型筛选

38. update_work_package_relation

更新现有工作包关系。

参数:

  • relation_id (整数,必需): 关系ID
  • relation_type (字符串,可选): 新的关系类型
  • lag (整数,可选): 工作日的滞后
  • description (字符串,可选): 关系的可选描述

39. delete_work_package_relation

删除工作包关系。

参数:

  • relation_id (整数,必需): 关系ID

40. get_work_package_relation

获取特定工作包关系的详细信息。

参数:

  • relation_id (整数,必需): 关系ID

开发

设置开发环境

# 安装开发依赖项
uv sync --extra dev

# 或者手动安装
uv pip install -e ".[dev]"

运行测试

uv run pytest tests/

代码格式化

# 格式化代码
uv run black openproject-mcp.py

# 检查代码
uv run flake8 openproject-mcp.py

添加