mirror of
https://github.com/alibaba/higress.git
synced 2026-03-18 09:17:26 +08:00
3.5 KiB
3.5 KiB
MCP Router 插件
功能说明
mcp-router 插件为 MCP (Model Context Protocol) 的 tools/call 请求提供了路由能力。它会检查请求负载中的工具名称,如果名称带有服务器标识符前缀(例如 server-name/tool-name),它会动态地将请求重新路由到相应的后端 MCP 服务器。
这使得创建一个统一的 MCP 端点成为可能,该端点可以聚合来自多个不同 MCP 服务器的工具。客户端可以向单个端点发出 tools/call 请求,mcp-router 将确保请求到达托管该工具的正确底层服务器。
配置字段
| 名称 | 数据类型 | 填写要求 | 默认值 | 描述 |
|---|---|---|---|---|
servers |
对象数组 | 是 | - | 每个后端 MCP 服务器的路由配置列表。 |
servers[].name |
字符串 | 是 | - | MCP 服务器的唯一标识符。这必须与 tools/call 请求的工具名称中使用的前缀相匹配。 |
servers[].domain |
字符串 | 否 | - | 后端 MCP 服务器的域名 (authority)。如果省略,将保留原始请求的域名。 |
servers[].path |
字符串 | 是 | - | 请求将被路由到的后端 MCP 服务器的路径。 |
工作原理
当一个启用了 mcp-router 插件的路由处理 tools/call 请求时,会发生以下情况:
- 工具名称解析:插件检查 JSON-RPC 请求中
params对象的name参数。 - 前缀匹配:它检查工具名称是否遵循
server-name/tool-name格式。- 如果不匹配此格式,插件不执行任何操作,请求将正常继续。
- 如果匹配,插件将提取
server-name和实际的tool-name。
- 路由查找:提取的
server-name用于从插件配置的servers列表中查找相应的路由配置(domain 和 path)。 - Header 修改:
:authority请求头被替换为匹配的服务器配置中的domain。:path请求头被替换为匹配的服务器配置中的path。
- 请求体修改:JSON-RPC 请求体中的
name参数被更新为仅包含tool-name(移除了server-name/前缀)。 - 重新路由:在 Header 修改后,网关的路由引擎会使用新的目标信息再次处理请求,将其发送到正确的后端 MCP 服务器。
配置示例
以下是在 higress-plugins.yaml 文件中配置 mcp-router 插件的示例:
servers:
- name: random-user-server
domain: mcp.example.com
path: /mcp-servers/mcp-random-user-server
- name: rest-amap-server
domain: mcp.example.com
path: /mcp-servers/mcp-rest-amap-server
使用示例
假设一个 tools/call 请求被发送到激活了 mcp-router 的端点:
原始请求:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "rest-amap-server/get-weather",
"arguments": {
"location": "New York"
}
}
}
插件行为:
-
插件识别出工具名称为
rest-amap-server/get-weather。 -
它提取出
server-name为rest-amap-server,tool-name为get-weather。 -
它找到匹配的配置:
domain: mcp.example.com,path: /mcp-servers/mcp-rest-amap-server。 -
它将请求头修改为:
:authority:mcp.example.com:path:/mcp-servers/mcp-rest-amap-server
-
它将请求体修改为:
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "get-weather", "arguments": { "location": "New York" } } }
请求随后被重新路由到 rest-amap-server。