【SpringAIAlibaba新手村系列】(16)调用百度 MCP 服务

简介: 本章展示如何在客户端接入第三方百度 MCP 服务。通过 spring-ai-starter-mcp-client、application.yml 与 mcp-server.json5 完成 stdio 方式连接,自动发现并注册远端工具到 ChatClient,实现天气、IP 归属地、路线规划等能力调用。

第十六章 调用百度 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

这一章的核心不是再造一个工具服务,而是理解两件事:

  1. 如何通过 MCP 客户端配置接入外部服务。
  2. 为什么只配好 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

这个配置表达的是:

  1. 当前应用启用 MCP Client。
  2. MCP Client 通过 stdio 模式加载外部服务清单。
  3. 外部服务清单来自 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 进程”。

其中:

  1. command + args
    在 Windows 下通过 cmd /c npx ... 启动百度 MCP Server。

  2. 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 自动配置机制。

自动配置生效后,框架会按配置完成以下流程:

  1. 读取 spring.ai.mcp.client.stdio.servers-configuration
  2. 加载 mcp-server.json5
  3. command/args/env 启动第三方 MCP Server 进程
  4. 初始化 MCP Client 与该进程的会话
  5. 拉取远端工具列表
  6. 把工具封装成 ToolCallbackProvider
  7. 在你定义的 ChatClient Bean 中,通过 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 服务接入”。

关键点有三个:

  1. 使用 spring-ai-starter-mcp-client 触发 MCP Client 自动配置。
  2. 通过 application.yml + mcp-server.json5 声明第三方服务连接方式。
  3. 通过 ToolCallbackProvider 把远端工具无缝接到 ChatClient

完成这一步后,客户端应用已经具备调用外部 MCP 生态工具的能力,后续接入更多第三方服务时可以复用同一套模式。


本章重点

  1. 理解第三方 MCP 服务接入的配置路径。
  2. 理解 mcp-server.json5 在 stdio 场景中的作用。
  3. 理解 Spring Boot 自动配置如何把 yml 配置转成可调用工具。

下章剧透(s17):

在工具接入之外,下一章进入知识库与检索增强场景,关注模型如何在业务知识范围内给出更稳定答案。


📝 编辑者:Flittly
📅 更新时间:2026年4月
🔗 相关资源Spring AI MCP Client 文档 | MCP 官方文档

目录
相关文章
|
7天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
34477 17
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
19天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
45307 142
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
8天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
4874 21
|
1天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
1990 6
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
7天前
|
人工智能 API 开发者
阿里云百炼 Coding Plan 售罄、Lite 停售、Pro 抢不到?最新解决方案
阿里云百炼Coding Plan Lite已停售,Pro版每日9:30限量抢购难度大。本文解析原因,并提供两大方案:①掌握技巧抢购Pro版;②直接使用百炼平台按量付费——新用户赠100万Tokens,支持Qwen3.5-Max等满血模型,灵活低成本。
1819 5
阿里云百炼 Coding Plan 售罄、Lite 停售、Pro 抢不到?最新解决方案

热门文章

最新文章