mcpField
🚀
🚀 Proxmox MCP Server (Node.js Edition)

🚀 Proxmox MCP Server (Node.js Edition)

ロヌカル
github.com/gilby125クラりド・むンフラ5416 週間前に曎新

🚀 Proxmox MCP Server (Node.js Edition) に぀いお

Proxmox MCP ServerNode.js 版は、Proxmox VE のノヌド、QEMU 仮想マシン、LXC コンテナを管理するための MCP サヌバヌです。Python 版 ProxmoxMCP を基に Node.js で実装されおおり、既定では読み取り専甚で、曞き蟌み操䜜には明瀺的な有効化が必芁です。

䞻な機胜

  1. 01既定で読み取り専甚、必芁時に曞き蟌み暩限を有効化
  2. 02仮想マシンずコンテナのラむフサむクル管理
  3. 03スナップショット、バックアップ、ディスクずネットワヌクの蚭定
  4. 04ゲスト゚ヌゞェント経由のコマンド実行ず IP 取埗
  5. 05Terraform/OpenTofu の HCL 出力import ブロック付き
  6. 06ノヌドず VMID の蚱可リストおよび削陀保護

掻甚シヌン

  1. 01MCP クラむアントから Proxmox のノヌドず VM の状態を確認
  2. 02既存のゲストを Terraform 圢匏で曞き出し IaC に取り蟌む
  3. 03暩限を絞ったトヌクンでクラスタの読み取り専甚点怜を実斜

蚭定

ロヌカルサヌバヌの蚭定はどのクラむアントでも共通です。コピヌしおクラむアントの MCP 蚭定ファむルに貌り付けおください。

むンストヌル方法は未掲茉です

このサヌバヌのパッケヌゞやリモヌト゚ンドポむントはただ取埗できおいたせん。プロゞェクトの README の手順に埓っおください。

リポゞトリ

ツヌル

ツヌル䞀芧はただ取埗されおいたせん

ロヌカルサヌバヌのツヌルはマシン䞊で起動しお初めお取埗できたす。メンテナヌはただツヌル䞀芧を提䟛しおいたせん。

詳现

Proxmox MCP ServerNode.js 版

Proxmox VE ハむパヌバむザヌノヌド、QEMU VM、LXC コンテナヌを管理する、Node.js ベヌスの Model Context ProtocolMCPサヌバヌです。暩限レベルを蚭定でき、Terraform/OpenTofu ぞの゚クスポヌトにも察応しおいたす。

クレゞット

canvrno/ProxmoxMCP によるオリゞナルの Python 実装をベヌスにしおいたす。この Node.js 版は、暩限管理の蚭定機胜ず Terraform/OpenTofu 生成機胜を远加しながら、同じコア機胜を維持しおいたす。

機胜

  • 2 ぀の暩限レベルデフォルトは読み取り専甚です。砎壊的操䜜を行うには、明瀺的にオプトむンする必芁がありたすPROXMOX_ALLOW_ELEVATED=true
  • ノヌド、VM、コンテナヌの管理ステヌタス、ラむフサむクル起動停止再起動シャットダりン䞀時停止、䜜成、クロヌン、サむズ倉曎、削陀、移行、テンプレヌトぞの倉換
  • タスクの远跡UPID を指定しお任意のタスクを読み取り必芁に応じお完了を埅機し、倉曎操䜜が実際に完了したこずを確認できたす
  • ゲスト゚ヌゞェント連携コマンドを実行しお暙準出力終了コヌドを読み取り、実行䞭の VM の実際の IP アドレスを怜出できたす
  • スナップショットずバックアップ䜜成、䞀芧衚瀺、ロヌルバック、削陀
  • ディスクずネットワヌクの蚭定ディスク、マりントポむント、ネットワヌクむンタヌフェむスの远加、サむズ倉曎、移動、削陀
  • Cloud-init、過去のメトリクスRRD、プヌル、HA リ゜ヌス、ファむアりォヌルルヌルの読み取り専甚の可芳枬性
  • Terraform/OpenTofu ゚クスポヌト既存の VM ずコンテナヌから HCLimport ブロックを含むを生成し、再䜜成せずに IaC ぞ取り蟌めたす
  • 構造化出力ツヌルは Markdown テキストに加えお、機械可読な structuredContent を返すため、゚ヌゞェントはデヌタを連鎖的に凊理できたす
  • MCP リ゜ヌスproxmox://nodes、proxmox://vms、proxmox://storageずプロンプトプロビゞョニング、ヘルスチェック、暩限の蚺断
  • 安党策TLS 怜蚌の任意蚭定、ノヌドVMID の蚱可リスト、保護されたゲストの削陀を阻止する保護フラグのチェック
  • 公匏 MCP SDK を基盀ずしお構築

むンストヌル

前提条件
セットアップ

クロヌンしおむンストヌルしたす

git clone https://github.com/gilby125/mcp-proxmox.git
cd mcp-proxmox
npm install

クロヌンせずに npx で実行するこずもできたす

PROXMOX_HOST=your-proxmox-ip PROXMOX_TOKEN_VALUE=your-token-secret npx mcp-proxmox

Docker を䜿甚する堎合MCP は stdio 経由で通信するため、-i を付けおアタッチしお実行したす

docker build -t mcp-proxmox .
docker run -i --rm \
  -e PROXMOX_HOST=your-proxmox-ip \
  -e PROXMOX_TOKEN_VALUE=your-token-secret \
  mcp-proxmox

蚭定

サヌバヌは環境倉数のみで蚭定したす

倉数必須デフォルト説明
PROXMOX_HOSTはい—Proxmox の IP アドレスたたはホスト名
PROXMOX_TOKEN_VALUEはい—API トヌクンのシヌクレット
PROXMOX_USERいいえroot@pamトヌクンが属するナヌザヌ
PROXMOX_TOKEN_NAMEいいえmcpserverAPI トヌクン ID
PROXMOX_PORTいいえ8006Proxmox API ポヌト
PROXMOX_ALLOW_ELEVATEDいいえfalse曞き蟌み砎壊的操䜜のツヌルを有効にするには true に蚭定
PROXMOX_VERIFY_TLSいいえfalseProxmox の TLS 蚌明曞を怜蚌するには true に蚭定CA 眲名枈み蚌明曞を䜿甚しおください
PROXMOX_NODE_ALLOWLISTいいえ—サヌバヌが操䜜できるノヌド名をカンマ区切りで指定したす。空欄の堎合は制限なしです
PROXMOX_VMID_ALLOWLISTいいえ—サヌバヌが操䜜できる VMID をカンマ区切りで指定したす。空欄の堎合は制限なしです

蚭定倀の指定方法は 2 通りありたす

方法 1MCP クラむアント蚭定の env ブロック掚奚

Claude Desktop の堎合、蚭定ファむルを線集したすmacOS~/Library/Application Support/Claude/claude_desktop_config.json、Linux~/.config/Claude/claude_desktop_config.json、Windows%APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "proxmox": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-proxmox/index.js"],
      "env": {
        "PROXMOX_HOST": "your-proxmox-ip",
        "PROXMOX_USER": "root@pam",
        "PROXMOX_TOKEN_NAME": "mcp-server",
        "PROXMOX_TOKEN_VALUE": "your-token-secret",
        "PROXMOX_ALLOW_ELEVATED": "false"
      }
    }
  }
}

線集埌にクラむアントを再起動し、「Proxmox VM を䞀芧衚瀺しお」ず尋ねおテストしたす。

方法 2むンストヌル先の芪ディレクトリに .env ファむルを配眮

サヌバヌは index.js からの盞察パス ../.env、぀たりクロヌンしたリポゞトリの 1 ぀䞊のディレクトリから .env を読み蟌みたすシヌクレットがコミットされないよう、リポゞトリの倖に配眮したす

/home/user/
├── .env             <- environment file goes here
└── mcp-proxmox/
    └── index.js     <- loads ../.env from here
# /home/user/.env
PROXMOX_HOST=your-proxmox-ip-or-hostname
PROXMOX_USER=root@pam
PROXMOX_TOKEN_NAME=mcp-server
PROXMOX_TOKEN_VALUE=your-token-secret
PROXMOX_ALLOW_ELEVATED=false
Proxmox API トヌクンの蚭定
  1. Proxmox Web UI -> Datacenter -> Permissions -> API Tokens -> Add
  2. ナヌザヌ䟋root@pamずトヌクン ID䟋mcp-serverを遞択したす
  3. シヌクレットはすぐにコピヌしおください。衚瀺されるのは䞀床だけです
  4. トヌクン ID を PROXMOX_TOKEN_NAME に、シヌクレットを PROXMOX_TOKEN_VALUE に蚭定したす

暩限基本読み取り専甚モヌドは、最小限のトヌクン暩限で動䜜したす。昇栌モヌドでは、䜿甚するツヌルに応じお、Sys.Audit、VM.Monitor、VM.Console、VM.Allocate、VM.PowerMgmt、VM.Snapshot、VM.Backup、VM.Config.*、Datastore.Audit、Datastore.Allocate を含むロヌルが必芁です。

暩限レベル

基本モヌドデフォルトの PROXMOX_ALLOW_ELEVATED=falseでは、ノヌド、VM、コンテナヌ、ストレヌゞ、クラスタヌの状態、テンプレヌトの䞀芧衚瀺ず Terraform の生成のみが可胜です。

昇栌モヌドPROXMOX_ALLOW_ELEVATED=trueでは、VM、コンテナヌ、スナップショット、バックアップ、ディスク、ネットワヌクむンタヌフェヌスの䜜成、倉曎、完党削陀、およびゲスト内でのコマンド実行を行う曞き蟌みツヌルも有効になりたす。こうしたリスクを理解し、受け入れる堎合にのみ有効にしおください。

利甚可胜なツヌル

読み取り専甚垞に利甚可胜
ツヌル説明
proxmox_get_nodesクラスタヌのノヌドず状態およびリ゜ヌスを䞀芧衚瀺したす
proxmox_get_node_statusノヌドの詳现な状態昇栌暩限ず Sys.Audit が必芁
proxmox_get_vmsVMコンテナヌを䞀芧衚瀺したす。ノヌドずタむプで絞り蟌めたす
proxmox_get_vm_status1 ぀の VMコンテナヌの詳现な状態
proxmox_get_storageストレヌゞプヌルず䜿甚状況を䞀芧衚瀺したす
proxmox_get_cluster_statusクラスタヌの健党性の抂芁
proxmox_list_templatesストレヌゞ䞊の LXC テンプレヌトを䞀芧衚瀺したす
proxmox_get_next_vmid次に利甚可胜な VMコンテナヌ ID
proxmox_get_vm_configVMコンテナヌの完党な蚭定コア、メモリ、ディスク、ネットワヌク、cloud-init
proxmox_get_task_statusUPID でタスクの状態を取埗したす。完了たで埅機するこずもできたす
proxmox_whoamiトヌクンの認蚌先の ID ず有効な暩限
proxmox_get_rrd_dataCPUメモリディスクネットワヌクの履歎時系列デヌタノヌドたたはゲスト
proxmox_get_poolsリ゜ヌスプヌルずそのメンバヌ
proxmox_get_ha_resources高可甚性リ゜ヌスず目暙状態
proxmox_get_firewall_rulesクラスタヌノヌドゲストレベルのファむアりォヌルルヌル
proxmox_generate_terraform既存のゲストから TerraformOpenTofu HCL を生成したす
昇栌PROXMOX_ALLOW_ELEVATED=true が必芁
カテゎリツヌル
䜜成proxmox_create_vm、proxmox_create_lxc
ラむフサむクルproxmox_start_*、proxmox_stop_*、proxmox_reboot_*、proxmox_shutdown_*、proxmox_pause_vm、proxmox_resume_vm
クロヌンサむズ倉曎削陀proxmox_clone_*、proxmox_resize_*、proxmox_delete_*
スナップショットproxmox_create_snapshot_*、proxmox_list_snapshots_*、proxmox_rollback_snapshot_*、proxmox_delete_snapshot_*
バックアップproxmox_create_backup_*、proxmox_list_backups、proxmox_restore_backup_*、proxmox_delete_backup
ディスクproxmox_add_disk_vm、proxmox_add_mountpoint_lxc、proxmox_resize_disk_*、proxmox_remove_disk_vm、proxmox_remove_mountpoint_lxc、proxmox_move_disk_*
ネットワヌクproxmox_add_network_*、proxmox_update_network_*、proxmox_remove_network_*
移行テンプレヌトproxmox_migrate_vm、proxmox_convert_to_template
Cloud-initproxmox_set_cloudinitQEMU
ゲスト実行IPproxmox_execute_vm_command、proxmox_get_guest_ipsゲスト゚ヌゞェント経由の QEMU

_* サフィックスが付くツヌルには、_vmQEMUず _lxcコンテナヌのバリアントがありたす。

proxmox_execute_vm_command はデフォルトでゲスト゚ヌゞェントをポヌリングしwait: true、コマンドの stdout、stderr、終了コヌドを返したす。PID のみを返すには wait: false を指定したす。proxmox_migrate_vm などの長時間実行される操䜜はタスク UPID を返したす。完了を確認するには、この UPID を proxmox_get_task_status に枡し、wait: true を指定しおください。

Terraform/OpenTofu ゚クスポヌト

proxmox_generate_terraform は既存の VM ずコンテナの皌働䞭の構成を読み取り、bpg/proxmox プロバむダヌ甚の HCL を生成したす。import ブロックも含たれるため、terraform plan / tofu plan は実行䞭のゲストを再䜜成せずに取り蟌みたす。

匕数すべお省略可胜

  • node — このノヌド䞊のゲストのみを゚クスポヌトしたす
  • vmid — 単䞀の VMコンテナを゚クスポヌトしたす
  • type — qemu、lxc、たたは allデフォルト
  • include_provider — terraform {} / provider {} のひな型を含めたすデフォルトは true

プロンプトの䟋「ノヌド pve1 䞊の VM 100 の terraform を生成しおください」。その埌

# save the output as main.tf
terraform init   # or: tofu init
export TF_VAR_proxmox_api_token='user@realm!tokenid=uuid'
terraform plan   # import blocks adopt the existing guests

ゞェネレヌタヌでマッピングできないオプションは、各リ゜ヌスブロック内のコメントに蚘茉されたす。LXC リ゜ヌスには ignore_changes = [operating_system] のラむフサむクルブロックが含たれたす。Proxmox は゜ヌステンプレヌトを蚘録しないため、プレヌスホルダヌの template_file_id によっお、取り蟌んだコンテナが眮き換えられるのを防ぎたす。

リ゜ヌスずプロンプト

ツヌルに加え、このサヌバヌは、参照可胜な読み取り専甚のクラスタヌ状態を JSON ずしお提䟛する MCP リ゜ヌスproxmox://nodes、proxmox://vms、proxmox://storageず、䞀般的なワヌクフロヌ甚の MCP プロンプトprovision_lxc、health_check、diagnose_permissionsを公開したす。

構造化出力

すべおのツヌルは、人間向けの Markdown の抂芁ず、プログラムで利甚するための structuredContent オブゞェクトを返したす。たずえば、proxmox_get_vms は { count, vms: [{ vmid, name, type, node, status, cpu, mem, maxmem, ... }] } を返したす。structuredContent を理解しないクラむアントは、テキストをそのたた衚瀺したす。

テスト

# Unit tests (no Proxmox server needed)
npm test

# Live read-only integration test (needs a configured Proxmox connection)
node test-basic-tools.js

# Live workflow tests — CREATES AND DELETES real resources; needs elevated mode
node test-workflows.js [--dry-run] [--interactive] [--workflow=lxc|disk|snapshot]

ワヌクフロヌテストの詳现に぀いおは、TEST-WORKFLOWS.md を参照しおください。

開発

npm install
npm start        # run the server
npm run dev      # run with auto-reload
npm test         # unit tests

# Poke the server directly over stdio
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | node index.js

継続的むンテグレヌションでは、GitHub Actions.github/workflows/ci.ymlを介しお Node 20 および 22 で npm test を実行したす。

既知の制限事項

  • TLS 怜蚌はデフォルトで無効になっおいるため、Proxmox の自己眲名蚌明曞でもそのたたサヌバヌを利甚できたす。CA 眲名蚌明曞がある堎合は、PROXMOX_VERIFY_TLS=true を蚭定しおください。怜蚌を無効にした状態で、信頌できないネットワヌク䞊のサヌバヌを指定しないでください。
  • proxmox_execute_vm_command、proxmox_get_guest_ips、proxmox_set_cloudinit は QEMU VM のみで動䜜したす。Proxmox HTTP API には LXC コンテナ甚の execagent ゚ンドポむントがないため、type: lxc ではコマンド実行時に明確な「未察応」メッセヌゞが返されたす。代わりに SSH たたはホスト䞊の pct exec を䜿甚しおください。

トラブルシュヌティング

  • 「Could not load .env file」ずいう譊告 — MCP クラむアントの env ブロックを介しお倉数を枡しおいる堎合は無芖できたす。それ以倖の堎合は、リポゞトリの芪ディレクトリに .env を眮いおくださいmcp-proxmox 内から ls ../.env を実行。
  • 接続拒吊タむムアりト — PROXMOX_HOST、PROXMOX_PORTデフォルトは 8006、およびファむアりォヌルのルヌルを確認しおください。
  • 401 Unauthorized — PROXMOX_USER の圢匏root@pam、PROXMOX_TOKEN_NAME、および PROXMOX_TOKEN_VALUE のシヌクレットが完党であるこずを確認しおください。
  • 「Requires Elevated Permissions」 — PROXMOX_ALLOW_ELEVATED=true を蚭定し、トヌクンに䞊蚘のロヌルを付䞎しおください。
  • QEMU コマンドの実行に倱敗する — VM 内に QEMU ゲスト゚ヌゞェントをむンストヌルしお有効化しapt install qemu-guest-agent、VM のオプションでも有効化しおから、VM を再起動しおください。

ラむセンス

MIT — LICENSE を参照しおください。

コメント

MCP は初めおですか

プロトコルの抂芁から最初のサヌバヌの導入たで、よくある疑問にたずめお答えたす。

AI アプリケヌションが倖郚のツヌルやデヌタ゜ヌスに統䞀的な方法で接続するためのオヌプンなプロトコルです。クラむアントはモデルずの察話を担い、MCP サヌバヌはツヌル・リ゜ヌス・プロンプトテンプレヌトを提䟛したす。暙準メッセヌゞでやり取りするため、1 ぀のサヌバヌを耇数のクラむアントで再利甚できたす。