基于官方 Java SDK:io.modelcontextprotocol:sdk
前置依赖 Maven
XML
<dependency>
<groupId>io.modelcontextprotocol</groupId>
<artifactId>sdk</artifactId>
<version>0.4.0</version>
</dependency>
1. Stdio 标准输入输出模式(本地进程通信)
本地客户端拉起子进程,管道双向通信,仅本机可用
java
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.transport.StdioServerTransport;
public class StdioMcpServer {
public static void main(String[] args) {
// 创建标准IO传输层
StdioServerTransport transport = new StdioServerTransport();
// 构建MCP服务
McpServer server = McpServer.builder(transport)
.serverInfo("demo-stdio-server", "1.0.0")
.build();
// 启动服务
server.start();
System.out.println("Stdio MCP Server running");
}
}
客户端连接方式:启动该进程,通过进程 stdin/stdout 交互,无端口。
2. SSE 模式(传统 HTTP-SSE 半双工)
分两个接口:GET /sse 推送流、POST /message 客户端发消息
java
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.transport.SseServerTransport;
public class SseMcpServer {
public static void main(String[] args) {
// 绑定0.0.0.0:8080,消息接口 /message,sse长连接端点 /sse
SseServerTransport transport = new SseServerTransport("/message", 8080, "0.0.0.0");
McpServer server = McpServer.builder(transport)
.serverInfo("demo-sse-server", "1.0.0")
.build();
server.start();
System.out.println("SSE MCP Server listen on http://127.0.0.1:8080/sse");
}
}
特点:浏览器 EventSource 原生支持,半双工,多客户端连接。
3. Streamable HTTP(官方新一代标准双向 HTTP 流)
MCP 主推,单端点完成双向流式,替代老旧 SSE
java
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.transport.StreamableHttpServerTransport;
public class StreamableHttpMcpServer {
public static void main(String[] args) {
// 监听8081,统一访问根路径 /mcp
StreamableHttpServerTransport transport = new StreamableHttpServerTransport(
"0.0.0.0",
8081,
"/mcp"
);
McpServer server = McpServer.builder(transport)
.serverInfo("demo-streamable-http", "1.0.0")
.build();
server.start();
System.out.println("Streamable HTTP MCP address: http://127.0.0.1:8081/mcp");
}
}
优势:HTTP/2 双向流、会话持久、自动重连、无需双接口。
4. WebSocket 全双工模式(高实时交互)
原生全双工长连接,适合频繁工具调用、对话打断
java
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.transport.WebSocketServerTransport;
public class WebSocketMcpServer {
public static void main(String[] args) {
// ws://127.0.0.1:8082/mcp
WebSocketServerTransport transport = new WebSocketServerTransport(
"0.0.0.0",
8082,
"/mcp"
);
McpServer server = McpServer.builder(transport)
.serverInfo("demo-ws-server", "1.0.0")
.build();
server.start();
System.out.println("WebSocket MCP ws://127.0.0.1:8082/mcp");
}
}
5. TCP Socket 裸套接字(内网高性能)
无 HTTP 封装,延迟最低,仅后端服务互通,不支持浏览器
java
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.transport.TcpServerTransport;
public class TcpMcpServer {
public static void main(String[] args) {
TcpServerTransport transport = new TcpServerTransport("0.0.0.0", 8083);
McpServer server = McpServer.builder(transport)
.serverInfo("demo-tcp-server", "1.0.0")
.build();
server.start();
System.out.println("TCP MCP listen 127.0.0.1:8083");
}
}
客户端极简示例(Stdio 客户端调用本地服务)
java
import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.transport.StdioClientTransport;
import java.util.List;
public class StdioClientDemo {
public static void main(String[] args) {
// 启动MCP服务进程命令
ProcessBuilder pb = new ProcessBuilder("java", "-cp", "target/classes", "StdioMcpServer");
Process process = pb.start();
// 绑定进程流作为客户端传输通道
StdioClientTransport transport = new StdioClientTransport(process.getInputStream(), process.getOutputStream());
McpClient client = McpClient.create(transport);
// 初始化握手
client.initialize();
// 调用工具示例
var tools = client.listTools();
System.out.println("可用工具列表:" + tools);
}
}
选型总结
- 本地桌面插件、本地调试 → Stdio
- 简单网页、低改造需求 → SSE
- 新项目、云服务、标准远程部署 → Streamable HTTP
- 实时对话、频繁工具交互、需要打断输出 → WebSocket
- 内网微服务集群、极致低延迟 → TCP Socket
