 MCP 开发完整指南
MCP 开发完整指南
  # MCP 开发完整指南
# 🎯 技术栈选择概述
本指南提供两种 MCP (Model Context Protocol) 开发方式,适用于不同的应用场景:
| 开发方式 | 适用场景 | 优势 | 劣势 | 
|---|---|---|---|
| 🚀 方案一:Spring AI MCP 生态 | Spring AI 应用开发 | 官方抽象层、未来兼容、最佳实践 | 依赖Spring AI版本 | 
| ⚡ 方案二:直接 MCP SDK | 独立MCP应用、脱离Spring AI | 直接控制、轻量级、版本独立 | 需要手动实现抽象层 | 
# 📋 选择指导原则
- ✅ 优先选择方案一:如果你正在开发基于 Spring AI 的应用
- ✅ 选择方案二:如果你需要独立的 MCP 服务,不依赖 Spring AI 生态
# 🚀 方案一:基于 Spring AI MCP 生态(推荐)
核心原则: 基于 Spring AI MCP 生态系统进行开发,利用官方抽象层
# 📦 服务端依赖配置 (3个核心包)
<properties>
    <java.version>17</java.version>
    <spring-ai.version>1.1.0-SNAPSHOT</spring-ai.version>
</properties>
<dependencies>
    <!-- Spring Boot Web (必需) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring AI MCP 核心包 (包含MCP支持) -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-mcp</artifactId>
        <version>${spring-ai.version}</version>
    </dependency>
    
    <!-- Spring AI Model (基础接口) -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-model</artifactId>
        <version>${spring-ai.version}</version>
    </dependency>
    
    <!-- 注意:MCP SDK 通过 spring-ai-mcp 传递依赖自动获得 -->
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 📦 客户端依赖配置 (4个核心包)
<properties>
    <java.version>17</java.version>
    <spring-ai.version>1.1.0-SNAPSHOT</spring-ai.version>
</properties>
<dependencies>
    <!-- Spring Boot Web (必需) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring Boot WebFlux (响应式支持) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    
    <!-- Spring AI MCP 核心包 (包含ToolCallbackProvider) -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-mcp</artifactId>
        <version>${spring-ai.version}</version>
    </dependency>
    
    <!-- Spring AI Model (ToolCallback接口等) -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-model</artifactId>
        <version>${spring-ai.version}</version>
    </dependency>
    
    <!-- 注意:MCP SDK 通过 spring-ai-mcp 传递依赖自动获得 -->
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 🏗️ 方案一架构说明
# 依赖层次结构
应用代码
    ↓
Spring AI MCP (spring-ai-mcp)
    ↓  
Spring AI Model (spring-ai-model)
    ↓
MCP SDK (io.modelcontextprotocol.sdk:mcp) [传递依赖]
1
2
3
4
5
6
7
2
3
4
5
6
7
# 推荐用法
// 使用Spring AI提供的ToolCallbackProvider
SyncMcpToolCallbackProvider provider = new SyncMcpToolCallbackProvider(mcpClient);
List<ToolCallback> callbacks = Arrays.asList(provider.getToolCallbacks());
1
2
3
2
3
# ⚡ 方案二:直接基于 MCP SDK(独立开发)
核心原则: 直接使用 MCP SDK,不依赖 Spring AI 生态系统
# 📦 服务端依赖配置
<properties>
    <java.version>17</java.version>
    <mcp-sdk.version>0.10.0</mcp-sdk.version>
</properties>
<dependencies>
    <!-- Spring Boot 核心 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- MCP SDK 核心包 -->
    <dependency>
        <groupId>io.modelcontextprotocol.sdk</groupId>
        <artifactId>mcp</artifactId>
        <version>${mcp-sdk.version}</version>
    </dependency>
    
    <!-- MCP Spring WebMVC 集成 (SSE传输) -->
    <dependency>
        <groupId>io.modelcontextprotocol.sdk</groupId>
        <artifactId>mcp-spring-webmvc</artifactId>
        <version>${mcp-sdk.version}</version>
    </dependency>
    
    <!-- MCP Spring WebFlux 集成 (响应式SSE传输) -->
    <dependency>
        <groupId>io.modelcontextprotocol.sdk</groupId>
        <artifactId>mcp-spring-webflux</artifactId>
        <version>${mcp-sdk.version}</version>
    </dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 📦 客户端依赖配置
<properties>
    <java.version>17</java.version>
    <mcp-sdk.version>0.10.0</mcp-sdk.version>
</properties>
<dependencies>
    <!-- Spring Boot 核心 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    
    <!-- MCP SDK 核心包 (客户端实现) -->
    <dependency>
        <groupId>io.modelcontextprotocol.sdk</groupId>
        <artifactId>mcp</artifactId>
        <version>${mcp-sdk.version}</version>
    </dependency>
    
    <!-- MCP Spring WebFlux 客户端传输 -->
    <dependency>
        <groupId>io.modelcontextprotocol.sdk</groupId>
        <artifactId>mcp-spring-webflux</artifactId>
        <version>${mcp-sdk.version}</version>
    </dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 🏗️ 方案二架构说明
# 服务端架构
Spring Boot Application
    ↓
@Configuration + @Bean
    ↓
List<SyncToolSpecification>
    ↓
MCP SDK 自动扫描
    ↓
SSE Endpoint (/sse)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 客户端架构
Spring Boot Application
    ↓
手动 McpSyncClient Bean
    ↓
自定义 ToolCallback 转换
    ↓
业务逻辑调用
1
2
3
4
5
6
7
2
3
4
5
6
7
# 实现示例
// 手动实现ToolCallback转换
public class CustomMcpToolCallback implements ToolCallback {
    private final McpSyncClient client;
    private final McpSchema.Tool tool;
    
    @Override
    public String call(String arguments) {
        // 手动实现调用逻辑
        Map<String, Object> args = parseArguments(arguments);
        McpSchema.CallToolRequest request = new McpSchema.CallToolRequest(tool.name(), args);
        McpSchema.CallToolResult result = client.callTool(request);
        return extractResult(result);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 📋 项目功能分析
# 🔧 MCP Server 功能清单
| 功能类别 | 具体功能 | 实现类 | 说明 | 
|---|---|---|---|
| 数学工具 | add, multiply, power | MathToolsConfiguration | 基础数学计算工具 | 
| 文本工具 | uppercase, analyze_text, reverse | TextToolsConfiguration | 文本处理工具 | 
| 系统资源 | system://info, time://current, app://status | SystemResourcesConfiguration | 系统信息资源 | 
| 传输支持 | SSE WebMVC, SSE WebFlux, STDIO | MCP SDK内置 | 多种传输协议 | 
| 核心配置 | 服务器自定义配置 | McpServerConfiguration | 可扩展配置 | 
# 🔧 MCP Client 功能清单
| 功能类别 | 具体功能 | 实现类 | 说明 | 
|---|---|---|---|
| 动态管理 | 热加载、配置管理 | DynamicMcpClientManager | 支持运行时配置变更 | 
| 工具回调 | MCP工具转Spring AI ToolCallback | SimpleMcpToolCallbackProvider/SpringAiMcpClientManager | Spring AI集成 | 
| 配置服务 | 配置读取、验证 | McpConfigurationService | 配置管理服务 | 
| REST API | 工具列表、状态查询、调用接口 | McpToolController | Web API接口 | 
| 测试工具 | 智能Schema解析、自动测试 | SpringAiMcpClientExample | 开发测试工具 | 
| 连接管理 | 手动MCP客户端创建 | McpClientConfiguration | 客户端连接管理 | 
# 🚀 使用模式对比
# 🔧 服务端实现步骤对比
# 方案一:Spring AI MCP 生态
- 添加依赖 (3个Spring AI包)
- 创建工具Bean:@Configuration public class MyToolsConfiguration { @Bean public SomeSpringAiToolType myTool() { // 使用Spring AI抽象 } }1
 2
 3
 4
 5
 6
 7
- 启动应用 - 自动发现和注册
# 方案二:直接 MCP SDK
- 添加依赖 (4个MCP SDK包)
- 创建工具配置类:@Configuration public class MyToolsConfiguration { @Bean public List<McpServerFeatures.SyncToolSpecification> myTools() { return List.of(createMyTool()); } }1
 2
 3
 4
 5
 6
 7
- 启动应用 - MCP SDK 自动暴露工具
# 🔧 客户端实现步骤对比
# 方案一:Spring AI MCP 生态
- 添加依赖 (4个Spring AI包)
- 创建客户端管理器:@Service public class SpringAiMcpClientManager { public List<ToolCallback> connectToMcpServer(String serverName, String serverUrl) { // 使用 SyncMcpToolCallbackProvider SyncMcpToolCallbackProvider provider = new SyncMcpToolCallbackProvider(mcpClient); return Arrays.asList(provider.getToolCallbacks()); } }1
 2
 3
 4
 5
 6
 7
 8
- 自动获得 Spring AI ToolCallback
# 方案二:直接 MCP SDK
- 添加依赖 (3个MCP SDK包)
- 创建客户端配置:@Bean public McpSyncClient mcpClient() { // 手动创建 MCP 客户端 }1
 2
 3
 4
- 手动实现 ToolCallback 转换
# ⚠️ 重要说明
# 1. 依赖可用性
- ✅ MCP SDK (io.modelcontextprotocol.sdk:*): 公开可用
- ✅ Spring AI MCP (spring-ai-mcp,spring-ai-model): 可用
- ❌ Spring AI Starters (spring-ai-starter-mcp-*): 不存在
- ❓ Spring AI AutoConfig (spring-ai-autoconfigure-mcp-client): 当前版本POM有问题
# 2. 技术选择建议
# 选择方案一的场景:
- ✅ 正在开发基于 Spring AI 的应用
- ✅ 希望获得官方抽象层和最佳实践
- ✅ 需要与 Spring AI 生态系统深度集成
- ✅ 优先考虑未来兼容性和更新支持
# 选择方案二的场景:
- ✅ 需要独立的 MCP 服务,不依赖 Spring AI
- ✅ 对依赖和版本有严格控制要求
- ✅ 需要轻量级的解决方案
- ✅ 要使用 MCP SDK 的高级特性
# 3. 版本兼容性
- Spring Boot: 3.2.4
- Java: 17+
- Spring AI: 1.1.0-SNAPSHOT
- MCP SDK: 0.10.0
# 📝 最佳实践
# 🎯 通用原则
- 明确技术栈: 基于应用场景选择合适的方案
- 依赖管理: 使用具体版本号,避免版本冲突
- 测试优先: 使用项目中的示例进行功能验证
# 🎯 方案一最佳实践
- 优先使用: Spring AI 提供的 SyncMcpToolCallbackProvider
- 避免手工实现: 不要自己实现 ToolCallback 转换逻辑
- 传递依赖: 通过 Spring AI 包获得 MCP SDK,不直接依赖
# 🎯 方案二最佳实践
- 服务端: 使用 MCP SDK 的原生 Spring 集成
- 客户端: 结合手动配置和自定义 ToolCallback 实现
- 直接控制: 充分利用 MCP SDK 的原生功能
# 📊 验证方法
# 编译验证
mvn clean compile
1
# 依赖树检查
# 方案一验证:
mvn dependency:tree | grep mcp
1
应该看到:
[INFO] +- org.springframework.ai:spring-ai-mcp:jar:1.1.0-SNAPSHOT:compile
[INFO] |  \- io.modelcontextprotocol.sdk:mcp:jar:0.10.0:compile
1
2
2
# 方案二验证:
mvn dependency:tree | grep modelcontextprotocol
1
应该看到:
[INFO] +- io.modelcontextprotocol.sdk:mcp:jar:0.10.0:compile
[INFO] +- io.modelcontextprotocol.sdk:mcp-spring-webmvc:jar:0.10.0:compile
[INFO] +- io.modelcontextprotocol.sdk:mcp-spring-webflux:jar:0.10.0:compile
1
2
3
2
3
# 🎯 总结
这个完整指南提供了两种成熟的 MCP 开发方式:
# 🚀 方案一:Spring AI MCP 生态(推荐用于Spring AI应用)
- 利用官方抽象层和最佳实践
- 获得Spring AI生态系统的完整支持
- 自动处理版本兼容性和更新
# ⚡ 方案二:直接 MCP SDK(用于独立MCP应用)
- 直接控制和轻量级实现
- 不依赖Spring AI版本
- 充分利用MCP SDK原生功能
根据你的应用场景和技术需求,选择最适合的方案开始你的 MCP 开发之旅!
更新时间: 2025-06-05
 适用版本: Spring AI 1.1.0-SNAPSHOT, MCP SDK 0.10.0
上次更新: 2025/06/05, 16:11:33
