加密MCP客户端
一个使用Spring AI实现MCP(模型上下文协议)客户端的Spring Boot应用程序。该客户端连接到MCP服务器以动态发现和执行工具。
特性
- MCP协议支持:全面实施用于工具发现和执行的模型上下文协议
- Spring AI集成:利用Spring AI的MCP客户端功能
- REST API:HTTP端点,便于集成和测试
- 工具发现:自动从MCP服务器发现可用工具
- 工具执行:使用动态参数执行工具
- 日志记录:用于调试和监控的全面日志记录
建筑
该应用程序由几个关键组件组成:
- McpClientConfig:配置MCP客户端与服务器的连接
- McpToolService:与MCP服务器交互的核心服务
- McpController:用于客户端操作的REST API终结点
- McpClientRunner:启动演示,展示可用工具
先决条件
- Java 21或更高版本
- Gradle
- 正在运行MCP服务器(例如spring MCP服务器)
配置
更新 src/main/resources/application.properties 使用您的MCP服务器详细信息:
# MCP Server Configuration
mcp.server.command=java
mcp.server.args=-jar,/path/to/spring-mcp-server.jar
mcp.server.timeout=30配置选项
| 属性 | 描述 | 默认值 |
|---|---|---|
mcp.server.command | 启动MCP服务器的命令 | java |
mcp.server.args | 服务器命令的参数 | -jar |
mcp.server.timeout | 连接超时(秒) | 30 |
server.port | HTTP服务器端口 | 8080 |
构建应用程序
./gradlew build运行应用程序
./gradlew bootRun或者直接运行JAR:
java -jar build/libs/crypto-mcp-client-0.0.1-SNAPSHOT.jarAPI终点
初始化MCP客户端
POST http://localhost:8080/api/mcp/initialize初始化与MCP服务器的连接。
列出可用工具
GET http://localhost:8080/api/mcp/tools返回MCP服务器上所有可用工具的列表。
响应示例:
[
{
"name": "encrypt",
"description": "Encrypts data using specified algorithm",
"inputSchema": {
"data": "string",
"algorithm": "string"
}
}
]调用工具
POST http://localhost:8080/api/mcp/tools/call
Content-Type: application/json
{
"toolName": "encrypt",
"arguments": {
"data": "Hello, World!",
"algorithm": "AES"
}
}响应示例:
{
"success": true,
"result": "encrypted_data_here",
"error": null
}关闭MCP客户端
POST http://localhost:8080/api/mcp/close优雅地关闭MCP客户端连接。
用法示例
使用cURL
- 初始化客户端:
curl -X POST http://localhost:8080/api/mcp/initialize- 列出可用工具:
curl http://localhost:8080/api/mcp/tools- 调用工具:
curl -X POST http://localhost:8080/api/mcp/tools/call \
-H "Content-Type: application/json" \
-d '{
"toolName": "your-tool-name",
"arguments": {
"param1": "value1",
"param2": "value2"
}
}'使用Java/Spring
@Autowired
private McpToolService mcpToolService;
public void example() {
// Initialize
mcpToolService.initialize();
// List tools
List tools = mcpToolService.listTools();
// Call a tool
ToolCallRequest request = new ToolCallRequest(
"toolName",
Map.of("arg1", "value1")
);
ToolCallResponse response = mcpToolService.callTool(request);
}项目结构
src/main/java/com/cuius/mcpclient/
├── config/
│ └── McpClientConfig.java # MCP client configuration
├── controller/
│ └── McpController.java # REST API endpoints
├── model/
│ ├── ToolInfo.java # Tool information model
│ ├── ToolCallRequest.java # Tool call request model
│ └── ToolCallResponse.java # Tool call response model
├── runner/
│ └── McpClientRunner.java # Startup demo runner
├── service/
│ └── McpToolService.java # Core MCP service
└── CryptoMcpClientApplication.java # Main application class日志记录
该应用程序包括全面的日志记录。要调整日志级别,请修改 application.properties:
logging.level.com.cuius.mcpclient=INFO
logging.level.org.springframework.ai.mcp=DEBUG错误处理
客户端包括强大的错误处理功能:
- 连接错误被记录并作为RuntimeExceptions抛出
- 工具执行错误返回ToolCallResponse,成功=false
- 所有错误都包括用于调试的描述性消息
发展
添加新功能
- 扩展
McpToolService用于其他MCP操作 - 在中添加新端点
McpController根据需要 - 更新模型
model新数据结构包
测试
使用以下工具运行测试:
./gradlew test故障排除
连接问题
- 验证MCP服务器是否正在运行且可访问
- 检查
mcp.server.command和mcp.server.args配置 - 查看日志以了解详细的错误消息
工具执行失败
- 确保工具参数与预期的架构匹配
- 检查MCP服务器日志中的服务器端错误
- 验证工具名称是否正确(区分大小写)
许可证
该项目是Cuius平台的一部分。
相关项目
- spring mcp服务器:此客户端连接到的MCP服务器实现
