OpenStack について
OpenStackは、OpenStackクラウドを調査するためのMCPサーバーで、既定では読み取り専用で結果の範囲も制限されます。openstacksdkを通じてOpenStack標準の設定を使い、ローカルプロセスまたはコンテナで動作します。
主な機能
- 01コンピュート、イメージ、ブロックストレージの調査
- 02ネットワークとKeystoneカタログの確認
- 03既定は読み取り専用、書き込みは明示的に有効化
- 04プロジェクト単位のセッション
- 05ページ分割と応答サイズの制限
- 06構造化結果と分類済みエラー
活用シーン
- 01クラウド内のサーバーとイメージの棚卸し
- 02ボリューム、ネットワーク、セキュリティグループの調査
- 03プロジェクトとサービスカタログの確認
- 04プロジェクト単位にクラウド調査を制限
MCP 対応
MCPクライアントに、コンピュート、イメージ、ブロックストレージ、ネットワーク、IDカタログ、サービス一覧の読み取りツールを提供し、プロンプトやリソースも任意で公開します。書き込みツールは既定で登録されず、adminモードと明示的な有効化が必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e OS_AUTH_URL -e OS_USERNAME -e OS_PASSWORD -e OS_USER_DOMAIN_NAME -e OS_PROJECT_ID -e OS_APPLICATION_CREDENTIAL_ID -e OS_APPLICATION_CREDENTIAL_SECRET -e OS_REGION_NAME -e OPENSTACK_MCP_PROJECT_IDS -e OPENSTACK_MCP_CACERT_PEM ghcr.io/oomchiller/openstack-mcp-server:0.1.2OS_AUTH_URLシークレットKeystone v3 endpoint, for example https://keystone.example.com:5000/v3OS_USERNAMEUser name; omit when using an application credentialOS_PASSWORDシークレットPassword for OS_USERNAMEOS_USER_DOMAIN_NAMEDomain of OS_USERNAMEOS_PROJECT_IDProject to scope the token toOS_APPLICATION_CREDENTIAL_IDシークレットApplication credential ID, instead of a user name and passwordOS_APPLICATION_CREDENTIAL_SECRETシークレットApplication credential secretOS_REGION_NAMERegion nameOPENSTACK_MCP_PROJECT_IDSComma-separated project IDs the server may use; the first is the defaultOPENSTACK_MCP_CACERT_PEMCA bundle as PEM text, for a private CAローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/oomchiller/openstack-mcp-server:0.1.2stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
openstack-mcp-server
OpenStack/OpenInfra Foundationとは提携していないコミュニティプロジェクトです。
AI アシスタントがOpenStackクラウドを調査できるようにするModel Context Protocolサーバーです。デフォルトでは読み取り専用で、返却するデータの範囲が制限されています。また、OpenStack独自の設定と環境変数のみで構成できるため、ローカルプロセスとしてもコンテナとしても、変更なしで実行できます。
flowchart LR
AI[MCP client] <-->|stdio / Streamable HTTP| Server[openstack-mcp-server]
Server <-->|openstacksdk| Cloud[OpenStack APIs]
特長
- コンピュート、イメージ、ブロックストレージ、ネットワーキング、Keystoneカタログとサービスインベントリ、および
get_scopeに対応する32個の読み取りツール。 - 書き込みツールは、2つの設定で明示的に有効にしない限り登録されません。
- プロジェクトの許可リスト:許可された各プロジェクトに、それぞれのプロジェクトスコープのセッションが割り当てられます。
- すべてのリストに
limit、complete、next_markerがあります。結果は型付けされ(outputSchema、structuredContent)、サイズが制限されます。 - エラーはカテゴリとアクションを含む
isErrorの結果として返され、SDKのメッセージ、URL、トークンは含まれません。 - デフォルトではstdioを使用し、オプションでループバック上のStreamable HTTPを使用できます。
- 認証情報を含まず、非特権ユーザーとして実行するコンテナイメージ。
読み取り専用モードは利便性のためのものです。セキュリティ境界となるのは、設定したIDのKeystoneロールです。SECURITY.mdを参照してください。
クイックスタート
サーバーはMCP Registryにio.github.oomchiller/openstack-mcp-serverとして登録されています。レジストリに対応するクライアントは、そこからインストールできます。手動でのセットアップ:
コンテナ(Docker MCP Toolkitまたは任意のMCPクライアント)
docker run --rm -i \
-e OS_AUTH_URL=https://keystone.example.com:5000/v3 \
-e OS_USERNAME=mcp-reader -e OS_PASSWORD \
-e OS_USER_DOMAIN_NAME=Default -e OS_PROJECT_ID=0123456789abcdef0123456789abcdef \
-e OS_REGION_NAME=RegionOne \
ghcr.io/oomchiller/openstack-mcp-server@sha256:<digest>
イメージはダイジェストで固定してください。リリースのダイジェストはリリースページに掲載されています。プライベートCAを使用する場合は、証明書のテキストをOPENSTACK_MCP_CACERT_PEMに渡してください。
clouds.yamlを使ったローカルプロセス
{
"mcpServers": {
"openstack": {
"command": "uvx",
"args": ["--from", "git+https://github.com/oomchiller/[email protected]", "openstack-mcp-server"],
"env": { "OS_CLOUD": "mycloud" }
}
}
}
clouds.yamlは通常の方法で検索されます(OS_CLIENT_CONFIG_FILE、./clouds.yaml、~/.config/openstack/clouds.yaml、/etc/openstack/)。
設定
認証情報は openstacksdk から取得します。clouds.yaml を使用する OS_CLOUD、または OS_*
環境変数(パスワードまたはアプリケーション認証情報)を使用できます。サーバーの動作:
| 変数 | デフォルト | 意味 |
|---|---|---|
OPENSTACK_MCP_MODE | readonly | readonly または admin。 |
OPENSTACK_MCP_ENABLE_WRITE_TOOLS | false | admin の場合、書き込みツールを登録します。 |
OPENSTACK_MCP_PROJECT_IDS | empty | サーバーが使用できるプロジェクト ID のカンマ区切りリスト。最初の ID がデフォルトです。 |
OPENSTACK_MCP_DEFAULT_LIMIT | 50 | limit が省略された場合の、一覧呼び出しあたりの項目数です。 |
OPENSTACK_MCP_MAX_LIMIT | 100 | 受け付ける limit の最大値(最大 1000)です。 |
OPENSTACK_MCP_MAX_RESPONSE_BYTES | 524288 | 結果の最大サイズです。これを超えると response_too_large で失敗します。 |
OPENSTACK_MCP_API_TIMEOUT | 10 | OpenStack リクエストあたりの秒数です。再試行は行いません。 |
OPENSTACK_MCP_CACERT_PEM | unset | PEM テキスト形式の CA バンドルです。OS_CACERT より優先されます。 |
OPENSTACK_MCP_ALLOW_INSECURE | false | verify: false または http:// 認証 URL を許可します。 |
OPENSTACK_MCP_ENABLE_PROMPTS | true | プロンプトを登録します。 |
OPENSTACK_MCP_ENABLE_RESOURCES | true | openstack://scope を登録します。 |
OPENSTACK_MCP_TRANSPORT | stdio | stdio または streamable-http。 |
OPENSTACK_MCP_HTTP_HOST / _PORT | 127.0.0.1 / 8000 | HTTP のバインド先です。パスは /mcp です。 |
OPENSTACK_MCP_HTTP_ALLOW_REMOTE | false | ループバック以外への HTTP バインドを許可します。HTTP トランスポートには認証がありません。 |
OPENSTACK_MCP_LOG_LEVEL | WARNING | stderr のログレベルです。SDK のロガーは CRITICAL のままです。 |
無効な OPENSTACK_MCP_* 値があると、サーバーは終了コード 2 で停止し、
該当する変数名を示します。認証情報がなくてもサーバーは停止しません。
サーバーは起動し、クラウドツールは [not_configured] を返します。
このサーバーの複数のインスタンスを実行し、プロンプト名やリソース URI に
プレフィックスを付けないゲートウェイ(Docker MCP Gateway)では、
OPENSTACK_MCP_ENABLE_PROMPTS=false と OPENSTACK_MCP_ENABLE_RESOURCES=false を設定してください。
ツール
| グループ | ツール |
|---|---|
| スコープ | get_scope |
| コンピュート | list_servers, get_server, list_flavors |
| イメージ | list_images, get_image |
| ブロックストレージ | list_volumes, get_volume, list_volume_attachments, get_volume_attachment |
| ネットワーク | list_networks, get_network, list_subnets, get_subnet, list_ports, get_port, list_floating_ips, list_routers, get_router, list_router_interfaces, list_security_groups, get_security_group |
| アイデンティティ | list_regions, list_domains, list_projects, list_services, list_endpoints |
| サービスインベントリ | list_hypervisors, list_compute_services, list_aggregates, list_network_agents, list_volume_services |
アイデンティティとサービスインベントリの呼び出しには通常、プロジェクトの reader
ロールより強い権限が必要です。そのような呼び出しは空の一覧を返すのではなく、
[forbidden] で失敗します。
OPENSTACK_MCP_MODE=admin と OPENSTACK_MCP_ENABLE_WRITE_TOOLS=true の場合、
実験的な書き込みツールが 31 個追加されます(サーバー、ボリューム、イメージ、ネットワーク、
サブネット、ポート、フローティング IP、ルーター、セキュリティグループ)。動作の詳細は
docs/SPEC.md を参照してください。
開発
uv sync --locked
uv run pytest --cov
uv run ruff check . && uv run ruff format --check .
uv run mypy src tests
CONTRIBUTING.md、ARCHITECTURE.md、DECISIONS.md を参照してください。
ライセンス
Apache License 2.0。詳細は LICENSE を参照してください。コードの一部は openstack-kr/python-openstackmcp-server から始まりました。 詳細は NOTICE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。