概述

概述

site icon
2025.03.28 1
JavaMCP 服务OpenAPI 转换开发效率
openapi-mcp-server 是一个基于 SpringBoot 和 SpringMVC 的 MCP(Model Context Protocol)服务,旨在将使用 OpenAPI(Swagger)作为接口文档的接口转换为 MCP 服务。该服务支持多 Session 和认证功能,允许开发者通过 MCP 客户端(如 Cursor、Claude Desktop 等)直接操作业务逻辑,而无需开发前端页面。
View on GitHub

Overview

基本能力

产品定位

openapi-mcp-server 是一个 MCP 服务,旨在将 OpenAPI(Swagger)接口转换为 MCP 服务,支持通过 MCP 客户端直接操作业务逻辑。

核心功能

  1. 多 Session 支持:支持多个会话同时操作。
  2. 认证支持:提供认证功能,确保接口安全。
  3. MCP 协议支持:将 OpenAPI 接口转换为 MCP 服务。

适用场景

  1. 快速业务操作:通过 MCP 客户端直接操作业务逻辑,无需开发前端页面。
  2. AI 超级应用:适用于未来基于语言的交互方式,开发者只需关注后端接口开发。

工具列表

  1. InternalWebMvcSseServerTransport.java:SSE 传输实现。
  2. McpConfig.java:MCP 配置类。
  3. RestApiToolProvider.java:REST API 工具提供者。
  4. UserContextSetter.java:用户上下文设置接口。

常见问题解答

  1. 依赖问题:确保使用 Java 17+ 和 SpringBoot、SpringMVC。
  2. 认证实现:需实现 UserContextSetter 接口以支持认证。

使用教程

使用依赖

  1. Java 17+:确保已安装 Java 17 或更高版本。
  2. SpringBoot 和 SpringMVC:确保项目中已集成 SpringBoot 和 SpringMVC。

安装教程

  1. 添加 MCP 原生依赖
<dependency>
  <groupId>io.modelcontextprotocol.sdk</groupId>
  <artifactId>mcp-spring-webmvc</artifactId>
  <version>0.7.0</version>
</dependency>
  1. 复制代码文件:将 InternalWebMvcSseServerTransport.javaMcpConfig.javaRestApiToolProvider.javaUserContextSetter.java 复制到项目中。
  2. 实现 UserContextSetter 接口
@Component
@AllArgsConstructor
public class MyUserContextSetter implements UserContextSetter{

    private JwtConfig jwtConfig;

    @Override
    public void set(String auth) {
        UserContext.set(jwtConfig.getUserContextFromTokenWithoutException(auth));
    }

    @Override
    public void clear() {
        UserContext.clear();
    }
}
  1. 补充基础设施:根据需要添加拦截器等以满足业务需求。

调试方式

  1. 启动服务:确保服务正常运行。
  2. 使用 MCP 客户端连接
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";

const transport = new SSEClientTransport(new URL("http://localhost:8080/mcp/sse/eyJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRfaWQiOjIsImlzX2FkbWluIjpmYWxzZSwic3ViIjoiMiIsImlhdCI6MTc0MzA4MTE5MiwiZXhwIjoxNzQzMTY3NTkyfQ.newz2wj0l5nWk1U_lHNg575bi1FubWSLXqji4o2W-P0"));

const client = new Client(
  {
    name: "MCP Server",
    version: "1.0.0"
  }
);

await client.connect(transport);

const tools = await client.listTools();
console.log("Tools: ", JSON.stringify(tools));

const result = await client.callTool({
  name: "TenantController.pageUser",
  arguments: {
    current: 1,
    pageSize: 10
  }
});

console.log("Result: ", JSON.stringify(result));
  1. 检查日志:确保服务端和客户端日志无错误。

许可证

None