ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于Spring AI 搭建MCP服务,保姆级教程来了!TaoToken统一Key接入配置指南

基于Spring AI 搭建MCP服务,保姆级教程来了!TaoToken统一Key接入配置指南 1. 为什么要自己搭一个 MCP 服务如果你最近在折腾 AI 工具链大概率听过 MCPModel Context Protocol。简单说它是一套让大模型能调用外部能力的协议模型本身只会聊天但通过 MCP它可以去查数据库、读文件、调接口、跑脚本。Spring AI 从 1.0.0-M6 开始正式支持 MCP 的服务端和客户端对 Java 开发者来说这意味着不用切语言、不用另起 Node 环境直接在 Spring Boot 项目里就能把自己的业务方法暴露成 AI 可调用的工具。这篇要解决的问题很具体用 Spring AI Spring Boot 搭一个 MCP 服务端再搭一个 MCP 客户端去调用它同时把大模型的 Key 统一走 TaoToken 的 API 通道。适合谁手上有一堆 AI 工具、每个都要单独配 Key、想收口成一套统一入口的开发者或者想把自己公司的内部接口包装成 MCP 工具给 AI 用的后端同学。我会给你可直接复制的application.yml、settings.json骨架以及服务端启动、客户端调用的完整验证动作。踩过的坑主要集中在依赖版本、SSE 端点路径、toolcallback 开关这三处后面会逐个拆。2. TaoToken 前置准备统一 Key 与 API 通道在写代码之前先把模型从哪来这件事定下来。MCP 客户端本身不产生智能它需要一个 ChatModel 来驱动工具调用决策。传统做法是每个项目配一份厂商 Key项目一多就散得到处都是。TaoToken 的思路是提供一个统一的 API 通道你用一把 Key 就能访问多种模型配置只改base-url和api-key两个值。你需要做的准备动作第一拿到统一 Key。访问控制台创建 API Key地址是https://taotoken.net/console创建后复制保存后面配置里会用到。第二确认 API 通道地址。TaoToken 的 API 入口是https://taotoken.net/api注意这个地址在配置里不要带任何查询参数直接作为 base-url 使用。第三选一个支持工具调用function calling / tool call的模型。MCP 的客户端必须依赖模型的工具调用能力纯对话模型是跑不通的。在模型对话页面可以先试一下目标模型是否正常响应地址https://taotoken.net/models。第四如果你打算长期做编码类 Agent 或者多轮工具编排可以了解下 Coding Plan它更适合高频调用场景地址https://taotoken.net/coding-plan。注意TaoToken 在这里扮演的是统一 API 通道的角色你把它当成一个兼容 OpenAI 协议的服务端点来配置即可不需要改动 Spring AI 的调用代码结构。3. 可复制配置服务端与客户端骨架这一节是全文的核心配置能跑通后面就顺了。我按服务端和客户端两个工程来组织你可以放在同一个父工程的两个 module 里。3.1 服务端 pom 依赖服务端只负责暴露工具不需要大模型依赖。传输方式我选 WebMVC 的 SSE因为调试直观、浏览器能直接看。dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version1.0.0-M7/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-server-webmvc/artifactId /dependency /dependencies3.2 服务端 application.ymlserver: port: 8080 spring: ai: mcp: server: name: demo-mcp-server version: 1.0.0 sse-message-endpoint: /mcp/message这里sse-message-endpoint是客户端要对接的路径服务端启动后 SSE 连接地址是/sse消息回传地址是/mcp/message。很多人第一次配错就是把这两个搞混客户端连/mcp/message是连不上的。3.3 暴露一个 MCP 工具用Tool注解把普通 Java 方法变成 AI 可调用的工具description写清楚模型靠它判断该不该调。Service public class OrderService { Tool(description 根据订单号查询订单状态输入为订单号字符串) public String queryOrderStatus(String orderNo) { if (orderNo null || orderNo.isBlank()) { return 订单号不能为空; } return 订单 orderNo 当前状态已发货预计 2 天内送达; } }3.4 注册工具回调Configuration public class ToolConfig { Bean public ToolCallbackProvider orderTools(OrderService orderService) { return MethodToolCallbackProvider.builder() .toolObjects(orderService) .build(); } }启动服务端日志里出现注册工具数量为 1 的提示就说明工具已经挂上去了。3.5 客户端 pom 依赖客户端需要大模型驱动所以除了 MCP client 依赖还要引入模型 starter。这里用 OpenAI 兼容方式对接 TaoToken。dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-client/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-openai/artifactId /dependency3.6 客户端 application.ymlTaoToken 接入server: port: 8081 spring: ai: openai: base-url: https://taotoken.net/api api-key: ${TAOTOKEN_API_KEY} chat: options: model: gpt-4o-mini temperature: 0.7 mcp: client: name: demo-mcp-client toolcallback: enabled: true sse: connections: order-server: url: http://localhost:8080三个关键点base-url指向 TaoToken 的 API 通道api-key用环境变量注入别硬编码进仓库toolcallback.enabled必须为true否则启动直接报错这是最常见的坑。3.7 客户端调用入口RestController public class ChatController { private final ChatClient chatClient; public ChatController(OpenAiChatModel chatModel, ToolCallbackProvider toolCallbackProvider) { this.chatClient ChatClient.builder(chatModel) .defaultTools(toolCallbackProvider.getToolCallbacks()) .build(); } GetMapping(/chat) public String chat(RequestParam(defaultValue 帮我查一下订单 A10086 的状态) String message) { return chatClient.prompt(message).call().content(); } }4. 验证请求与成功结果配置写完跑一遍完整链路。先启动服务端再启动客户端然后发请求。curl http://localhost:8081/chat?message帮我查一下订单A10086的状态预期返回类似订单 A10086 当前状态已发货预计 2 天内送达如果返回里带上了订单状态说明整条链路通了客户端把用户问题交给 TaoToken 通道上的模型模型判断需要调用工具通过 SSE 连到服务端执行queryOrderStatus结果回传后再由模型组织成自然语言。再验证一下工具是否真的被调用而不是模型瞎编。把 message 换成今天天气怎么样如果模型没有对应工具它应该直接回答无法查询而不是编一个订单状态出来。这一步能帮你确认工具调用是真实发生的。服务端日志里会打印工具调用记录客户端日志里能看到 SSE 连接建立的信息。两边日志对得上才算真正跑通。5. 本篇常见错误排查启动报错 toolcallback is disabled客户端spring.ai.mcp.client.toolcallback.enabled没设成true。这个开关默认关闭不打开客户端不会加载任何工具。客户端连不上服务端检查客户端sse.connections.xxx.url是否只写到http://localhost:8080不要带/sse或/mcp/message。Spring AI 会自动拼接路径你手动加了反而错。模型不调用工具直接瞎答多半是模型不支持工具调用或者Tool的description写得太模糊。换成支持 function calling 的模型并把 description 写具体比如输入订单号返回物流状态。401 / 鉴权失败检查api-key是否正确注入base-url是否为https://taotoken.net/api。注意 base-url 末尾不要多加/v1Spring AI 的 OpenAI starter 会自己拼。端口冲突服务端 8080、客户端 8081如果本机被占用改server.port即可但客户端配置里的服务端 url 要同步改。依赖版本不一致服务端和客户端的spring-ai-bom版本必须一致混用 M6 和 M7 会出现类找不到的问题。6. 下一步把 Key 收口把工具铺开服务端和客户端跑通之后你会发现真正省事的地方在于所有模型调用都走同一把 TaoToken Key新增一个 MCP 工具只需要加一个Tool方法不用再动模型配置。如果你要接入更多模型做对比测试直接在模型对话页面切换验证即可如果要做长期运行的编码 AgentCoding Plan 会更合适需要管理多把 Key 或查看调用情况去控制台接入细节和参数说明看接入文档。把配置骨架存下来下次新建 MCP 工程直接复制能省掉大半调试时间。
返回列表