一个全面的FastMCP驱动服务器,使像Claude这样的AI助手能够与OpenProject安装进行交互。此实现提供了完整的项目管理功能,包括用户管理、动态配置以及高级甘特图创建。
克隆或下载项目:
cd openproject-mcp-server
创建并激活虚拟环境:
python3 -m venv venv
source venv/bin/activate # 在Windows上:venv\Scripts\activate
安装依赖项:
pip install -r requirements.txt
配置环境:
cp env.example .env
# 使用您的OpenProject详细信息编辑.env文件
使用您的OpenProject详细信息编辑.env文件:
# OpenProject 实例URL(包含协议)
OPENPROJECT_URL=http://localhost:3000
# OpenProject API密钥(来自您的用户个人资料)
OPENPROJECT_API_KEY=your_40_character_api_key_here
# MCP服务器配置(可选)
MCP_HOST=localhost
MCP_PORT=8080
MCP_LOG_LEVEL=INFO
在使用AI助手之前测试您的配置:
python3 scripts/test_mvp.py
这将:
启动MCP服务器:
python3 scripts/run_server.py
服务器将启动并准备好接受AI助手连接。
Docker部署是推荐的生产方法。
.env文件,包含您的OpenProject详细信息选项1:自动化部署(推荐)
# 首先配置您的环境
cp env.example .env
# 使用您的OpenProject URL和API密钥编辑.env文件
# 在特定端口上部署(重要:必须匹配Claude Desktop配置)
./scripts/deploy.sh deploy 39127
# 可选:在默认端口8080上部署
./scripts/deploy.sh deploy
# 开发时使用不同端口
./scripts/deploy.sh deploy 9876
🔑 重要:端口必须与您的Claude Desktop MCP配置中的~/.cursor/mcp.json或claude_desktop_config.json一致!
选项2:Docker Compose(替代方案)
# 构建并启动容器
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止容器
docker-compose down
🔧 端口配置及冲突:
步骤1:选择您的端口(必须一致)
# 检查当前的MCP配置
cat ~/.cursor/mcp.json | grep openproject -A 5
# 或检查Claude Desktop配置
cat ~/Library/Application\ Support/Claude/claude_desktop_config.json
步骤2:在MCP配置相同的端口上部署
# 在MCP配置指定的端口上部署
./scripts/deploy.sh deploy 39127
步骤3:如果发生端口冲突:
docker stop container_using_portdocker ps | grep 39127对于希望完全控制的高级用户:
构建镜像:
docker build -t openproject-mcp-server .
运行容器:
docker run -d \
--name openproject-mcp-server \
--env-file .env \
-p 39127:8080 \
-v ./logs:/app/logs \
-v ./data:/app/data \
--restart unless-stopped \
openproject-mcp-server
健康检查:
# 检查容器是否健康
docker ps
# 查看容器日志
docker logs openproject-mcp-server
# 测试API端点(注意:MCP服务器没有健康端点)
curl http://localhost:39127/sse
scripts/deploy.sh脚本提供全面的部署管理:
# 在标准MCP端口上部署(推荐)
./scripts/deploy.sh deploy 39127
# 在默认端口8080上部署(可能与OpenProject冲突)
./scripts/deploy.sh deploy
# 如果需要在其他端口上部署
./scripts/deploy.sh deploy 9876
# 查看容器日志
./scripts/deploy.sh logs
# 检查状态和端口信息
./scripts/deploy.sh status
# 停止服务器
./scripts/deploy.sh stop
# 重启服务器(保持同一端口)
./scripts/deploy.sh restart
# 清理(停止并删除容器/镜像)
./scripts/deploy.sh clean
💡 端口选择提示:
使用Docker时,在您的.env文件中配置这些环境变量:
# OpenProject 实例URL(您的OpenProject运行的地方,通常端口8080)
OPENPROJECT_URL=http://localhost:8080
# OpenProject API密钥(来自您的用户个人资料)
OPENPROJECT_API_KEY=your_40_character_api_key_here
# MCP服务器配置(内部容器端口,映射到39127)
MCP_HOST=0.0.0.0
MCP_PORT=8080
MCP_LOG_LEVEL=INFO
# 可选:性能调整(第一阶段功能)
OPENPROJECT_CACHE_TIMEOUT_MINUTES=5
OPENPROJECT_PAGINATION_SIZE=100
OPENPROJECT_MAX_RETRIES=3
.env文件 - 不要在命令中硬编码凭据--restart unless-stopped在您的claude_desktop_config.json中添加:
选项1:本地Python执行
{
"mcpServers": {
"openproject": {
"command": "python3",
"args": ["/full/path/to/openproject-mcp-server/scripts/run_server.py"],
"env": {
"OPENPROJECT_URL": "http://localhost:8080",
"OPENPROJECT_API_KEY": "your_api_key_here"
}
}
}
}
选项2:Docker部署(推荐)
{
"mcpServers": {
"openproject": {
"transport": "sse",
"url": "http://localhost:39127/sse"
}
}
}
环境设置:在Docker部署的.env文件中配置OpenProject凭据,而不是MCP配置。
重要说明:
run_server.py脚本的完整绝对路径一旦与Claude集成,您可以询问:
创建一个新的名为“网站重新设计”的项目,描述为“公司网站的全面重新设计”。然后显示可用用户,并将john@example.com和sarah@example.com添加到项目中。
在项目ID 5中,创建以下工作包:
1. “需求分析”从2024年1月15日至2024年1月20日,分配给john@example.com
2. “UI设计”从2024年1月21日至2024年2月5日,分配给sarah@example.com
3. “开发”从2024年2月6日至2024年2月28日,分配给mike@example.com
4. “测试与发布”从2024年3月1日至2024年3月10日,分配给alice@example.com
创建依赖关系,使得:
- UI设计跟随需求分析
- 开发跟随UI设计
- 测试跟随开发
显示系统中的所有用户
查找电子邮件为“john@example.com”的用户
显示项目ID 5的所有成员及其角色
在此OpenProject实例中有哪些可用的工作包类型?
显示所有可能的工作包状态
我可以使用哪些优先级级别来设置工作包?
AI将使用增强的MCP工具创建一切,并在OpenProject中获得带有正确用户分配的甘特图!
OpenProject MCP服务器为AI助手提供了全面的工具:
create_projectname(必需):项目名称description(可选):项目描述create_work_packageproject_id(必需):目标项目IDsubject(必需):工作包标题description(可选):详细描述start_date(可选):开始日期,YYYY-MM-DD格式due_date(可选):截止日期,YYYY-MM-DD格式parent_id(可选):父工作包IDassignee_id(可选):要分配的用户IDestimated_hours(可选):预计完成时间create_work_package_dependencyfrom_work_package_id(必需):源工作包IDto_work_package_id(必需):目标工作包IDrelation_type(可选):关系类型(follows, precedes, blocks, blocked, relates, duplicates, duplicated)description(可选):关系描述lag(可选):前驱任务结束与后继任务开始之间的工日数get_work_package_relationswork_package_id(必需):要获取关系的工作包IDdelete_work_package_relationrelation_id(必需):要删除的关系IDget_usersemail_filter(可选):搜索特定用户的电子邮件地址assign_work_package_by_emailwork_package_id(必需):要分配的工作包IDassignee_email(必需):要分配的用户的电子邮件地址get_project_membersproject_id(必需):要获取成员的项目IDget_work_package_typesget_work_package_statusesget_prioritiesget_projectsget_work_packagesproject_id(必需):要获取工作包的项目IDupdate_work_packagework_package_id(必需):要更新的工作包IDsubject(可选):新的标题description(可选):新的描述start_date(可选):新的开始日期due_date (可选):新的截止日期assignee_id(可选):新的分配人estimated_hours(可选):新的时间估计get_project_summaryproject_id(必需):要总结的项目ID资源提供对OpenProject数据的只读访问:
openproject://projects - 列出所有项目openproject://project/{project_id} - 获取特定项目的详细信息openproject://work-packages/{project_id} - 获取项目的工件openproject://work-package/{work_package_id} - 获取特定工件的详细信息openproject://work-package-relations/{work_package_id} - 获取工件的关系提示提供AI辅助的项目管理:
project_status_reportproject_id(必需)work_package_summaryproject_id(必需)status_filter(可选):按状态过滤project_planning_assistantproject_name(必需):要规划的项目名称work_package_count(可选):建议的工作包数量team_workload_analysisproject_ids(可选):要分析的项目列表MVP特别设计用于创建正确的甘特图: