概述

Model Context Protocol 的 Java SDK 实现了 AI 模型和工具之间的标准化集成。

功能特性

  • MCP 客户端和服务器端实现支持:
  • 多种传输实现:
    • 默认传输:
      • 基于标准输入输出的进程通信传输
      • 基于 Java HttpClient 的 HTTP SSE 客户端流传输
      • 基于 Servlet 的 HTTP SSE 服务器流传输
    • 基于 Spring 的传输:
      • WebFlux SSE 客户端和服务器端响应式 HTTP 流传输
      • WebMVC SSE 基于 servlet 的 HTTP 流传输
  • 支持同步和异步编程范式

架构

SDK 采用分层架构,具有清晰的关注点分离:

MCP 技术栈架构

  • 客户端/服务器层 (McpClient/McpServer):都使用 McpSession 进行同步/异步操作, McpClient 处理客户端协议操作,McpServer 管理服务器端协议操作。
  • 会话层 (McpSession):使用 DefaultMcpSession 实现管理通信模式和状态。
  • 传输层 (McpTransport):通过以下方式处理 JSON-RPC 消息序列化/反序列化:
    • 核心模块中的 StdioTransport (标准输入/输出)
    • 专用传输模块中的 HTTP SSE 传输 (Java HttpClient, Spring WebFlux, Spring WebMVC)

MCP 客户端是 Model Context Protocol (MCP) 架构中的重要组件,负责建立和管理与 MCP 服务器的连接。 它实现了协议的客户端部分。

Java MCP 客户端架构

MCP 服务器是 Model Context Protocol (MCP) 架构中的基础组件,为客户端提供工具、资源和功能。 它实现了协议的服务器端部分。

Java MCP 服务器架构

关键交互:

  • 客户端/服务器初始化:传输设置、协议兼容性检查、能力协商和实现细节交换。
  • 消息流:JSON-RPC 消息处理,包括验证、类型安全的响应处理和错误处理。
  • 资源管理:资源发现、基于 URI 模板的访问、订阅系统和内容检索。

依赖

将以下 Maven 依赖添加到你的项目中:

核心 MCP 功能:

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

对于 HTTP SSE 传输实现,添加以下依赖之一:

<!-- 基于 Spring WebFlux 的 SSE 客户端和服务器传输 -->
<dependency>
    <groupId>io.modelcontextprotocol.sdk</groupId>
    <artifactId>mcp-spring-webflux</artifactId>
</dependency>

<!-- 基于 Spring WebMVC 的 SSE 服务器传输 -->
<dependency>
    <groupId>io.modelcontextprotocol.sdk</groupId>
    <artifactId>mcp-spring-webmvc</artifactId>
</dependency>

核心 MCP 功能:

dependencies {
  implementation platform("io.modelcontextprotocol.sdk:mcp")
  //...
}

对于 HTTP SSE 传输实现,添加以下依赖之一:

// 基于 Spring WebFlux 的 SSE 客户端和服务器传输
dependencies {
  implementation platform("io.modelcontextprotocol.sdk:mcp-spring-webflux")
}

// 基于 Spring WebMVC 的 SSE 服务器传输
dependencies {
  implementation platform("io.modelcontextprotocol.sdk:mcp-spring-webmvc")
}

物料清单 (BOM)

物料清单 (BOM) 声明了特定版本使用的所有依赖项的推荐版本。 在应用程序的构建脚本中使用 BOM 可以避免你自己指定和维护依赖项版本。 相反,你使用的 BOM 版本决定了所使用的依赖项版本。 除非你选择覆盖它们,否则它还确保你默认使用受支持和测试过的依赖项版本。

将 BOM 添加到你的项目中:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.modelcontextprotocol.sdk</groupId>
            <artifactId>mcp-bom</artifactId>
            <version>0.7.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
dependencies {
  implementation platform("io.modelcontextprotocol.sdk:mcp-bom:0.7.0")
  //...
}

Gradle 用户还可以通过利用 Gradle (5.0+) 对使用 Maven BOM 声明依赖约束的原生支持来使用 Spring AI MCP BOM。 这是通过在 Gradle 构建脚本的依赖部分添加 ‘platform’ 依赖处理程序方法来实现的。 如上面的代码片段所示,然后可以使用无版本声明的方式添加你想使用的一个或多个 spring-ai 模块的启动器依赖,例如 spring-ai-openai。

将版本号替换为你想使用的 BOM 版本。

可用依赖

BOM 管理的可用依赖项如下:

  • 核心依赖
    • io.modelcontextprotocol.sdk:mcp - 提供 Model Context Protocol 实现的基本功能和 API 的核心 MCP 库。
  • 传输依赖
    • io.modelcontextprotocol.sdk:mcp-spring-webflux - 用于响应式应用的基于 WebFlux 的服务器发送事件 (SSE) 传输实现。
    • io.modelcontextprotocol.sdk:mcp-spring-webmvc - 用于基于 servlet 的应用的基于 WebMVC 的服务器发送事件 (SSE) 传输实现。
  • 测试依赖
    • io.modelcontextprotocol.sdk:mcp-test - MCP 应用的测试工具和支持。