MCP协议客户端

一个基于Spring Boot的MCP协议客户端,用于动态发现和执行工具,支持REST API集成。

  • by ttmunyunguma
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 ttmunyunguma/crypto-mcp-client

使用说明

加密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.jar

API终点

初始化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

  1. 初始化客户端:
curl -X POST http://localhost:8080/api/mcp/initialize
  1. 列出可用工具:
curl http://localhost:8080/api/mcp/tools
  1. 调用工具:
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<ToolInfo> 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
  • 所有错误都包括用于调试的描述性消息

发展

添加新功能

  1. 扩展 McpToolService 用于其他MCP操作
  2. 在中添加新端点 McpController 根据需要
  3. 更新模型 model 新数据结构包

测试

使用以下工具运行测试:

./gradlew test

故障排除

连接问题

  • 验证MCP服务器是否正在运行且可访问
  • 检查 mcp.server.command 和 mcp.server.args 配置
  • 查看日志以了解详细的错误消息

工具执行失败

  • 确保工具参数与预期的架构匹配
  • 检查MCP服务器日志中的服务器端错误
  • 验证工具名称是否正确(区分大小写)

许可证

该项目是Cuius平台的一部分。

相关项目

  • spring mcp服务器:此客户端连接到的MCP服务器实现