MCP基础概念讲解
为什么需要MCP
对于不同厂商提供的大模型 对FunctionCalling的格式要求各不相同 在对接多个大模型时
开发者需要为每种模型编写适配逻辑 这种情况下维护成本非常高
因此需要有一种统一的规范 规范工具的描述 调用 响应等
使得工具服务只需要按照这种规范去实现 就可以被任意支持MCP的LLM客户端调用
什么是MCP
MCP就是一种标准化工具调用协议规范
他解决了以下问题:
- 工具服务怎么暴露出能力
- 调用端如何去声明自己有哪些工具
- 模型如何发现可用工具
- 模型如何发起工具调用
- 调用结果如何返回并且继续推理
工具服务只需要按照这种规范去构建应用
LLM 客户端在和 大模型 进行交互的时候 将 MCP 工具描述转换为对应模型所需要的Function Tool参数
当 大模型 决定调用工具的时候 会返回一个工具调用的请求 MCP 去拦截该请求 将其转发给对应的MCP Server执行
再将结果回填给大模型 让大模型生成最终答案

SpringAI搭建MCP-Server
本文以Java语言 通过SpringAI为例 讲解Stdio SSE两种形式的MCP-Server的完整流程
实现一个加减乘除的Tool 适合想要入门学习MCP的小白
STDIO模式
创建基于进程内通信的传输
当你使用 STDIO 传输方式连接 MCP 服务时,客户端通常会创建一个子进程来运行你的 MCP 服务程序
引入依赖
本文以1.0.0-RC1版本为例 需要引入如下依赖:
spring-ai-starter-mcp-server提供了快速构建 MCP服务器的功能
xml
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0-RC1</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server</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>
创建工具服务
SpringAI提供了Tool注解 通过Tool注解 可以将我们定义的方法定义为一种工具
通过description来描述这个工具的作用 这是给AI看的
java
package cn.omenkk.service;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Service;
/**
* @author omenkk7
* @description 数学工具类,提供基本的加减乘除运算
* @create 2025/12/20
*/
@Service
public class MathTool {
/**
* 加法运算
* @param a 第一个数
* @param b 第二个数
* @return 两数之和
*/
@Tool(description = "执行加法运算,计算两个数的和")
public double add(double a, double b) {
return a + b;
}
/**
* 减法运算
* @param a 被减数
* @param b 减数
* @return 两数之差
*/
@Tool(description = "执行减法运算,计算两个数的差")
public double subtract(double a, double b) {
return a - b;
}
/**
* 乘法运算
* @param a 第一个数
* @param b 第二个数
* @return 两数之积
*/
@Tool(description = "执行乘法运算,计算两个数的积")
public double multiply(double a, double b) {
return a * b;
}
/**
* 除法运算
* @param a 被除数
* @param b 除数
* @return 两数之商
* @throws IllegalArgumentException 当除数为0时抛出异常
*/
@Tool(description = "执行除法运算,计算两个数的商")
public double divide(double a, double b) {
if (b == 0) {
throw new IllegalArgumentException("除数不能为0");
}
return a / b;
}
}
创建你的Spring Application
typescript
@SpringBootApplication
public class McpDemo3Application {
public static void main(String[] args) {
SpringApplication.run(McpDemo3Application.class, args);
}
@Bean
public ToolCallbackProvider mathTools(MathTool mathTool) {
return MethodToolCallbackProvider.builder().toolObjects(mathTool).build();
}
}
构建项目
执行mvn package 将项目打成jar包
在客户端使用
swift
{
"mcpServers": {
"计算MCP": {
"name": "计算MCP",
"description": "",
"type": "stdio",
"command": "C:\Users\连庆辉\AppData\Local\Programs\Eclipse Adoptium\jdk-17.0.17.10-hotspot\bin\java.exe",
"args": [
// 禁用 Spring Boot Web 应用上下文(STDIO 模式不需要启动HTTP服务器)
"-Dspring.main.web-application-type=none",
// // 启用 MCP 服务器的 STDIO 传输模式
"-Dspring.ai.mcp.server.stdio=true",
"-jar",
"G:\ai-agent\code\mcp-demo2\target\mcp-demo2-0.0.1-SNAPSHOT.jar"
],
"environmentVariables": {
},
"timeout": 60
}
}
}
我是在Cherry studio上跑的 像类似的应用 如cursor Trae上均可以使用
读者可以检索资料 尝试做一个MCP Client 对接自己的MCP Server

SSE模式
SSE 是基于 HTTP 协议的一种"单向、服务器主动推送"的长连接通信机制 因此我们可以通过SpringMVC来构建
通过SSE模式跑的MCP服务 可以部署在服务器上 通过SSE连接向外提供功能
下面我采用的是1.1.2的版本spring-ai-bom 它能够帮你管理spring-ai相关依赖的版本
引入依赖
重点是引入spring-ai-starter-mcp-server-webmvc依赖:
- 使用 Spring MVC 的基于 HTTP 的传输
- 自动配置 SSE 传输所需的 Web 端点与 Controller或处理流式响应逻辑,无需额外编码。
- 可选
STDIO传输(通过设置启用spring.ai.mcp.server.stdio=true) - 包含
spring-boot-starter-web依赖项
xml
<properties>
<java.version>17</java.version>
<spring-ai.version>1.1.2</spring-ai.version>
</properties>
<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>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
ini
# spring.main.web-application-type=none
# NOTE: You must disable the banner and the console logging
# to allow the STDIO transport to work !!!
spring.main.banner-mode=off
# logging.pattern.console=
# spring.ai.mcp.server.stdio=false
spring.ai.mcp.server.name=my-weather-server
spring.ai.mcp.server.version=0.0.1
spring.ai.mcp.server.protocol=STREAMABLE
# spring.ai.mcp.server.protocol=STATELESS
logging.file.name=./model-context-protocol/weather/starter-webmvc-server/target/starter-webmvc-server.log
创建工具服务
与SSE模式类似 不再赘述
创建你的SpringApplication
typescript
@SpringBootApplication
public class McpDemo3Application {
public static void main(String[] args) {
SpringApplication.run(McpDemo3Application.class, args);
}
//显式手动注册你的工具服务
@Bean
public ToolCallbackProvider mathTools(MathTool mathTool) {
return MethodToolCallbackProvider.builder().toolObjects(mathTool).build();
}
}
在客户端使用
首先需要在本地或者服务器启动你的Web服务 接下来 暴露你的服务给客户端 让他知道怎么去调用你的服务
css
{
"mcpServers": {
"数学运算服务1": {
"name": "数学运算服务1",
"description": "",
"type": "streamableHttp",
"url": "http://localhost:8080/mcp",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token"
},
"timeout": 60,
"advancedSettings": {}
}
}
}
示例

小结
本文讲解了关于MCP 以及简单讲解了怎么使用SpringAI去创建一个MCP Server
如果对你有帮助 请点个赞谢谢!!!
参考资料: