项目简介

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。

  1. 克隆GitHub仓库: 首先,将 'mcp-gateway' 仓库克隆到您的本地机器。
    git clone https://github.com/kagenti/mcp-gateway.git
    cd mcp-gateway
  2. 设置本地环境: 运行以下命令来创建本地Kind Kubernetes集群,并部署所有必要的网关组件、Istio Gateway API 以及用于测试的MCP后端服务。
    make local-env-setup
    这个过程可能需要几分钟。
  3. 运行MCP检测工具: 执行以下命令,它将启动MCP检测工具(mcp-inspector)并自动将其端口转发到MCP网关。
    make inspect-gateway
  4. 访问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与计算