<br>
<br><br>⚠️ 这是一个早期项目。不要用于生产环境 – 欢迎贡献!
一个模型上下文协议(MCP)服务器,提供与 OpenProject API v3 的无缝集成。此服务器使LLM应用程序能够与OpenProject进行项目管理、工作包跟踪和任务创建。
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
git clone https://github.com/yourusername/openproject-mcp.git
cd openproject-mcp
# 在一个命令中创建虚拟环境并安装依赖项
uv sync
替代方案(手动步骤):
# 创建虚拟环境
uv venv
# 安装依赖项
uv pip install -r requirements.txt
# 复制环境模板
cp env_example.txt .env
编辑.env并添加您的OpenProject配置:
OPENPROJECT_URL=https://your-instance.openproject.com
OPENPROJECT_API_KEY=your-api-key-here
| 变量 | 必需 | 描述 | 示例 |
|---|---|---|---|
OPENPROJECT_URL | 是 | 您的OpenProject实例URL | https://mycompany.openproject.com |
OPENPROJECT_API_KEY | 是 | 您的OpenProject用户配置文件中的API密钥 | 8169846b42461e6e... |
OPENPROJECT_PROXY | 否 | 如有需要的HTTP代理URL | http://proxy.company.com:8080 |
LOG_LEVEL | 否 | 日志级别(DEBUG, INFO, WARNING, ERROR) | INFO |
TEST_CONNECTION_ON_STARTUP | 否 | 当服务器启动时测试API连接 | true |
使用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配置文件中添加以下配置:
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尝试将项目作为包安装可能带来的问题test_connection测试与您的OpenProject实例的连接。
示例:
测试OpenProject连接
list_projects列出您有权访问的所有项目。
参数:
active_only (布尔值,可选): 仅显示活动项目(默认: true)示例:
列出所有活动项目
list_work_packages列出工作包,并可选地进行筛选。
参数:
project_id (整数,可选): 按特定项目筛选status (字符串,可选): 按状态筛选 - "open", "closed", 或 "all"(默认: "open")示例:
显示项目5中所有开放的工作包
list_types列出可用的工作包类型。
参数:
project_id (整数,可选): 按项目筛选类型示例:
列出所有工作包类型
create_work_package创建一个新的工作包。
参数:
project_id (整数,必需): 项目IDsubject (字符串,必需): 工作包标题type_id (整数,必需): 类型ID(例如,1表示任务)description (字符串,可选): 以Markdown格式描述priority_id (整数,可选): 优先级IDassignee_id (整数,可选): 分配给用户的ID示例:
在项目5中创建一个名为“更新文档”的新任务,类型ID为1
list_users列出OpenProject实例中的所有用户。
参数:
active_only (布尔值,可选): 仅显示活跃用户(默认: true)get_user获取特定用户的详细信息。
参数:
user_id (整数,必需): 用户IDlist_memberships列出项目成员关系,显示用户及其角色。
参数:
project_id (整数,可选): 按特定项目筛选user_id (整数,可选): 按特定用户筛选list_statuses列出所有可用的工作包状态。
list_priorities列出所有可用的工作包优先级。
get_work_package获取特定工作包的详细信息。
参数:
work_package_id (整数,必需): 工作包IDupdate_work_package更新现有工作包。
参数:
work_package_id (整数,必需): 工作包IDsubject (字符串,可选): 工作包标题description (字符串,可选): 以Markdown格式描述type_id (整数,可选): 类型IDstatus_id (整数,可选): 状态IDpriority_id (整数,可选): 优先级IDassignee_id (整数,可选): 分配给用户的IDpercentage_done (整数,可选): 完成百分比(0-100)delete_work_package删除工作包。
参数:
work_package_id (整数,必需): 工作包IDlist_time_entries列出时间条目,并可选地进行筛选。
参数:
work_package_id (整数,可选): 按特定工作包筛选user_id (整数,可选): 按特定用户筛选create_time_entry创建一个新的时间条目。
参数:
work_package_id (整数,必需): 工作包IDhours (数字,必需): 花费的时间(例如,2.5)spent_on (字符串,必需): 时间花费的日期(YYYY-MM-DD格式)comment (字符串,可选): 注释/描述activity_id (整数,可选): 活动IDupdate_time_entry更新现有的时间条目。
参数:
time_entry_id (整数,必需): 时间条目IDhours (数字,可选): 花费的时间spent_on (字符串,可选): 时间花费的日期comment (字符串,可选): 注释/描述activity_id (整数,可选): 活动IDdelete_time_entry删除时间条目。
参数:
time_entry_id (整数,必需): 时间条目IDlist_time_entry_activities列出可用的时间条目活动。
list_versions列出项目版本/里程碑。
参数:
project_id (整数,可选): 按特定项目筛选create_version创建一个新的项目版本/里程碑。
参数:
project_id (整数,必需): 项目IDname (字符串,必需): 版本名称description (字符串,可选): 版本描述start_date (字符串,可选): 开始日期(YYYY-MM-DD格式)end_date (字符串,可选): 结束日期(YYYY-MM-DD格式)status (字符串,可选): 版本状态(open, locked, closed)create_project创建一个新的项目。
参数:
name (字符串,必需): 项目名称identifier (字符串,必需): 项目标识符(唯一)description (字符串,可选): 项目描述public (布尔值,可选): 是否公开项目status (字符串,可选): 项目状态parent_id (整数,可选): 父项目ID示例:
创建一个名为“网站重新设计”的新项目,标识符为“web-redesign”
update_project更新现有项目。
参数:
project_id (整数,必需): 项目IDname (字符串,可选): 项目名称identifier (字符串,可选): 项目标识符description (字符串,可选): 项目描述public (布尔值,可选): 是否公开项目status (字符串,可选): 项目状态parent_id (整数,可选): 父项目IDdelete_project删除项目。
参数:
project_id (整数,必需): 项目IDget_project获取特定项目的详细信息。
参数:
project_id (整数,必需): 项目IDcreate_membership创建一个新的项目成员关系。
参数:
project_id (整数,必需): 项目IDuser_id (整数,可选): 用户ID(如果未提供group_id,则必须提供)group_id (整数,可选): 组ID(如果未提供user_id,则必须提供)role_ids (数组,可选): 角色ID数组role_id (整数,可选): 单个角色ID(替代role_ids)notification_message (字符串,可选): 可选的通知消息示例:
将用户5添加到项目2中,角色ID为3(开发者角色)
update_membership更新现有的成员关系。
参数:
membership_id (整数,必需): 成员关系IDrole_ids (数组,可选): 角色ID数组role_id (整数,可选): 单个角色IDnotification_message (字符串,可选): 可选的通知消息delete_membership删除成员关系。
参数:
membership_id (整数,必需): 成员关系IDget_membership获取特定成员关系的详细信息。
参数:
membership_id (整数,必需): 成员关系IDlist_project_members列出特定项目的全部成员。
参数:
project_id (整数,必需): 项目ID示例:
列出项目5的所有成员
list_user_projects列出特定用户被分配的所有项目。
参数:
user_id (整数,必需): 用户IDlist_roles列出所有可用的角色。
示例:
列出OpenProject实例中的所有可用角色
get_role获取特定角色的详细信息。
参数:
role_id (整数,必需): 角色IDset_work_package_parent为工作包设置父级(创建父子关系)。
参数:
work_package_id (整数,必需): 将成为子级的工作包IDparent_id (整数,必需): 将成为父级的工作包ID示例:
将工作包15设为工作包10的子级
remove_work_package_parent移除工作包的父级关系(使其成为顶级)。
参数:
work_package_id (整数,必需): 将移除父级的工作包IDlist_work_package_children列出父级的所有子级工作包。
参数:
parent_id (整数,必需): 父级工作包IDinclude_descendants (布尔值,可选): 包括孙级及所有后代(默认: false)示例:
列出工作包10的所有子级包括后代
create_work_package_relation在工作包之间创建关系。
参数:
from_id (整数,必需): 源工作包IDto_id (整数,必需): 目标工作包IDrelation_type (字符串,必需): 关系类型(blocks, follows, precedes, relates, duplicates, includes, requires, partof)lag (整数,可选): 工作日的滞后(适用于follows/precedes)description (字符串,可选): 关系的可选描述示例:
创建一个“阻止”关系,其中工作包5阻止工作包8
list_work_package_relations列出工作包关系,并可选地进行筛选。
参数:
work_package_id (整数,可选): 筛选涉及此工作包ID的关系relation_type (字符串,可选): 按关系类型筛选update_work_package_relation更新现有工作包关系。
参数:
relation_id (整数,必需): 关系IDrelation_type (字符串,可选): 新的关系类型lag (整数,可选): 工作日的滞后description (字符串,可选): 关系的可选描述delete_work_package_relation删除工作包关系。
参数:
relation_id (整数,必需): 关系IDget_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