1.MCP 可以干啥?
MCP,是Model Context Protocol的缩写,即模型上下文协议,它是一个开源标准,用于将 AI 应用程序连接到外部系统。各大 AI 应用程序可以连接到数据源(例如本地文件、数据库),工具(例如搜索引擎、计算器)和工作流(例如专门的提示),使它们能够访问关键信息并执行任务。也就是说它就像一个拓展插件一样,让大模型有能力操纵大模型外部系统的能力。
2.MCP Server的创建(Spring Boot)
2.1 pom 文件。
XML
<?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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xinju</groupId>
<artifactId>mcp-java</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mcp java</name>
<description>mcp java</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.1</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.2 配置文件
bash
spring.application.name=mcp java
spring.ai.mcp.server.name=mcp java
spring.ai.mcp.server.sse-message-endpoint=/sse
2.3 MCP服务
bash
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;
@Service
public class McpJavaService {
@Tool(description = "张三的个性化区域查询")
public String queryArea(@ToolParam(description = "张三的个性化区域查询") String query) {
System.out.println("queryArea 此方法被调用了!");
return "您查询的区域是:" + query +"(个性化)";
}
@Tool(description = "加法:a + b")
public double add(
@ToolParam(description = "被加数") double a,
@ToolParam(description = "加数") double b) {
System.out.println("queryArea 此方法被调用了!");
return a + b;
}
@Tool(description = "减法:a - b")
public double sub(
@ToolParam(description = "被减数") double a,
@ToolParam(description = "减数") double b) {
System.out.println("queryArea 此方法被调用了!");
return a - b;
}
@Tool(description = "乘法:a * b")
public double mul(
@ToolParam(description = "被乘数") double a,
@ToolParam(description = "乘数") double b) {
System.out.println("queryArea 此方法被调用了!");
return a * b;
}
@Tool(description = "除法:a / b")
public double div(
@ToolParam(description = "被除数") double a,
@ToolParam(description = "除数") double b) {
System.out.println("queryArea 此方法被调用了!");
if (b == 0) throw new IllegalArgumentException("除数不能为 0");
return a / b;
}
}
3. 通过Chat Box方式测试。
1.在设置中添加刚刚编写的MCP服务。

2.添加自定义服务。

3.填写你的MCP信息以及服务地址,然后保存。

4.然后聊天时选中这个MCP,对大模型进行与你MCP服务相关的提问,就可以调用你的MCP服务了。

4.通过代码方式测试
- 另起一个项目,通过java代码调用大模型时,同时使用你的MCP服务,直接运行这个main方法。
bash
public class McpToolsCall {
public static void main(String[] args) throws Exception {
ChatModel model = OpenAiChatModel.builder()
.baseUrl("这里填你的模型地址")
.apiKey("这里填你的Api Key")
.modelName("这里填你的模型名称")
.logRequests(true)
.logResponses(true)
.build();
McpTransport transport = new HttpMcpTransport.Builder()
.sseUrl("http://127.0.0.1:8080/sse") //这里是你的MCP服务地址
.timeout(Duration.ofSeconds(60))
.logRequests(true)
.logResponses(true)
.build();
McpClient mcpClient = new DefaultMcpClient.Builder()
.transport(transport)
.build();
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(mcpClient))
.build();
Bot bot = AiServices.builder(Bot.class)
.chatModel(model)
.toolProvider(toolProvider)
.build();
try {
String response = bot.chat("我是张三,我想查一下哪个区域比较个性化");
System.out.println("----------------------");
System.out.println(response);
} finally {
mcpClient.close();
}
}
}
2.调用后发现访问了你的MCP服务(虽然大模型对这个返回结果很不解,但确实它硬着头皮调用了)。

3.MCP服务器这个方法也进入了
