MCP Java vs Python 对比实验项目
配合知乎文章《MCP协议实战:Java vs Python双生态对比实验》的实验代码
项目状态: ✅ 已更新 - 使用 MCP Java SDK 1.0.0 GA + Java 21
🔧 更新记录 (2026-03-02)
重大更新
- MCP Java SDK 升级至 1.0.0 GA - 官方稳定版本
- 使用 BOM 管理依赖版本 - API与RC版本有变化,已全面更新
- Java版本升级至 21 - 使用最新LTS版本
- Maven编译器配置更新 - 使用 --release 21 确保兼容性
- 代码重构 - 根据官方文档重新编写
- StdioServerTransportProvider 代替旧版Transport - 工具注册API更新:(exchange, request) -> {...} - Client API更新:McpClient.sync(transport)
📁 项目结构
mcp-java-python-zyt/
├── python-server/ # Python MCP Server
│ ├── server.py # 基础时间服务
│ ├── tools_server.py # 扩展工具服务
│ ├── benchmark.py # 性能压测脚本
│ └── requirements.txt # Python依赖
├── java-server/ # Java MCP Server
│ ├── src/
│ │ ├── main/java/com/example/mcp/
│ │ │ ├── McpServerApplication.java # 基础时间服务
│ │ │ └── TimeTool.java # 扩展工具服务
│ │ └── test/java/com/example/mcp/
│ │ └── BenchmarkTest.java # 压测代码
│ └── pom.xml # Maven配置 (使用BOM管理依赖)
├── fastapi-integration/ # Python FastAPI集成示例
│ └── main.py
├── spring-integration/ # Java Spring Boot集成示例 (可选)
│ ├── McpClientConfig.java
│ └── McpController.java
└── benchmark-results/ # 压测结果记录
└── results.md🚀 快速开始
前置要求
- Python: 3.10+ (推荐 3.12)
- Java: 21 (必须)
- Maven: 3.9+ (Java项目需要)
Python Server
cd python-server
# 安装依赖
pip install mcp>=1.6.0
# 运行基础时间服务
python server.py
# 运行扩展工具服务
python tools_server.py
# 运行压测
python benchmark.pyJava Server
cd java-server
# 编译 (需要Java 21)
mvn clean package
# 运行基础时间服务
java -jar target/mcp-server-1.0.0.jar
# 或者运行扩展工具服务
java -cp target/mcp-server-1.0.0.jar com.example.mcp.TimeTool
# 运行压测
mvn test -Dtest=BenchmarkTest📊 预期性能结果
Python MCP Server
| 指标 | 预期结果 |
|---|---|
| 平均延迟 | ~12.3ms |
| P50延迟 | ~11.8ms |
| P99延迟 | ~18.5ms |
Java MCP Server
| 指标 | 预期结果 |
|---|---|
| 平均延迟 | ~3.8ms |
| P50延迟 | ~3.5ms |
| P99延迟 | ~5.2ms |
🔧 提供的工具
基础工具 (server.py / McpServerApplication)
get_current_time- 获取当前时间(ISO格式)add_days- 计算N天后的日期
扩展工具 (tools_server.py / TimeTool)
get_current_time- 获取当前时间add_days- 计算N天后的日期get_weather- 获取城市天气(模拟数据)calculate- 计算数学表达式(简单实现)
📖 代码示例
Python Client调用
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
server_params = StdioServerParameters(
command="python",
args=["server.py"]
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
result = await session.call_tool("get_current_time", {})
print(result.content[0].text)Java Client调用 (SDK 1.0.0)
// 创建Transport
StdioClientTransport transport = new StdioClientTransport(
process.getInputStream(),
process.getOutputStream()
);
// 创建Client
var client = McpClient.sync(transport)
.requestTimeout(Duration.ofSeconds(10))
.build();
// 初始化并调用工具
client.initialize();
CallToolResult result = client.callTool(
new CallToolRequest("get_current_time", Map.of())
);
System.out.println(result.content().get(0).text());🏗️ Java项目配置说明
Maven BOM (Bill of Materials)
io.modelcontextprotocol.sdk
mcp-bom
1.0.0
pom
import
使用BOM的好处:
- 统一管理所有MCP SDK模块版本
- 子依赖不需要再指定版本号
- 确保所有模块版本兼容
Java版本要求
必须使用Java 21,配置如下:
21⚠️ 已知限制
- Java表达式计算 -
calculate工具使用了简化实现,只支持简单的二元运算。生产环境建议使用 exp4j。
- 天气数据 -
get_weather返回的是模拟数据,实际应用需要接入真实天气API。
📚 参考资源
📄 License
MIT License - 仅供学习交流使用
