来源:互联网 更新时间:2026-06-14 07:36
正式开始之前,先把环境搭好——这步虽然基础,但少踩一个坑后面就顺一大截。确保你的机器上已经装了 Ja va 17+、Node.js(用于 npx 调用)、Python 和 uvx(部分 MCP 服务器需要),IDE 推荐用 IntelliJ IDEA 或 VS Code,Cursor 用户可以直接跳到第三节。
MCP(模型上下文协议)是个开源标准,专门用来把 AI 应用跟外部系统连起来。你可以把它想象成 AI 应用的 USB-C 接口——USB-C 统一了电子设备的连接方式,MCP 则统一了 AI 调用外部工具、资源和提示词的方式。
说人话:就是把 AI 需要的 ToolCalling(工具)、资源、提示词按 MCP 协议封装好,对外暴露统一的接口,大模型那边也按这个协议随时调。不夸张地说,这就像是给 AI 配了个万能遥控器,一个协议管所有。
MCP 采用经典的客户端-服务端架构。MCP 宿主(比如 Claude Code、Claude Desktop 这类 AI 应用)会跟一个或多个 MCP 服务端建立连接。具体做法是:宿主为每个服务端创建一个 MCP 客户端,每个客户端跟自己的服务端保持一条专用的“通道”。

Ja va SDK 里,客户端和服务器之间主要走这三种传输方式:
前提条件:环境已经配好。第三方 MCP 大多依赖 npx 或 uvx 命令行工具来调用,所以 Node.js 和 Python 的安装不能跳过。
这里推荐几个好用的 MCP 社区,方便大家找现成的服务:
在 Cursor 中配置 MCP 服务器,只需在项目根目录下创建或编辑 .cursor/mcp.json(或直接在设置里配),参考下面示例:
{"mcpServers": {"Playwright": {"command": "npx -y @playwright/mcp@latest","env": {},"args": []},"fetch": {"command": "uvx","args": ["mcp-server-fetch"]}}}
模型这边用的是 DashScopeModel(阿里百炼平台集成的),通过 Web 服务来调用模型。依赖清单如下:
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework
spring-webflux
com.alibaba.cloud.ai
spring-ai-alibaba-starter-dashscope
org.springframework.ai
spring-ai-starter-mcp-client
com.alibaba.cloud.ai
spring-ai-alibaba-bom
1.0.0.2
pom
import
spring:
ai:
dashscope:
api-key: ${DASHSCOPE_API_KEY}
mcp:
client:
stdio:
servers-configuration: classpath:/mcp/mcp-servers.json
# 将所有mcp服务配置到本地的一个JSON文件中,更方便简洁
logging:
pattern:
console: '%d{HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
file: '%d{HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
level:
io.modelcontextprotocol.client: DEBUG
spec: DEBUG
把这个文件放在 resources/mcp/ 目录下:
{"mcpServers": {"playwright": {"command": "npx.cmd","args": ["@playwright/mcp@latest"]},"fetch": {"command": "uvx","args": ["mcp-server-fetch"]}}}
写一个简单的 REST 控制器,把 MCP 工具注入到 ChatClient 里:
package com.ran.mcp.controller;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/chat")
public class ChatController {
private ChatClient chatClient;
// ToolCallbackProvider 把所有工具获取到
public ChatController(DashScopeChatModel chatModel,
ToolCallbackProvider toolCallbackProvider) {
this.chatClient = ChatClient.builder(chatModel)
.defaultToolCallbacks(toolCallbackProvider)
.build();
}
@RequestMapping("/generate")
public String generate(String msg) {
return chatClient.prompt()
.user(msg)
.call()
.content();
}
}
跑起来之后,访问 http://localhost:8080/chat/generate?msg=帮我搜索一下最新的AI新闻,大模型会自动调用配置好的 MCP 工具(比如 fetch)来获取实时数据并返回结果。效果图这里省略,实际运行时可以看到流畅的对话流。
stdio 和 sse 方式的 MCP 服务器定义非常相似,差别主要在依赖和配置上。下面这张图标出了各个关键参数的含义:

org.springframework.ai
spring-ai-starter-mcp-server
org.projectlombok
lombok
org.springframework.boot
spring-boot-ma ven-plugin
对于 stdio 服务器,不需要 Web 容器,所以关掉嵌入式 Tomcat:
spring:
ai:
mcp:
server:
name: user-info
version: 0.0.1
main:
web-application-type: none
banner:
mode: off
写一个 Service,用 @Tool 注解暴露方法:
package com.ran.mcp.server;
import com.ran.mcp.entity.UserInfo;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;
import ja va.util.HashMap;
import ja va.util.Map;
@Service
public class UserService {
static Map userInfoMap = new HashMap<>();
static {
userInfoMap.put("zhangsan", new UserInfo("zhangsan", 12, "男"));
userInfoMap.put("wangwu", new UserInfo("wangwu", 18, "女"));
userInfoMap.put("lisi", new UserInfo("lisi", 17, "男"));
}
@Tool(description = "根据用户姓名, 返回用户详细信息")
public String getUserInfo(@ToolParam(description = "用户的姓名") String name) {
if (userInfoMap.containsKey(name)) {
return userInfoMap.get(name).toString();
}
return "用户不存在";
}
}
@Configuration
public class ToolConfig {
@Bean
public ToolCallbackProvider getUserInfo(UserService userService) {
return MethodToolCallbackProvider.builder()
.toolObjects(userService)
.build();
}
}
执行 mvn clean package,得到 mcp-stdio-server-demo-1.0-SNAPSHOT.jar。之后通过 ja va -jar 在本地启动。
在客户端(Spring AI 应用)的 mcp-servers.json 里添加 stdio 配置,指向本地 jar 包:
"user-info": {
"command": "ja va",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-Dlogging.pattern.console=",
"-jar",
"D:/study/code/2025-ja va/Spring-AI-2/mcp-stdio-server-demo/target/mcp-stdio-server-demo-1.0-SNAPSHOT.jar"
]
}
切换为 SSE 传输时,需要引入 WebMVC 或 WebFlux 依赖:
org.springframework.ai
spring-ai-starter-mcp-server-webmvc
org.projectlombok
lombok
server:
port: 8088
spring:
ai:
mcp:
server:
name: user-info
version: 0.0.1
启动后,访问 http://127.0.0.1:8088/sse 看看是否返回事件流。如果返回正常,说明 SSE 服务已经就绪。
在客户端的 application.yml 中配置 SSE 连接:
spring:
ai:
dashscope:
api-key: ${DASHSCOPE_API_KEY}
mcp:
client:
sse:
connections:
user-info:
url: "http://127.0.0.1:8088/sse" 《Off Campus》第二季官宣:这对CP还在,但不再是主角
和平精英如何做到压枪稳-和平精英怎样才能压枪稳
客单价碾压宝马奥迪!极氪5月交付新车34377辆:连续4个月双增长
免费影视剧APP推荐
HBO 奇幻剧《龙之家族》第三季定档 6 月 22 日,最终预告片曝光喉道海战
儿子穿新中式现身大会堂 马斯克罕见用中文回应:他正在学习普通话
DOTA2 TI时隔七年重返上海!门票6月10日开抢,国服享受优先购买!
抖音最火沙雕男生网名(精选100个)
帅气继父网名女生可爱英文(精选100个)
网络热词聊污是什么意思
蒙古上单是什么梗
金铲铲之战s17六暗星卡莎阵容玩法构筑指南
韦一敏是什么梗
SpaceX狂揽AI人才,马斯克亲自面试且不看简历背景
免费看片软件下载地址推荐
免费看电影的软件推荐
阿里发布Qwen3.7-Max大模型,全球第五、国产第一
有寓意的易经网名男生(精选100个)
三角洲行动卡战备怎么弄 三角洲行动卡战备攻略
晨字沙雕网名大全女生(精选100个)
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc