MCP-开放项目
识别出“MCP-openproject”并非一句完整的句子或常见的表达,它看起来更像一个项目名称或者代码库名称。如果是项目名称,通常不需要翻译,但若需要将其以中文表述,可直译为: 麦考普-开放项目(这只是一个音译加意译的组合,具体需根据项目背景确定) 如果这是特定领域的术语或者有特定含义,请提供更多的上下文信息以便获得更准确的翻译。但是按照任务要求,我提供最直接的转换结果:麦考普-开放项目。
服务介绍
使用 Netlify Express 的 OpenProject MCP 服务器
查看已部署的 MCP 函数端点: https://gilded-fudge-69ca2e.netlify.app/mcp(注意:此端点用于 MCP 客户端,不适用于直接浏览器访问)。
关于此 MCP 服务器
该项目提供了一个使用 Express 构建并作为 Netlify 函数部署的模型上下文协议 (MCP) 服务器。它允许 AI 代理(如 Langflow 代理、Claude、Cursor 等)通过定义的工具与自托管的 OpenProject 实例进行交互。
本示例演示了:
-
使用
@modelcontextprotocol/sdk设置 MCP 服务器。 -
与外部 API(OpenProject)集成。
-
使用 Netlify 函数无服务器地部署 MCP 服务器。
-
在 Netlify 中安全处理环境变量。
-
提供一个桥接,使远程 SSE 客户端(如云托管的 Langflow)能够通过
mcp-proxy和ngrok连接到无状态的 Netlify 函数。
已实现的 OpenProject 工具
服务器提供了以下工具以与 OpenProject 交互:
- 项目:
openproject-create-project:创建新项目。openproject-get-project:通过 ID 检索特定项目。openproject-list-projects:列出所有项目(支持分页)。openproject-update-project:更新现有项目的详细信息。openproject-delete-project:删除项目。
- 任务(工作包):
openproject-create-task:在项目中创建新任务。openproject-get-task:通过 ID 检索特定任务。openproject-list-tasks:列出任务,可选按项目 ID 过滤(支持分页)。openproject-update-task:更新现有任务(需要lockVersion)。openproject-delete-task:删除任务。
前提条件
- Node.js(推荐 v18 或更高版本)
- npm
- Netlify CLI (
npm install -g netlify-cli) - Python 3.10 或更高版本(用于 SSE 桥接的
mcp-proxy工具所需) pip(Python 包安装器)- 可通过 URL 访问的 OpenProject 实例。
- OpenProject API 密钥。
- (可选)
ngrok账户和 CLI 用于测试远程 SSE 客户端。
设置说明
-
克隆仓库:
bash
git clone git@github.com:jessebautista/mcp-openproject.git
cd mcp-openproject -
安装 Node.js 依赖项:
bash
npm install -
安装 Python
mcp-proxy:
(确保你已激活 Python 3.10+)
bash如果需要,请先检查你的 Python 版本:python3 --version
安装 mcp-proxy(使用与 Python 3.10+ 关联的 pip):
python3.10 -m pip install mcp-proxy
或者根据你的版本使用 python3.11, python3.12 等
如果安装了 pipx 并且更喜欢使用它:pipx install mcp-proxy
本地开发
-
创建环境文件:
-
在项目根目录下创建一个名为
.env的文件。 -
添加你的 OpenProject 详情:
dotenv
OPENPROJECT_API_KEY="your_openproject_api_key_here"
OPENPROJECT_URL="https://your_openproject_instance.com"
OPENPROJECT_API_VERSION="v3" -
(重要):确保
.env文件列在你的.gitignore文件中,以避免提交敏感信息。
-
-
运行 Netlify 开发服务器:
- 此命令启动本地服务器,从
.env加载变量,并使你的函数可用。
bash
netlify dev* 你的本地MCP端点通常位于http://localhost:8888/mcp。
- 此命令启动本地服务器,从
-
使用MCP Inspector进行本地测试:
-
在另一个终端中,运行MCP Inspector,并通过
mcp-remote指向你的本地服务器:
bash
npx @modelcontextprotocol/inspector npx mcp-remote@next http://localhost:8888/mcp -
在浏览器中打开Inspector URL(通常是
http://localhost:6274)。 -
连接并使用“工具”选项卡来测试OpenProject的CRUD操作。
-
部署到Netlify
-
在Netlify UI中设置环境变量:
- 前往你在Netlify上的站点仪表板(
https://app.netlify.com/sites/gilded-fudge-69ca2e/configuration/env)。 - 在“环境变量”下,添加以下变量(确保它们对“函数”可用):
OPENPROJECT_API_KEY:你的OpenProject API密钥。OPENPROJECT_URL:你的OpenProject实例URL(例如,https://project.bautistavirtualrockstars.com)。OPENPROJECT_API_VERSION:v3
- (安全性):
netlify/mcp-server/index.ts中的代码从process.env读取这些值。硬编码的值应该被移除(已经在我们的步骤中完成)。
- 前往你在Netlify上的站点仪表板(
-
通过Git部署:
-
提交你的代码更改:
bash
git add .
git commit -m "Deploy OpenProject MCP server updates" -
推送到Netlify配置用于部署的分支(例如,
main):
bash
git push origin main -
Netlify将自动构建并部署新版本。在Netlify仪表板的“部署”部分监控进度。
-
测试已部署版本
-
使用MCP Inspector:
-
运行检查器,将
mcp-remote指向你的实时Netlify函数URL:
bash
npx @modelcontextprotocol/inspector npx mcp-remote@next https://gilded-fudge-69ca2e.netlify.app/mcp -
打开Inspector URL并测试工具。如果出现错误,请检查Netlify函数日志。
-
-
连接远程SSE客户端(例如,云托管的Langflow):
-
由于Netlify函数是无状态的(不直接通过GET处理SSE连接),并且像Langflow这样的远程客户端通常更喜欢SSE,你需要一个桥接。我们结合使用Python
mcp-proxy工具、JSmcp-remote工具以及ngrok来创建一个公共隧道。 -
步骤A:本地启动代理桥接:
- 在你的本地机器上打开一个终端(确保激活了Python 3.10+ 并且安装了
mcp-proxy):
bash
监听本地端口7865上的SSE,运行npx mcp-remote作为后端
mcp-proxy --sse-port 7865 -- npx mcp-remote@next https://gilded-fudge-69ca2e.netlify.app/mcp
- 保持该终端运行。检查其输出以确保它已经开始监听并启动了
npx命令。
- 在你的本地机器上打开一个终端(确保激活了Python 3.10+ 并且安装了
-
步骤B:使用
ngrok创建公共隧道:-
在另一个终端中,运行
ngrok以暴露mcp-proxy正在监听的本地端口:
bash
ngrok http 7865 -
ngrok将显示一个公共的“转发”URL(例如,https://<random-string>.ngrok-free.app)。复制这个HTTPS URL。
-
-
步骤C:配置Langflow:
- 在你的Langflow MCP连接组件(运行于
https://lang.singforhope.org/)中:- 模式:
SSE - MCP SSE URL:粘贴完整的
ngrok公共URL,包括由mcp-proxy所需的/sse路径(例如,https://<random-string>.ngrok-free.app/sse)。
- 模式:
- Langflow现在应该能够通过
ngrok->mcp-proxy->mcp-remote-> Netlify链路连接并使用工具。
- 在你的Langflow MCP连接组件(运行于
-
(注意):此
ngrok设置适用于测试/开发。对于永久解决方案,将mcp-proxy桥接到持久的公共服务器上部署。
-
Netlify函数配置 (netlify.toml)请确保您的 netlify.toml 正确地将对 /mcp 路径的请求重定向到您的 Express 函数处理程序:
toml
[[redirects]]
force = true
from = "/mcp/*" # 使用通配符以捕获所有子路径(如果需要)
status = 200
to = "/.netlify/functions/express-mcp-server"
[[redirects]] # 同样重定向基础路径
force = true
from = "/mcp"
status = 200
to = "/.netlify/functions/express-mcp-server"
(根据您的 Express 路由需求调整重定向规则)