MCP 架構(gòu)設(shè)計(jì)案例剖析:Nacos MCP Registry 實(shí)現(xiàn)存量應(yīng)用接口升級(jí) MCP 協(xié)議 原創(chuàng)
Model Context Protocol(MCP)模型上下文協(xié)議(如下圖所示)是 Anthropic 發(fā)布的一種標(biāo)準(zhǔn)化協(xié)議,使得 Agent 智能體應(yīng)用可以方便快捷地與下游異構(gòu)的數(shù)據(jù)或者工具進(jìn)行交互,還不熟悉的同學(xué)可以看下這兩篇文章《??王炸!MCP 架構(gòu)設(shè)計(jì)深度剖析 & 使用 Spring AI + MCP 四步教你實(shí)現(xiàn) Agent 智能體開發(fā)????》、《???MCP 架構(gòu)設(shè)計(jì)演進(jìn):從 Local MCP Server 到 Remote MCP Server 開源架構(gòu)設(shè)計(jì)實(shí)現(xiàn)???》。
最近,兩大關(guān)鍵事件標(biāo)志著 MCP 已從事實(shí)標(biāo)準(zhǔn)邁向行業(yè)標(biāo)準(zhǔn):一方面,OpenAI 正式宣布跟進(jìn) Anthropic 的 MCP 協(xié)議,另一方面,Anthropic 發(fā)布了新版本 MCP 協(xié)議,在 Remote MCP Server 的場(chǎng)景進(jìn)行了顯著改進(jìn)。
但是,云原生存量業(yè)務(wù)架構(gòu)中的 API 改造成 MCP Server,既面臨時(shí)間成本,還有人力上的挑戰(zhàn)。企業(yè)對(duì)能提升 MCP 構(gòu)建效率的開源和商業(yè)方案愈加渴望。
阿里 Nacos(Naming and Configuration Service)作為云原生注冊(cè)配置中心,最近發(fā)布了 MCP Registry,讓存量業(yè)務(wù) API “0改動(dòng)”就可以適配 MCP Server。
Nacos 在作為 MCP Registry ,承擔(dān)著控制面板的關(guān)鍵角色。它不僅負(fù)責(zé)管理 Tool 的元信息,還能將現(xiàn)有的 API 轉(zhuǎn)化為符合 MCP 協(xié)議的接口。借助 Nacos,云原生存量業(yè)務(wù)應(yīng)用可以迅速將其已有的業(yè)務(wù) API 接口轉(zhuǎn)換為 MCP 協(xié)議接口,并通過與 Higress AI 網(wǎng)關(guān)的結(jié)合,實(shí)現(xiàn) MCP 協(xié)議與現(xiàn)有協(xié)議之間的無縫轉(zhuǎn)換。在這個(gè)過程中,Nacos 提供了對(duì)現(xiàn)有服務(wù)的管理以及動(dòng)態(tài)服務(wù)信息的定義,使得業(yè)務(wù)能夠在不改動(dòng)現(xiàn)有接口的前提下,通過 Nacos 的服務(wù)管理功能,動(dòng)態(tài)地應(yīng)用 Higress 網(wǎng)關(guān)生成的 MCP Server 協(xié)議。
下文對(duì) Nacos MCP Registry 架構(gòu)設(shè)計(jì)詳細(xì)剖析之。
1、Nacos MCP Regisry 架構(gòu)設(shè)計(jì)剖析
第一、Nacos 0代碼適配 MCP Server 的架構(gòu)原理剖析
我們先來了解一下普通的服務(wù)調(diào)用過程。首先,調(diào)用方(Consumer)需要知道服務(wù)提供方(Provider)的地址(可以是一個(gè)域名或 IP 地址)。然后,調(diào)用方根據(jù)事先約定好的參數(shù),對(duì)服務(wù)接口進(jìn)行調(diào)用。整個(gè)調(diào)用流程如下圖所示:
在日常開發(fā)中,我們通常已經(jīng)熟悉了當(dāng)前服務(wù)提供方的接口集合以及接口參數(shù)的具體作用。因此,我們可以在業(yè)務(wù)代碼中編寫調(diào)用邏輯,實(shí)現(xiàn)服務(wù)之間的調(diào)用。對(duì)于大模型來說,這些調(diào)用上下文同樣是必不可少的。大模型需要了解服務(wù)提供方的接口集合以及接口的詳細(xì)描述,才能根據(jù)上下文進(jìn)行接口調(diào)用。
對(duì)于已經(jīng)使用 Nacos 作為注冊(cè)配置中心的存量服務(wù),Nacos 中已經(jīng)保存了服務(wù)的調(diào)用地址。我們只需要增加服務(wù)的接口信息,就可以實(shí)現(xiàn)大模型調(diào)用上下文的構(gòu)建。
為此,Nacos 引入了“應(yīng)用全局描述”這一概念,用于描述當(dāng)前應(yīng)用及其接口的詳細(xì)信息。通過統(tǒng)一的接口描述協(xié)議,我們可以對(duì) Nacos 中的服務(wù)進(jìn)行 MCP 化改造。對(duì)于之前未在 Nacos 中注冊(cè)的服務(wù),我們可以通過 Nacos 的持久化服務(wù)發(fā)現(xiàn)功能手動(dòng)進(jìn)行注冊(cè)。在配置完服務(wù)相關(guān)信息后,MCP 協(xié)議所需的數(shù)據(jù)已經(jīng)完備。接下來,我們需要考慮如何通過 MCP 協(xié)議將這些數(shù)據(jù)暴露出去。這里,我們利用 Higress 的插件機(jī)制來實(shí)現(xiàn) MCP 協(xié)議的暴露能力。調(diào)用流程圖如下:
第二、Nacos MCP Registry 整體架構(gòu)設(shè)計(jì)剖析
1.Nacos MCP Regisry 架構(gòu)設(shè)計(jì)
MCP 協(xié)議目前支持多種資源(Tool、Prompt、Resource 等),Nacos 優(yōu)先實(shí)現(xiàn)了使用量較高的 Tool,并借助 Higress 提供的統(tǒng)一 SSE 協(xié)議支持,加速了 MCP Server 的構(gòu)建,整體架構(gòu)設(shè)計(jì)如下圖所示:
在架構(gòu)設(shè)計(jì)上,Nacos 通過在 Higress 中的 MCP Server 插件實(shí)現(xiàn)了 Nacos 中管理的 Tools 的暴露。對(duì)外通過 MCP 協(xié)議暴露普通 HTTP 服務(wù),需要先完成以下兩件事:
- 暴露 tool/list 接口
功能:由 Higress AI 網(wǎng)關(guān)返回所有的 Tool 列表。
實(shí)現(xiàn):tool/list 方法主要負(fù)責(zé)將當(dāng)前 MCP Server 支持的 Tool 的詳細(xì)信息列表返回給 MCP Client。返回信息包含 Tool 的作用描述和 Tool 的參數(shù)描述(包含類型、作用等)。通過將 Nacos 存儲(chǔ)的描述信息轉(zhuǎn)化為標(biāo)準(zhǔn)的 MCP 協(xié)議里的 tool/list 結(jié)果,返回給 MCP Client。
- 協(xié)議轉(zhuǎn)化
功能:將 MCP 協(xié)議的 JSON RPC 轉(zhuǎn)化為普通 HTTP 請(qǐng)求,并轉(zhuǎn)發(fā)到后端服務(wù)。
實(shí)現(xiàn):當(dāng) MCP Client 調(diào)用 Tool 時(shí),Higress 將 tool/call 的 JSON RPC 請(qǐng)求解析出來,通過用戶配置的參數(shù)映射信息、Path、后端地址等信息,Higress 生成后端的 HTTP 調(diào)用請(qǐng)求,并進(jìn)行調(diào)用。調(diào)用完成后,再將后端的調(diào)用結(jié)果包裝成標(biāo)準(zhǔn)的 tool/call 接口調(diào)用的返回結(jié)果。
在整體實(shí)現(xiàn)中,Nacos 作為 MCP Registry,扮演控制面的角色,管理 Tool 的元信息。Higress 在數(shù)據(jù)面負(fù)責(zé)協(xié)議轉(zhuǎn)換和 RPC 調(diào)用。存量服務(wù)只需添加接口描述,無需進(jìn)行任何改動(dòng)。
2.使用 Nacos MCP Registr 架構(gòu)設(shè)計(jì)的優(yōu)勢(shì)
- 存量 API 快速構(gòu)建 MCP Server
Nacos 集成 Higress 的方案:通過 Nacos 和 Higress 的集成,用戶可以實(shí)現(xiàn)零代碼快速構(gòu)建 MCP Server,迅速跟進(jìn) MCP 協(xié)議,無縫對(duì)接存量 API。
- MCP 信息動(dòng)態(tài)下發(fā)實(shí)時(shí)生效
動(dòng)態(tài)調(diào)試與優(yōu)化:MCP 描述信息、Tools 以及 Prompt 都需要經(jīng)過調(diào)試才能達(dá)到最佳效果。Nacos 能夠幫助管理和下發(fā)這些信息,實(shí)現(xiàn)動(dòng)態(tài)調(diào)整和實(shí)時(shí)生效,提高調(diào)試效率。
- MCP 信息歷史版本管理
版本管理與回滾:Nacos 會(huì)管理和存儲(chǔ) MCP 信息的歷史版本,方便進(jìn)行 Diff 對(duì)比差異,在出現(xiàn)問題時(shí)能夠快速回滾到之前的版本,確保系統(tǒng)的穩(wěn)定性和可靠性。
- MCP 信息灰度管理
灰度分批生效:在 MCP 信息生效時(shí),Nacos 支持灰度分批生效,允許逐步推廣新配置,方便對(duì)比不同版本的效果,降低風(fēng)險(xiǎn)。
- 密碼配置加密
敏感信息保護(hù):在 MCP 信息和 API 調(diào)用過程中,涉及密碼等敏感信息時(shí),Nacos 提供了 敏感信息加密 的能力,確保數(shù)據(jù)的安全性。
- MCP 返回格式 JSON 轉(zhuǎn)換 XML
格式優(yōu)化:在與大模型交互時(shí),JSON 格式可能不如 XML 格式直觀。Nacos 可以幫助將 MCP 的返回格式從 JSON 轉(zhuǎn)換為 XML,使大模型更容易理解和處理。
- MCP 服務(wù)管理及健康檢查
服務(wù)管理與監(jiān)控:隨著 MCP 服務(wù)數(shù)量的增加,Nacos 提供了大規(guī)模服務(wù)管理能力,包括健康檢查、實(shí)時(shí)更新和負(fù)載均衡,確保 MCP 服務(wù)的高效運(yùn)行,同時(shí)作為 MCP 服務(wù)發(fā)現(xiàn)中心的托管平臺(tái)。
通過這些功能,Nacos 和 Higress 的結(jié)合為 MCP Server 的構(gòu)建和管理提供了全面的支持,幫助用戶快速、安全地實(shí)現(xiàn) MCP 協(xié)議的落地。
2、Nacos MCP Regisry 架構(gòu)設(shè)計(jì)總結(jié)
借助 Nacos 與 Higress 的組合方案,能夠?qū)崿F(xiàn)無需代碼改造,將 AI Agent 智能體無縫連接至現(xiàn)有應(yīng)用,從而大幅削減現(xiàn)有應(yīng)用的改造成本。目前,用戶需手動(dòng)配置接口描述信息,但未來 Nacos 計(jì)劃通過工具化手段進(jìn)一步簡(jiǎn)化這一流程,使用戶僅需進(jìn)行微調(diào)即可完成配置。在實(shí)際場(chǎng)景中,我們面臨著海量的存量服務(wù)與接口。按照接口到 Tool 的映射規(guī)則,我們將產(chǎn)生大量的 Tool。當(dāng) Agent 獲取 Tool 列表并將其傳遞給大模型時(shí),這將導(dǎo)致大量的 token 消耗,進(jìn)而可能影響大模型的性能。因此,如何在上下文中精準(zhǔn)篩選出有效的 Tool 列表,并將其高效返回給 Agent 智能體,將成為后續(xù)發(fā)展的關(guān)鍵方向之一。除了 Tool,MCP 協(xié)議還涵蓋 Prompt、Resource 等多種資源,MCP 社區(qū)也在持續(xù)對(duì)協(xié)議進(jìn)行更新。相信 Nacos 將逐步支持這些新特性,為 MCP 生態(tài)的繁榮貢獻(xiàn)力量。
本文轉(zhuǎn)載自公眾號(hào)玄姐聊AGI 作者:玄姐
原文鏈接:??https://mp.weixin.qq.com/s/nQF-bUcmODpqo_SGPSxfbg??
