基于Spring Boot实现STDIO通信的MCP Server与验证
STDIO 是一种基于标准输入输出(Standard Input/Output)的本地通信机制,旨在实现客户端与服务端之间的高效交互。
STDIO 是 MCP 协议支持的传输方式之一,通过操作系统的管道机制(stdin/stdout)进行数据传输,适用于客户端与服务端在同一台机器上的本地通信场景。
本篇基于Spring Boot 快速演示使用Java语言实现 STDIO通信的MCP Server,以及调用和验证。开始之前,先简单介绍以下STDIO的原理。
MCP STDIO核心原理
- 通信模型
- 双向同步通信:客户端与服务端通过 stdin/stdout 建立双向通信通道,消息按顺序处理,前一条消息处理完成后才能处理下一条(同步阻塞模型)49。
- 协议基础:基于 JSON-RPC 2.0 格式,消息以换行符
**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">\n</font>**
分隔,严格遵循 UTF-8 编码。
- 消息流程
- 客户端:通过启动服务端子进程(如命令行工具)建立通信管道,将 JSON-RPC 请求写入 stdout。
- 服务端:从 stdin 读取请求,处理后将 JSON-RPC 响应写入 stdout,客户端从 stdout 读取结果。
实例说明
简单起见,本篇仅演示MCP的Tool的功能,为了更简单,该工具实现的功能只是一个简单的加法运算。
在实际的应用中,大模型已经具备了加法等功能,MCP的Tool的功能是为了补全不具备的功能,比如实时查询天气预报,获取内容数据等。
- 开发工具: VS Code
服务器定义的具体步骤
- 创建一个Spring Boot项目。
可以通过Spring initializer 创建,也可以在目录中直接添加一个 pom.xml 文件。
这里的项目名称是mcp-spring
- 添加依赖项
主要就是添加 spring-ai-starter-mcp-server ,这里使用的版本是 1.0.0-M8, 完整的 pom.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.5</version><relativePath /> <!-- lookup parent from repository --></parent><groupId>com.osxm.ai.mcp</groupId><artifactId>mcp-spring-stdio-server</artifactId><version>0.0.1-SNAPSHOT</version><name>Spring AI MCP STDIO server</nam