☰
Spring AI MCP服务开发实战:Cursor MCP客户端配置测试与TaoToken统一Key接入
2026/9/26 15:05:59 网站建设 项目流程

1. 从一次库存查询说起:Spring AI MCP 服务端到 Cursor 客户端的完整链路

如果你正在用 Spring AI 写 MCP 服务端,却卡在「Cursor 里怎么配、怎么调、怎么确认工具真的被调用」这一步,这篇就是为你准备的。MCP(Model Context Protocol)本质上是给大模型装了一套「标准插座」:服务端把本地能力(查数据库、读文件、调内部接口)封装成一个个 Tool,客户端(比如 Cursor)通过统一协议去发现并调用这些 Tool。Spring AI 从 1.0 开始提供了spring-ai-starter-mcp-server,让你用几个注解就能把 Java 方法暴露成 MCP 工具;而 Cursor 作为 MCP 客户端,负责在对话里触发这些工具。

我这次要跑通的场景很具体:用户给一个物料编码,服务端返回该物料的库存数量(测试阶段用随机值模拟)。服务端用 Spring AI 的 SSE 传输方式暴露在本地 8848 端口,Cursor 通过mcp.json注册这个 SSE 地址,然后在对话里输入「查询物料编码 A100 的库存」来验证整条链路。同时,为了让 Cursor 在调用模型时走统一的 Key 通道,我会把 TaoToken 的 API 参数一并接进来,避免在多个工具之间来回切换 Key。

适合谁看:已经会用 Spring Boot 写接口、想在 Cursor 里接自己 MCP 服务的 Java 开发者;或者你刚接触 MCP,想找一个能直接复制、能跑出结果的端到端示例。下面从环境准备开始,每一步都给可复制的配置和命令。

2. 前置准备:Spring AI 版本、TaoToken 统一 Key 与 Cursor 环境

先把版本对齐,MCP 相关的 starter 在 Spring AI 1.0.0-M6 之后才比较稳定,建议直接用 1.0.0 正式版或更新的 1.0.x。JDK 用 17 或 21 都行,我本地是 21。构建工具用 Maven,因为 Spring AI 的 BOM 管理起来最省事。

TaoToken 在这里的角色是「统一 Key 通道」:Cursor 在调用模型时需要一个兼容 OpenAI 协议的 base_url 和 api_key,TaoToken 提供的就是这个入口。你只需要在 TaoToken 控制台创建一个 API Key,后面在 Cursor 的模型配置里填上https://taotoken.net/api作为 base_url,再把 Key 填进去即可。这样 MCP 工具调用和模型推理走的是同一套凭证,不用为每个工具单独配 Key。

具体动作:

  • 打开 https://taotoken.net/api ,注册后在控制台创建 API Key,记下sk-开头的字符串。
  • 确认本地 8848 端口没有被占用(后面 SSE 服务端会监听这个端口)。
  • Cursor 更新到最新版,MCP 配置入口在 Settings → MCP 或直接编辑mcp.json。

注意:TaoToken 的 API 地址是https://taotoken.net/api,不要加多余的路径后缀,OpenAI 兼容客户端会自动拼接/v1/chat/completions。

3. 可复制配置:Spring AI MCP 服务端 + Cursor mcp.json 骨架

3.1 服务端依赖与 application.yml

在pom.xml里加入 Spring AI 的 BOM 和 MCP server starter:

<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>1.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>

application.yml里指定 SSE 传输和端口:

server: port: 8848 spring: ai: mcp: server: name: wesn-mcp-server version: 1.0.0 protocol: SSE sse-endpoint: /sse

这里protocol: SSE表示用 HTTP SSE 暴露工具,sse-endpoint就是 Cursor 要连的路径。服务端启动后,Cursor 访问http://127.0.0.1:8848/sse就能拿到工具列表。

3.2 工具类:用 @Tool 暴露库存查询

@Service public class WesnServer { @Tool(description = "通过给出的物料编码获取物料库存信息") public String getStock(@ToolParam(description = "物料编码") String productCode) { Random random = new Random(); int stock = random.nextInt(100); return "物料编码 " + productCode + " 的库存是 " + stock + " PCS"; } }

@Tool的 description 会直接展示给模型,写清楚「通过物料编码查库存」能让模型更准确地决定何时调用。@ToolParam描述参数含义,避免模型传错字段。

3.3 Cursor 的 mcp.json 配置骨架

Cursor 的 MCP 配置文件位置在官方文档里有说明,Windows 一般在%USERPROFILE%\.cursor\mcp.json,macOS 在~/.cursor/mcp.json。内容如下:

{ "mcpServers": { "wesn-stock": { "url": "http://127.0.0.1:8848/sse", "env": { "API_KEY": "sk-你的TaoTokenKey" } } } }

wesn-stock是你在 Cursor 里看到的服务名,url指向本地 SSE 端点。env里的API_KEY是给服务端工具用的环境变量(如果你的工具需要读外部 API),这里填 TaoToken 的 Key 是为了后续工具内部调用模型时复用同一凭证。

3.4 Cursor 模型侧接入 TaoToken

在 Cursor 的 Settings → Models 里,把 OpenAI API Key 填成 TaoToken 的 Key,Base URL 填https://taotoken.net/api。这样 Cursor 在对话时走的是 TaoToken 通道,MCP 工具调用和模型推理共用一套 Key,省去多套凭证切换的麻烦。

4. 验证请求:从 Cursor 对话到服务端日志的成功结果

配置保存后,重启 Cursor(MCP 配置变更需要重启才生效)。然后在 Cursor 的 Chat 里输入:

查询物料编码 A100 的库存

正常情况下,Cursor 会先识别出这是一个需要调用 MCP 工具的问题,然后向http://127.0.0.1:8848/sse发起请求,拿到getStock工具的定义,接着调用它并传入A100。你会在 Cursor 的对话里看到类似「正在调用 wesn-stock 的 getStock」的提示,最终返回:

物料编码 A100 的库存是 42 PCS

服务端控制台会打印 SSE 连接建立和工具调用的日志。如果看到Tool call: getStock with args {productCode=A100},说明链路完全打通。

再验证一次模型通道:在 Cursor 里问一个不需要工具的问题,比如「用一句话解释什么是 MCP」,如果模型正常回复,说明 TaoToken 的 base_url 和 Key 配置正确。两个通道都通,才算真正跑通。

5. 本篇常见错排查:SSE 连不上、工具不触发、Key 报 401

现象一:Cursor 里看不到 MCP 服务,或提示连接失败。先确认服务端是否真的在 8848 端口监听:curl http://127.0.0.1:8848/sse应该返回一个持续的事件流(不会立刻结束)。如果返回 404,检查sse-endpoint是否配成了/sse,以及 starter 用的是webmvc而不是webflux(两者端点路径不同)。如果返回连接拒绝,说明服务没启动或端口被占。

现象二:服务连上了,但模型不调用工具。最常见的原因是@Tool的 description 太模糊。模型靠 description 判断「这个问题要不要用工具」,如果写成「获取信息」它可能不触发。改成「通过物料编码查询库存数量」这种带明确输入输出的描述,触发率会明显提升。另外确认 Cursor 的模型支持 function calling,部分小模型对工具调用支持不完整。

现象三:Cursor 报 401 或 invalid api key。这是模型通道的问题,不是 MCP 的问题。检查 Cursor 的 Base URL 是否严格写成https://taotoken.net/api,Key 是否以sk-开头且没有多余空格。如果 Key 是在 TaoToken 控制台刚创建的,确认没有复制到换行符。MCP 的env.API_KEY和 Cursor 模型 Key 是两回事,别混在一起排查。

现象四:工具被调用了,但参数是 null。检查@ToolParam的 description 是否写清楚了参数含义,以及 Java 方法参数名是否和模型传的字段对得上。Spring AI 默认用参数名做映射,如果编译时没保留参数名(-parameters编译选项),可能映射失败。在pom.xml的 compiler 插件里加上<parameters>true</parameters>即可。

现象五:SSE 连接频繁断开。本地开发时如果 Cursor 和服务端之间有网络波动,SSE 会重连。确认没有其他进程占用 8848,以及防火墙没有拦截本地回环。如果用的是公司网络,检查是否有代理拦截了127.0.0.1的请求。

6. 把 Key 和工具都收拢到一条通道

跑通之后你会发现,真正省事的地方在于「统一」:MCP 服务端负责把本地能力暴露成工具,Cursor 负责触发,TaoToken 负责模型推理的 Key 通道。三者各司其职,但凭证只有一套。后续你要加新工具,只需要在WesnServer里再加一个@Tool方法,重启服务端,Cursor 重新连接后就能看到新工具,不用改mcp.json。

如果你在排障阶段卡在接入或 Key 配置上,可以直接去 TaoToken 的 API Keys 页面重新生成一个 Key,对照接入文档检查 base_url 和 header 格式:https://taotoken.net/api-keys 和 https://taotoken.net/doc 。想先验证模型通道是否正常,用模型对话页面发一条消息最快:https://taotoken.net/chat 。如果你打算长期在 Cursor 里做编码和 Agent 任务,Coding Plan 的额度模型更适合高频调用:https://taotoken.net/coding-plan 。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询