mcpField
O
OpenAPI to MCP Server Converter

OpenAPI to MCP Server Converter

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

关于 OpenAPI to MCP Server Converter

这是一款 Node.js 与 TypeScript 工具,可将 OpenAPI 规范转换为 MCP 服务,面向希望把 API 提供给 MCP 客户端的开发者,并支持请求参数映射及多种传输方式示例。

主要功能

  1. 01解析 OpenAPI 3.0 规范
  2. 02映射工具调用参数与请求
  3. 03TypeScript 类型校验
  4. 04提供 stdio、SSE 和 Streamable HTTP 示例

适用场景

  1. 01将 OpenAPI 描述的 API 提供给 MCP 客户端
  2. 02根据 API 规范创建 MCP 服务

MCP 相关

它可将 OpenAPI 规范转换为 MCP 服务实例。README 展示了 stdio、SSE 和 Streamable HTTP 传输方式,供 MCP 客户端连接。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。