流式HTTP传输MCP服务器

基于Java SDK的HttpServletStreamableServerTransportProvider实现的MCP服务器,提供流式HTTP传输功能,适用于模型上下文协议通信。

  • by ShivamPansuriya
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 shivampansuriya/mcp-server

使用说明

具有流式HTTP传输的MCP服务器

本项目演示了如何使用Java SDK实现模型上下文协议(MCP)服务器 HttpServletStreamableServerTransportProvider服务器为MCP与单个端点的通信提供流式HTTP传输。

特性

  • HttpServletStreamableServerTransportProvider:使用流式HTTP的基于Servlet的MCP传输
  • 示例工具:用于演示的Echo和计算器工具
  • 示例资源:JSON数据资源
  • REST API:用于监视和控制的管理端点
  • Spring Boot集成:易于配置和部署

建筑

MCP服务器由几个关键组件组成:

  1. HttpServletStreamableServerTransportProvider:处理流式HTTP传输
  2. McpServerConfig:MCP组件的弹簧配置
  3. 示例cpHandler:实施MCP工具和资源
  4. McpServerService:管理服务器生命周期和处理程序注册
  5. McpServerController:用于服务器管理的REST API

端点

MCP协议端点

  • 可流式传输HTTP端点: GET|POST /mcp -所有MCP通信的单一端点
    • GET /mcp 随着 Accept: text/event-stream -建立SSE连接
    • POST /mcp 使用JSON-RPC消息-处理客户端请求

管理REST API

  • 健康检查: GET /health -服务器运行状况
  • 察看连接信息: GET /info -服务器信息和配置
  • 服务器状态: GET /status -当前服务器状态

可用工具

  1. get_current时间:返回当前日期和时间

    • 参数: format (字符串,可选)-时间格式:iso格式为“iso”,人类可读格式为“可读”
  2. 回声:回应提供的文本

    • 参数: text (字符串,必填)-要回显的文本

可用资源

目前,该服务器专注于工具实现。可以通过扩展服务器配置来添加资源。

入门指南

先决条件

  • Java 17或更高版本
  • Maven 3.6或更高版本

运行服务器

  1. 克隆存储库

  2. 构建项目:

    ./mvnw clean install
    
  3. 运行服务器:

    ./mvnw spring-boot:run
    
  4. 服务器将在端口9092上启动

测试服务器

  1. 健康检查:

    curl http://localhost:9092/health
    
  2. 察看连接信息:

    curl http://localhost:9092/info
    
  3. 通过流式HTTP连接 (使用curl):

    curl -N -H "Accept: text/event-stream" http://localhost:9092/mcp
    

MCP客户端连接

要将MCP客户端连接到此服务器,请执行以下操作:

  1. 流式HTTP:使用传输类型“Streamable HTTP”
  2. 端点URL: http://localhost:9092/mcp
  3. 协议:服务器支持无状态POST请求和可选的SSE流

配置

服务器可以通过以下方式配置 application.properties:

# Server Configuration
server.port=9092

# Logging
logging.level.com.example.mcpserver=DEBUG
logging.level.io.modelcontextprotocol=DEBUG

# Application
spring.application.name=mcp-server

流式HTTP实现

此服务器实现 流式HTTP MCP规范中规定的传输协议。主要特点:

传输协议合规性

  • ✅ 单端点:用途 /mcp 适用于所有MCP通信
  • ✅ HTTP方法:支持GET和POST请求
  • ✅ 内容协商:手柄 Accept JSON和SSE响应的标头
  • ✅ 会话管理:自动创建和管理会话
  • ✅ 协议协商:支持MCP协议版本2025-03-26和2025-06-18

MCP检查器兼容性

该服务器与MCP Inspector v0.15.0完全兼容:

  • 传输类型:在MCP检查器中选择“流式HTTP”
  • 统一资源定位符:使用 http://localhost:9092/mcp
  • 连接:自动会话建立和工具发现

协议特性

  • JSON-RPC 2.0:完全符合JSON-RPC消息格式
  • 工具执行:支持 tools/list 和 tools/call 方法
  • 错误处理:正确的错误响应和验证
  • 流媒体:可选的SSE流媒体用于实时通信

依赖项

该项目使用MCP Java SDK:

<dependency>
    <groupId>io.modelcontextprotocol.sdk</groupId>
    <artifactId>mcp</artifactId>
    <version>0.11.0</version>
</dependency>

发展

添加新工具

  1. 扩展 ExampleMcpHandler.handleListTools() 包含您的工具定义
  2. 在中添加案例 ExampleMcpHandler.handleCallTool() 处理您的工具执行
  3. 执行工具逻辑

添加新资源

  1. 扩展 ExampleMcpHandler.handleListResources() 包含您的资源定义
  2. 在中添加案例 ExampleMcpHandler.handleGetResource() 提供您的资源内容

自定义传输配置

这 HttpServletSseServerTransportProvider 可以定制 McpServerConfig:

@Bean
public HttpServletSseServerTransportProvider mcpTransportProvider(ObjectMapper objectMapper) {
    return HttpServletSseServerTransportProvider.builder()
            .objectMapper(objectMapper)
            .baseUrl("") 
            .messageEndpoint("/mcp/message")
            .sseEndpoint("/sse")
            .keepAliveInterval(Duration.ofSeconds(30))
            .build();
}

测试

使用以下命令运行测试:

./mvnw test

测试验证:

  • Spring上下文加载
  • MCP服务器初始化
  • REST API端点
  • 服务器状态和运行状况

故障排除

  1. 端口已在使用中:在中更改端口 application.properties
  2. 连接问题:检查防火墙设置并确保服务器可访问
  3. 依赖性问题:验证Maven依赖关系是否正确解析

许可证

该项目根据MIT许可证获得许可。

MCP服务器