mcpField
O
OpenStack

OpenStack

ローカル
github.comクラウド・インフラ01 週間前に更新

OpenStack について

OpenStackは、OpenStackクラウドを調査するためのMCPサーバーで、既定では読み取り専用で結果の範囲も制限されます。openstacksdkを通じてOpenStack標準の設定を使い、ローカルプロセスまたはコンテナで動作します。

主な機能

  1. 01コンピュート、イメージ、ブロックストレージの調査
  2. 02ネットワークとKeystoneカタログの確認
  3. 03既定は読み取り専用、書き込みは明示的に有効化
  4. 04プロジェクト単位のセッション
  5. 05ページ分割と応答サイズの制限
  6. 06構造化結果と分類済みエラー

活用シーン

  1. 01クラウド内のサーバーとイメージの棚卸し
  2. 02ボリューム、ネットワーク、セキュリティグループの調査
  3. 03プロジェクトとサービスカタログの確認
  4. 04プロジェクト単位にクラウド調査を制限

MCP 対応

MCPクライアントに、コンピュート、イメージ、ブロックストレージ、ネットワーク、IDカタログ、サービス一覧の読み取りツールを提供し、プロンプトやリソースも任意で公開します。書き込みツールは既定で登録されず、adminモードと明示的な有効化が必要です。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"oomchiller-openstack": {
"command": "docker",
"args": [
"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.2"
],
"env": {
"OS_AUTH_URL": "<OS_AUTH_URL>",
"OS_USERNAME": "<OS_USERNAME>",
"OS_PASSWORD": "<OS_PASSWORD>",
"OS_USER_DOMAIN_NAME": "<OS_USER_DOMAIN_NAME>",
"OS_PROJECT_ID": "<OS_PROJECT_ID>",
"OS_APPLICATION_CREDENTIAL_ID": "<OS_APPLICATION_CREDENTIAL_ID>",
"OS_APPLICATION_CREDENTIAL_SECRET": "<OS_APPLICATION_CREDENTIAL_SECRET>",
"OS_REGION_NAME": "<OS_REGION_NAME>",
"OPENSTACK_MCP_PROJECT_IDS": "<OPENSTACK_MCP_PROJECT_IDS>",
"OPENSTACK_MCP_CACERT_PEM": "<OPENSTACK_MCP_CACERT_PEM>"
}
}
}
}
起動コマンド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.2
設定が必要な環境変数
OS_AUTH_URLシークレットKeystone v3 endpoint, for example https://keystone.example.com:5000/v3
OS_USERNAMEUser name; omit when using an application credential
OS_PASSWORDシークレットPassword for OS_USERNAME
OS_USER_DOMAIN_NAMEDomain of OS_USERNAME
OS_PROJECT_IDProject to scope the token to
OS_APPLICATION_CREDENTIAL_IDシークレットApplication credential ID, instead of a user name and password
OS_APPLICATION_CREDENTIAL_SECRETシークレットApplication credential secret
OS_REGION_NAMERegion name
OPENSTACK_MCP_PROJECT_IDSComma-separated project IDs the server may use; the first is the default
OPENSTACK_MCP_CACERT_PEMCA bundle as PEM text, for a private CA

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/oomchiller/openstack-mcp-server:0.1.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

openstack-mcp-server

CI Release License

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_MODEreadonlyreadonly または admin。
OPENSTACK_MCP_ENABLE_WRITE_TOOLSfalseadmin の場合、書き込みツールを登録します。
OPENSTACK_MCP_PROJECT_IDSemptyサーバーが使用できるプロジェクト ID のカンマ区切りリスト。最初の ID がデフォルトです。
OPENSTACK_MCP_DEFAULT_LIMIT50limit が省略された場合の、一覧呼び出しあたりの項目数です。
OPENSTACK_MCP_MAX_LIMIT100受け付ける limit の最大値(最大 1000)です。
OPENSTACK_MCP_MAX_RESPONSE_BYTES524288結果の最大サイズです。これを超えると response_too_large で失敗します。
OPENSTACK_MCP_API_TIMEOUT10OpenStack リクエストあたりの秒数です。再試行は行いません。
OPENSTACK_MCP_CACERT_PEMunsetPEM テキスト形式の CA バンドルです。OS_CACERT より優先されます。
OPENSTACK_MCP_ALLOW_INSECUREfalseverify: false または http:// 認証 URL を許可します。
OPENSTACK_MCP_ENABLE_PROMPTStrueプロンプトを登録します。
OPENSTACK_MCP_ENABLE_RESOURCEStrueopenstack://scope を登録します。
OPENSTACK_MCP_TRANSPORTstdiostdio または streamable-http。
OPENSTACK_MCP_HTTP_HOST / _PORT127.0.0.1 / 8000HTTP のバインド先です。パスは /mcp です。
OPENSTACK_MCP_HTTP_ALLOW_REMOTEfalseループバック以外への HTTP バインドを許可します。HTTP トランスポートには認証がありません。
OPENSTACK_MCP_LOG_LEVELWARNINGstderr のログレベルです。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 を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。