mcpField
O
OpenAPI to MCP Server Converter

OpenAPI to MCP Server Converter

本地服务
github.com/zxypro1开发工具416 周前更新

关于 OpenAPI to MCP Server Converter

OpenAPI to MCP Server Converter 是一个将 OpenAPI 规范转换为 MCP 服务实例的 TypeScript 工具,适合需要把 API 接入 MCP 的开发者。它解析 OpenAPI 3.0,并处理工具调用参数映射。

主要功能

  1. 01解析 OpenAPI 3.0 规范
  2. 02生成 MCP 服务实例
  3. 03校验 TypeScript 类型
  4. 04映射工具调用参数
  5. 05支持 stdio、SSE 与 Streamable HTTP 示例

适用场景

  1. 01将现有 OpenAPI 定义接入 MCP
  2. 02为 API 创建本地 MCP 服务
  3. 03验证 API 工具的参数映射

MCP 相关

该工具根据 OpenAPI 规范创建 MCP 服务,并将 API 操作作为工具提供给 MCP 客户端。README 展示了 stdio、SSE 和 Streamable HTTP 传输方式的用法。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

OpenAPI 到 MCP 服务转换器

Node.js Version TypeScript Version License: MIT

用于将 OpenAPI 规范自动转换为 Model Context Protocol(MCP)服务实例的工具

功能

  • 🚀 自动转换:自动解析 OpenAPI 3.0 规范
  • 🛠 类型安全:基于 TypeScript 的强类型验证
  • 🔄 请求代理:自动处理工具调用参数映射

快速开始

前提条件
  • Node.js 18+
  • TypeScript 5.x
基本用法

安装软件包:

npm install openapi-mcp-converter

创建服务实例:

import fs from 'fs';
import { OpenApiMCPSeverConverter } from '../index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import path from 'path';
import { fileURLToPath } from 'url';

const openApiDoc = JSON.parse(fs.readFileSync(path.join(path.dirname(fileURLToPath(import.meta.url)), 'openapi.json'), 'utf8'));

const converter = new OpenApiMCPSeverConverter(openApiDoc, { timeout: 100000, security: { apiKey: 'my-api-key' } });
const server = converter.getServer();

运行本地 stdio MCP 服务:

async function runServer() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.log("GitHub MCP Server running on stdio");
}

runServer().catch((error) => {
  console.error("Fatal error in main():", error);
  process.exit(1);
});

运行本地 SSE 服务:

const app = express();
let transport = null;

app.get("/sse", async (req, res) => {
  console.log("SSE connection opened");
  console.log("Request Headers:", req?.headers);
  console.log("Request Query:", req?.query);
  server.onclose = async () => {
    await server.close();
  };
  transport = new SSEServerTransport("/messages", res);
  await server.connect(transport);
  return;
});

app.post("/messages", async (req, res) => {
  const sessionId = req.query.sessionId as string;
  if (!sessionId) {
      throw new Error("sessionId query parameter is required");
  }
  await transport.handlePostMessage(req, res);
  return;
});

app.listen(8080, () => {
  console.log('MCP Server running on port 8080');
});

运行本地 Streamable HTTP 服务:

const app = express();
app.use(express.json());

const transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};

app.post('/mcp', async (req, res) => {
  const sessionId = req.headers['mcp-session-id'] as string | undefined;
  let transport: StreamableHTTPServerTransport;

  if (sessionId && transports[sessionId]) {
    transport = transports[sessionId];
  } else if (!sessionId && isInitializeRequest(req.body)) {
    transport = new StreamableHTTPServerTransport({
      sessionIdGenerator: () => randomUUID(),
      onsessioninitialized: (sessionId) => {
        transports[sessionId] = transport;
      }
    });
    transport.onclose = () => {
      if (transport.sessionId) {
        delete transports[transport.sessionId];
      }
    };
    await server.connect(transport);
  } else {
    res.status(400).json({
      jsonrpc: '2.0',
      error: {
        code: -32000,
        message: 'Bad Request: No valid session ID provided',
      },
      id: null,
    });
    return;
  }

  await transport.handleRequest(req, res, req.body);
});

const handleSessionRequest = async (req: express.Request, res: express.Response) => {
  const sessionId = req.headers['mcp-session-id'] as string | undefined;
  if (!sessionId || !transports[sessionId]) {
    res.status(400).send('Invalid or missing session ID');
    return;
  }
  
  const transport = transports[sessionId];
  await transport.handleRequest(req, res);
};

app.get('/mcp', handleSessionRequest);

app.delete('/mcp', handleSessionRequest);

app.listen(3000);
运行示例
npm run test  # Execute sample test cases

示例文件夹还包含 xquik-openapi.json,这是一个精简的 OpenAPI 3.1 示例,涵盖请求头 API 密钥认证、Bearer 认证、路径参数、查询参数和游标分页。

开发指南

项目结构
/openapi-to-mcp
├── dist/            # Compiled output
├── src/             # Source code
│   ├── example/     # Example configurations
│   └── index.ts     # Core implementation
├── package.json
└── tsconfig.json
构建命令
npm run build    # Production build
npm run watch    # Development mode watch

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。