k8s聚合器MCP服务器
前端MCP(模型上下文协议)服务器,可动态发现 在Kubernetes集群上运行的每节点后端MCP服务器所暴露的工具 并将它们重新导出为单个统一的API。每个工具都添加了 node 参数,以便调用者可以针对特定的Kubernetes节点。
建筑
该系统由两层组成:
- 后端(DaemonSet) --部署为Kubernetes的轻量级MCP服务器
DaemonSet。一个pod在每个节点上运行 hostNetwork 和 hostPID 访问,通过HTTP公开节点级信息。
- 前端(此服务器) --作为
公共入口点。在启动时,它连接到后端Pod之一, 发现所有可用工具,并将其注册到自己的MCP服务器上 额外的 node 注入到每个工具模式中的参数。
当客户端调用工具时,前端将目标节点解析为 通过Kubernetes端点API代理相应的后端pod IP 调用那个特定的pod。
Client
|
v
Frontend MCP server (port 9029)
| -- resolves node name to pod IP via Endpoints --
v
Backend MCP pod on the target node (port XXXX)工具发现
工具发现是在启动时运行的一次性操作:
- 前端查询
backend-mcp-service端点对象(可配置)
查找第一个可用后端pod的IP。
- 它连接到该吊舱的MCP端点并调用
list_tools. - 对于返回的每个工具,它都会创建一个包装器,该包装器:
- 保留原始工具名称、描述和参数模式。 - 前置必填项 node 参数(Kubernetes节点名称)。 - 在调用时将调用路由到正确的后端pod。
如果启动时没有后端端点可用,前端将拒绝 开始。
快速发现
快速发现也会在工具发现后立即在启动时运行:
- 前端连接到相同的后端pod并调用
list_prompts. - 对于返回的每个提示,它都会创建一个包装器,该包装器:
- 保留原始提示名称、描述和参数架构。 - 代理 get_prompt 调用第一个可用的后端pod。
- 后端返回的渲染消息被转发回
呼叫者不变。
与工具不同,提示是不特定于节点的静态模板,因此没有 node 参数被注入。提示发现不是致命的:如果没有提示 如果发现或后端返回错误,前端将正常且简单地启动 不显示任何提示。
配置
以下环境变量可用于覆盖默认值:
| 变量 | 描述 | 默认值 |
|---|---|---|
SERVICE_NAME | 后端无头服务的名称 | backend-mcp-service |
SERVICE_NAMESPACE | 后端服务的命名空间 | mcp-server |
BACKEND_PORT | 后端MCP服务器侦听的端口 | 9028 |
FRONTEND_PORT | 前端MCP服务器监听的端口 | 9029 |
先决条件
- Python>=3.12
- 部署了后端DaemonSet和无头服务的Kubernetes集群
- 前端ServiceAccount的RBAC权限
get这
backend-mcp-service 端点资源。在提供的示例中 deploy/ 目录,这是使用自定义ClusterRole完成的。
本地运行
pip install -r requirements.txt
python server.py服务器将首先尝试加载集群内的Kubernetes配置,然后下降 回到您的本地 ~/.kube/config.
部署
前端通常部署为Kubernetes部署,具有 ClusterIP服务和(在OpenShift上)用于外部访问的路由。请参阅 deploy/ 清单目录。
A. Makefile 为了方便起见,提供了构建/推动容器的工具 映像,然后部署/取消部署MCP服务器。
提供简单工具和部署的示例后端MCP服务器位于 在 backend/ 目录。
依赖项
- FastMCP (>=3.0.0b2)--MCP服务器和客户端框架
- Kubernetes --Kubernetes API客户端
- 皮丹提克 --用于参数模式生成
