使用说明
具有流式HTTP传输的MCP服务器
本项目演示了如何使用Java SDK实现模型上下文协议(MCP)服务器 HttpServletStreamableServerTransportProvider服务器为MCP与单个端点的通信提供流式HTTP传输。
特性
- HttpServletStreamableServerTransportProvider:使用流式HTTP的基于Servlet的MCP传输
- 示例工具:用于演示的Echo和计算器工具
- 示例资源:JSON数据资源
- REST API:用于监视和控制的管理端点
- Spring Boot集成:易于配置和部署
建筑
MCP服务器由几个关键组件组成:
- HttpServletStreamableServerTransportProvider:处理流式HTTP传输
- McpServerConfig:MCP组件的弹簧配置
- 示例cpHandler:实施MCP工具和资源
- McpServerService:管理服务器生命周期和处理程序注册
- 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-当前服务器状态
可用工具
-
get_current时间:返回当前日期和时间
- 参数:
format(字符串,可选)-时间格式:iso格式为“iso”,人类可读格式为“可读”
- 参数:
-
回声:回应提供的文本
- 参数:
text(字符串,必填)-要回显的文本
- 参数:
可用资源
目前,该服务器专注于工具实现。可以通过扩展服务器配置来添加资源。
入门指南
先决条件
- Java 17或更高版本
- Maven 3.6或更高版本
运行服务器
-
克隆存储库
-
构建项目:
./mvnw clean install -
运行服务器:
./mvnw spring-boot:run -
服务器将在端口9092上启动
测试服务器
-
健康检查:
curl http://localhost:9092/health -
察看连接信息:
curl http://localhost:9092/info -
通过流式HTTP连接 (使用curl):
curl -N -H "Accept: text/event-stream" http://localhost:9092/mcp
MCP客户端连接
要将MCP客户端连接到此服务器,请执行以下操作:
- 流式HTTP:使用传输类型“Streamable HTTP”
- 端点URL:
http://localhost:9092/mcp - 协议:服务器支持无状态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请求
- ✅ 内容协商:手柄
AcceptJSON和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>
发展
添加新工具
- 扩展
ExampleMcpHandler.handleListTools()包含您的工具定义 - 在中添加案例
ExampleMcpHandler.handleCallTool()处理您的工具执行 - 执行工具逻辑
添加新资源
- 扩展
ExampleMcpHandler.handleListResources()包含您的资源定义 - 在中添加案例
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端点
- 服务器状态和运行状况
故障排除
- 端口已在使用中:在中更改端口
application.properties - 连接问题:检查防火墙设置并确保服务器可访问
- 依赖性问题:验证Maven依赖关系是否正确解析
许可证
该项目根据MIT许可证获得许可。