mcpField
P
Proxmox Mcp

Proxmox Mcp

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

Proxmox Mcp について

Proxmox Mcpは、ClaudeなどのMCPクライアントからProxmox VEを管理するためのMCPサーバーです。ノード、VM、コンテナを扱い、既定では読み取り専用で、リスクレベルに応じてライフサイクルやスナップショット操作を有効にします。

主な機能

  1. 01ノード、QEMU VM、LXCコンテナの確認
  2. 02ストレージ、クラスター、スナップショット情報の取得
  3. 03リスクレベルによるツール制御
  4. 04stdioとStreamable HTTPに対応
  5. 05応答内の機密フィールドを既定でマスキング

活用シーン

  1. 01クラスターのノードとVMの状態確認
  2. 02ノードのタスクやリソース状況の調査
  3. 03必要に応じたVMライフサイクル操作の有効化

MCP 対応

MCPクライアントにProxmox VEの確認ツールと、リスクレベルで制御される管理ツールを提供します。stdioとStreamable HTTPに対応します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"akmalovaa-proxmox": {
"command": "uvx",
"args": [
"proxmox-ve-mcp"
],
"env": {
"PROXMOX_HOST": "<PROXMOX_HOST>",
"PROXMOX_PORT": "<PROXMOX_PORT>",
"PROXMOX_VERIFY_SSL": "<PROXMOX_VERIFY_SSL>",
"PROXMOX_TIMEOUT": "<PROXMOX_TIMEOUT>",
"PROXMOX_USER": "<PROXMOX_USER>",
"PROXMOX_TOKEN_NAME": "<PROXMOX_TOKEN_NAME>",
"PROXMOX_TOKEN_VALUE": "<PROXMOX_TOKEN_VALUE>",
"PROXMOX_PASSWORD": "<PROXMOX_PASSWORD>",
"PROXMOX_RISK_LEVEL": "<PROXMOX_RISK_LEVEL>",
"PROXMOX_TOOLS_ALLOW": "<PROXMOX_TOOLS_ALLOW>",
"PROXMOX_REDACT_SECRETS": "<PROXMOX_REDACT_SECRETS>",
"PROXMOX_MCP_TRANSPORT": "<PROXMOX_MCP_TRANSPORT>",
"PROXMOX_MCP_HOST": "<PROXMOX_MCP_HOST>",
"PROXMOX_MCP_PORT": "<PROXMOX_MCP_PORT>",
"PROXMOX_MCP_PATH": "<PROXMOX_MCP_PATH>",
"PROXMOX_MCP_JSON_RESPONSE": "<PROXMOX_MCP_JSON_RESPONSE>",
"PROXMOX_MCP_ALLOWED_HOSTS": "<PROXMOX_MCP_ALLOWED_HOSTS>",
"PROXMOX_MCP_ALLOWED_ORIGINS": "<PROXMOX_MCP_ALLOWED_ORIGINS>",
"SENTRY_DSN": "<SENTRY_DSN>"
}
}
}
}
起動コマンドuvx proxmox-ve-mcp
設定が必要な環境変数
PROXMOX_HOSTProxmox host IP or hostname.
PROXMOX_PORTProxmox API port.
PROXMOX_VERIFY_SSLVerify the TLS certificate. Proxmox self-signs by default.
PROXMOX_TIMEOUTSeconds to wait for each Proxmox API request.
PROXMOX_USERAPI user, including the realm.
PROXMOX_TOKEN_NAMEシークレットAPI token name. Use this plus PROXMOX_TOKEN_VALUE, or PROXMOX_PASSWORD.
PROXMOX_TOKEN_VALUEシークレットAPI token secret.
PROXMOX_PASSWORDシークレットPassword, used only when no API token is set.
PROXMOX_RISK_LEVELWhich tools exist: read-only, plus lifecycle, or everything.
PROXMOX_TOOLS_ALLOWComma-separated tool names to register, intersected with the risk level. Unset = all of them.
PROXMOX_REDACT_SECRETSシークレットMask cipassword and sshkeys in every response.
PROXMOX_MCP_TRANSPORTstdio (default) or streamable-http.
PROXMOX_MCP_HOSTHTTP bind address. Anything but loopback also needs PROXMOX_MCP_ALLOWED_HOSTS.
PROXMOX_MCP_PORTHTTP port.
PROXMOX_MCP_PATHStreamable HTTP endpoint path.
PROXMOX_MCP_JSON_RESPONSEAnswer with JSON instead of an SSE stream.
PROXMOX_MCP_ALLOWED_HOSTSComma-separated Host headers to accept over HTTP; '*' disables the check.
PROXMOX_MCP_ALLOWED_ORIGINSComma-separated browser origins allowed to call the endpoint. Empty = same-origin only.
SENTRY_DSNシークレットOptional: report tool traces and errors to Sentry. Unset disables it.

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

パッケージ
pypiproxmox-ve-mcp2.3.0
ocighcr.io/akmalovaa/proxmox-mcp:2.3.0

ツール

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

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

詳細

Proxmox MCP サーバー

proxmox-mcp — Proxmox VE 用 MCP サーバー

CI Release License: MIT Python 3.14 GHCR MCP

シンプルな Proxmox MCP

proxmox-mcp ロゴ

Proxmox VE を管理する MCP サーバー

50 個のツール — ノード、QEMU VM、LXC コンテナー、ストレージ、クラスター、スナップショット。

このサーバーを選ぶ理由
  • イメージは 1 つ、マルチアーキテクチャ対応 — docker run ghcr.io/akmalovaa/proxmox-mcp:latest を実行するだけです
  • 環境変数だけ — 設定ファイルもデータベースも状態も不要です
  • デフォルトで読み取り専用 — 破壊的な操作は、明示的に PROXMOX_RISK_LEVEL を指定しない限り実行できません
  • stdio または Streamable HTTP — 環境変数を 1 つ変えるだけです。デフォルトは stdio で、HTTP はループバックにバインドします
  • 小さなコードベース — Proxmoxer の上に薄いレイヤーを設けており、設定ファイルもデータベースも状態もありません
  • 未加工の JSON を出力 — 書式設定も絵文字もなく、LLM が扱いやすいクリーンなデータを取得できます
  • 読みやすいエラー — 403、ホストの停止、またはリスクレベルによるブロックは、スタックトレースではなく文章で返されます

proxmox-mcp MCP server

クイックスタート

イメージ: ghcr.io/akmalovaa/proxmox-mcp:latest(マルチアーキテクチャ対応:amd64 + arm64)。

1. シェルのプロファイルに認証情報をエクスポートします(~/.zprofile、~/.zshrc または ~/.bashrc):

# token auth (recommended — see "Least privilege" for the user and role to give it):
export PROXMOX_HOST=192.168.1.100
export PROXMOX_USER=mcp@pve
export PROXMOX_TOKEN_NAME=mcp
export PROXMOX_TOKEN_VALUE=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

# or password auth:
# export PROXMOX_USER=root@pam
# export PROXMOX_PASSWORD=your-password

# optional:
export PROXMOX_RISK_LEVEL=read

再読み込みするには、source ~/.zprofile を実行します(またはシェルを再起動します)。

2. ~/.claude/settings.json(Claude Code)または claude_desktop_config.json(Claude Desktop)に追加します:

{
  "mcpServers": {
    "proxmox": {
      "command": "docker",
      "args": ["run", "-i", "--rm",
        "-e", "PROXMOX_HOST",
        "-e", "PROXMOX_USER",
        "-e", "PROXMOX_PASSWORD",
        "ghcr.io/akmalovaa/proxmox-mcp:latest"]
    }
  }
}

または、トークン認証を使用します:

{
  "mcpServers": {
    "proxmox": {
      "command": "docker",
      "args": ["run", "-i", "--rm",
        "-e", "PROXMOX_HOST",
        "-e", "PROXMOX_USER",
        "-e", "PROXMOX_TOKEN_NAME",
        "-e", "PROXMOX_TOKEN_VALUE",
        "ghcr.io/akmalovaa/proxmox-mcp:latest"]
    }
  }
}

値を指定せずに docker run -e VAR を実行すると、ホストの環境変数が引き継がれるため、設定ファイルにシークレットを記載する必要はありません。クライアントを再起動すると、読み取り専用の Proxmox ツールが 32 個利用可能になります(PROXMOX_RISK_LEVEL を引き上げると、さらに増えます)。

パスワード認証の場合は、トークン用の変数を PROXMOX_PASSWORD に置き換えてください。

注: macOS の Claude Desktop は launchd 経由で起動されるため、~/.zprofile/~/.zshrc の設定は引き継がれません。エクスポート設定を ~/.zshenv に記述するか、設定ファイル内にインラインの "env": { ... } ブロックを記述してください。

設定

すべての設定は環境変数です。シェルのプロファイルに設定するか、docker run -e にインラインで渡すか、MCP クライアントの env ブロックに宣言してください。

変数デフォルト説明
PROXMOX_HOST—Proxmox ホスト(IP アドレスまたはホスト名)
PROXMOX_USERroot@pamAPI ユーザー
認証—トークン または パスワード — 詳細は以下を参照
PROXMOX_PORT8006API ポート
PROXMOX_VERIFY_SSLfalseTLS 証明書を検証するかどうか
PROXMOX_TIMEOUT15各 API リクエストの待機時間(秒)
PROXMOX_RISK_LEVELreadread / lifecycle / all — リスクレベルを参照
PROXMOX_TOOLS_ALLOW—リスクレベルに加えて登録するツール名をカンマ区切りで指定
PROXMOX_REDACT_SECRETStrueレスポンス内の cipassword / sshkeys をマスクするかどうか

トランスポート設定は PROXMOX_MCP_ プレフィックスの下にあります。Streamable HTTPを参照してください。

認証:トークン または パスワード

どちらか一方を選んでください。両方が設定されている場合は、トークンが優先されます。

トークン(推奨):

export PROXMOX_USER=mcp@pve
export PROXMOX_TOKEN_NAME=mcp
export PROXMOX_TOKEN_VALUE=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

ペアの片方だけを設定すると、パスワードへ暗黙にフォールバックせず、起動エラーになります。以前は、PROXMOX_TOKEN_NAME の入力ミスにより、PROXMOX_USER として気付かないまま実行されていました。

パスワード(代替):

export PROXMOX_PASSWORD=your-password
最小権限

MCP サーバーは、モデルが自分で書いていないテキストに基づいて動作するため、root@pam ではなく、専用のユーザーと専用のトークンを用意してください。Proxmox ホストで次を実行します。

# a user that is not root, with a role that matches the risk level you plan to run
pveum user add mcp@pve
pveum acl modify / --users mcp@pve --roles PVEAuditor          # read
# pveum acl modify / --users mcp@pve --roles PVEVMAdmin        # lifecycle / all

# a token for that user. Privilege Separation ON (the default) means the token starts
# with no rights at all, so grant it the same role explicitly:
pveum user token add mcp@pve mcp --privsep 1
pveum acl modify / --tokens 'mcp@pve!mcp' --roles PVEAuditor

トークンに実際に設定された権限を確認します。

pveum user permissions mcp@pve --token mcp

PVEAuditor は、読み取り専用の 32 個のツールすべてをカバーします。/vms に対する PVEVMAdmin は、ゲストのライフサイクル管理とスナップショットを追加します。さらに、migrate_vm にはターゲットノードでの VM.Migrate が、clone_vm にはターゲットストレージでの Datastore.AllocateSpace が必要です。サーバーにクラスターの一部だけを見せる場合は、ACL のパスを絞り込んでください(/vms/101、/pool/homelab)。

root@pam も引き続き使用でき、ローカルでさっと確認するには最も手軽です。ただし、そのまま実行し続けるべきではありません。

リスクレベル

PROXMOX_RISK_LEVEL は、使用可能なツールを制御します。現在のレベルを超えるツールは登録されないため、MCP クライアントのツール一覧には表示されません。

レベルツール数追加されるもの
read (デフォルト)32読み取り専用ツール
lifecycle46+ start / stop / reboot / suspend / clone / migrate / create-snapshot
all50+ delete-snapshot / rollback-snapshot

各レベル引き上げ対象の呼び出しは、呼び出し時にも再チェックされ、標準エラー出力に記録されます(ALLOW / DENY + ツール + ティア)。

クライアント側からは、ほかに現在のレベルを確認できません。存在しないツールは、最初から作られていなかったツールと同じように見えます。そのため、get_server_info はバージョンとツール数に加えて、現在のレベルも報告します。

特定のエージェントにサービスを提供するデプロイでは、PROXMOX_TOOLS_ALLOW を使って、ティア内のツールをさらに絞り込めます。

export PROXMOX_TOOLS_ALLOW=list_nodes,list_containers,get_container_status,get_cluster_resources

存在しない名前を指定すると起動エラーになるため、入力ミスによってツール一覧が気付かないうちに削られることはありません。特別な理由がない限り、get_server_info は一覧に残してください。クライアントが、ほかのツール一覧の意味を知るために使うツールです。

応答の形式

インベントリ一覧(list_nodes、list_vms、list_containers、get_cluster_resources)は、各行のうち、識別情報、ステータス、稼働時間、CPU、メモリのコンパクトな一部を返します。除外されるのは、1 秒あたりの I/O カウンターと PSI 圧力ゲージです。実データではありますが、トリアージの判断には影響せず、保持されるデータの数倍の量になります。未加工の行を取得するには、verbose=true を渡してください。

書き込みツールが返すのは、タスクの完了結果ではなく、Proxmox が受け付けたタスクです。

{"state":"accepted","operation":"start_vm","node":"pve","vmid":101,
 "upid":"UPID:pve:...","poll_with":"get_task_status"}

cipassword と sshkeys は、キーを残したまま、すべての場所で ***redacted*** に置き換えられます。これにより、モデルは cloud-init が設定されていることを引き続き判別できます。未加工の値を取得するには、PROXMOX_REDACT_SECRETS=false を設定してください。

ストリーミング可能な HTTP

stdio は引き続きデフォルトであり、ローカルマシン上の MCP クライアントではこれを使用してください。共有デプロイメント(クラスター内のコンテナや、1 つの URL を複数のクライアントで共有する場合)では、トランスポートを設定するだけで、ほかは何も変わりません。

docker run --rm -p 8000:8000 \
  -e PROXMOX_HOST -e PROXMOX_TOKEN_NAME -e PROXMOX_TOKEN_VALUE \
  -e PROXMOX_MCP_TRANSPORT=streamable-http \
  -e PROXMOX_MCP_HOST=0.0.0.0 \
  -e PROXMOX_MCP_ALLOWED_HOSTS=proxmox-mcp.example.com \
  ghcr.io/akmalovaa/proxmox-mcp:latest
変数デフォルト説明
PROXMOX_MCP_TRANSPORTstdiostdio または streamable-http
PROXMOX_MCP_HOST127.0.0.1バインドアドレス。コンテナでは 0.0.0.0
PROXMOX_MCP_PORT8000ポート
PROXMOX_MCP_PATH/mcpエンドポイントのパス
PROXMOX_MCP_JSON_RESPONSEtrueSSE ストリームの代わりに JSON レスポンスを返します
PROXMOX_MCP_ALLOWED_HOSTS—許可する Host ヘッダー。* を指定するとチェックを無効にします
PROXMOX_MCP_ALLOWED_ORIGINS—許可するブラウザーのオリジン。空の場合は同一オリジンのみ

プレフィックスが PROXMOX_ ではなく PROXMOX_MCP_ なのは、Kubernetes がリンクされた各 Service に対して <SERVICE>_PORT を設定するためです。proxmox という名前の Service があると、PROXMOX_PORT が上書きされてしまいます。

セッションは使用しません(stateless_http)。セッションはリビジョン 2026-07-28 でプロトコルから削除されており、セッションがなければ複数のクライアントで 1 つの URL を共有でき、ローリングアップデートによって接続が切断されることもありません。

Host と Origin の検証。 ループバック以外にバインドするには、PROXMOX_MCP_ALLOWED_HOSTS が必要です。設定されていない場合、サーバーは起動を拒否します。外部の Origin には 403 を、想定外の Host には 421 を返します。これにより、同じ LAN 内のブラウザーのページが DNS リバインディングを介してサーバーを操作するのを防ぎます。Origin ヘッダーのないリクエスト(curl、MCP クライアント)は常に許可されます。前段の何かですでに検証している場合に限り、PROXMOX_MCP_ALLOWED_HOSTS=* を設定してください。

認証機能はありません。 エンドポイントにアクセスできる人は誰でも、PROXMOX_RISK_LEVEL で許可されている操作を実行できます。信頼できるゲートウェイ、認証プロキシ、またはネットワーク境界の背後に配置し、アクセス経路が認証されていない場合は PROXMOX_RISK_LEVEL=read のままにしてください。

ヘルスエンドポイントは /mcp と並行して提供され、認証は不要です。

パス意味
GET /healthzプロセスが稼働しています。Proxmox には一切アクセスしません。Proxmox の停止時に失敗する Liveness Probe を設定すると、サーバーがループ状態で再起動するだけで、何も解決しません。
GET /readyzProxmox が version.get() に応答しました。トラフィックの振り分け条件にはこちらを使用してください。応答できない場合は、理由を読み取れる 503 を返します。
livenessProbe:
  httpGet: { path: /healthz, port: 8000 }
readinessProbe:
  httpGet: { path: /readyz, port: 8000 }

対話形式での使用時は、フラグで環境変数と同じ設定ができます。例:uvx proxmox-ve-mcp --transport streamable-http --port 8080

Sentry(任意)

ツールの呼び出しや失敗を Sentry に送信できます。すべての tools/call がスパンになり、失敗したツールはそれぞれ Issue になります。SENTRY_DSN が未設定の場合、データは一切送信されず、SDK もインポートされません。

ghcr.io イメージには SDK が含まれています。PyPI からインストールする場合は、追加パッケージをインストールしてください。

uvx --from 'proxmox-ve-mcp[sentry]' proxmox-ve-mcp
変数デフォルト説明
SENTRY_DSN—レポートを有効にするには設定します
SENTRY_ENVIRONMENTproduction任意の環境ラベル
SENTRY_TRACES_SAMPLE_RATE1.0トレースするツール呼び出しの割合
SENTRY_SEND_DEFAULT_PIIfalseツールの引数と結果をスパンデータとして送信します

意図がない限り、SENTRY_SEND_DEFAULT_PII は無効のままにしてください。有効にすると、ツールの引数と結果がスパンに添付され、get_vm_config は SSH キーと cipassword のハッシュを返します。追加パッケージをインストールせずに DSN を設定すると、警告がログに記録されますが、サーバーはそのまま動作します。

ツール

ノード(10)
ツール説明
list_nodesステータス、CPU、メモリ、稼働時間を含む、すべてのクラスターノードを一覧表示します
get_node_statusノードの詳細なメトリクス(CPU、メモリ、ディスク、負荷、カーネル)
get_node_networksノード上のネットワークインターフェース
get_node_disksノード上の物理ディスク
get_node_servicesProxmox のシステムサービスとその状態
get_node_updates保留中の APT パッケージ更新
get_node_rrd_dataCPU/メモリ/ディスク/ネットワークの過去のメトリクス(RRD)
get_node_tasksノード上の最近のタスク。エラーのみへの絞り込みも可能
get_task_statusUPID で指定したタスクのステータス
get_task_logタスクのログ出力
QEMU VM(17)
ツールティア説明
list_vmsreadすべての VM を一覧表示します。ノードによる絞り込みも可能です
get_vm_statusreadVM の現在のステータス(稼働中/停止中、CPU、メモリ)
get_vm_configreadVM の設定(ハードウェア、ディスク、ネットワーク)
get_vm_network_interfacesread稼働中の VM のIP アドレス(QEMU ゲストエージェント経由)
get_vm_rrd_datareadCPU/メモリ/ディスク/ネットワークの過去のメトリクス(RRD)
list_vm_snapshotsreadVM のすべてのスナップショットを一覧表示します
start_vmlifecycleVM を起動します
stop_vmlifecycleVM を強制停止します — 破壊的操作として注記されています。保存されていないゲストの状態は失われます
shutdown_vmlifecycleタイムアウト付きの ACPI による正常なシャットダウン
reboot_vmlifecycleACPI 経由で再起動します
suspend_vmlifecycleVM を一時停止します
resume_vmlifecycle一時停止中の VM を再開します
clone_vmlifecycleフルクローンまたはリンククローンを作成します
migrate_vmlifecycleVM をオンラインまたはオフラインで別のノードに移動します
create_vm_snapshotlifecycleスナップショットを作成します
delete_vm_snapshotallスナップショットを削除します
rollback_vm_snapshotallスナップショットにロールバックします
LXC コンテナー(13)
ツールティア説明
list_containersreadすべての LXC コンテナーを一覧表示します。ノードによる絞り込みも可能です
get_container_statusreadコンテナーの現在のステータス
get_container_configreadコンテナーの設定
get_container_interfacesread稼働中のコンテナーのIP アドレス
get_container_rrd_datareadCPU/メモリ/ディスク/ネットワークの過去のメトリクス(RRD)
list_container_snapshotsreadすべてのスナップショットを一覧表示します
start_containerlifecycleコンテナーを起動します
stop_containerlifecycleコンテナーを強制停止します — 破壊的操作として注記されています
shutdown_containerlifecycleタイムアウト付きの正常なシャットダウン
reboot_containerlifecycleコンテナーを再起動します
create_container_snapshotlifecycleスナップショットを作成します
delete_container_snapshotallスナップショットを削除します
rollback_container_snapshotallスナップショットにロールバックします
ストレージ(2)
ツール説明
list_storage使用状況を含むストレージプール。ノードによる絞り込みも可能です
get_storage_contentストレージプールの内容(ISO、バックアップ、イメージ、テンプレート)
クラスター(7)
ツール説明
get_cluster_statusクラスターの健全性、クォーラム、ノードメンバーシップ
get_cluster_resourcesすべてのリソース(VM、コンテナー、ストレージ、ノード)
get_cluster_backups設定済みのバックアップジョブ
get_ha_status高可用性リソースとその状態
list_poolsリソースプール
get_cluster_logクラスター全体のイベントログ。新しい順
get_next_vmid次に利用可能な VM/コンテナー ID
サーバー(1)
ツール説明
get_server_infoこのサーバー自身のリスクレベル、ツール数、バージョン、Proxmox への接続可否

アーキテクチャ

src/proxmox_mcp/
├── server.py    # MCPServer instance, health routes, transport selection, entry point
├── config.py    # Pydantic Settings (PROXMOX_) + transport config (PROXMOX_MCP_)
├── client.py    # Proxmoxer connection, built once per process
└── tools/       # nodes, vms, containers, storage, cluster, server_info
  • デフォルトで読み取り専用 — 高リスクのツールは PROXMOX_RISK_LEVEL で制御します
  • 登録時に制御 — ティアを超えるツールは呼び出し時に拒否されるのではなく、tools/list に表示されません。モデルに見えないものは、再試行できません
  • 利用許可とアノテーションは別々 — tier= はオペレーターのポリシーで、annotations= はクライアントに呼び出しの内容を伝えるものです。そのため、強制停止は destructiveHint: true でありながら、lifecycle ティアに属することができます
  • 遅延接続 — Proxmoxer クライアントは初回使用時に一度だけ構築され、共有されます。そのため、Proxmox に到達できない場合でもサーバーは正常に起動します
  • 生の JSON 出力 — コンパクトで書式なしのため、LLM がデータを直接処理します
  • エラーの正規化 — Proxmox とネットワークの障害は、requests のトレースバックではなく、対処方法がわかる一文に変換されます

開発

単独で実行する(テスト用)
export PROXMOX_HOST=192.168.1.100
export PROXMOX_USER=root@pam
export PROXMOX_TOKEN_NAME=mcp
export PROXMOX_TOKEN_VALUE=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

docker run -i --rm \
  -e PROXMOX_HOST -e PROXMOX_USER \
  -e PROXMOX_TOKEN_NAME -e PROXMOX_TOKEN_VALUE \
  ghcr.io/akmalovaa/proxmox-mcp:latest
Docker を使わない場合(UV)
git clone https://github.com/akmalovaa/proxmox-mcp.git && cd proxmox-mcp && uv sync

MCP クライアントの設定:

{
  "mcpServers": {
    "proxmox": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/proxmox-mcp", "python", "-m", "proxmox_mcp"],
      "env": {
        "PROXMOX_HOST": "192.168.1.100",
        "PROXMOX_TOKEN_NAME": "mcp",
        "PROXMOX_TOKEN_VALUE": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}
ソースからビルドする
git clone https://github.com/akmalovaa/proxmox-mcp.git
cd proxmox-mcp
docker build -t proxmox-mcp .

イメージはマルチステージです。uv が使い捨てレイヤーで仮想環境をビルドし、ランタイムステージには Python と仮想環境のみを含め、非特権ユーザー mcp(uid 10001)として実行します。

リント、型チェック、テスト
uv sync --locked --group dev
uv run ruff check .
uv run mypy src/
uv run pytest -v

ライセンス

MIT

コメント

MCP は初めてですか?

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

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