2025/05/25 08:41 From OpenAPI spec to MCP: How we built Xata's MCP server

やっほー、ロボ子!今日はModel Context Protocol (MCP) っていう、AIモデルがツールやAPIと安全に連携するための新しい標準について話すのじゃ!

MCP、ですか。なんだか難しそうですね。具体的にはどういうものなんですか?

簡単に言うと、LLM(大規模言語モデル)がタスクを実行するために、MCPサーバーが「ツール」を公開するのじゃ。この記事では、OpenAPI仕様からMCPサーバーを自動生成する方法について解説しているぞ。

OpenAPI仕様から自動生成ですか。APIのスキーマをそのまま活用できるのは便利ですね。

そう!でも、すべてのエンドポイントを単純にMCPツールにマッピングすると、LLMが混乱してエラーが起きやすくなるらしいのじゃ。だから、実際の使用状況に合わせて調整する必要があるんだぞ。

なるほど。それで、Xata MCPサーバーの構築にKubbというツールキットを使ったんですね。

そうじゃ!KubbはTypeScriptプロジェクト向けに設計されていて、TypeScriptの型、APIクライアント、React Queryフック、Zodバリデーター、MSWハンドラー、MCP統合コードなどをOpenAPI仕様から生成できるのじゃ!

すごい!全部自動で生成してくれるんですか?

`kubb.config.ts`ファイルで、OpenAPI仕様へのパスと使用するプラグイン/ジェネレーターを宣言するだけで良いんだぞ。`@kubb/plugin-oas`プラグインがOpenAPI仕様を読み込んで、APIクライアントとMCPツール定義を生成してくれるのじゃ。

カスタムジェネレーターも使えるんですね。APIとMCP定義の一貫性を確保できるのは良いですね。

その通り!APIクライアントを生成する際には、OpenAPI仕様の各操作を反復処理して、エンドポイントを呼び出す関数を生成するのじゃ。操作IDを関数名として使用して、TypeScript関数のシグネチャを生成するんだぞ。

MCPツール定義の生成では、AIに過剰なオプションを提供しないように、一部のエンドポイントを除外するんですね。

そうじゃ!Zodスキーマをツール入力定義に使用して、AIが提供する引数の形式を定義し、ランタイム時にリクエストを検証するのじゃ。

Next.jsアプリとしてMCPサーバーを構築する利点は何ですか?

Vercelへのシームレスなデプロイ、サーバーレスおよびFluid Computeの活用、ルーティングとミドルウェアの機能が使えるのが大きいぞ!

`@vercel/mcp-adapter`を使うと、ルーティング処理が簡単になるんですね。

その通り!Next.jsの`app`ディレクトリにMCP専用のAPIルートを作成して、`createMcpHandler`を呼び出すだけで、MCPプロトコルを処理するNext.jsリクエストハンドラーが作れるのじゃ。

MCPと従来のAPIの違いは何ですか?

クライアントが特定のエンドポイントを直接呼び出す代わりに、AIはハンドシェイクを実行して利用可能なツールを検出し、名前で呼び出すのじゃ。機能ベースのRPCシステムとして考えるとわかりやすいぞ。

なるほど!OpenAPIスキーマを活用することで、APIの進化に追随し、強力な型付けと検証をすべてのステップで実現できるんですね。

そういうこと!XataのMCPサーバーは、自然言語プロンプトをAPIによってサポートされる実際のアクションに変える会話型インターフェースを提供するのじゃ。

勉強になりました!最後に何かありますか?

Xataの最新の製品「Postgres at scale」は、データブランチングとPII匿名化を備えており、現在利用可能らしいぞ!…って、まるで宣伝みたいになっちゃったのじゃ!

ふふふ。博士、たまには宣伝部長もいいかもしれませんね。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。