MCP 服务器启动器
模型上下文协议 (MCP) 服务器 是通过标准化协议接口向 AI 应用程序公开特定功能的程序。每个服务器都为特定领域提供专注的功能。
Spring AI MCP 服务器启动器为在 Spring Boot 应用程序中设置 MCP 服务器 提供自动配置。它们实现了 MCP 服务器功能与 Spring Boot 自动配置系统的无缝集成。
MCP 服务器启动器提供:
-
MCP 服务器组件的自动配置,包括工具、资源和提示
-
支持不同的 MCP 协议版本,包括 STDIO、SSE、可流式 HTTP 和无状态服务器
-
支持同步和异步操作模式
-
多种传输层选项
-
灵活的工具、资源和提示规范
-
变更通知功能
-
基于注解的服务器开发,具有自动 Bean 扫描和注册功能
MCP 服务器启动器
MCP 服务器支持多种协议和传输机制。使用专用的启动器和正确的 spring.ai.mcp.server.protocol 属性来配置您的服务器
WebMVC
服务器类型 |
依赖项 |
财产 |
|
|
|
|
|
|
|
|
服务器功能
根据服务器和传输类型,MCP 服务器可以支持各种功能,例如
-
工具 - 允许服务器公开可由语言模型调用的工具
-
资源 - 提供服务器向客户端公开资源的标准化方式
-
提示 - 提供服务器向客户端公开提示模板的标准化方式
-
实用程序/自动完成 - 提供服务器为提示和资源 URI 提供参数自动完成建议的标准化方式
-
实用程序/日志记录 - 提供服务器向客户端发送结构化日志消息的标准化方式
-
实用程序/进度 - 通过通知消息对长时间运行的操作进行可选的进度跟踪
-
实用程序/Ping - 服务器报告其状态的可选健康检查机制
所有功能默认启用。禁用某个功能将阻止服务器注册并向客户端公开相应的功能。
服务器协议
MCP 提供多种协议类型,包括
-
STDIO - 进程内(例如服务器在主机应用程序内部运行)协议。通信通过标准输入和标准输出进行。要启用
STDIO,请设置spring.ai.mcp.server.stdio=true。 -
SSE - 用于实时更新的服务器发送事件协议。服务器作为独立进程运行,可以处理多个客户端连接。
-
可流式 HTTP - 可流式 HTTP 传输 允许 MCP 服务器作为独立进程运行,使用 HTTP POST 和 GET 请求处理多个客户端连接,并可选地使用服务器发送事件 (SSE) 流式传输多个服务器消息。它取代了 SSE 传输。要启用
STREAMABLE协议,请设置spring.ai.mcp.server.protocol=STREAMABLE。 -
无状态 - 无状态 MCP 服务器设计用于简化部署,其中请求之间不维护会话状态。它们是微服务架构和云原生部署的理想选择。要启用
STATELESS协议,请设置spring.ai.mcp.server.protocol=STATELESS。
同步/异步服务器 API 选项
MCP 服务器 API 支持命令式(即同步)和响应式(例如异步)编程模型。
-
同步服务器 - 使用
McpSyncServer实现的默认服务器类型。它专为应用程序中直接的请求-响应模式而设计。要启用此服务器类型,请在配置中设置spring.ai.mcp.server.type=SYNC。激活后,它会自动处理同步工具规范的配置。
注意: SYNC 服务器将只注册同步 MCP 注解方法。异步方法将被忽略。
-
异步服务器 - 异步服务器实现使用
McpAsyncServer,并针对非阻塞操作进行了优化。要启用此服务器类型,请使用spring.ai.mcp.server.type=ASYNC配置您的应用程序。此服务器类型会自动设置带有内置 Project Reactor 支持的异步工具规范。
注意: ASYNC 服务器将只注册异步 MCP 注解方法。同步方法将被忽略。
MCP 服务器注解
MCP 服务器启动器为基于注解的服务器开发提供全面支持,允许您使用声明性 Java 注解而不是手动配置来创建 MCP 服务器。
关键注解
-
@McpTool - 使用自动 JSON 模式生成将方法标记为 MCP 工具
-
@McpResource - 通过 URI 模板提供对资源的访问
-
@McpPrompt - 为 AI 交互生成提示消息
-
@McpComplete - 为提示提供自动完成功能
特殊参数
注解系统支持提供额外上下文的特殊参数类型
-
McpMeta- 访问 MCP 请求中的元数据 -
@McpProgressToken- 接收长时间运行操作的进度令牌 -
McpSyncServerExchange/McpAsyncServerExchange- 用于高级操作的完整服务器上下文 -
McpTransportContext- 用于无状态操作的轻量级上下文 -
CallToolRequest- 用于灵活工具的动态模式支持
简单示例
@Component
public class CalculatorTools {
@McpTool(name = "add", description = "Add two numbers together")
public int add(
@McpToolParam(description = "First number", required = true) int a,
@McpToolParam(description = "Second number", required = true) int b) {
return a + b;
}
@McpResource(uri = "config://{key}", name = "Configuration")
public String getConfig(String key) {
return configData.get(key);
}
}
示例应用程序
-
天气服务器 (SSE WebFlux) - 带有 WebFlux 传输的 Spring AI MCP 服务器启动器
-
天气服务器 (STDIO) - 带有 STDIO 传输的 Spring AI MCP 服务器启动器
-
天气服务器手动配置 - 不使用自动配置但使用 Java SDK 手动配置服务器的 Spring AI MCP 服务器启动器
-
可流式 HTTP WebFlux/WebMVC 示例 - 待办
-
无状态 WebFlux/WebMVC 示例 - 待办