OpenAPI to MCP Server Converter について
OpenAPI 仕様を MCP サーバーに変換する Node.js・TypeScript ツールです。API を MCP クライアントに公開したい開発者向けで、リクエストパラメーターの対応付けと複数のトランスポート例を備えています。
主な機能
- 01OpenAPI 3.0 仕様の解析
- 02ツール呼び出しパラメーターのリクエストへの対応付け
- 03TypeScript による型検証
- 04stdio、SSE、Streamable HTTP の例
活用シーン
- 01OpenAPI で記述された API を MCP クライアントに公開
- 02API 仕様から MCP サーバーを作成
MCP 対応
OpenAPI 仕様を MCP サーバーインスタンスに変換します。README には MCP クライアント接続用として、stdio、SSE、Streamable HTTP のトランスポート例が記載されています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
OpenAPI から MCP サーバーへのコンバーター
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
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。