ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

SpringAI之MCP 服务端:用 TaoToken 统一 Key 打通配置与联调

SpringAI之MCP 服务端:用 TaoToken 统一 Key 打通配置与联调 1. 从零搭 SpringAI MCP 服务端为什么先要解决 Key 与通道问题SpringAI 的 MCP 服务端Model Context Protocol Server本质上是把本地或内网的 Java 方法暴露成可被 AI 客户端调用的工具stdio、SSE、Streamable HTTP 三种传输方式各有适用场景。很多同学在本地把Tool注解写好了mvn package也过了结果一联调就卡在模型侧要么客户端连不上模型要么 Key 分散在多个配置文件里改一次要动三四个地方。这篇就聚焦「SpringAI MCP 服务端从零搭建到可联调」这条链路面向本地开发与内网部署把application.yml、config.toml骨架和 TaoToken 统一 Key/API 通道的接入方式一次讲清楚最后用 curl 验证 MCP 服务端响应并给出 CC Switch 切换配置的可复制动作。适合谁看已经在写 Spring Boot、想把自己的 Java 工具方法接进 AI 客户端Cherry Studio、Claude Code 等的开发者内网部署、需要统一管理模型 Key 的团队以及被「服务端注册成功但调用不通」折磨过的同学。我试过把 Key 硬编码在application.yml里换环境时漏改一处就报 401后来统一走 TaoToken 的 API 通道才省心。TaoToken 在这里的角色是「统一 Key 统一 API 通道」MCP 服务端本身不直接持有各家模型厂商的 Key而是通过一个兼容 OpenAI 协议的入口去请求模型Key 只在 TaoToken 侧配置一次。这样 stdio、SSE、Streamable HTTP 三种服务端可以共用同一套凭证内网部署时也只需要放行一个出口地址。2. TaoToken 前置统一 Key 与 API 通道准备在动手写 MCP 服务端之前先把模型侧的通道打通否则后面联调会分不清是工具没注册上还是模型请求失败。第一步打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册并登录。第二步进入控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 创建 API Key。第三步在 API Keys 页面 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 复制你的 Key形如sk-开头的一串字符。API 基础地址统一用 https://taotoken.net/api 注意这个地址不带任何查询参数直接作为base_url使用。如果你用的是 OpenAI 兼容的 SDK 或客户端把base_url指向它、api_key填上刚复制的 Key 即可。注意Key 只保存在服务端环境变量或配置中心不要提交到 Git 仓库。内网部署时把https://taotoken.net/api加入出口白名单。对于需要长期跑编码任务或 Agent 的场景可以了解 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 它更适合持续性的代码生成与工具调用如果只是想先验证模型对话是否通用模型对话入口 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 快速试一条请求即可。接入细节可查文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。3. 可复制配置application.yml 与 config.toml 骨架这一节给出三种传输方式下都能用的配置骨架。先看 Spring Boot 侧的application.yml以 Streamable HTTP 为例SSE 只需改protocol和端点server: port: 8081 spring: ai: mcp: server: name: springai-mcp-server version: 1.0.0 protocol: streamable streamable-http: mcp-endpoint: /mcp # 统一模型通道指向 TaoToken openai: base-url: https://taotoken.net/api api-key: ${TAOTOKEN_API_KEY} chat: options: model: gpt-4o-mini如果是 SSE 模式把protocol改成sse并加一行sse-endpoint: /ssestdio 模式则不需要server.port因为进程通过标准输入输出通信。再看客户端侧的config.toml骨架以 Claude Code 风格为例[model] provider openai-compatible base_url https://taotoken.net/api api_key sk-你的TaoTokenKey model gpt-4o-mini [mcp_servers.springai-http] type streamable-http url http://127.0.0.1:8081/mcp [mcp_servers.springai-stdio] type stdio command java args [-Dfile.encodingUTF-8, -jar, target/springai-mcp-server-0.0.1-SNAPSHOT.jar]关键点base_url和api_key只写一次所有 MCP 服务端共享mcp_servers下每个条目对应一个服务端stdio 用commandargsHTTP 类用url。这样切换环境时只改base_url一处。依赖方面Spring Boot 项目引入dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-server-webmvc/artifactId version1.1.2/version /dependency工具类用Tool注解暴露方法注册时通过MethodToolCallbackProvider绑定Bean public ToolCallbackProvider tools(MyToolService service) { return MethodToolCallbackProvider.builder().toolObjects(service).build(); }4. 验证请求curl 打通 MCP 服务端与模型通道服务端启动后先用 curl 确认 MCP 端点活着。Streamable HTTP 模式下curl -i -X POST http://127.0.0.1:8081/mcp \ -H Content-Type: application/json \ -H Accept: application/json, text/event-stream \ -d {jsonrpc:2.0,id:1,method:tools/list,params:{}}预期返回里能看到你注册的工具名列表比如getAdCode、getWeather。如果返回 404检查mcp-endpoint是否写成了/mcp如果返回 406多半是Accept头没带text/event-stream。接着验证模型通道是否通直接请求 TaoToken 的 APIcurl https://taotoken.net/api/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:gpt-4o-mini,messages:[{role:user,content:ping}]}返回里有choices字段就说明 Key 和通道都正常。最后做一次端到端调用让客户端通过 MCP 触发工具curl -X POST http://127.0.0.1:8081/mcp \ -H Content-Type: application/json \ -H Accept: application/json, text/event-stream \ -d {jsonrpc:2.0,id:2,method:tools/call,params:{name:getWeather,arguments:{adCode:110101}}}成功时result.content[0].text里会带上天气信息。这一步跑通说明「服务端注册 模型通道 工具调用」整条链路没问题。CC Switch 切换配置的动作也很直接把上面config.toml里的base_url从测试环境改成https://taotoken.net/apiapi_key换成正式 Key重启客户端即可。因为 Key 只有一处切换成本极低。5. 本篇常见错排查报错一Connection refused或Failed to connect to /127.0.0.1:8081。服务端没起来或者端口被占用。先lsof -i:8081看占用再确认server.port和客户端url一致。stdio 模式下没有端口报这个错通常是command路径写错。报错二401 Unauthorized。Key 没传对。检查TAOTOKEN_API_KEY环境变量是否在当前 shell 生效echo $TAOTOKEN_API_KEY看一眼config.toml里api_key是否带了多余空格。报错三tools/list返回空数组。工具没注册上。确认Tool注解的方法所在类被 Spring 扫描到且ToolCallbackProviderBean 已声明。方法参数上的ToolParam描述别漏否则部分客户端会忽略该工具。报错四406 Not Acceptable。请求头缺Accept: text/event-stream。Streamable HTTP 和 SSE 都要求客户端声明接受事件流。报错五模型返回model not found。model字段写错或者该模型在当前 Key 下不可用。换成gpt-4o-mini这类通用模型先验证通道再换目标模型。报错六内网部署时请求超时。出口没放行https://taotoken.net/api。让网络同学把该域名加入白名单注意是 HTTPS 443 端口。6. 下一步把统一 Key 用到长期编码与 Agent 场景服务端跑通只是起点。如果你打算把 MCP 服务端接到长期运行的编码助手或 Agent 里建议把 Key 管理收敛到 TaoToken 的 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 它针对持续性工具调用做了通道优化。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite API Keys 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。Claude Code 相关配置可参考 https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-codeutm_campaignrewrite 。一个实用技巧把base_url和api_key抽成环境变量application.yml里用${TAOTOKEN_API_KEY}引用config.toml里用env段注入。这样本地、测试、内网三套环境共用一份配置文件只换环境变量MCP 服务端本身不用重新打包。
返回列表