子葵&于怀 2025-03-31 22:01 浙江
MCP 的发展速度之快,似乎超出了大部分人的想象。
“0改动”适配 MCP Server
Aliware
Nacos 作为 MCP Registry,扮演控制面的角色,不仅管理 Tool 的元信息,还可以把存量 API 转化成 MCP 协议。
Nacos 可以帮助应用快速把业务已有的 API 接口,转换成 MCP 协议接口,结合 Higress AI 网关,实现 MCP 协议和存量协议的转换。其中,Nacos 提供存量的服务管理和动态的服务信息定义,帮助业务在存量接口不改动的情况下,通过 Nacos 的服务管理动态生效 Higress 网关所生成的 MCP Server 协议。
借助 MCP 的发展契机,Nacos (Naming and Configuration Service)正从构建云原生应用向云原生 AI 应用的动态服务发现、配置管理和服务管理平台开源项目进行演进 ,近期 Nacos 即将发布 3.0 正式版本,体系化面向 AI 架构进行升级。
我们先看一下普通的调用是如何发生。
首先,调用者需要知道服务提供者的地址(一个域名或者是一个 IP),之后调用者根据提前约定好的参数,对接口进行调用。调用流程图如下:
在日常开发中,我们已经知悉当前的提供者的接口集合、接口和接口参数的具体作用,所以可以基于这些上下文,在业务代码中写入调用逻辑,实现服务间的调用。对模型而言,这些调用上下文也是必须的,模型也需要知道服务提供者的接口集合以及接口的详细描述,才能根据上下文进行接口调用。
因此,对于已经使用 Nacos 作为注册配置中心的存量服务而言,Nacos 中已经存储了服务的调用地址,只需要增加服务的接口信息就能实现模型来调用上下文。
为此,我们引入了“应用全局描述”来描述当前应用以及接口的详细信息,通过统一的接口描述协议对 Nacos 中的服务进行 MCP 化改造。对于之前未注册在 Nacos 中的服务,只需要通过 Nacos 持久化服务发现手动注册即可。在配置完服务相关信息之后,MCP 协议需要的相关数据都已经齐全了,接下来就需要考虑如何将这些数据通过 MCP 协议暴露出去,这里我们通过 Higress 的插件机制完成 MCP 协议的暴露能力。调用流程图如下:
手把手演示“0代码”
复刻高德 MCP Server
Aliware
最近高德推出了 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 部署
1. 安装docker
2. 配置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
3. 通过 Kind 创建一个 local 的 K8s 集群
kind create cluster
4. 获取 hgctl,准备安装 higress
curl -Ls https://raw.githubusercontent.com/alibaba/higress/main/tools/hack/get-hgctl.sh | bash
5. 在本地部署 higress
hgctl install --set profile=local-k8s
6. 安装 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
7. 部署 redis
docker run --name higress-redis -d redis
8. 修改 ConfigMap,让 Higress 连接到 Nacos
kubectl -n higress-system edit cm higress-config
将红框部分替换为一下内容,即在原本配置中,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
ifconfig eth0 | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}'
高德开发者 API KEY 申请
调用高德 API,我们首先需要申请到高德 API 的 key。进入高德开发者平台 ,登陆之后,创建新应用。
创建新应用:
应用创建完成之后,我们创建 key:
在控制台看到 key,将 key 保存下来
接下来我们完成 higress 中关联 Nacos 做 MCP registry 的配置
接下来我们在 Nacos 中配置完成高德 HttpApi 的描述文件的配置以及高德域名信息配置
在 Nacos 中进行高德 API 服务配置
首先我们通过持久化服务发现的能力将高德的域名注册到 nacos 中,服务名为 amap,分组为 amap。
创建完服务之后,我们将高德的域名注册到 Nacos 中。
通过以下命令注册高德的域名。
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。
在配置中心新建一个配置文件对高德的 API 进行描述。
进入配置中心,点击新建配置。
{
"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"
}
}
}
}
{
"type": "fixed-query-token",
"credentialsMap": {
"key": "key",
"value": "高德的api key"
}
}
在 Nacos 中进行获取出口 IP 服务配置
注册一个获取当前出口 IP 的服务获取当前的 IP。以 ipinfo.io 为例,在服务管理中创建服务 ip, 分组为 ip:
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=ip&groupName=ip&ip=ipinfo.io&port=80&ephemeral=false'
{
"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。
查询天气
接下来,我们通过 Agent 模式向智能体,询问今天天气怎么样。
总结
Aliware