OpenStack MCP + Agent PoC について
OpenStack MCP + Agent PoCは、OpenStack MCPサーバーと基本的なエージェントを試す概念実証です。OpenStack API仕様からコンポーネント別のMCPサーバーを生成し、LLM経由で環境を照会します。エージェントに会話メモリーはありません。
主な機能
- 01OpenAPI仕様からMCPサーバーを生成
- 02OpenStackコンポーネント別にサーバーを分割
- 03LLM経由で環境を照会
- 04有効にするREST APIパスを限定
活用シーン
- 01OpenStack環境の情報を照会
- 02Nova flavorの一覧を確認
MCP 対応
mcp-openapiを使い、フィルター済みのOpenStack OpenAPI仕様から複数のMCPサーバーを起動し、付属エージェントがLLM経由で呼び出します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
OpenStack MCP + Agent PoC
このリポジトリには、OpenStack MCP サーバーと、それをテストするための非常に基本的なエージェント用コンパニオンプログラムを実行するコードと手順が含まれています。
この PoC では、次の方法を採用しています。
-
OpenStack の
codegeneratorプロジェクト(openstack-code-generator)を使って、OpenStack の OpenAPI 仕様を生成します。 -
mcp-openapiプロジェクトを使って、OpenStack の各コンポーネントの OpenAPI 仕様全体をフィルタリングしたものから、それぞれのコンポーネント用の MCP サーバーを起動します。 -
agentのコードを使って、LLM 経由で MCP サーバーとやり取りします。
すぐにテストするだけなら、これらすべてを行う必要はありません。QuickStart ガイドに従うだけで実行できます。ただし、別のことをしたい場合は、実行方法ガイドを確認する必要があります。
QuickStart
実行には OpenStack デプロイメントと LLM へのアクセスが必要です。
また、uv パッケージマネージャーも必要です。インストールされていない場合は、sudo dnf install uv でインストールできます。
ターミナルを 2 つ使用します。1 つは MCP サーバー用、もう 1 つはエージェント用です。
このリポジトリをクローンする
実行に必要な最小限の外部プロジェクトのみを含めて、このリポジトリをクローンします。
$ git clone --shallow-submodules \
--recurse-submodules=mcp-openapi \
https://github.com/Akrog/mcp-openstack.git
$ cd mcp-openstack
MCP サーバーを実行する
まず MCP サーバーを設定します。そのために servers.yaml ファイルを編集し、<NOVA_PUBLIC_URL>、<CINDER_PUBLIC_URL>、<GLANCE_PUBLIC_URL> のプレースホルダーを、クラスターの値に置き換えます。
モデルのコンテキストウィンドウを超えるほど多くのツールが生成されたり、ハルシネーションが起きたりするのを避けるため、有効にする REST API パスが一部に限られていることがわかります。
これでサーバーを実行できます。
$ cd mcp-openapi
$ uv run main.py --config ../servers.yaml
このターミナルでサービスを実行したままにして、別のターミナルに移ります。
エージェントを実行する
別のターミナルで agent ディレクトリに移動します。
$ cd agent
OpenStack クライアントの設定
次に、ドキュメントで説明されている標準的な場所のいずれかで、OpenStack クライアントの設定を利用できることを確認します。
agent/~/.config/openstack/
OSP 18 クラウドを実行している場合は、次のコマンドで設定を取得できます。
$ oc cp openstackclient:/home/cloud-admin/.config/openstack/clouds.yaml ./clouds.yaml
$ oc cp openstackclient:/home/cloud-admin/.config/openstack/secure.yaml ./secure.yaml
LLM の設定
使用する OpenAI LLM エンドポイントのシークレット/トークンを記載した llm.token ファイルを作成します。
次に agent.json ファイルを編集し、<LLM_URL> プレースホルダーを LLM のアドレスに置き換え、<MODEL> を使用するモデルに置き換えます。たとえば Anthropic の場合は、次のようになります。
{
"base_url": "https://api.anthropic.com/v1",
"model": "claude-3-5-haiku-20241022",
< ... >
}
エージェントを実行する
あとはエージェントを起動するだけです。
$ uv run main.py
試してみる
これで、デプロイメントについて質問し、MCP サーバーのターミナルで REST API 呼び出しを確認できます。
たとえば、nova のフレーバーを取得するには、次のようにします。
$ uv run main.py
LLM: claude-3-5-haiku-20241022 @ https://api.anthropic.com/v1 Tools: 46
>>> What are my flavors?
エージェントにはメモリがないため、各プロンプトは LLM にとって新しいプロンプトになることに注意してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。