MCP 服务器启动启动程序
模型上下文协议(MCP)服务器是通过标准化协议接口向人工智能应用展示特定能力的程序。每个服务器为特定领域提供专注的功能。
Spring AI MCP 服务器启动启动工具为 Spring Boot 应用中的 MCP 服务器设置提供了自动配置。它们使 MCP 服务器功能能够无缝集成于 Spring Boot 的自动配置系统。
MCP 服务器启动启动工具提供:
-
MCP服务器组件的自动配置,包括工具、资源和提示
-
支持不同MCP协议版本,包括STDIO、SSE、Streamable-HTTP和无状态服务器
-
支持同步和异步作模式
-
多传输层选项
-
灵活的工具、资源和提示说明
-
更改通知功能
-
基于注释的服务器开发,支持自动豆子扫描和注册
MCP 服务器启动Starters
MCP 服务器支持多种协议和传输机制。使用专用的Starters和正确的spring.ai.mcp.server.protocol配置服务器的属性:
WebMVC
服务器类型 |
Dependency |
属性 |
|
|
|
|
|
|
|
|
服务器功能
根据服务器和传输类型,MCP 服务器可以支持多种功能,例如:
-
工具——允许服务器暴露可被语言模型调用的工具
-
资源——为服务器提供向客户端暴露资源的标准化方式
-
提示——为服务器提供向客户端暴露提示模板的标准化方式
-
实用性/补全——为服务器提供一种标准化的方式,用于提示和资源 URI 的参数自动补全建议
-
实用性/日志——为服务器向客户端发送结构化日志消息提供了标准化方式
-
实用性/进度——通过通知消息为长期运行的作提供可选的进度跟踪功能
-
实用性/Ping——服务器报告状态的可选健康检查机制
所有功能默认都是启用的。禁用某个功能会阻止服务器注册并向客户端展示相应的功能。
服务器协议
MCP提供多种协议类型,包括:
-
STDIO - 进程内(例如服务器在主机应用内运行)协议。通信通过标准输入和标准输出进行。以启用
STDIO设置spring.ai.mcp.server.stdio=true. -
SSE - 服务器发送的实时事件协议。服务器作为独立进程运行,可以处理多个客户端连接。
-
可流式HTTP——可流式HTTP传输允许MCP服务器作为独立进程运行,能够通过HTTP POST和GET请求处理多个客户端连接,并可选地支持多服务器消息的服务器发送事件(SSE)流式传输。它取代了SSE传输。启用
可流媒体协议,设定spring.ai.mcp.server.protocol=STREAMABLE. -
无状态——无状态MCP服务器设计用于简化部署,即请求间不保持会话状态。 它们非常适合微服务架构和云原生部署。以实现
无 国籍协议,设定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 支持的异步工具规范。
注意:非同步服务器只会注册异步MCP注释方法。同步方法将被忽略。
MCP 服务器注释
MCP 服务器启动Starters为基于注释的服务器开发提供了全面支持,允许您使用声明式 Java 注释创建 MCP 服务器,而无需手动配置。
关键注释
-
@McpTool - 将方法标记为带有自动JSON模式生成的MCP工具
-
@McpResource - 通过URI模板提供资源访问
-
@McpPrompt - 生成提示信息以供AI交互
-
@McpComplete - 为提示提供自动补全功能
特殊参数
注释系统支持特殊参数类型,提供额外的上下文:
-
McpMeta- 访问MCP请求中的元数据 -
@McpProgressToken- 接收用于长期运行作的进度Tokens -
McpSyncServerExchange/McpAsyncServerExchange- 高级作的完整服务器上下文 -
McpTransportContext- 无状态作的轻量级上下文 -
呼叫工具请求- 对灵活工具的动态模式支持
简单示例
@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)——春季 AI MCP 服务器启动Starters,支持 WebFlux 传输
-
天气服务器(STDIO)——支持 STDIO 传输的 Spring AI MCP 服务器启动Starters
-
Weather Server 手动配置 - Spring AI MCP 服务器启动Starters,不使用自动配置,而是使用 Java SDK 手动配置服务器
-
Streamable-HTTP WebFlux/WebMVC 示例 - TODO
-
无状态 WebFlux/WebMVC 示例 - TODO