9-MCP

模型上下文协议(Model Context Protocol,简称MCP)是一个由 Anthropic 在 2024 年 11 月 25 日开源的新标准。MCP 是一个开放标准,旨在连接AI助手与数据所在的系统,包括内容存储库、业务工具和开发环境。其目标是帮助前沿模型产生更好、更相关的响应。

MCP 遵循客户端-服务器架构,其中主机应用可以连接到多个服务器。

MCP 有三个关键组件:

  • 主机(Host):代表任何提供 AI 交互环境的应用程序(如 Claude 桌面版、Cursor),它能访问工具和数据,并运行 MCP 客户端。
  • 客户端(Client):在主机内运行,使其能与 MCP 服务器通信。
  • 服务器(Server):暴露特定功能并提供数据访问

1 服务器的创建

1.1 引入依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-serverwebflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

配置文件

1
2
3
4
5
6
7
8
spring:
ai:
mcp:
server:
name: autho-info-server
version: 1.0.0
server:
port: 9090

1.2 Tools的设计

所谓Tool设计,就是当前这个MCP Server能具体提供哪些功能模块的服务。每一个Tool就是一个函数,只不过需要使用一些特殊的注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@Service
public class OpenMyBlogTool {
// 目标博客首页 URL
private static final String BLOG_HOME_URL = "https://blog.csdn.net/qq_38526573";

@Tool(name = "get-blog-info", description = "获取博客信息")
public String getAuthorInfo() {
OkHttpClient client = new OkHttpClient();
// 1. 发送 HTTP 请求获取网页 HTML
String htmlContent = getHtmlContent(client, BLOG_HOME_URL);
if (htmlContent == null || htmlContent.isEmpty()) {
System.err.println("无法获取网页内容");
return "无法获取网页内容";
}
return htmlContent;
}

/**
* 发送 HTTP GET 请求,获取网页 HTML 内容
*/
private String getHtmlContent(OkHttpClient client, String url) {
Request request = new Request.Builder()
.url(url)
// 模拟浏览器请求头,避免被识别为爬虫
.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful() && response.body() != null) {
return response.body().string(); // 返回 HTML 字符串
} else {
System.err.println("请求失败,响应码:" + response.code());
return null;
}
} catch (IOException e) {
System.err.println("网络请求异常:" + e.getMessage());
e.printStackTrace();
return null;
}
}
}

可以看到,这个简单的ToolCalling,主要功能是获取博客的一些信息

1.3 注册暴露MCP

初始化ToolCallbackProvider的Bean对象,注册上面配置的Tools类

1
2
3
4
5
6
7
@Configuration
public class ToolCallbackProviderConfig {
@Bean
public ToolCallbackProvider OpenMyBlogTool(OpenMyBlogTool openMyBlogTool) {
return MethodToolCallbackProvider.builder().toolObjects(openMyBlogTool).build();
}
}

1.4 启动MCP Server

启动web之后,如果能看到registered tools这一行,后面为tool数量,那么就启动成功了。这样Server就被暴露在设置的端口下了,其他项目就可以通过MCP Client去找到暴露Server里面暴露的Tools进行调用

2 客户端创建

2.1 依赖

核心依赖

1
2
3
4
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-clientwebflux</artifactId>
</dependency>

2.2 配置文件

1
2
3
4
5
6
7
spring.ai.mcp.client.toolcallback.enabled=true
spring.ai.mcp.client.name=mcp-client
spring.ai.mcp.client.enabled=true
spring.ai.mcp.client.type=async
#spring.ai.mcp.client.stdio.servers-configuration=classpath:/
spring.ai.mcp.client.sse.connections.author-info
server.url=http://localhost:9090

2.3 案例测试

1
2
3
4
5
6
7
8
9
10
11
12
13
@Autowired
private OpenAiChatModel model;
@Autowired
private ToolCallbackProvider tools;

@Test
void mcpTest(){
ChatClient client = ChatClient.builder(model)
.defaultToolCallbacks(tools)
.build();
String content = client.prompt("获取博客的作者和内容信息").call().content();
System.out.println(content);
}

9-MCP
http://www.zivjie.cn/2025/11/22/spring框架/springAI/SpringAi框架/9-MCP/
作者
Francis
发布于
2025年11月22日
许可协议