1. Nacos 3.0 升级前你必须搞清楚的三件事
Nacos 3.0 正式发布这件事,对正在跑微服务的人来说不是“又多了一个版本号”,而是一次架构定位的转向。Nacos 从 2018 年开源到现在,一直是 Dynamic Naming and Configuration Service 的定位,也就是注册中心和配置中心。3.0 把这句话往前推了一步:它开始把自己当成 AI 原生应用的动态服务治理平台,核心抓手就是 MCP Registry、安全零信任和生态链接这三块。
先说 MCP Registry 是什么。MCP 是 Model Context Protocol,你可以把它理解成大模型和外部工具之间的“插头标准”。以前你写一个 Agent,要调用高德地图、数据库、内部 API,得一个个在 Agent 里配 MCP Server 地址、密钥、工具列表。Nacos 3.0 做的事,是把这些 MCP Server 统一注册到 Nacos 里,Agent 只连一个 Nacos-MCP-Router,就能按需发现、安装、代理这些 MCP 服务。适合谁?适合正在做 AI Agent、工具链编排、又已经在用 Nacos 做微服务治理的团队。
再说安全零信任。Nacos 3.0 默认开启鉴权,控制台和引擎拆成独立 Web 容器,端口可以分开暴露。以前 2.x 为了方便,控制台和引擎共用一个端口,内网里谁都能点进去改配置。3.0 把这个口子收紧了,启动前必须配 NACOS_AUTH_TOKEN 和 NACOS_AUTH_IDENTITY_VALUE,否则起不来。
第三是生态链接。K8s 的 Service、ConfigMap、Secret 可以通过 Nacos Controller 2.0 双向同步;多语言 SDK 里 Go、Python、Rust 都在补;Nacos 自己还出了一个 Nacos MCP Server,让大模型能直接查 Nacos 里的服务和配置。
我试过在本地用 Docker 拉 3.0 镜像,第一感受就是“不配密钥真的起不来”,这跟 2.x 的体验差别很大。下面按升级评估的顺序,把配置、验证、排障一步步拆开。
2. TaoToken 前置:给 MCP 调试准备一个模型入口
Nacos 3.0 的 MCP Registry 本身不负责跑大模型,它管的是 MCP 服务的注册、发现和元数据。但你要验证 MCP 工具能不能被 Agent 正确调用,就得有一个能发请求的模型入口。这里我用 TaoToken 来做模型对话和 Coding Plan 的调试入口,原因是它同时提供 OpenAI 兼容的 API 和 Claude Code 接入方式,配 MCP 的时候不用来回换工具。
TaoToken 的官网是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 地址后面不加 UTM 参数。模型对话入口在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=model_chat ,Coding Plan 在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan ,控制台在 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console ,API Keys 在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc 。
为什么要在 Nacos 3.0 的教程里提这个?因为 MCP Registry 的验证动作,本质是“Agent 通过 Router 找到 MCP Server,再调用工具返回结果”。这个链路里,Agent 背后必须有一个能理解工具描述、决定调哪个工具的模型。你可以在 Cline、Cursor 里配 Nacos-MCP-Router,同时把模型 Base URL 指向 TaoToken 的 API,这样 MCP 的发现和模型推理就在同一个调试环境里完成。
具体来说,TaoToken 提供三件套:Base URL 填 https://taotoken.net/api ,API Key 在 API Keys 页面生成,Model ID 在模型对话页面能看到当前可用的模型列表。这三样在 Cline 的 MCP 配置和模型配置里都要用到。如果你用的是 Claude Code,接入文档里有对应的环境变量写法,把 ANTHROPIC_BASE_URL 指向 TaoToken 的 ClaudeCodeAnthropic 入口即可。
需要提醒的是,TaoToken 在这里的角色是模型调用入口,不是 Nacos 的替代品。Nacos 管服务注册发现和配置,TaoToken 管模型推理,两者通过 MCP 协议串起来。你不需要把 Nacos 的密钥配到 TaoToken 里,也不需要把 TaoToken 的 Key 写进 Nacos 的 MCP 元数据,各管各的。
3. 可复制配置:Nacos 3.0 Docker 启动与 MCP 注册
这一节给可直接复制的配置片段。先启动 Nacos 3.0,再注册一个 MCP Server,最后配 Nacos-MCP-Router。
3.1 Docker 启动 Nacos 3.0
Nacos 3.0 默认开启鉴权,启动前必须设置两个环境变量。NACOS_AUTH_TOKEN 是生成 JWT Token 的密钥,要求原串 32 位以上再做 Base64 编码;NACOS_AUTH_IDENTITY_VALUE 是服务端之间 Inner API 的身份标识值,任意英文数字组合即可。
export NACOS_AUTH_TOKEN=$(echo -n "YourSecretKeyMustBeLongerThan32Chars" | base64) export NACOS_AUTH_IDENTITY_VALUE="nacosIdentity2024" 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 8080:8080 \ -p 8848:8848 \ -p 9848:9848 \ nacos/nacos-server启动后访问 http://localhost:8080 ,第一次进控制台会要求设置管理员密码。注意 3.0 的控制台端口是 8080,引擎端口还是 8848,9848 是 gRPC 端口。如果你从 2.x 升上来,防火墙规则要加上 8080。
3.2 Spring AI 构建 MCP Server 自动注册
如果你用 Spring AI 写 MCP Server,把官方 starter 换成 Spring AI Alibaba 的 Nacos 版本,不用改代码就能自动注册到 Nacos。
<!-- 将 Spring AI 官方 Mcp Server Starter 替换成 Spring AI Alibaba Mcp Nacos --> <dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-mcp-nacos</artifactId> <version>1.0.0-M6.2-mcp-SNAPSHOT</version> </dependency> <!-- WebMvc SSE,和 WebFlux 模式二选一 --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId> <version>1.0.0-M6</version> </dependency>application.yml 里加上 Nacos 连接信息:
spring: ai: mcp: server: name: Demo version: 1.0.0 type: SYNC alibaba: mcp: nacos: enabled: true server-addr: 127.0.0.1:8848 username: nacos password: 你设置的管理员密码启动后 MCP Server 会自动注册到 Nacos,在控制台的 MCP 管理页能看到,改描述和工具列表实时生效。
3.3 Python 构建 MCP Server 自动注册
Python 侧装 nacos-mcp-wrapper-python,把官方的 Server 类换成 NacosMCP:
# server.py from nacos_mcp_wrapper.server.nacos_mcp import NacosMCP from nacos_mcp_wrapper.server.nacos_settings import NacosSettings nacos_settings = NacosSettings() nacos_settings.SERVER_ADDR = "127.0.0.1:8848" mcp = NacosMCP("Demo", nacos_settings=nacos_settings) @mcp.tool() def get_weather(city_name: str) -> str: """Get weather information by city name""" return "Sunny" mcp.run()pip install nacos-mcp-wrapper-python python server.py3.4 Nacos-MCP-Router 配置到 Cline
Nacos-MCP-Router 是标准 MCP Server,配到 Cline 或 Cursor 的 mcpServers 里。环境要求 Python 3.12+ 和 uv。
{ "mcpServers": { "nacos-mcp-router": { "command": "uvx", "args": [ "nacos-mcp-router@latest" ], "env": { "NACOS_ADDR": "127.0.0.1:8848", "NACOS_USERNAME": "nacos", "NACOS_PASSWORD": "你设置的管理员密码" } } } }这里的三件套是:Base URL 指向 Nacos 地址,Key 是 Nacos 用户名密码,Model ID 在 Cline 的模型配置里指向 TaoToken 的模型。Cline 的模型配置里 Base URL 填 https://taotoken.net/api ,API Key 填 TaoToken 生成的 Key,Model ID 填你在模型对话页看到的模型名。
4. 验证请求:MCP 发现与调用链路跑通
配置写完,得验证链路真的通。分三步:Nacos 控制台确认 MCP 注册成功,Router 能搜到 MCP Server,Agent 能调用工具返回结果。
第一步,打开 Nacos 控制台 http://localhost:8080 ,进 MCP 管理页,应该能看到刚才注册的 Demo 服务。点进去看 Tools 列表,get_weather 应该在列。如果看不到,说明 MCP Server 没注册成功,回去检查 server-addr 和用户名密码。
第二步,在 Cline 里看 Nacos-MCP-Router 的 Tools 列表。安装成功后,Cline 会显示 Router 暴露的工具,通常包括 search_mcp_server、add_mcp_server 这类。如果 Tools 列表是空的,说明 Router 没连上 Nacos,检查 NACOS_ADDR 格式是不是 IP:Port。
第三步,发一个自然语言请求,比如“帮我查一下北京天气”。Agent 会先调 Router 的搜索工具,Router 返回可用的 MCP Server 列表,Agent 选中 get_weather 对应的 Server,Router 自动安装或代理,最后返回结果。整个过程 Agent 只配了 Router 一个 MCP Server,其他都是动态发现的。
验证成功的标志是:Cline 的对话里能看到工具调用记录,先 search,再 add,再 call,最后返回“Sunny”。如果卡在某一步,看 Cline 的 MCP 日志,通常能看到具体报错。
这里有个细节:Nacos-MCP-Router 的搜索是基于向量数据库做语义匹配的,所以你的 MCP 描述写得越清楚,匹配越准。如果搜不到,先检查 MCP 服务的描述字段是不是太模糊。
5. 本篇常见错排查:401、local proxy failed、reading choices
升级 Nacos 3.0 和配 MCP 的过程中,几个报错出现频率最高,逐个说。
401 Unauthorized。Nacos 3.0 默认开鉴权,如果你用 2.x 的客户端连 3.0,或者 Docker 启动时没传 NACOS_AUTH_TOKEN,就会 401。检查两点:Docker 环境变量是不是都传了,客户端的 username/password 是不是控制台设置的那个。另外 NACOS_AUTH_TOKEN 必须是 Base64 编码后的字符串,直接传原文会报错。
local proxy failed。这个通常出现在 Cline 配 Nacos-MCP-Router 的时候。原因是 uvx 命令找不到,或者 Python 版本低于 3.12。先在终端跑uvx --version确认 uv 装了,再跑python --version确认版本。如果 uvx 装了但 Cline 里起不来,把 command 字段改成 uvx 的全路径,默认在~/.local/bin/uvx。
reading choices 报错。这个多出现在模型调用侧,Agent 发请求给模型,返回体里没有 choices 字段。检查 TaoToken 的 Base URL 是不是 https://taotoken.net/api ,注意结尾不要多加斜杠,也不要写成 https://taotoken.net/api/v1 这种。Model ID 要跟模型对话页列出的完全一致,大小写敏感。
OAuth 相关报错。如果你用 Claude Code 接入,报 OAuth 失败,检查 ANTHROPIC_BASE_URL 是不是指向 TaoToken 的 ClaudeCodeAnthropic 入口,API Key 是不是在 API Keys 页面生成的。Claude Code 的配置在接入文档里有完整示例,照着改环境变量就行。
MCP Server 注册后控制台看不到。先确认 Nacos 控制台的命名空间对不对,MCP 注册默认在 public 命名空间。再看 MCP Server 日志有没有报连接超时。如果 Nacos 跑在 Docker 里,MCP Server 跑在宿主机,server-addr 不能写 localhost,要写宿主机的局域网 IP。
Router 搜不到已注册的 MCP Server。检查 MCP 服务的描述字段,语义搜索依赖描述文本。另外确认 Router 的 NACOS_ADDR 和 MCP Server 注册的 Nacos 是同一个实例。如果 Nacos 开了鉴权,Router 的 NACOS_USERNAME 和 NACOS_PASSWORD 必须填。
6. 升级评估与后续动作
Nacos 3.0 的升级路径,我的建议是分两步走。第一步,先在测试环境用 Docker 起一个 3.0 实例,把现有的配置和服务数据导进去,验证客户端兼容性。2.x 的客户端连 3.0 引擎基本兼容,但控制台端口从 8848 变成 8080,运维脚本要改。第二步,如果你要做 AI Agent 相关的东西,再开 MCP Registry 的功能,把存量 API 通过 Higress 转成 MCP Server,或者用 Spring AI、Python SDK 注册新的 MCP Server。
安全零信任这块,3.0 默认开鉴权是好事,但升级前要确认你的客户端都支持传用户名密码。如果有些老客户端不支持,要么升级客户端,要么在 Nacos 侧做兼容配置。控制台和引擎拆端口之后,ACL 可以只把 8080 开给办公网,8848 留给内网服务,这个改动对安全提升很明显。
生态链接方面,K8s 的 Service、ConfigMap、Secret 同步用 Nacos Controller 2.0,多语言 SDK 按你的技术栈选。Nacos MCP Server 目前是 0.1.1 版本,支持服务、配置的查询和检索,写入功能还没开,适合做运维辅助,不适合生产写入。
后续动作上,如果你要长期做 AI Agent 和 MCP 编排,可以看 TaoToken 的 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan ,把模型调用和 MCP 调试放在一个环境里。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc ,API Keys 在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys 。先把 Nacos 3.0 跑起来,再把 Router 配上,最后用模型对话验证工具调用,这条链路走通一次,后面加 MCP Server 就是重复动作了。