為什么能實現“0 代碼”適配 MCP Server

我們先看一下普通的調用是如何發生。首先,調用者需要知道服務提供者的地址 (一個域名或者是一個 IP),之后調用者根據提前約定好的參數,對接口進行調用。調用流程圖如下:

image

在日常開發中,我們已經知悉當前的提供者的接口集合、接口和接口參數的具體作用,所以可以基于這些上下文,在業務代碼中寫入調用邏輯,實現服務間的調用。對模型而言,這些調用上下文也是必須的,模型也需要知道服務提供者的接口集合以及接口的詳細描述,才能根據上下文進行接口調用。因此,對于已經使用 Nacos 作為注冊配置中心的存量服務而言,Nacos 中已經存儲了服務的調用地址,只需要增加服務的接口信息就能實現模型來調用上下文。為此,我們引入了“應用全局描述”來描述當前應用以及接口的詳細信息,通過統一的接口描述協議對 Nacos 中的服務進行 MCP 化改造。對于之前未注冊在 Nacos 中的服務,只需要通過 Nacos 持久化服務發現手動注冊即可。在配置完服務相關信息之后,MCP 協議需要的相關數據都已經齊全了,接下來就需要考慮如何將這些數據通過 MCP 協議暴露出去,這里我們通過 Higress 的插件機制完成 MCP 協議的暴露能力。調用流程圖如下:

image

Nacos 轉化 MCP 的具體實現原理

MCP 協議目前支持多種資源(Tool、Prompt、Resource 等),我們對使用量較高的 Tool 進行了優先實現,再借助 Higress 提供的統一的 SSE 協議支持,便加速了 MCP Server 的構建。實現原理上,我們通過在 Higress 中的 MCP Server 插件實現了 Nacos 中管理的 Tools 的暴露,對外通過 MCP 協議暴露普通 HTTP 服務,需要先完成兩件事,實現原理圖如下:

image

使用 Nacos 管理 Tool 的元信息的優勢

手把手演示“0 代碼”復刻高德 MCP Server

最近高德推出了 MCP Server 獲得了業內廣泛關注,這部分 Server 是高德基于 MCP 社區的開發指引實現的,構建成本較高。接下來,我們基于高德官方的 Open API 接口,通過 Nacos+Higress 的方案,來演示如何 0 代碼適配 MCP Server。

環境準備

Nacos 部署

通過 docker 部署 nacos:

export NACOS_AUTH_TOKEN=自定義的token,token為原始內容的base64編碼結果
export NACOS_AUTH_IDENTITY_VALUE=自定義的IDENTITY_VALUE,任意英文和數字組合
docker run -td -e PREFER_HOST_MODE=hostname -e MODE=standalone -e
NACOS_AUTH_IDENTITY_KEY=serverIdentity -e
NACOS_AUTH_IDENTITY_VALUE=${NACOS_AUTH_IDENTITY_VALUE} -e
NACOS_AUTH_TOKEN=${NACOS_AUTH_TOKEN} -p 8848:8848 -p 9848:9848 nacos/nacos-server

Higress 部署

安裝 docker配置 Kind通過 Kind 在本地安裝 higress,在 Linux x86 的環境下使用如下命令安裝

# For AMD64 / x86_64
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.27.0/kind-linux-amd64
# For ARM64
[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.27.0/kind-linux-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

通過 Kind 創建一個 local 的 k8s 集群

kind create cluster

獲取 hgctl,準備安裝 higress

curl -Ls https://raw.githubusercontent.com/alibaba/higress/main/tools/hack/get-hgctl.sh | bash

在本地部署 higress

hgctl install --set profile=local-k8s

安裝 Kubectl 并 連接到剛剛創建的集群

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
mv ./kubectl /usr/bin/kubectl

部署 redis

docker run --name higress-redis -d redis

修改 ConfigMap 讓 Higress 連接到 Nacos

kubectl -n higress-system edit cm higress-config

image

將紅框部分替換為一下內容, 即在原本配置中,data.higress 中增加 mcpServer 段的配置

apiVersion: v1
data:
higress: |-
mcpServer:
sse_path_suffix: /sse
enable: true
redis:
address: {local_ip}:6379
match_list:
- match_rule_domain: "*"
match_rule_path: /registry
match_rule_type: "prefix"
servers:
- name: nacos-registry
type: nacos-mcp-registry
path: /registry
config:
serverAddr: {local_ip}
namespace: ""
serviceMatcher:
amap: ".*"
ip: ".*"
downstream:
connectionBufferLimits: 32768
http2:
initialConnectionWindowSize: 1048576
initialStreamWindowSize: 65535
maxConcurrentStreams: 100
idleTimeout: 180
maxRequestHeadersKb: 60
routeTimeout: 0
upstream:
connectionBufferLimits: 10485760
idleTimeout: 10

請將 {local_ip} 替換為本機地址,可以在本地執行以下命令獲取

ifconfig eth0 | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}'

編輯完成之后保存配置,至此基本環境以及配置完成。

使用高德官方的 Open API,構建 MCP Server

環境部署完成之后,我們通過一個小的 Demo 對整個流程進行演示,我們以查詢天氣為場景,將高德的 HTTP 接口在無改造的情況下暴露為 MCP 協議,讓 Agent 進行調用。

高德開發者 API KEY 申請

調用高德 API,我們首先需要申請到高德 API 的 key。進入高德開發者平臺 ,登陸之后,創建新應用。

image

創建新應用:

image

應用創建完成之后,我們創建 key:

image

在控制臺看到 key,將 key 保存下來

image

接下來我們完成 higress 中關聯 Nacos 做 MCP registry 的配置接下來我們在 Nacos 中配置完成高德 HttpApi 的描述文件的配置以及高德域名信息配置

在 Nacos 中進行高德 API 服務配置

首先我們通過持久化服務發現的能力將高德的域名注冊到 nacos 中,服務名為 amap,分組為 amap。

image

創建完服務之后,我們將高德的域名注冊到 Nacos 中。

image

通過以下命令注冊高德的域名。

curl -X POST
'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=amap&groupName=amap&ip=restapi.amap.com&port=80&ephemeral=false'

檢查 amap 服務的實例數變為 1。

image

在配置中心新建一個配置文件對高德的 API 進行描述。

image

進入配置中心,點擊新建配置。

image

創建 DataId 為 amap-mcp-tools.json 分組為 amap 的配置項,配置內容為

{
"protocol": "http",
"tools": [
{
"name": "get_weather",
"description": "get weather",
"inputSchema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "city adcode"
}
}
}
},
{
"name": "get_adcode",
"description": "get adcode via address",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "address"
}
}
}
},
{
"name": "get_address_via_ip",
"description": "get address via ip",
"inputSchema": {
"type": "object",
"properties": {
"ip": {
"type": "string",
"description": "ip address"
}
}
}
}
],
"toolsMeta": {
"get_weather": {
"credentialRef": "amap-key.json",
"InvokeContext": {
"path": "/v3/weather/weatherInfo",
"method": "GET"
}
},
"get_adcode": {
"credentialRef": "amap-key.json",
"InvokeContext": {
"path": "/v3/geocode/geo",
"method": "GET"
}
},
"get_address_via_ip": {
"credentialRef": "amap-key.json",
"InvokeContext": {
"path": "/v3/ip",
"method": "GET"
}
}
}
}

這個配置描述了高德的 HTTP API 的相關參數信息,以及 Higress 進行協議轉換時需要的上下文信息。再創建 DataId 為 amap-key.json, 分組為 amap 的配置項配置內容為:

{
"type": "fixed-query-token",
"credentialsMap": {
"key": "key",
"value": "高德的api key"
}
}

在 Nacos 中進行獲取出口 IP 服務配置

注冊一個獲取當前出口 IP 的服務獲取當前的 IP。以 ipinfo.io 為例,在服務管理中創建服務 ip, 分組為 ip:

image

服務創建完成之后,向 Nacos 中注冊 ipinfo.io 的域名信息,執行一下命令。

curl -X POST
'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=ip&groupName=ip&ip=ipinfo.io&port=80&ephemeral=false'

注冊完成之后,就能在 Nacos 控制臺看到 IP 服務的下有一個實例了。

image

服務創建完成之后,我們在配置中心配置獲取 IP 服務的接口描述。創建 DataId ip-mcp-tools.json 為 ,分組為 ip 的配置,配置內容為:

{
"protocol": "http",
"tools": [
{
"name": "get_current_ip_address",
"description": "get current caller's ip address",
"inputSchema": {
"type": "object",
"properties": {
"empty_args": {
"type": "string",
"description": "should be empty"
}
}
}
}
],
"toolsMeta": {
"get_current_ip_address": {
"InvokeContext": {
"path": "/",
"method": "GET"
}
}
}
}

配置創建完之后,就可以在 Cursor 中配置 Higress 作為 MCP Server 調用 Tool 了。

Cursor MCP 配置

Cursor 的具體配置方法如下:首先安裝最新版本的 Cursor,安裝完成之后在 Cursor 的設置中,配置 MCP Server 的具體信息。

{
"mcpServers": {
"nacos-registry": {
"url": "http://localhost/registry/sse"
}
}
}

配置完成后可以看到 通過 Higress + Nacos 暴露的 MCP Server 提供的 Tool。

image

查詢天氣

接下來,我們通過 Agent 模式向智能體,詢問今天天氣怎么樣。

image

可以看到,智能體先獲取了當前主機的出口 IP,再通過 IP 獲取到具體的省市信息,再通過省市信息獲取到 adcode,最終通過 adcode 獲取到當前的天氣信息。整個過程中,用戶只需要將服務注冊在 Nacos 中,并且在 Nacos 中配置服務接口相關的描述信息即可,服務本身的代碼無需任何改造;

總結

通過 Nacos+Higress 的方案實現 0 代碼改造將 Agent 連接到存量應用,能夠顯著降低存量應用的改造成本。當前需要用戶手動配置接口描述信息,后續可以通過工具化的能力將接口進一步簡化,用戶只需要微調即可。現實中,我們有大量的存量服務和接口,按照接口到 Tool 的映射,我們將會有非常多的 Tool,當 Agent 拉取 Tool 列表并傳遞給模型的時候,將會有非常多的 token 消耗,并且模型的性能也可能會下降。那么如何在上下文中圈定有效的 Tool 列表,并返回給 Agent,將會是我們后續重要的演進方向之一。除了 Tool,MCP 協議還有 Prompt、Resource 等,MCP 社區也在持續更新協議,我們將在后續逐個支持,助力 MCP 生態的發展。

Nacos 3.0 AI 應用服務管理平臺

Nacos 3.0 架構已將發布正式版本,定位 AI 應用服務管理平臺,包含了 MCP 動態管理,也覆蓋通用 AI 生態場景,包含模型參數、Prompt 動態模版等場景幫助業務動態管理實時生效,Nacos 社區有完備的多語言客戶端生態,成熟的 Python、GO、Rust、Java、NodeJS 等主流語言的適配,幫你用最低的成本快速構建 AI 應用;隨著 Nacos 演進,會推出越來越多 AI 相關的能力。

image

原文轉載自:https://mp.weixin.qq.com/s/SiWoJ-yleUnf0eK82GboBQ

上一篇:

Python 中有哪些常用的 API?

下一篇:

快速使用Milvus MCP Server,0代碼搭建智能搜索Agent
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費