OrvalでOpenAPIからMCPサーバーを自動生成できるようになりました
はじめに
Model Context Protocol (MCP)サーバーはAPIを中継するだけの単純な機能でも既存のAPIをAIエージェントが利用できるようになるため大きな価値があります。
Orval
ではバージョン7.9.0より、OpenAPI
仕様からMCP
サーバーを生成できるようになりました。
これにより以下のようなメリットが得られます。
-
MCP server
がマーケットプレイスで公開されるのを待たなくて良い - サードパーティ製の
MCP server
にセキュリティに懸念がある場合は生成されたコードで運用できる - 自社サービスなどのprivateな
MCP server
も自動生成・運用できます
OpenAPI
仕様があれば既存サービスを即座にAIエージェントで扱えるようになります。
orvalにより生成している既存のアプリケーションとの組み合わせ
Orval
は既にfetch
/swr
/tanstack query
などのクライアント、hono
のサーバーコードをOpenAPI
から自動生成する機能を提供しています。
今回、新たにMCPサーバー
の生成にも対応したことで、単一のOpenAPI仕様からAPIクライアント、APIサーバー、MCPサーバーを一括管理できるようになりました。これによりWebアプリケーションのAPI仕様に追従できるMCP
サーバーの運用が可能になると考えています。
MCPサーバーを自動生成する手順
本題の使い方を説明します。
以下のようにclient
に'mcp'
を設定します。
import { defineConfig } from 'orval';
export default defineConfig({
petstore: {
input: {
target: './petstore.yaml',
},
output: {
mode: 'single',
client: 'mcp',
baseUrl: 'https://petstore3.swagger.io/api/v3',
target: 'src/handlers.ts',
schemas: 'src/http-schemas',
},
},
});
orval
コマンドを実行するとsrc
ディレクトリ配下にソースコードが生成されます。
現時点でmode
は'single'
しか対応していないことに注意してください。
生成されるファイル構造
orval
コマンドで自動生成を行うと以下のような構造でファイルが生成されます。
src/
├── http-schemas
│ ├── createPetsBodyItem.ts
│ ├── error.ts
│ ├── index.ts
│ └── ...
├── handlers.ts
├── http-client.ts
├── server.ts
└── tool-schemas.zod.ts
各ファイルの役割は以下です。
-
http-schemas/
:http-client.ts
に定義されたfetch
関数で使用するリクエスト/レスポンスの型定義 -
http-client.ts
:OpenAPI
に定義された各エンドポイントにリクエストするfetch
関数 -
handlers.ts
:http-client.ts
内のAPIリクエストのレスポンスをMCPのレスポンス形式に変換するハンドラー -
server.ts
:MCP
サーバーに利用可能なツールの定義と登録、サーバーの起動を行う -
tool-schemas.zod.ts
:MCP
ツールの入力パラメータの検証に使うZod
スキーマ
詳細な実装例はこちらで確認できます。
MCPサーバーの使い方
1. Dockerイメージのビルド
生成されたMCP server
はnpx
などでも起動できますがここではdocker
を使います。
以下のようにdocker
イメージをビルドします。
docker build ./ -t mcp-petstore
2. AIエージェントの設定
ビルドしたdocker
イメージを使用してAIエージェントにMCP server
を設定します。
例としてCline
での設定方法を紹介します。他のAIエージェントでも同様の設定が可能なので適宜調整してください。
{
"mcpServers": {
"petstore": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"mcp-petstore"
],
"disabled": false,
"alwaysAllow": []
}
}
}
これにより自動生成したMCP server
がAIエージェントで利用可能になります。
自社用MCPサーバーの活用例
1. 自社サービス管理画面の代替
従来の管理画面で行っていたデータの参照・更新・削除などをAIエージェントを通じて実行できます。
AIエージェントで外部API(MCP)と連携することで効率的なサービス運営が期待できます。
- テクニカルサポートの内容を元にAIエージェントで分析
- 自社サービスの
MCP server
でデータ取得とトラブルシューティング。必要に応じてデータ修正。 -
Notion
やSlack
のMCP
経由でサポートチケット更新、連絡
2. 自社サービスのデータをインプットにしたデータ活用
OpenAPI
から自社サービスのMCP server
を生成してAIエージェントで活用することでシームレスな連携が可能になります。
- 自社サービスからAPIを通じたデータの収集
- LLMで分析と壁打ち
- まとまった結果をslack投稿、GitHubでIssue作成にアウトプット
開発状況と今後の展望
現在のOrval
のMCP
サーバー生成機能は最小限の機能を提供しています。
まずは活用方法の知見を集めたいので基本的なAPI中継とツール生成に焦点を当てておりこれから段階的に機能を拡張していく予定です。
検討している改善:
- カスタムプロンプトの挿入ができる様にする
- 環境変数の受け渡しができる様にする
-
Streamable HTTP
などstdio
以外のサーバー起動方法の追加 - API仕様自体を
MCP
で提供することでの開発時の支援- e.g. 「OOできるAPIある?」「OOAPIの使い方教えて」
-
Orval
が生成する関数の仕様をMCP
で提供することでの開発時の支援- e.g.「
Orval
が生成するOO関数の使い方教えて」
- e.g.「
まとめ
Orval
を使用することで、OpenAPI
仕様があれば自前でMCPサーバーを即座に実装できるようになりました。これにより、AIエージェントを用いた自社サービスの運営、外部APIとのシームレスな連携が容易になります。
MCP
によるAIエージェント活用が更に活性化されることを期待しています。
Discussion