引言
如今,市面上的MCP数量日益增多。一想到要让一个智能体集成多个MCP,且每个MCP都得编写不同的配置信息,着实令人头疼不已。在进行集成操作时,还得逐个将MCP添加到大模型中,想想就令人倍感繁琐。
于是我不禁思索,是否存在一种方法,能够对所有MCP进行统一管理,让大模型只需接入一个MCP Server,就能实现对多个工具的调用呢?
嘿,还真有!前段时间,阿里发布了Nacos 3.0,它附带了一个全新功能——MCP Registry。这个功能主要用于帮助我们管理MCP服务,能动态管理MCP信息、Tools描述和列表等。而且,在管理过程中无需重启和运维操作,让MCP的调试变得更加简单便捷。不仅如此,它还支持将普通的HTTP或者RPC服务快速转换成一个MCP服务。 具体文档链接: Nacos 3.0 文档
接下来,要隆重介绍我们今天的主角——Nacos-MCP-Router。它是一个基于MCP官方标准SDK实现的MCP Server,具备MCP Server推荐、分发、安装及代理其他MCP Server的功能,能帮助用户更加轻松方便地使用MCP Server服务。Nacos-MCP-Router支持以stdio、sse、streamable HTTP协议进行暴露,同时支持docker部署。此外,Nacos-MCP-Router支持proxy模式,只需设置几个简单的环境变量,就能快速将原来基于stdio、sse协议的MCP Server转换为streamable HTTP协议的MCP Server。
环境准备
- python >= 3.12
- Nacos >= 3.0.0
- docker
Nacos 安装及配置
若要使用Nacos-MCP-Server,必须先安装Nacos 3.0.0 及以上版本。此次,我们采用docker部署Nacos 3.0。
启动Nacos
首次执行命令时,系统会自动下载相关的Docker镜像,等待时长取决于网络速度。您也可以提前下载好相关镜像,以缩短执行部署命令的等待时间。
docker run --name nacos-standalone-derby \\\\
-e MODE=standalone \\\\
-e NACOS_AUTH_TOKEN=${your_nacos_auth_secret_token} \\\\
-e NACOS_AUTH_IDENTITY_KEY=${your_nacos_server_identity_key} \\\\
-e NACOS_AUTH_IDENTITY_VALUE=${your_nacos_server_identity_value} \\\\
-p 8080:8080 \\\\
-p 8848:8848 \\\\
-p 9848:9848 \\\\
-d nacos/nacos-server:latest
❕注意:
- NACOS_AUTH_TOKEN:Nacos用于生成JWT Token的密钥,需使用长度大于32字符的字符串,并经过Base64编码。
- NACOS_AUTH_IDENTITY_KEY:Nacos Server端之间Inner API的身份标识的Key,此为必填项。
- NACOS_AUTH_IDENTITY_VALUE:Nacos Server端之间Inner API的身份标识的Value,同样为必填项。
验证Nacos服务是否启动成功
通过以下命令,可查看Nacos服务启动日志。
docker logs -f ${container_id}
若看到如下日志,则表明服务启动成功。
Nacos started successfully in xxxx mode. use xxxx storage
新建MCP Server (以高德地图为例)
打开任意浏览器,输入地址: http://127.0.0.1:8080/index.html,即可进入Nacos控制台页面。 注意:首次打开会要求初始化管理员用户nacos的密码。
以下是高德地图的配置信息:
{
"mcpServers": {
"amap-maps": {
"command": "npx",
"args": [
"-y",
"@amap/amap-maps-mcp-server"
],
"env": {
"AMAP_MAPS_API_KEY": "<your api key>"
}
}
}
}
高德地图的API Key获取地址如下:console.amap.com/dev/key/app
注意:
- MCP服务名:这是后续在控制台展示的名称,建议尽量与配置里的服务名称保持一致。
- 协议类型:目前MCP支持Stdio、SSE、Streamble Http 三种协议(需根据自身的MCP Server进行选择)。Http和Dubbo是Nacos用于兼容集成了Nacos注册中心的服务改造,这部分内容后续文章会详细介绍。
- Local Server配置:这是MCP-Server的具体配置信息,需依据要配置的MCP-Server实际情况而定。(此处采用的是高德地图的配置信息)
- 描述:别小看这个描述,后续Nacos-MCP-Router能否准确判断,很大程度上取决于描述项目是否详细。
Nacos-Mcp-Router安装与使用
Python版接入
Nacos-MCP-Router有两种工作模式:
- Router模式:此为默认模式,通过MCP Server推荐、分发、安装及代理其他MCP Server的功能,助力用户更便捷地使用MCP Server服务。
- Proxy模式:使用环境变量MODE=proxy指定,通过简单配置,可将SSE、Stdio协议的MCP Server转换为Streamable Http 协议的MCP Server。 今天我们主要使用Router模式。
Router模式简介
- search_mcp_server
- 根据任务描述及关键字,从MCP注册中心(即我们刚刚配置的Nacos)中搜索相关的MCP Server列表。
- 输入:
task_description(string):任务描述,例如:今天深圳的天气如何key_words(string):任务关键字,例如:深圳、天气
- 输出:list of MCP servers and instructions to complete the task(MCP服务器的列表以及完成任务的说明)
add_mcp_server- 添加并初始化一个MCP Server,依据Nacos中的配置与该MCP Server建立连接,等待调用。
- 输入:
mcp_server_name(string):需要添加的MCP Server名字
- 输出:MCP Server工具列表及使用方法
use_tool- 代理其他MCP Server的工具
- 输入:
mcp_server_name(string):被调的目标MCP Server名称.mcp_tool_name(string):被调的目标MCP Server的工具名称params(map):被调的目标MCP Server的工具的参数
- 输出:被调的目标MCP Server的工具的输出结果
安装Nacos-MCP-Router
本文使用pip进行安装,安装命令如下:
pip install nacos-mcp-router
安装完成后,使用如下命令运行:
export NACOS_ADDR=127.0.0.1:8848
export NACOS_USERNAME=nacos
export NACOS_PASSWORD=$PASSWORD
python -m nacos-mcp-router
使用Cline、Cursor、Cluade等加载Nacos-MCP-Router
{
"mcpServers":
{
"nacos-mcp-router":
{
"command": "uvx",
"args":
[
"nacos-mcp-router@latest"
],
"env":
{
"NACOS_ADDR": "<Nacos服务端地址,格式为:IP:Port, 默认配置 8848端口>",
"NACOS_USERNAME": "<对应Nacos中的用户名>",
"NACOS_PASSWORD": "<用户名对应的密码>"
}
}
}
}
注意: NACOS_ADDR的端口号并非控制台页面的端口号,默认为8848,具体以自己部署时的端口号为准。
将上述配置到AI Agent中,会自行安装部署。以Cline为例,安装成功后,可看到对应的Tools工具列表:
若安装不成功,或者无法启动,可以检查一下环境。比如uvx命令是否安装过,若安装过但运行不起来,可以在”command”字段配置uvx安装的全路径,默认在 ~/.local/bin/uvx ,之后重试即可。
运行结果展示
我们上面加载了高德地图的MCP,现在来测试一下能否正常运行。我们与Cline进行对话:
明天我想去新疆游玩,结合天气做一下规划
效果图展示: