🤖

OrvalでOpenAPIからMCPサーバーを自動生成できるようになりました

に公開

はじめに

Model Context Protocol (MCP)サーバーはAPIを中継するだけの単純な機能でも既存のAPIをAIエージェントが利用できるようになるため大きな価値があります。

Orvalではバージョン7.9.0より、OpenAPI仕様からMCPサーバーを生成できるようになりました。

https://github.com/orval-labs/orval/releases/tag/v7.9.0

これにより以下のようなメリットが得られます。

  • 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'を設定します。

orval.config.ts
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 servernpxなどでも起動できますがここでは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)と連携することで効率的なサービス運営が期待できます。

  1. テクニカルサポートの内容を元にAIエージェントで分析
  2. 自社サービスのMCP serverでデータ取得とトラブルシューティング。必要に応じてデータ修正。
  3. NotionSlackMCP経由でサポートチケット更新、連絡

2. 自社サービスのデータをインプットにしたデータ活用

OpenAPIから自社サービスのMCP serverを生成してAIエージェントで活用することでシームレスな連携が可能になります。

  1. 自社サービスからAPIを通じたデータの収集
  2. LLMで分析と壁打ち
  3. まとまった結果をslack投稿、GitHubでIssue作成にアウトプット

開発状況と今後の展望

現在のOrvalMCPサーバー生成機能は最小限の機能を提供しています。
まずは活用方法の知見を集めたいので基本的なAPI中継とツール生成に焦点を当てておりこれから段階的に機能を拡張していく予定です。

検討している改善:

  • カスタムプロンプトの挿入ができる様にする
  • 環境変数の受け渡しができる様にする
  • Streamable HTTPなどstdio以外のサーバー起動方法の追加
  • API仕様自体をMCPで提供することでの開発時の支援
    • e.g. 「OOできるAPIある?」「OOAPIの使い方教えて」
  • Orvalが生成する関数の仕様をMCPで提供することでの開発時の支援
    • e.g.「Orvalが生成するOO関数の使い方教えて」

まとめ

Orvalを使用することで、OpenAPI仕様があれば自前でMCPサーバーを即座に実装できるようになりました。これにより、AIエージェントを用いた自社サービスの運営、外部APIとのシームレスな連携が容易になります。
MCPによるAIエージェント活用が更に活性化されることを期待しています。

Discussion