ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Higress MCP Server 功能更新:拥抱 MCP 2026-07-28,兼容既有协议

Higress MCP Server 功能更新:拥抱 MCP 2026-07-28,兼容既有协议 1. 生产环境升级 MCP 2026-07-28 的真实痛点如果你已经在生产环境跑着 Higress MCP Server最近大概率会遇到一个尴尬局面客户端团队想用 MCP 2026-07-28 的无状态协议服务端团队手里的旧版 MCP Server 还停留在 2025-03-26 的 Streamable HTTP中间还夹着一批 legacy 客户端。三方升级节奏对不齐谁都不敢先动。MCP 2026-07-28 这次改动的核心是把协议从「依赖 initialize 握手 Mcp-Session-Id 维持会话」的双向有状态模型切换成「每个请求自带协议上下文」的无状态请求—响应模型。协议版本、MCP 方法名、工具名被映射进 HTTP Headerserver/discover从「其他方法的前置步骤」降级为「按需能力发现」。对网关来说这是好事因为无状态请求可以被普通负载均衡分发到任意实例不再需要 sticky session也不用为了维护协议 Session 去建共享状态存储。但落到迁移上问题就来了。MCP 2026-07-28 包含握手、Session、返回结果三方面的破坏性变化客户端和服务端几乎不可能同一时间全部升级完。企业内会长期存在「新版客户端 新版服务端」「新版客户端 旧版服务端」「旧版客户端 旧版服务端」并行的状态。你要的不是一次性切换而是一条能分阶段走的迁移路径以及一套能验证新旧协议共存的检查清单。Higress MCP Server 在 PR #4281 里完成了 MCP 2026-07-28 适配同时保留对既有协议的兼容。已经用 Higress 2.1.0 及以上版本的用户不需要升级 Higress 本体只要把 mcp-server 插件升到 latest 就能拿到新能力这个插件版本也会随 Higress 2.2.4 作为默认 MCP Server 插件发布。下面我按「先讲清楚变化 → 再给可复制配置 → 然后 curl 验证 → 最后排障」的顺序把这条迁移路径拆开讲。本文面向的是已经在生产用旧版协议、现在要评估升级的开发者。核心检索词就三个Higress MCP Server 升级、MCP 2026-07-28 协议兼容、新旧协议共存验证。适合谁适合手里有 Remote MCP 服务、正在用网关统一管理 Agent 访问入口和权限、又不想停机切换的团队。2. TaoToken 前置统一 Key 与 API 通道接入在动手改 Higress 配置之前先把「模型侧」的通道理顺。Higress MCP Server 负责的是工具调用这一层但你的 Agent 在调用工具前后往往还要跟大模型对话、做意图识别、生成参数。如果模型通道和 MCP 通道各用一套 Key、各走一套鉴权联调时排查问题会非常痛苦——你分不清是模型返回格式不对还是 MCP 工具调用失败。我的做法是用 TaoToken 把模型调用统一到一个 Key、一个 API 通道上这样端到端联调时模型侧和工具侧的责任边界是清晰的。TaoToken 的官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end API 基址是 https://taotoken.net/api 注意 API 地址不带 UTM 参数配置时别把推广参数拼进去。具体怎么拿 Key进控制台 https://taotoken.net/console 在 API Keys 页面创建一个新 Key。创建时建议按用途命名比如higress-mcp-dev、higress-mcp-prod方便后面在 Higress 的鉴权插件里按 Key 做区分。Key 创建后只显示一次复制下来存到你的密钥管理里。拿到 Key 之后你有两个地方要用到它。第一处是模型对话通道用来验证 Agent 的意图识别和参数生成是否正常可以直接在模型对话页面 https://taotoken.net/models 里先跑一轮确认模型能正确理解「查询杭州天气」这类指令并输出结构化的工具调用参数。第二处是 Higress 侧的鉴权配置把 TaoToken 的 API 通道作为上游模型服务的统一入口。这里要强调一个容易踩的坑不要把 TaoToken 的 Key 直接硬编码进 Higress 的配置文件里提交到 Git。正确做法是用 Higress 的 secret 引用或者环境变量注入。下面这段是 Higress 里引用外部 Key 的典型写法你可以按自己的 secret 管理方式调整apiVersion: v1 kind: Secret metadata: name: taotoken-credentials namespace: higress-system type: Opaque stringData: api-key: sk-你的TaoTokenKey然后在需要调用模型的上游配置里引用这个 secret。这样 Key 的生命周期和 Higress 配置解耦轮换 Key 时不用改配置。如果你后面要做长期的编码类 Agent或者需要跑多轮工具调用的复杂任务可以看下 Coding Plan https://taotoken.net/coding-plan 它更适合持续性的编码和 Agent 场景配额和计费方式跟按次调用不一样。接入文档在 https://taotoken.net/doc 里面有各语言 SDK 的调用示例联调时对着文档核对请求格式能省不少时间。把模型通道理顺之后我们再回到 Higress MCP Server 本身。记住一个原则模型通道和 MCP 通道是两条独立的链路联调时先分别验证各自通再做端到端串联。这样出问题时你能快速定位是哪条链路挂了。3. 可复制配置Higress MCP Server 协议版本切换这一节是全文的技术核心给出可以直接复制的配置片段。先说清楚前提Higress 2.1.0 及以上版本无需升级本体只需把 mcp-server 插件升到 latest。升级插件的方式取决于你的部署形态Helm 部署的话改 values 里的插件版本控制台部署的话在插件市场里点升级。升级完成后验证插件版本kubectl get configmap -n higress-system higress-plugins -o yaml | grep mcp-server -A 3确认版本是 latest 对应的 commit 或 tag。接下来是协议版本切换。Higress 同时支持 modernMCP 2026-07-28 无状态协议和 legacy2024-11-05、2025-03-26、2025-06-18 等既有协议切换不是全局开关而是按上游服务粒度配置的。先看一个把 REST API 暴露为 MCP 工具的最小配置。这个配置里Higress 直接托管工具输入参数在调用 REST 后端之前完成校验apiVersion: networking.higress.io/v1 kind: McpServer metadata: name: weather-mcp namespace: default spec: protocolVersion: 2026-07-28 tools: - name: get_weather description: 查询指定城市天气 method: tools/call inputSchema: type: object properties: location: type: string description: 城市名如 Hangzhou required: - location backend: rest: url: http://weather-svc.default.svc.cluster.local/weather method: GET queryMapping: location: {{ .location }}关键字段是protocolVersion。设为2026-07-28时Higress 按新版无状态协议处理请求会带上MCP-Protocol-Version: 2026-07-28、Mcp-Method: tools/call、Mcp-Name: get_weather这些 Header。注意这些 Header 是供负载均衡、网关和观测系统使用的镜像信号请求 Body 里仍然保留完整的 JSON-RPC 消息。而且这些 Header 只有在协议标识得到确认、并且与 Body 中的方法和工具一致后才会进入后续治理链路不完整或不一致的新版请求会被直接拒绝不会回退为旧协议继续处理。如果你的上游是一个还没升级的 legacy MCP Server配置要改成桥接模式apiVersion: networking.higress.io/v1 kind: McpServer metadata: name: legacy-bridge-mcp namespace: default spec: protocolVersion: 2026-07-28 upstream: type: mcp protocolVersion: 2025-03-26 endpoint: http://legacy-mcp.default.svc.cluster.local/mcp bridge: enabled: true sessionIsolation: true这里的bridge.enabled: true让 Higress 在网关侧完成协议转换下游客户端看到的是无状态调用旧版的 initialize 握手和 Session 由 Higress 在上游侧完成。sessionIsolation: true保证下游 Session 和无关凭据不会传给上游。这一点很重要——Higress 不会对同一次调用依次尝试多个协议版本避免重复执行带副作用的工具。接下来是治理粒度的配置。新版协议把 MCP 方法和工具名映射进 Header网关不用解析整个 JSON-RPC Body 就能识别请求要执行的方法和工具。这意味着你可以把限流和可观测下沉到工具级别。先看 ai-statistics 插件的配置从请求 Header 提取Mcp-Method和Mcp-Name写入日志和链路追踪apiVersion: extensions.higress.io/v1alpha1 kind: WasmPlugin metadata: name: ai-statistics namespace: higress-system spec: defaultConfig: disable_openai_usage: true enable_path_suffixes: - /mcp attributes: - key: mcp_method value_source: request_header value: mcp-method apply_to_log: true apply_to_span: true - key: mcp_tool value_source: request_header value: mcp-name apply_to_log: true apply_to_span: true对于普通 MCP 流量disable_openai_usage: true关掉 OpenAI usage 解析只保留工具维度的自定义属性日志会干净很多。再看按工具限流的配置。查询类工具可以保持较高并发写操作工具用更严格的配额apiVersion: extensions.higress.io/v1alpha1 kind: WasmPlugin metadata: name: cluster-key-rate-limit namespace: higress-system spec: defaultConfig: rule_name: mcp-tool-rate-limit rule_items: - limit_by_header: mcp-name limit_keys: - key: get_weather query_per_minute: 600 - key: create_order query_per_minute: 30 redis: service_name: redis.static service_port: 6379limit_by_header: mcp-name直接按工具名区分配额create_order这类写操作限到 30 次/分钟防止 Agent 误触发批量下单。这套配置的前提是请求已经带上了新版协议的 Header所以协议版本切换和治理配置要一起上。最后提醒一个配置顺序问题先切protocolVersion再配治理插件最后做端到端验证。如果反过来治理插件会因为拿不到mcp-nameHeader 而失效你会误以为是插件本身的问题。4. 验证请求curl 检查新旧协议共存配置改完不能只看日志说「应该通了」要用 curl 把新旧协议共存的场景逐个打一遍。Higress 主仓库提供了一组 MCP Demo覆盖无状态调用、REST API 转换、版本兼容和请求校验四个场景。你可以从 Higress 仓库根目录执行以下命令准备环境cd samples/mcp ./protocol/2026-07-28/plugin/build.sh ./environment/scripts/up.sh环境起来后按下面四组检查清单逐个验证。第一组验证无状态 MCP over HTTP。这组请求不发送 initialize也不使用协议 Session直接检查新版调用能否独立完成# server/discover成功 curl -s -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H MCP-Protocol-Version: 2026-07-28 \ -d {jsonrpc:2.0,id:1,method:server/discover} | jq . # tools/list返回 say_hello curl -s -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H MCP-Protocol-Version: 2026-07-28 \ -d {jsonrpc:2.0,id:2,method:tools/list} | jq . # tools/call返回 hello curl -s -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H MCP-Protocol-Version: 2026-07-28 \ -H Mcp-Method: tools/call \ -H Mcp-Name: say_hello \ -d {jsonrpc:2.0,id:3,method:tools/call,params:{name:say_hello,arguments:{}}} | jq .判定标准是三次调用都独立成功且响应头里没有Mcp-Session-Id。用curl -i看响应头确认这一点。第二组验证 REST API 暴露为 MCP 工具。这组要检查协议转换没有重复执行业务请求# 通过 tools/list 查看网关生成的 get_weather 工具 curl -s -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H MCP-Protocol-Version: 2026-07-28 \ -d {jsonrpc:2.0,id:1,method:tools/list} | jq .result.tools[] | select(.nameget_weather) # 通过 tools/call 查询杭州天气 curl -s -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H MCP-Protocol-Version: 2026-07-28 \ -H Mcp-Method: tools/call \ -H Mcp-Name: get_weather \ -d {jsonrpc:2.0,id:2,method:tools/call,params:{name:get_weather,arguments:{location:Hangzhou}}} | jq .Agent 侧是 1 次 tools/callHigress 完成 MCP → REST 转换后端应该是 1 次GET /weather?locationHangzhou。检查后端事件数是否为 1验证协议转换没有重复执行业务请求。第三组验证新版客户端访问旧版 MCP 服务。这组检查兼容路径新版客户端只看到无状态调用旧版握手和 Session 由 Higress 在上游侧完成# 使用新版 tools/list 访问 Higress上游是 legacy MCP Server curl -s -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H MCP-Protocol-Version: 2026-07-28 \ -d {jsonrpc:2.0,id:1,method:tools/list} | jq . # 使用新版 tools/call 访问 Higress curl -s -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H MCP-Protocol-Version: 2026-07-28 \ -H Mcp-Method: tools/call \ -H Mcp-Name: get_weather \ -d {jsonrpc:2.0,id:2,method:tools/call,params:{name:get_weather,arguments:{location:Hangzhou}}} | jq .观测重点是 Cookie、Authorization 和Mcp-Session-Id等上下文没有越过协议边界同时上游收到完整的旧版调用序列initialize→notifications/initialized→tools/list以及initialize→notifications/initialized→tools/call。第四组验证非法请求在调用后端之前被拒绝。这组把错误请求送到 Higress检查它们是否在业务服务执行前被终止# 缺少必填 location 的 tools/call curl -s -i -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H MCP-Protocol-Version: 2026-07-28 \ -H Mcp-Method: tools/call \ -H Mcp-Name: get_weather \ -d {jsonrpc:2.0,id:1,method:tools/call,params:{name:get_weather,arguments:{}}} # 携带不可信 Origin 的请求 curl -s -i -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H Origin: http://evil.example.com \ -H MCP-Protocol-Version: 2026-07-28 \ -d {jsonrpc:2.0,id:2,method:tools/list} # Header 声明 tools/call、Body 实际为 tools/list 的不一致请求 curl -s -i -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H MCP-Protocol-Version: 2026-07-28 \ -H Mcp-Method: tools/call \ -H Mcp-Name: get_weather \ -d {jsonrpc:2.0,id:3,method:tools/list}预期结果参数错误返回 HTTP 200 且 Tool ResultisErrortrue不可信 Origin 返回 HTTP 403Header/Body 不一致返回 HTTP 400 或 JSON-RPC 错误码 -32020。关键结果是后端事件数为零——非法请求在数据面被终止没有先访问业务服务再包装错误。这四组跑完新旧协议共存的核心路径就验证完了。如果你还要做端到端联调把模型侧接上 TaoToken 的 API 通道让 Agent 真实发起一次工具调用观察从模型输出参数到 Higress 执行工具再到结果回传的完整链路。5. 本篇常见错排查401、local proxy failed 与协议降级迁移过程中最容易卡住的不是配置本身而是几个典型报错。我把踩过的坑按报错现象整理出来对照着查。401 Unauthorized。这个最常见分两种。一种是模型侧 401说明 TaoToken 的 Key 没配对或者过期了。检查你的 Secret 引用是否正确以及 Key 是否在控制台被禁用。另一种是 MCP 侧 401通常是上游 legacy MCP Server 的凭据没有正确桥接。注意 Higress 在协议转换时不会默认把下游 Session 和无关凭据传给上游如果你依赖某个凭据透传需要在 bridge 配置里显式声明。排查命令kubectl logs -n higress-system deploy/higress-gateway --tail100 | grep -i 401\|unauthorizedlocal proxy failed。这个报错通常出现在 Higress 网关无法连接到上游 MCP Server 时。先确认上游 endpoint 的 DNS 能解析、端口能通kubectl exec -n higress-system deploy/higress-gateway -- \ curl -s -o /dev/null -w %{http_code} http://legacy-mcp.default.svc.cluster.local/mcp如果返回 000说明网络层就不通跟协议无关。如果返回 200 但 MCP 调用还是失败那可能是协议版本不匹配——上游是 modern-only 的 MCP Server而你配的是 legacy 桥接这种组合 Higress 暂不支持。对照兼容矩阵modern 客户端 legacy 上游支持legacy 客户端 legacy 上游保持兼容legacy 客户端 modern-only 上游暂不支持。reading choices 报错。这个通常出现在模型返回格式不符合预期时。如果你用的是 OpenAI 兼容接口模型返回的choices字段解析失败先检查请求里的model参数是否是 TaoToken 支持的模型 ID。可以在模型对话页面先手动跑一次确认模型能正常返回。如果手动跑正常但 Agent 调用失败检查是不是流式和非流式模式混用了。OAuth 相关报错。MCP 2026-07-28 对认证有更明确的要求涉及 issuer、audience 和 scope 校验。如果你在网关侧配了 OAuth Resource Server报错时先确认 token 的 audience 是否匹配你的 MCP 服务标识。这块 Higress 还在演进中Issue #4470 在跟踪 OAuth 和扩展生态的完善方向。协议降级不触发。有人会问上游不支持新版协议时Higress 会不会自动降级到旧版答案是认证失败、限流、网络异常和服务端 5xx 不触发协议降级。只有明确收到「不支持该协议或方法」的响应时才应该尝试旧版 initialize。这个逻辑在 Issue #4467 的协议能力协商里讨论目前需要你显式配置上游的protocolVersion不要指望自动探测。Header 与 Body 不一致被拒。新版协议下Mcp-Method和Mcp-NameHeader 必须与 Body 里的方法和工具一致否则返回 400 或 -32020。有些客户端库会自动补 Header有些不会。如果你用的是自研客户端记得在发请求时手动带上这两个 Header。用 curl 测试时最容易忘上面的验证清单里我特意都加上了。排查时的一个通用技巧先看 Higress 网关日志再看上游服务日志最后看模型侧返回。三段日志按时间戳对齐能快速定位是哪一段出的问题。如果三段日志都正常但端到端还是失败检查是不是中间有缓存——新版协议对ttlMs和cacheScope有明确约定Higress 对 modern 服务端会透传这两个字段对 legacy 服务端会返回ttlMs: 0和cacheScope: private。客户端如果错误地缓存了工具列表可能会拿到过期的工具定义。6. 语义一致 CTA把 MCP 纳入统一治理Higress MCP Server 这次适配 MCP 2026-07-28本质上不是「省掉一次握手」这么简单而是让 MCP 服务可以像普通 HTTP 服务一样部署、扩缩容和治理。无状态请求可以分发到任意实例MCP 方法和工具名进入现有的鉴权、限流与可观测体系新版客户端可以通过 Higress 继续访问尚未升级的旧版 MCP Server。客户端、网关和服务端不必在同一时间完成升级企业可以在保持存量服务可用的同时逐步把 MCP 纳入现有 HTTP 与 API 治理体系。迁移路径我建议分三步走。第一步把 mcp-server 插件升到 latest不动任何协议配置确认存量 legacy 调用不受影响。第二步挑一个非核心的 MCP 服务把protocolVersion切到2026-07-28用上面第四节的 curl 清单验证无状态调用和治理插件生效。第三步把模型侧通道统一到 TaoToken做端到端联调确认 Agent 从意图识别到工具执行的完整链路稳定后再逐步推广到其他服务。联调时如果遇到模型侧的问题先去 API Keys 页面 https://taotoken.net/api-keys 核对 Key 状态再去接入文档 https://taotoken.net/doc 对照请求格式。需要长期跑编码类 Agent 的话Coding Plan https://taotoken.net/coding-plan 的配额模式更适合持续调用场景。模型对话验证入口在 https://taotoken.net/models 控制台在 https://taotoken.net/console 。最后留一个实用技巧迁移期间给新旧协议各打一个标签在 ai-statistics 的日志里按mcp_method和mcp_tool聚合观察哪些工具还在走 legacy 路径。等 legacy 路径的调用量降到零再考虑清理桥接配置。这样你不用猜「还有没有人在用旧协议」日志会直接告诉你。
返回列表