詹学伟
詹学伟
Published on 2025-11-30 / 28 Visits
0
0

saa-调用百度地图MCP服务

一、说明

本章节介绍saa调用百度地图MCP服务,这个和之前调用本地mcp服务有点类似,但是一个是本地自有的mcp服务,另外一个是远程mcp服务。有一个前提必须是本地安装有node环境或者python环境。

需要注意的是,我是使用的mac,记得本地文件的授权,不然链接不上远程mcp服务。

二、MCP服务市场

先去mcp服务市场找到我们本次要使用的mcp服务,本次选择的是百度地图的MCP服务,其他的也可以一样使用:

https://mcp.so/zh/server/baidu-map/baidu-maps

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

三、申请百度地图开发者账号并申请应用和获取api key

https://lbsyun.baidu.com/apiconsole/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天气


Comment