项目简介

'openapi-to-mcp-converter' 是一个Node.js库,旨在简化将现有的RESTful API转换为符合Model Context Protocol (MCP) 的服务器过程。通过解析标准的OpenAPI 3.0规范文件,它可以自动生成一个MCP服务器实例,将规范中定义的每个API操作作为LLM可调用的“工具”暴露出来。

主要功能点

  • 自动化转换: 自动读取并解析OpenAPI 3.0规范(JSON格式)。
  • 工具生成: 将OpenAPI规范中的每个路径和HTTP方法组合(即每个API操作)映射为一个MCP工具。
  • Schema推导: 根据OpenAPI中定义的参数(路径、查询、头部)和请求体,自动生成符合JSON Schema标准的MCP工具输入Schema。
  • 请求代理: 作为MCP服务器,接收LLM客户端发出的工具调用请求,将MCP格式的参数映射到对应的HTTP请求参数位置,并通过HTTP客户端(如Axios)调用实际的API端点。
  • 结果转换: 将实际API的HTTP响应体封装成MCP工具调用的响应格式返回给LLM客户端。
  • 基于MCP SDK: 利用官方Model Context Protocol SDK构建服务器,支持Stdio等传输协议。

安装步骤

使用npm安装此库:

npm install openapi-mcp-converter

项目需要Node.js v18或更高版本,以及TypeScript v5.x或更高版本(如果使用TypeScript编写您的服务器启动脚本)。

服务器配置 (供MCP客户端参考)

MCP客户端需要知道如何启动您的MCP服务器进程并与其通信。使用此库构建的MCP服务器通常作为一个Node.js脚本运行。以下是MCP客户端通常需要配置的信息示例:

  • 服务器名称: 服务器启动后会向客户端声明一个名称,例如此转换器默认声明的名称是 '"github-mcp-server"'(可在服务器代码中修改)。这是客户端连接成功后识别服务器的标识。
  • 启动命令 (command): 运行服务器脚本的命令。通常是'node'。
  • 启动参数 (args): 传递给命令的参数列表。第一个参数通常是您的服务器启动脚本文件的路径。例如,如果您编写了一个名为 'run_my_mcp_server.js' 的脚本来启动服务器,参数列表就是 '["run_my_mcp_server.js"]'。
  • 传输协议 (transport): 服务器和客户端通信的方式。此库的示例代码展示了使用'stdio'(标准输入输出流)进行通信。根据您的服务器脚本配置选择对应的协议(例如:'"stdio"')。

MCP客户端通常会有一个JSON格式的配置,包含上述信息,例如:

{
  // 其他客户端配置...
  "servers": [
    {
      "displayName": "我的OpenAPI转工具服务器", // 客户端界面显示的名称
      "serverInfo": {
        "command": "node", // 启动命令
        "args": ["/path/to/your/server/script.js"], // 您的服务器启动脚本路径
        "transport": "stdio" // 传输协议
      }
      // 其他与此服务器相关的配置...
    }
  ]
}

请根据您的服务器脚本实际路径和您选择的传输协议来配置您的MCP客户端。

基本使用方法

  1. 准备您的OpenAPI 3.0规范文件(通常为JSON格式,例如 'openapi.json')。

  2. 创建一个Node.js脚本文件(例如 'run_server.js')。

  3. 在该脚本中,使用'openapi-mcp-converter' 库来创建和启动服务器:

    import fs from 'fs';
    import path from 'path';
    import { fileURLToPath } from 'url';
    import { OpenApiMCPSeverConverter } from 'openapi-mcp-converter'; // 导入库
    import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; // 导入Stdio传输
    
    // 获取当前脚本所在目录,读取openapi.json文件
    const __filename = fileURLToPath(import.meta.url);
    const __dirname = path.dirname(__filename);
    const openApiDoc = JSON.parse(fs.readFileSync(path.join(__dirname, 'openapi.json'), 'utf8'));
    
    // 创建转换器实例,传入OpenAPI文档和可选配置(如请求超时时间)
    const converter = new OpenApiMCPSeverConverter(openApiDoc, { timeout: 60000 });
    
    // 获取MCP服务器实例
    const server = converter.getServer();
    
    // 创建Stdio传输实例
    const transport = new StdioServerTransport();
    
    // 连接服务器到传输,开始监听MCP客户端请求
    async function startMcpServer() {
      try {
        await server.connect(transport);
        console.log("MCP Server running on stdio"); // 此消息通常在Stdio模式下不可见,因为Stdio用于MCP通信
      } catch (error) {
        console.error("Fatal error starting MCP server:", error);
        process.exit(1);
      }
    }
    
    startMcpServer();
  4. 将您的 'openapi.json' 文件放在与 'run_server.js' 相同的目录下,或修改代码指定正确路径。

  5. 配置您的MCP客户端,使其通过 'node run_server.js' 命令启动此服务器脚本,并使用 'stdio' 传输协议。

  6. 启动MCP客户端。客户端将启动您的服务器进程,并能发现并调用OpenAPI中定义的工具。

信息

分类

开发者工具