项目简介
MCP网关服务(mcp-gateway)是一个设计用于简化大型语言模型(LLM)客户端与多个Model Context Protocol (MCP) 服务器交互的中间件。它充当一个统一的接入点,对LLM客户端而言,它就是一个MCP服务器。网关从后端MCP服务发现、聚合和管理工具、资源和会话,实现工具联邦、智能路由、会话映射和安全策略。LLM客户端只需连接到这一个网关,即可调用多个后端服务提供的功能,极大地简化了客户端的复杂性。项目支持独立文件配置和Kubernetes动态发现两种运行模式。
主要功能点
- MCP服务器联邦与聚合: 将分散在不同后端服务中的MCP服务器功能统一到一个网关端点,为LLM客户端提供单一的、聚合的MCP服务视图。
- 工具发现与路由: 自动发现后端MCP服务器提供的工具,并将其联邦化到网关。通过工具前缀(如 'weather_'、'cal_')解决命名冲突,并根据客户端请求的工具名称智能路由到正确的后端服务。
- 会话管理与映射: 在网关层面为LLM客户端维护会话,并将这些会话安全地映射到后端MCP服务器的会话,确保跨多个服务的会话状态一致性。
- Envoy代理集成: 利用Envoy代理的强大流量管理能力,支持认证授权(例如OAuth集成)、请求处理和流量整形。
- 灵活的配置模式: 支持通过静态YAML配置文件定义后端MCP服务,或在Kubernetes环境中通过'MCPServer'自定义资源和Gateway API 'HTTPRoute'进行动态服务发现和配置。
- 多传输协议支持: 作为MCP服务器,它能够处理并转发支持HTTP Streamable、SSE等多种MCP传输协议的客户端请求。
安装步骤 (本地快速启动 - 推荐)
为了方便体验,项目提供了基于Kind Kubernetes集群的本地快速启动方式。此方式将部署网关的所有核心组件(Broker, Router, Controller)以及Istio Gateway API。
- 克隆GitHub仓库:
首先,将 'mcp-gateway' 仓库克隆到您的本地机器。
git clone https://github.com/kagenti/mcp-gateway.git cd mcp-gateway - 设置本地环境:
运行以下命令来创建本地Kind Kubernetes集群,并部署所有必要的网关组件、Istio Gateway API 以及用于测试的MCP后端服务。
这个过程可能需要几分钟。make local-env-setup - 运行MCP检测工具:
执行以下命令,它将启动MCP检测工具(mcp-inspector)并自动将其端口转发到MCP网关。
make inspect-gateway - 访问MCP检测工具: 在您的Web浏览器中打开以下URL: 'http://localhost:6274/?transport=streamable-http&serverUrl=http://mcp.127-0-0-1.sslip.io:8888/mcp' 您将看到MCP检测工具的界面,它已连接到MCP网关。您可以在此界面上查看网关联邦化的工具列表,并进行交互测试。
服务器配置 (LLM客户端连接MCP网关)
LLM客户端需要配置连接到MCP网关的地址。以下是一个JSON格式的配置示例,展示了LLM客户端连接MCP网关所需的基本信息。请注意,MCP网关作为独立的HTTP服务运行,LLM客户端通常直接通过URL连接,无需提供启动网关本身的命令或参数。
{ "serverName": "mcp-gateway-instance", "url": "http://mcp.127-0-0-1.sslip.io:8888/mcp", "transport": "streamable-http", "description": "连接到MCP网关服务,获取聚合的LLM工具和上下文", "metadata": { "hostname": "mcp.127-0-0-1.sslip.io" } }
- 'serverName': 用户为这个MCP网关连接定义的唯一名称。
- 'url': MCP网关服务的HTTP/S端点地址。在本地快速启动后,示例URL通常为 'http://mcp.127-0-0-1.sslip.io:8888/mcp'。
- 'transport': LLM客户端与网关通信所使用的MCP传输协议,例如 'streamable-http'。
- 'description': 对此MCP服务连接的简要描述。
- 'metadata.hostname': 此主机名可能用于Envoy等网关组件的路由匹配。
基本使用方法 (LLM客户端调用工具)
一旦LLM客户端通过上述配置成功连接到MCP网关,它就可以像连接到任何单个MCP服务器一样,通过标准的JSON-RPC请求调用工具。网关会自动处理工具名称的解析和请求的路由到正确的后端服务。
例如,如果后端有一个原始名称为 'get_weather' 的工具,并且网关通过配置为其添加了 'weather_' 的前缀进行联邦化(即客户端可见的工具名为 'weather_get_weather'),LLM客户端可以发送如下JSON-RPC请求:
{ "jsonrpc": "2.0", "id": "1", "method": "tools/call", "params": { "name": "weather_get_weather", "arguments": { "city": "London" } } }
MCP网关接收到此请求后,会识别工具名称中的 'weather_' 前缀,将其路由到对应的后端天气服务,并将工具名称修改为原始的 'get_weather'。后端服务执行完成后,网关会将响应返回给LLM客户端。
信息
分类
AI与计算