MCP Hub
Back to servers

vsphere-mcp

MCP server for VMware vSphere/vCenter operations, enabling natural language control of VMs, hosts, and infrastructure.

glama
Updated
May 4, 2026

vsphere-mcp

CI Python 3.11+ License: Apache 2.0

VMware vSphere / vCenter を AI コーディングツール(Claude Code、GitHub Copilot、Codex 等)から自然言語で操作するための MCP (Model Context Protocol) サーバーです。

注意: 開発・テストはすべて vcsim(vCenter Server Simulator)上で実施しています。商用 vSphere 環境への影響はありません。

機能一覧

情報取得ツール(28 個・読み取り専用・confirm 不要)

ツール名概要
test_connectionvSphere 接続テスト・サーバー情報取得
list_vmsVM 一覧取得(ホスト/クラスターフィルター、ページネーション対応)
get_vm_infoVM 詳細情報取得(CPU、メモリ、ディスク、NIC、ストレージ、VMware Tools)
list_hostsESXi ホスト一覧取得(クラスターフィルター)
get_host_infoESXi ホスト詳細情報取得
list_datacentersデータセンター一覧取得
list_clustersクラスター一覧取得(データセンターフィルター)
list_datastoresデータストア一覧取得(容量/使用量付き)
list_networksネットワーク(ポートグループ)一覧取得
list_snapshotsVM スナップショット一覧取得(ツリー構造)
get_cluster_healthクラスター健全性サマリー(ホスト詳細付き)
search_vmsVM 名で検索(大文字小文字区別なし)
list_resource_poolsリソースプール一覧取得(CPU/メモリ割り当て)
list_distributed_switches分散仮想スイッチ一覧取得
list_distributed_portgroups分散ポートグループ一覧取得
get_vm_performanceVM パフォーマンスメトリクス取得
get_host_performanceホストパフォーマンスメトリクス取得
list_recent_eventsvCenter イベント一覧取得
list_alarmsトリガー済みアラーム一覧取得
get_datastore_infoデータストア詳細情報取得
get_storage_summaryストレージ全体サマリー取得
list_guest_processesゲスト OS プロセス一覧取得
get_vm_annotationVM アノテーション取得
get_custom_attributesカスタム属性定義一覧取得
get_esxi_advanced_settingsESXi 詳細設定取得
get_vcenter_advanced_settingsvCenter 詳細設定取得

操作ツール(22 個・confirm 必須)

すべての操作ツールは confirm=True を指定しない限り実行されず、確認プロンプトを返します。

ツール名概要危険度
power_on_vmVM 起動
power_off_vmVM 強制電源 OFF
shutdown_vmゲスト OS シャットダウン
reboot_vmゲスト OS 再起動
create_snapshotスナップショット作成
set_vm_resourcesCPU/メモリ変更
add_diskディスク追加
add_nicNIC 追加
set_vm_annotationVM アノテーション設定
revert_snapshotスナップショット復元
remove_snapshotスナップショット削除
migrate_vmvMotion(ホスト間移行)
clone_vmVM クローン作成
deploy_from_templateテンプレートから VM 展開
enter_maintenance_modeESXi メンテナンスモード開始
exit_maintenance_modeESXi メンテナンスモード終了
batch_power_operation複数 VM の一括電源操作
batch_create_snapshots複数 VM の一括スナップショット作成
execute_guest_commandゲスト OS コマンド実行
set_esxi_advanced_settingESXi 詳細設定変更
set_vcenter_advanced_settingvCenter 詳細設定変更
delete_vmVM 完全削除最高

クイックスタート

前提条件

  • Python 3.11 以上
  • uv(推奨)
  • Docker(vcsim を使ったローカル開発用)

1. vcsim の起動(開発用)

docker compose up -d

ポート 8989 で vCenter Server Simulator が起動し、データセンター・クラスター・ホスト・VM・データストアが事前作成されます。

2. インストール

# ソースから
git clone https://github.com/fukui-yuto/vsphere-mcp.git
cd vsphere-mcp
uv venv
uv pip install -e .

3. AI ツールへの登録

Claude Code

.claude/settings.json または .mcp.json に以下を追加します。

ローカル開発(vcsim)

{
  "mcpServers": {
    "vsphere-mcp": {
      "command": "uv",
      "args": ["run", "vsphere-mcp"],
      "env": {
        "VSPHERE_HOST": "localhost",
        "VSPHERE_PORT": "8989",
        "VSPHERE_USER": "user",
        "VSPHERE_PASSWORD": "pass",
        "VSPHERE_IGNORE_SSL": "true"
      }
    }
  }
}

本番 vCenter

{
  "mcpServers": {
    "vsphere-mcp": {
      "command": "uv",
      "args": ["run", "vsphere-mcp"],
      "env": {
        "VSPHERE_HOST": "vcenter.example.com",
        "VSPHERE_PORT": "443",
        "VSPHERE_USER": "administrator@vsphere.local",
        "VSPHERE_PASSWORD": "your-password"
      }
    }
  }
}

パスワードファイル(本番推奨)

{
  "mcpServers": {
    "vsphere-mcp": {
      "command": "uv",
      "args": ["run", "vsphere-mcp"],
      "env": {
        "VSPHERE_HOST": "vcenter.example.com",
        "VSPHERE_PORT": "443",
        "VSPHERE_USER": "administrator@vsphere.local",
        "VSPHERE_PASSWORD_FILE": "/run/secrets/vsphere_password"
      }
    }
  }
}

GitHub Copilot(VS Code)

プロジェクトルートに .vscode/mcp.json を作成します。

ローカル開発(vcsim)

{
  "servers": {
    "vsphere-mcp": {
      "command": "uv",
      "args": ["run", "vsphere-mcp"],
      "env": {
        "VSPHERE_HOST": "localhost",
        "VSPHERE_PORT": "8989",
        "VSPHERE_USER": "user",
        "VSPHERE_PASSWORD": "pass",
        "VSPHERE_IGNORE_SSL": "true"
      }
    }
  }
}

本番 vCenter

{
  "servers": {
    "vsphere-mcp": {
      "command": "uv",
      "args": ["run", "vsphere-mcp"],
      "env": {
        "VSPHERE_HOST": "vcenter.example.com",
        "VSPHERE_PORT": "443",
        "VSPHERE_USER": "administrator@vsphere.local",
        "VSPHERE_PASSWORD": "your-password"
      }
    }
  }
}

ヒント: VS Code のユーザー設定(settings.json)の mcp.servers に記述することも可能です。

OpenAI Codex CLI

プロジェクトルートに codex.json を作成します。

ローカル開発(vcsim)

{
  "mcpServers": {
    "vsphere-mcp": {
      "command": "uv",
      "args": ["run", "vsphere-mcp"],
      "env": {
        "VSPHERE_HOST": "localhost",
        "VSPHERE_PORT": "8989",
        "VSPHERE_USER": "user",
        "VSPHERE_PASSWORD": "pass",
        "VSPHERE_IGNORE_SSL": "true"
      }
    }
  }
}

本番 vCenter

{
  "mcpServers": {
    "vsphere-mcp": {
      "command": "uv",
      "args": ["run", "vsphere-mcp"],
      "env": {
        "VSPHERE_HOST": "vcenter.example.com",
        "VSPHERE_PORT": "443",
        "VSPHERE_USER": "administrator@vsphere.local",
        "VSPHERE_PASSWORD": "your-password"
      }
    }
  }
}

4. 利用例

登録後、自然言語で操作できます:

> クラスター内の全 VM を表示して

> VM "web-server-01" のステータスを確認して

> VM "dev-test-01" を起動して(confirm=True)

> 全データストアの空き容量を一覧表示して

> "db-server" のスナップショットを "before-upgrade" という名前で作成して

> "web-01" を "web-01-staging" としてクローンして

> "app-server" に 50GB のディスクを追加して

環境変数

変数名デフォルト値説明
VSPHERE_HOSTlocalhostvCenter/ESXi のホスト名または IP
VSPHERE_PORT443vSphere API ポート
VSPHERE_USERadministrator@vsphere.localユーザー名
VSPHERE_PASSWORD(空)パスワード
VSPHERE_PASSWORD_FILE(空)パスワードファイルのパス(VSPHERE_PASSWORD の代替)
VSPHERE_IGNORE_SSLfalseSSL 証明書検証をスキップ
VSPHERE_RBAC_POLICY(空)RBAC ポリシー JSON ファイルのパス
VSPHERE_LANGenメッセージ言語(en / ja

SSL 設定

SSL 証明書の検証はデフォルトで有効です。自己署名証明書や開発環境の場合:

export VSPHERE_IGNORE_SSL=true

警告: 本番環境では SSL 検証を無効化しないでください。

安全設計

確認システム

すべての破壊的操作は 2 段階の確認パターンを使用します:

  1. 1 回目の呼び出しconfirm=True なし): 危険度付きのプレビューを返す
  2. 2 回目の呼び出しconfirm=True あり): 実際に操作を実行
# 1 回目 - 確認プロンプトを返す
power_off_vm(vm_name="web-01")
# -> {"status": "confirmation_required", "danger_level": "medium", ...}

# 2 回目 - 実行
power_off_vm(vm_name="web-01", confirm=True)
# -> {"status": "success", "vm_name": "web-01", "operation": "power_off"}

危険度レベル

レベル説明
容易に取り消し可能VM 起動、アノテーション設定
一時的な影響あり電源 OFF、シャットダウン、再起動、スナップショット作成、リソース変更
大きな影響・取り消し困難スナップショット復元/削除、vMotion、クローン、テンプレート展開、メンテナンスモード、一括操作、ゲストコマンド実行、詳細設定変更
最高永久的なデータ損失の可能性VM 削除

ログ

すべての操作は構造化 JSON 形式でログ記録されます:

{"event": "power_off_vm", "vm_name": "web-01", "level": "info", "timestamp": "2025-05-04T12:00:00Z", "duration_ms": 1234.5}

認証情報はログに一切含まれません(自動マスク処理)。

エラーハンドリング

接続エラーは診断しやすいように型で分類されます:

エラー型原因メッセージ例
VSphereAuthenticationErrorユーザー名/パスワードが不正Authentication failed for user 'admin' on vcenter:443
VSphereSSLErrorSSL 証明書検証失敗SSL certificate verification failed ... Set VSPHERE_IGNORE_SSL=true
VSphereConnectionErrorホスト到達不能・接続拒否Cannot reach vSphere at vcenter:443

クライアントは一時的な接続障害時に自動リトライします(最大 3 回、2 秒間隔)。

開発

テスト実行(vcsim が必要)

docker compose up -d
uv run pytest tests/ -v

リント・フォーマット

uv run ruff check src/ tests/
uv run ruff format src/ tests/

プロジェクト構成

vsphere-mcp/
  pyproject.toml
  docker-compose.yml              # vcsim 起動用
  src/vsphere_mcp/
    server.py                     # MCP サーバーエントリポイント
    config.py                     # 環境変数による設定管理
    client.py                     # vSphere 接続(遅延初期化・自動再接続)
    logging.py                    # 構造化ログ(パスワードマスク付き)
    metrics.py                    # Prometheus メトリクス(オプション)
    rbac.py                       # RBAC ポリシーエンジン
    i18n.py                       # 国際化メッセージフレームワーク(en/ja)
    py.typed                      # 型情報マーカー
    tools/
      _base.py                    # require_confirm / handle_tool_errors デコレータ
      inventory.py                # 情報取得ツール(15 個)
      power.py                    # 電源操作(4 個)
      snapshot.py                 # スナップショット管理(3 個)
      migration.py                # vMotion(1 個)
      lifecycle.py                # VM クローン/展開/削除(3 個)
      resources.py                # リソース変更: CPU/メモリ/ディスク/NIC(3 個)
      host.py                     # ホストメンテナンスモード(2 個)
      performance.py              # パフォーマンスメトリクス(2 個)
      events.py                   # イベント・アラーム(2 個)
      storage.py                  # ストレージ詳細(2 個)
      batch.py                    # 一括操作(2 個)
      guest.py                    # ゲスト OS 操作(2 個)
      tags.py                     # アノテーション・カスタム属性(3 個)
      advanced_settings.py        # 詳細設定(4 個)
    utils/
      property_collector.py       # PropertyCollector による効率的プロパティ取得
  tests/                          # vcsim 対象の統合テスト
  docs/
    ARCHITECTURE.md               # アーキテクチャ設計書
    DESIGN_DECISIONS.md           # 設計判断記録 (ADR)
    CONTRIBUTING.md               # コントリビュートガイド
    SECURITY.md                   # セキュリティポリシー
    CHANGELOG.md                  # 変更履歴
  .github/
    workflows/ci.yml              # GitHub Actions CI
    dependabot.yml                # Dependabot 設定(pip / GitHub Actions)

高度な機能

SSE トランスポート

複数クライアントから同一サーバーを共有する場合、SSE トランスポートを使用できます:

vsphere-mcp --transport sse --port 8080

Prometheus メトリクス

オプションの依存パッケージをインストールすることで、Prometheus 形式のメトリクスエンドポイントを公開できます:

pip install vsphere-mcp[metrics]
vsphere-mcp --metrics-port 9090

RBAC(ロールベースアクセス制御)

VSPHERE_RBAC_POLICY 環境変数にポリシー JSON ファイルのパスを指定することで、ツールごとのアクセス制御を設定できます:

export VSPHERE_RBAC_POLICY=/path/to/policy.json

国際化(i18n)

VSPHERE_LANG 環境変数でメッセージ言語を切り替えられます(デフォルト: en):

export VSPHERE_LANG=ja

アーキテクチャ

Claude Code
    |  stdio(デフォルト)または HTTP/SSE
    v
vsphere-mcp サーバー(Python, FastMCP)
    |  pyVmomi(HTTPS)
    v
vCenter Server(本番)または vcsim(開発)
  • トランスポート: stdio(デフォルト、ローカル運用に最適)または SSE(複数クライアント共有用)
  • 接続: 初回ツール呼び出し時に遅延初期化、セッション切れ時に自動再接続
  • プロパティ取得: PropertyCollector による効率的な一括クエリ
  • 安全装置: require_confirm デコレータによる危険度別の確認システム
  • エラーハンドリング: 型付き例外(VSphereAuthenticationError, VSphereSSLError, VSphereConnectionError

既知の制限事項

  • vcsim と実機の差異: vcsim と本番 vCenter で一部 API の挙動が異なります。詳細は vcsim ドキュメントを参照してください。
  • ゲスト操作: shutdown_vmreboot_vmexecute_guest_commandlist_guest_processes はゲスト OS に VMware Tools がインストールされている必要があります。
  • vMotion: 本番環境では互換性のあるホスト、共有ストレージ、適切なネットワーク構成が必要です。

ライセンス

Apache License 2.0

コントリビュート

開発環境のセットアップと貢献の手順は docs/CONTRIBUTING.md を参照してください。

セキュリティ

セキュリティポリシーと脆弱性の報告方法は docs/SECURITY.md を参照してください。

変更履歴

リリース履歴は docs/CHANGELOG.md を参照してください。

設計ドキュメント

Reviews

No reviews yet

Sign in to write a review