mcpField
P
Proxmox Ops

Proxmox Ops

ローカル
derdennis1012.github.ioその他01 日前に更新

Proxmox Ops について

Proxmox Opsは、Proxmox VE環境の診断と運用計画を支援するMCPサーバーです。バックアップ監査、メンテナンスや退避の確認に加え、制御された書き込み操作にも対応します。

主な機能

  1. 01クラスタ、ノード、ストレージの状態確認
  2. 02バックアップとタスク失敗の監査
  3. 03メンテナンスとノード退避の計画
  4. 04ゲスト配置の推奨
  5. 05プレビュー後に確定する書き込み操作

活用シーン

  1. 01最近バックアップされていないゲストの特定
  2. 02メンテナンスに向けたクラスタ状態の確認
  3. 03ノード退避とゲスト配置の計画
  4. 04ゲストの電源操作や移行の安全な実行

MCP 対応

MCPサーバーは、診断、計画、ゲスト操作のツールをMCPクライアントに公開します。書き込みアクセスはデフォルトで読み取り専用で、有効化した変更にはプレビューと確認トークンを使う2回目の呼び出しが必要です。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"derdennis1012-proxmox-ops": {
"command": "uvx",
"args": [
"proxmox-ops-mcp"
],
"env": {
"PROXMOX_HOST": "<PROXMOX_HOST>",
"PROXMOX_TOKEN_ID": "<PROXMOX_TOKEN_ID>",
"PROXMOX_TOKEN_SECRET": "<PROXMOX_TOKEN_SECRET>",
"PROXMOX_ACCESS_TIER": "<PROXMOX_ACCESS_TIER>",
"PROXMOX_TLS_FINGERPRINT": "<PROXMOX_TLS_FINGERPRINT>",
"PROXMOX_CA_BUNDLE": "<PROXMOX_CA_BUNDLE>"
}
}
}
}
起動コマンドuvx proxmox-ops-mcp
設定が必要な環境変数
PROXMOX_HOSTHostname or IP of any cluster node
PROXMOX_TOKEN_IDシークレットAPI token id, user@realm!tokenname
PROXMOX_TOKEN_SECRETシークレットAPI token secret
PROXMOX_ACCESS_TIERread_only, operator or admin
PROXMOX_TLS_FINGERPRINTSHA-256 fingerprint to pin the node certificate (optional)
PROXMOX_CA_BUNDLECA bundle for the cluster certificate (optional)

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

パッケージ
pypiproxmox-ops-mcp0.1.0
ocighcr.io/derdennis1012/proxmox-ops-mcp:0.1.0

ツール

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

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

詳細

README の画像

proxmox-ops-mcp

Proxmox VE 向けの MCP サーバーです。クラスターで何が問題になっているのか、バックアップが実際に存在するのか、メンテナンスのためにノードを停止できるのかを確認するなど、運用作業のために構築されています。書き込みアクセスにも対応していますが、デフォルトでは無効で、変更のたびに明示的な追加の呼び出しが必要です。

CI codecov PyPI License: MIT

Proxmox MCP サーバーをもうひとつ作った理由

既存のものは、主に API エンドポイントを個別に公開しています。「VM 104 を起動する」には十分ですが、「昨夜のバックアップがないゲストはどれか?」といった質問には何度も呼び出しが必要になり、モデルがそれらを正しく組み合わせるために Proxmox を十分に理解していなければなりません。通常、モデルはそこまで理解していません。たとえば、VM.Backup を持たないトークンではエラーではなく空のバックアップ一覧が返ることを知りません。

このサーバーでは、その知識をツールに組み込んでいます。backup_audit はバックアップボリュームを読み取り、vzdump ジョブと同じゲスト選択を適用して、トークンにボリュームを参照する権限があるかどうかを確認します。モデルには検出結果の一覧が返され、それぞれに安定したコードと推奨事項が含まれます。

ステータス

バージョン 0.1 です。使用できますが、まだ新しいプロジェクトです。テストした環境は次のとおりです。

Proxmox VE 9.2、単一ノード、ZFS、2 つのバックアップストレージすべての読み取りツール、すべての書き込みツール(専用プール内の使い捨て VM でテスト)
マルチノードクラスター、HA、Ceph現実的なペイロードを使った単体テストと統合テストのみ
Proxmox VE 8、Proxmox Backup Server ストレージ実環境では未テストです。報告をお待ちしています

実環境でのテストで、API ドキュメントに記載されていない点が 3 つ見つかりました。サーバーはそれぞれに対応しています。

  • PVE 9 では、ノードステータス呼び出しで cpu と wait が 0 と報告されます。
  • トークンに権限がない場合、バックアップ一覧はエラーにならず空で返されます。
  • /cluster/resources は、実際のゲスト状態より数秒遅れます。

インストール

uvx proxmox-ops-mcp --version          # run without installing (uv)
pipx install proxmox-ops-mcp           # or as a CLI tool
docker pull ghcr.io/derdennis1012/proxmox-ops-mcp

Python 3.11 以降が必要です。ソースからインストールする場合:git clone … && uv sync && uv run proxmox-ops-mcp。

セットアップ

1. API トークンを作成します。 まずは読み取り専用にします。

pveum user add mcp@pve
pveum acl modify / --users mcp@pve --roles PVEAuditor
pveum user token add mcp@pve ops --privsep 1          # prints the secret once
pveum acl modify / --tokens 'mcp@pve!ops' --roles PVEAuditor

このロールだけでは、backup_audit からバックアップを参照できません。上位の権限レベルには、より多くの権限が必要です。また、Proxmox の ACL ルールにはいくつか注意点があります。どちらについてもdocs/proxmox-setup.mdで説明しています。

2. 接続を確認します。

$ export PROXMOX_HOST=pve1.example.com PROXMOX_TOKEN_ID='mcp@pve!ops' PROXMOX_TOKEN_SECRET=…
$ uvx proxmox-ops-mcp check
OK    connected to pve1.example.com:8006 as mcp@pve!ops
      Proxmox VE 9.2.5 (release 9.2)
      3 node(s) visible, access tier: read_only

これが SSLError で失敗する場合、ノードの証明書が使用しているアドレスをカバーしていない可能性があります。VPN 経由で接続するときによくある問題です。check を実行すると、証明書を固定するコマンドが表示されます。

3. クライアントに追加します。 Claude Code の場合:

claude mcp add proxmox-ops \
  -e PROXMOX_HOST=pve1.example.com \
  -e PROXMOX_TOKEN_ID='mcp@pve!ops' \
  -e PROXMOX_TOKEN_SECRET=… \
  -- uvx proxmox-ops-mcp

Claude Desktop、Cursor、VS Code、OpenAI Codex、Gemini CLI、Hermes Agent、OpenClaw、Docker については、docs/clients.mdをご覧ください。また、自律型エージェントがサーバーを使用するときの注意点も説明しています。

ツール

ツールティア
cluster_healthread_onlyクォーラム、オフラインノード、CPU/メモリ、ストレージ使用率、HA エラー
ceph_healthread_onlyヒント付きの Ceph ヘルスチェック、OSD と PG の状態、モニタークォーラム、容量
compare_nodesread_onlyノード間の I/O 待ち、負荷、スワップ、メモリ/I/O プレッシャー(PSI)、バージョンの差異
backup_auditread_onlyバックアップの欠落、古さ、未スケジュール、ジョブの失敗、PBS の検証
recent_task_failuresread_only指定期間内に失敗したタスク
storage_healthread_onlyZFS プールの状態、デバイスとデータのエラー、スクラブ経過時間、SMART、SSD の摩耗
node_maintenance_statusread_only保留中の Proxmox アップデート、必要な再起動、期限切れが近いノード証明書
recommend_placementread_only新しいゲストの配置先候補と、各ノードのスコアおよび理由
plan_node_evacuationread_onlyノードを退避できるか、妨げる要因、実行するコマンド
list_nodes、list_guests、get_guest、get_task_statusread_onlyインベントリ、ゲスト設定(シークレットはマスキング)、タスクログ
guest_poweroperator起動、シャットダウン、再起動。stop には admin が必要です
create_snapshotoperatorリスクのある変更の前にスナップショットを作成
migrate_guestadminVM のライブマイグレーション、コンテナーの再起動マイグレーション

パラメーターとすべての検出コードについては、docs/tools.md を参照してください。

plan_node_evacuation(node="pve1") の例(短縮版):

{
  "feasible": true,
  "summary": "pve1 can be drained: 3 guests to 2 target nodes, 1 container(s) with a brief restart.",
  "guests": [
    { "vmid": 100, "name": "db01",  "mode": "ha-managed",            "target": "pve3" },
    { "vmid": 101, "name": "web01", "mode": "live-with-local-disks", "target": "pve2",
      "warnings": ["local disks will be copied: scsi0@local-lvm"] },
    { "vmid": 200, "name": "dns01", "mode": "restart",               "target": "pve3" }
  ],
  "steps": [
    "ceph osd set noout   # prevent rebalancing while the node is down",
    "ha-manager crm-command node-maintenance enable pve1   # HA moves its guests automatically",
    "qm migrate 101 pve2 --online --with-local-disks",
    "pct migrate 200 pve3 --restart",
    "# perform maintenance on pve1, reboot, verify it rejoined the cluster",
    "ha-manager crm-command node-maintenance disable pve1",
    "ceph osd unset noout"
  ]
}

書き込みアクセス

PROXMOX_ACCESS_TIER は変更しない限り read_only で、上位ティアのツールは 登録されません。書き込みツールは次の 2 段階で動作します。

  1. 通常どおり呼び出すと、実際のゲスト状態に照らしてリクエストを確認し、実行内容の プレビューと確認トークンを返します。
  2. 同じ引数とそのトークンを指定して再度呼び出すと、実行されます。

トークンは一度だけ使用でき、有効期限は 5 分で、指定されたパラメーターに厳密に紐づきます。 ノードもその対象となるため、その間にゲストが移行するとトークンは無効になります。書き込みは 名前付きプールまたは VMID に制限でき、1 時間あたりの上限も設定できます。すべてのプレビュー、 実行、拒否は監査ログに記録されます。

トークンにより、プレビューされた内容がそのまま実行されることを保証します。ただし、 モデルがトークンを参照できるため、ユーザーが承認したことの証明にはなりません。書き込みツールでは、 MCP クライアントのツール承認を有効にしておいてください。何かを削除するツールはありません。

HTTP トランスポートのデフォルト設定を含む詳細については、 docs/security-model.md を参照してください。

設定

PROXMOX_ プレフィックスの環境変数では、HOST、TOKEN_ID、TOKEN_SECRET が必須です。ACCESS_TIER、CA_BUNDLE または TLS_FINGERPRINT、AUDIT_LOG などは任意です。.env ファイルは --env-file を指定した場合にのみ読み込まれます。全項目の一覧は docs/configuration.md を参照してください。

開発

make install   # uv sync + pre-commit
make check     # ruff, mypy --strict, pytest

src/proxmox_ops_mcp/analysis/ の診断ロジックは、API ペイロードを処理する通常の関数で、 クラスターなしでテストされます。tests/live/ は、環境ファイルを指定すると実際のクラスターに対して 読み取り専用のチェックを実行します。docs/architecture.md では構成を、 CONTRIBUTING.md では貢献方法を説明しています。

ドキュメントサイト:https://derdennis1012.github.io/proxmox-ops-mcp/。今後の予定: Proxmox Backup Server の直接チェック(ガベージコレクション、プルーニング、検証ジョブ)、 レプリケーションジョブ、ゲストスナップショットの整理。

ライセンス

MIT。Proxmox は Proxmox Server Solutions GmbH の商標です。このプロジェクトは同社と 提携していません。

コメント

MCP は初めてですか?

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

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