第十六章 调用百度 MCP 服务
版本标注
- Spring AI:
1.1.2- Spring AI Alibaba:
1.1.2.0章节定位
- 前两章已经完成本地 MCP Server 与 MCP Client 的联调。
- 这一章切换到第三方服务接入:不再自己写 MCP Server,而是直接接入百度 MCP 服务。
s01 > s02 > s03 > s04 > s05 > s06 > s07 > s08 > s09 > s10 > s11 > s12 > s13 > s14 > s15 > [ s16 ] s17 > s18
一、本章要解决的问题
上一章的重点是“连接本地 MCP 服务”。这一章更进一步:连接第三方 MCP 服务,并把第三方工具能力接入到当前 ChatClient。
这一章的核心不是再造一个工具服务,而是理解两件事:
- 如何通过 MCP 客户端配置接入外部服务。
- 为什么只配好
application.yml,模型就可以调用第三方工具。
二、项目代码(最终可运行版)
2.1 pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
<version>1.1.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>
这里最关键的是 spring-ai-starter-mcp-client。它提供 MCP Client 的自动配置能力,包括:
- 按配置创建 MCP Client
- 初始化连接
- 发现远端工具
- 把远端工具整合为
ToolCallbackProvider
2.2 application.yml
server:
port: 8015
spring:
application:
name: Saa15
ai:
dashscope:
api-key: ${
DASHSCOPE_API_KEY}
mcp:
client:
request-timeout: 20s
toolcallback:
enabled: true
stdio:
servers-configuration: classpath:/mcp-server.json5
这个配置表达的是:
- 当前应用启用 MCP Client。
- MCP Client 通过
stdio模式加载外部服务清单。 - 外部服务清单来自
classpath:/mcp-server.json5。
2.3 mcp-server.json5
{
"mcpServers": {
"baidu-map": {
"command": "cmd",
"args": ["/c", "npx", "-y", "@baidumap/mcp-server-baidu-map"],
"env": { "BAIDU_MAP_API_KEY": "${BAIDU_MAP_API_KEY}" }
}
}
}
这份文件的作用是“告诉客户端如何启动第三方 MCP Server 进程”。
其中:
command+args
在 Windows 下通过cmd /c npx ...启动百度 MCP Server。env
为该进程注入运行时环境变量,例如百度地图 AK。
建议把 AK 改成环境变量占位符,不要在文件中写明文密钥。
2.4 SaaLLMConfig
package cn.edu.nnu.opengms.config;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SaaLLMConfig {
@Bean
public ChatClient chatClient(ChatModel chatModel, ToolCallbackProvider tools)
{
return ChatClient.builder(chatModel)
.defaultToolCallbacks(tools.getToolCallbacks())
.build();
}
}
这段配置的意义是:把 MCP Client 发现到的第三方工具回调注册给 ChatClient。之后模型在对话中就能调用这些工具。
2.5 Controller
package cn.edu.nnu.opengms.controller;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
@RestController
public class McpClientCallBaiDuMcpController {
@Resource
private ChatClient chatClient;
@Resource
private ChatModel chatModel;
@GetMapping("/mcp/chat")
public Flux<String> chat(@RequestParam(name = "msg") String msg)
{
return chatClient.prompt(msg).stream().content();
}
@RequestMapping("/mcp/chat2")
public Flux<String> chat2(@RequestParam(name = "msg") String msg)
{
return chatModel.stream(msg);
}
}
/mcp/chat 走的是带 MCP 工具能力的 ChatClient,/mcp/chat2 走的是普通 ChatModel,两条接口可以直接对比效果。
三、为什么只配 yml 就能调用 MCP 服务
这是这一章最容易被忽略,但最关键的一点。
根本原因在于:你引入的是 spring-ai-starter-mcp-client,它会触发 Spring Boot 自动配置机制。
自动配置生效后,框架会按配置完成以下流程:
- 读取
spring.ai.mcp.client.stdio.servers-configuration - 加载
mcp-server.json5 - 按
command/args/env启动第三方 MCP Server 进程 - 初始化 MCP Client 与该进程的会话
- 拉取远端工具列表
- 把工具封装成
ToolCallbackProvider - 在你定义的
ChatClientBean 中,通过defaultToolCallbacks(...)完成接入
因此,业务代码看起来只写了一个 application.yml + 一个 ChatClient 配置方法,但底层已经完成了“启动服务、建立连接、发现工具、注册回调”这整条链路。
这也是为什么本章里不需要手写“百度地图工具调用代码”,模型依然可以在对话中调用百度 MCP 的能力。
四、请求示例
4.1 使用 MCP 工具
http://localhost:8015/mcp/chat?msg=查询北京天气
http://localhost:8015/mcp/chat?msg=查询61.149.121.66归属地
http://localhost:8015/mcp/chat?msg=查询从昌平到天安门的路线
4.2 不使用 MCP 工具(对照)
http://localhost:8015/mcp/chat2?msg=查询北京天气
如果 MCP 接入生效,/mcp/chat 的回答会明显依赖百度工具返回结果;/mcp/chat2 则更容易出现模型自答或泛化建议。
五、本章小结
这一章的核心是把“本地联调”扩展到了“第三方 MCP 服务接入”。
关键点有三个:
- 使用
spring-ai-starter-mcp-client触发 MCP Client 自动配置。 - 通过
application.yml + mcp-server.json5声明第三方服务连接方式。 - 通过
ToolCallbackProvider把远端工具无缝接到ChatClient。
完成这一步后,客户端应用已经具备调用外部 MCP 生态工具的能力,后续接入更多第三方服务时可以复用同一套模式。
本章重点:
- 理解第三方 MCP 服务接入的配置路径。
- 理解
mcp-server.json5在 stdio 场景中的作用。 - 理解 Spring Boot 自动配置如何把 yml 配置转成可调用工具。
下章剧透(s17):
在工具接入之外,下一章进入知识库与检索增强场景,关注模型如何在业务知识范围内给出更稳定答案。
📝 编辑者:Flittly
📅 更新时间:2026年4月
🔗 相关资源:Spring AI MCP Client 文档 | MCP 官方文档