使用说明
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客户端
- 皮丹提克 --用于参数模式生成