mcpField
M
mcp-server

mcp-server

github.com/rrezartprebreza开发32888 次安装6 天前更新
代码仓库

关于 mcp-server

面向 Spring Boot 3 的 MCP 服务实现指南,介绍使用 Spring AI 或原始 MCP Java SDK。帮助 Java 开发者选择兼容依赖、注册工具、配置传输方式,并处理安全与测试事项。

主要功能

  1. 01Spring AI MCP starter 指引
  2. 02工具回调注册
  3. 03stdio 与 Streamable HTTP 配置
  4. 04远程端点安全检查
  5. 05MCP 客户端验证指引

适用场景

  1. 01在 Spring Boot 中构建 MCP 服务
  2. 02注册 Spring AI 工具方法
  3. 03配置本地 stdio 或远程传输

MCP 相关

介绍如何通过基于 Spring 的 MCP 服务向客户端提供工具;在支持的情况下,本地客户端使用 stdio,远程客户端使用 Streamable HTTP。还涵盖使用 MCP 客户端测试发现和工具调用。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/rrezartprebreza/spring-boot-skills --skill mcp-server

安装后在 Claude Code 中输入/mcp-server确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
examples/
bad-order-tools.java
good-order-tools.java
OrderMcpTools.java
templates/
mcp.json

详细介绍

MCP 服务 - Spring Boot 3

在 Spring Boot 应用中,优先使用 Spring AI MCP 服务启动器。让 Spring AI BOM 管理其 MCP SDK 依赖;不要在基于启动器的应用中强制指定独立 SDK 版本。

依赖


<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-mcp-server</artifactId>
</dependency>


对于不使用 Spring AI 的原始 SDK 应用,请使用当前 MCP Java SDK 2.x 版本,并遵循其迁移指南。不要假设原始 SDK 示例与 Spring AI 1.x 管理的版本相匹配。

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

Spring AI 1.x 工具回调集成

Spring AI 1.0.x 仅通过显式的 MethodToolCallbackProvider 暴露 @Tool 方法——仅有带 @Tool 方法的 @Component 不会注册任何内容。Spring AI 1.1.x 还支持原生的 @McpTool/@McpToolParam,需启用 spring.ai.mcp.server.annotation-scanner.enabled=true;这些注解来自 org.springaicommunity.mcp.annotation(Spring AI 2.0 将它们移至 org.springframework.ai.mcp.annotation)。每个工具只选择一种注册方式。

@Configuration
class McpToolsConfiguration {
    @Bean
    ToolCallbackProvider orderTools(OrderMcpTools tools) {
        return MethodToolCallbackProvider.builder()
            .toolObjects(tools)
            .build();
    }
}

@Component
final class OrderMcpTools {
    private final OrderService orderService;

    OrderMcpTools(OrderService orderService) {
        this.orderService = orderService;
    }

    @Tool(description = "Get an order by UUID with line items and status history")
    OrderResponse getOrder(
            @ToolParam(description = "Order UUID") String orderId) {
        return OrderResponse.from(orderService.findById(UUID.fromString(orderId)));
    }
}
  • 返回 DTO,而不是序列化后的 JPA 实体。
  • 每个工具对象只注册一次;重复的提供者会创建重复的能力。
  • 保持工具名称和描述稳定,因为客户端和模型会依赖它们。
  • 限制结果大小、执行时间和下游调用次数。
  • 对于原始 SDK 代码,请使用 CallToolResult.builder() 等构建器;旧构造函数已移除。

传输配置

spring:
  main:
    banner-mode: "off"
  ai:
    mcp:
      server:
        name: order-service-mcp
        version: 1.0.0
        type: SYNC
        stdio: true

本地客户端启动 jar 时使用 stdio。当所选 Spring AI 1.x 版本支持时,远程服务应使用匹配的 MVC 或 WebFlux 启动器以及 Streamable HTTP。stdio 模式下请保持 stdout 干净,因为它承载 JSON-RPC 帧。

安全与验证

  • 对远程 MCP 端点及每项底层域操作进行身份验证和授权。
  • 验证标识符、枚举值、分页参数和结果限制。
  • 不要暴露机密信息、堆栈跟踪、持久化实体或不受限制的管理工具。
  • 使用真实 MCP 客户端测试发现、无效参数、授权、超时和关闭行为。
  • 复制 2.0 注解示例前,请先查看所选 Spring AI 1.x 版本的发行说明。

示例

  • 请参阅 examples/OrderMcpTools.java、examples/good-order-tools.java 和 examples/bad-order-tools.java。

官方资料

常见问题

  • Agent 在 Spring AI 1.x 中覆盖 MCP SDK——应让 Spring AI BOM 管理它。
  • Agent 将 Spring AI 2.0 的 org.springframework.ai.mcp.annotation 导入语句复制到 1.1 项目中——1.1 使用 org.springaicommunity.mcp.annotation,而 1.0 完全没有 MCP 注解。
  • Agent 认为普通 @Component 上的 @Tool 方法会在 1.x 中显示为 MCP 工具——应通过 ToolCallbackProvider bean 注册它们。
  • Agent 传入 --spring.ai.mcp.server.transport=stdio——不存在此属性;Boot 会静默忽略它。请使用 spring.ai.mcp.server.stdio=true。
  • Agent 在原始 SDK 代码中使用已移除的 new CallToolResult(...) 构造函数——请使用构建器。
  • Agent 在 stdio 模式下向 stdout 写日志——请将日志输出到 stderr 或文件,并禁用横幅。
  • Agent 将同一个工具对象注册两次——每项能力只保留一个回调提供者。
  • Agent 暴露实体或无界集合——请返回有界 DTO 契约。

评论

支持 Markdown