一、说明
本章节介绍saa调用百度地图MCP服务,这个和之前调用本地mcp服务有点类似,但是一个是本地自有的mcp服务,另外一个是远程mcp服务。有一个前提必须是本地安装有node环境或者python环境。
需要注意的是,我是使用的mac,记得本地文件的授权,不然链接不上远程mcp服务。
二、MCP服务市场
先去mcp服务市场找到我们本次要使用的mcp服务,本次选择的是百度地图的MCP服务,其他的也可以一样使用:

"BAIDU_MAP_API_KEY"就是我们在百度地图开发者平台申请的api key,所以先要去该平台注册一个开发者账号(个人/企业都可以),然后申请一个应用。
三、申请百度地图开发者账号并申请应用和获取api key

四、编码
1.父工程pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.saa</groupId>
<artifactId>saa-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>saa-parent</name>
<description>saa-parent</description>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<java.version>17</java.version>
<spring-ai.version>1.0.0</spring-ai.version>
<spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.version>
<spring-boot.version>3.4.5</spring-boot.version>
</properties>
<modules>
<module>saa-helloworld</module>
<module>saa-ollma</module>
<module>saa-streaming</module>
<module>saa-prompt</module>
<module>saa-prompt-template</module>
<module>saa-persistent</module>
<module>saa-text2image</module>
<module>saa-text2voice</module>
<module>saa-embed2vector</module>
<module>saa-rag4ops</module>
<module>saa-toolCalling</module>
<module>saa-localMcpServer</module>
<module>saa-localMcpClient</module>
<module>saa-clientCallBaiduMcpServer</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring AI Alibaba -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-bom</artifactId>
<version>${spring-ai-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring AI -->
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</build>
</project>
2.子工程pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.saa</groupId>
<artifactId>saa-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.saa</groupId>
<artifactId>saa-clientCallBaiduMcpServer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>saa-clientCallBaiduMcpServer</name>
<description>saa-clientCallBaiduMcpServer</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<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>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.34</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</build>
</project>
3.properties配置文件
server.port=8094
server.servlet.encoding.charset=utf-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
spring.application.name=saa-client-call-baidu-mcp-server
spring.ai.dashscope.api-key=sk-09c7b571687b46d5a2e25a03fbdd2fd1
## mcp-server config
spring.ai.mcp.client.request-timeout=30s
spring.ai.mcp.client.toolcallback.enabled=true
spring.ai.mcp.client.stdio.servers-configuration=classpath:/mcp-server-config.json
4.配置类SaaLLMConfig
package com.saa.client.call.baidu.mcp.server.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)
//mcp协议,配置见yml文件,此处只赋能给ChatClient对象
.defaultToolCallbacks(tools.getToolCallbacks())
.build();
}
}
5.mcp服务json
{
"mcpServers": {
"baidu-map": {
"command": "npx",
"args": [
"-y",
"@baidumap/mcp-server-baidu-map"
],
"env": {
"BAIDU_MAP_API_KEY": "IOt1Mah0FdYYwvEnQpWSIdIruRfdxxxx"
}
}
}
}6.控制器
package com.saa.client.call.baidu.mcp.server.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; //添加了MCP调用能力
@Resource
private ChatModel chatModel; //没有添加MCP调用能力
@GetMapping("/mcp/chat")
public Flux<String> chat(@RequestParam("msg") String msg) {
return chatClient.prompt()
.system("请用html格式回复")
.user(msg)
.stream().content();
}
@RequestMapping("/mcp/chat2")
public Flux<String> chat2(@RequestParam("msg") String msg) {
return chatModel.stream(msg);
}
}
五、测试
1.启动程序会看到加载JSON后,百度地图MCP SERVER相关信息

出现这个表示链接百度地图MCP服务成功。
2.接口测试
测试1:http://localhost:8094/mcp/chat?msg=查询北纬30.5042东经114.4074天气

测试2:
http://localhost:8094/mcp/chat?msg=查询光谷到黄鹤楼路线

测试3:
http://localhost:8094/mcp/chat2?msg=查询北纬30.5042东经114.4074天气
