mcpField
O
OpenAPI to MCP Server Converter

OpenAPI to MCP Server Converter

ローカル
github.com/zxypro1開発ツール416 週間前に更新

OpenAPI to MCP Server Converter について

OpenAPI 仕様を MCP サーバーに変換する Node.js・TypeScript ツールです。API を MCP クライアントに公開したい開発者向けで、リクエストパラメーターの対応付けと複数のトランスポート例を備えています。

主な機能

  1. 01OpenAPI 3.0 仕様の解析
  2. 02ツール呼び出しパラメーターのリクエストへの対応付け
  3. 03TypeScript による型検証
  4. 04stdio、SSE、Streamable HTTP の例

活用シーン

  1. 01OpenAPI で記述された API を MCP クライアントに公開
  2. 02API 仕様から MCP サーバーを作成

MCP 対応

OpenAPI 仕様を MCP サーバーインスタンスに変換します。README には MCP クライアント接続用として、stdio、SSE、Streamable HTTP のトランスポート例が記載されています。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

OpenAPI から MCP サーバーへのコンバーター

Node.js Version TypeScript Version License: MIT

OpenAPI 仕様を 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

サンプルフォルダーには、ヘッダー API キー認証、Bearer 認証、パスパラメーター、クエリパラメーター、カーソルページネーションに対応した、コンパクトな OpenAPI 3.1 サンプルである xquik-openapi.json も含まれています。

開発ガイド

プロジェクト構成
/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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。