智能体开发平台的 MCP 服务器实战
详细介绍如何在智能体系统中集成 MCP 服务器,提供可复用的架构方案和集成指南。
详细介绍如何在智能体系统中集成 MCP 服务器,提供可复用的架构方案和集成指南。
在过去的几个月里,MCP 的概念一直在蓬勃发展。MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 在 2024 年底开发和发布的。它使 AI agents 和 LLMs 能够与第三方 API 交互,从而处理真实数据,并允许它们代表你执行操作。
以 Redis MCP 为例,正如你将在本博客中看到的那样,这意味着你可以使用自然语言搜索你的数据库。
现在,为了利用 MCP 并允许它与其他 API 交互,你需要一个 MCP 服务器来暴露工具供你的 agents 使用。
关键问题是如何运行 MCP 服务器,而不会给开发者的工作增添难度。让每个人都在本地设置自己的服务器既繁琐,又容易导致各种不一致。将其集中为共享服务可以保持简洁、安全,并让你的团队专注于构建,而不是维护服务器。
通过本博客,我们将介绍如何在 Kubernetes 上运行 MCP 服务器。通过这样的设置,你可以将它们用于不同的用例,并让你的开发者能够轻松连接到它们。
我们知道 Kubernetes 可能很复杂。这就是为什么我们创建了 Cyclops,一个开源框架,用于在 Kubernetes 上构建开发者平台。它可以抽象 Kubernetes 的复杂性,通过可定制的 UI 来部署和管理你的应用程序,该 UI 可以根据你的需求进行调整。
我们正在作为开源项目开发 Cyclops。如果你想试试,可以查看我们仓库中提供的快速入门指南。如果你喜欢看到的内容,请考虑通过给我们一个星标来表示支持 ⭐
⭐ 在 GitHub 上为 Cyclops 加星标 ⭐
MCP 服务器支持两种传输类型,或"AI agent 与服务器通信的方式" - stdin 和 SSE。
stdin 服务器作为二进制文件运行,agent 通过标准输入向服务器创建请求,并通过标准输出接收响应。这在本地效果很好,但在公司环境中,让每个开发者都运行一个服务器会变得混乱。
另一方面,采用 SSE(Server-Sent Events,服务器发送事件)传输的服务器通过 HTTP 通信。Agents 订阅服务器上的 SSE 端点以接收响应,然后通过 POST 请求发起请求。
通过 SSE 传输,MCP 服务器在受控环境中集中运行,并作为共享服务暴露。这不仅通过消除个人设置的需要来改善开发者体验,还能减少配置不一致,并最小化从本地管理实例引入安全漏洞的风险。
我们创建了一个设置,说明你如何可以将你喜爱的 MCP 服务器部署到你的 Kubernetes 集群。在你完成部署 MCPs 后,你将拥有一个集中的地方来轻松管理集群内的它们或部署新的服务器。
通过 Cyclops,我们创建了一个自定义模板,允许你轻松地通过 UI 部署 MCP 服务器 - 甚至可以从 Docker 镜像部署自定义 MCP 服务器。
上面的图像显示了之前建议的架构。
一个专门的工程团队可以通过 Cyclops UI 来运行和管理 MCP 服务器。团队可以配置 MCP 服务器来与现有的第三方应用程序(如 Grafana 和 Redis)通信。
从那里开始,所有其他工程师只需将他们的 Cursor 连接到暴露的 MCP 服务器,并允许它代表他们执行操作。
以下是你如何自己尝试这种设置的确切步骤!请告诉我们你的想法!
要运行你的 MCP 服务器,有几个先决条件:
一个运行中的 Kubernetes 集群。如果你没有运行中的集群,可以用 minikube 创建一个。
AI agent - 我们在教程中使用了 Cursor
现在你可以使用以下命令将 Cyclops 安装到你的 Kubernetes 集群中(包含用于部署 MCP 服务器的 UI):
kubectl apply -f https://raw.githubusercontent.com/cyclops-ui/cyclops/v0.20.3/install/cyclops-install.yaml && kubectl apply -f https://raw.githubusercontent.com/cyclops-ui/cyclops/v0.20.3/install/demo-templates.yaml
它将创建一个名为 cyclops 的新命名空间并部署 Cyclops 实例运行所需的一切。
现在剩下的就是将 Cyclops 服务器暴露到集群外:
kubectl port-forward svc/cyclops-ui 3000:3000 -n cyclops
你现在可以在浏览器中访问 http://localhost:3000 上的 Cyclops。
现在你的 Cyclops 已经启动,我们可以在集群内运行一个 Redis 实例以及连接到该实例的 Redis MCP。
要运行 Redis 实例,请进入 Cyclops 并点击"Add module"。现在你可以从一大堆模板中选择,从中选择 Redis 模板。
你现在可以为你的实例设置身份验证(将用于连接 MCP 服务器到你的实例):
我将密码设置为 my-secret-password - 稍后连接我们的 Redis MCP 时需要它。现在我可以点击 Deploy 来运行我的 Redis 实例。
你现在将被重定向到 Module 详情页面,显示你的 Redis 正在启动。一旦你的 Redis 实例准备好,你可以创建一个 MCP 服务器并将其连接到管理你的实例。
要运行 MCP 服务器,请进入 Add Module 界面并选择 mcp-server 模板。在 Configure 部分,会有一个下拉菜单来确定你需要什么类型的 MCP 服务器,在本例中是 redis。
要验证 MCP 服务器到我们刚刚部署的 Redis 实例,我们需要向它传递 host 和 password:
REDIS_HOST - 你的实例的主机。你的实例应该可以在 {module name}-redis-master.{namespace} 上访问。我们部署的实例叫做 cache 并在 default 命名空间中运行 - 因此是 cache-redis-master.default
REDIS_PORT - 默认端口是 6379,我们没有更改
REDIS_PWD - 之前在身份验证中设置。在我们的例子中,my-secret-password。对于生产用例,你可以使用下面 UI 中的 secret references。
一旦你的 MCP 服务器启动并运行,你需要将其暴露到集群外。为了测试,你可以通过端口转发来实现。你可以运行以下命令:
kubectl port-forward -n default svc/redis-mcp 8000:8000
如果你将你的 MCP 模块命名为不同的名称,请将 redis-mcp 替换为你的 Module 的名称。
你现在可以配置 Cursor 来连接到你的 MCP 服务器的 JSON 配置中:
{
"mcpServers": {
"redis": {
"url": "http://localhost:8000/sse"
}
}
}
你现在可以向 Cursor 询问你的 Redis 数据库的状态和其中的数据。
通过你刚刚使用的模板,你可以轻松部署一个 Wikipedia MCP 服务器、一个 Grafana MCP 服务器,或通过在服务下拉菜单中选择 custom 并在 Custom Docker image override 部分中定义 Docker 镜像的自定义服务器。
我们相信 AI 正在在开发者工作流中找到它的位置,但应该有抽象和验证的层次来启用它并使其尽可能安全。这是我们在这个方向上的第一步。
我们将其作为开源项目构建;请随时尝试并告诉我们你的想法!加入我们的 Discord,帮助塑造关于 AI 和 Kubernetes 的讨论 🙌
⭐ 在 GitHub 上为 Cyclops 加星标 ⭐
如需进一步操作,你可以考虑屏蔽此人和/或举报滥用