proxmox-lab-mcp
Proxmox home lab management MCP server that enables Claude Code to manage Proxmox VMs, Terraform, Ansible, Kubernetes, ArgoCD, and other lab utilities via HTTP/SSE.
README
proxmox-lab-mcp
Proxmox ホームラボ管理用 MCP サーバー。Raspberry Pi 5 (Ubuntu 24) 上で稼働し、Claude Code から HTTP/SSE で接続する。
構成
Claude Code (Windows)
│ HTTP/SSE http://192.168.210.55:8000/sse
▼
Raspberry Pi 5 (Ubuntu 24) ← MCP Server
├── proxmoxer → Proxmox API (LAN)
├── terraform CLI (ネイティブ実行)
├── ansible CLI (ネイティブ実行)
├── kubectl (kubeconfig)
└── ArgoCD REST API (http://argocd.homelab.local)
セットアップ(Raspberry Pi 上)
1. uv のインストール
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
2. リポジトリの配置
git clone https://github.com/fukui-yuto/proxmox-lab-mcp.git ~/proxmox-lab-mcp
cd ~/proxmox-lab-mcp
3. 環境変数の設定
cp .env.example .env
vi .env # 各サービスの接続情報を記入
必須の環境変数:
| 変数名 | 説明 |
|---|---|
PROXMOX_HOST |
Proxmox ホスト IP |
PROXMOX_USER |
Proxmox ユーザー (例: root@pam) |
PROXMOX_TOKEN_NAME |
API トークン名 |
PROXMOX_TOKEN_VALUE |
API トークン値 |
TERRAFORM_DIR |
terraform ディレクトリのパス |
ANSIBLE_DIR |
ansible ディレクトリのパス |
KUBECONFIG |
kubeconfig ファイルのパス |
ArgoCD ツールを使用する場合(任意):
| 変数名 | 説明 |
|---|---|
ARGOCD_SERVER |
ArgoCD サーバー URL (例: http://argocd.homelab.local) |
ARGOCD_TOKEN |
ArgoCD API トークン(expiresIn=0 で生成、パスワード変更で無効化されない) |
ARGOCD_USERNAME |
自動再ログイン用ユーザー名(設定すると 401 時に自動復旧) |
ARGOCD_PASSWORD |
自動再ログイン用パスワード(設定すると 401 時に自動復旧) |
ARGOCD_VERIFY_SSL |
SSL 検証 (true/false、デフォルト: false) |
自動再ログインの仕組み:
ARGOCD_TOKENが期限切れ・無効になった場合、ARGOCD_USERNAME/ARGOCD_PASSWORDが設定されていれば自動でセッションを再取得してリトライする。両方設定しておくことを推奨。
ArgoCD API トークンの取得方法:
# admin アカウントに apiKey 権限を付与(初回のみ)
kubectl -n argocd patch configmap argocd-cm \
-p '{"data": {"accounts.admin": "apiKey,login"}}'
# セッショントークンを取得してから永続 API トークンを生成
SESSION=$(curl -sk -X POST http://argocd.homelab.local/api/v1/session \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"<password>"}' | python3 -c "import sys,json; print(json.load(sys.stdin)['token'])")
curl -sk -X POST http://argocd.homelab.local/api/v1/account/admin/token \
-H "Authorization: Bearer $SESSION" \
-H 'Content-Type: application/json' \
-d '{"expiresIn": 0, "id": "mcp-token"}' | python3 -c "import sys,json; print(json.load(sys.stdin)['token'])"
取得したトークンを .env の ARGOCD_TOKEN に設定し、サービスを再起動する:
# .env を編集して ARGOCD_TOKEN を更新
vi /root/proxmox-lab-mcp/.env
# MCP サービスを再起動
sudo systemctl restart proxmox-lab-mcp
また、Pi の /etc/hosts に ArgoCD のホスト名を追加しておく必要があります:
echo "192.168.210.21 argocd.homelab.local" >> /etc/hosts
4. 起動確認
uv run lab-mcp
# → http://0.0.0.0:8000/sse で起動
5. systemd サービス登録(常時起動)
sudo tee /etc/systemd/system/proxmox-lab-mcp.service > /dev/null <<EOF
[Unit]
Description=Proxmox Lab MCP Server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/proxmox-lab-mcp
ExecStart=/root/.local/bin/uv run lab-mcp
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now proxmox-lab-mcp
sudo systemctl status proxmox-lab-mcp
Proxmox API トークン作成
Proxmox Web UI → Datacenter → Permissions → API Tokens で作成:
- User:
root@pam - Token ID:
mcp-token - Privilege Separation: OFF(root 権限を継承)
Claude Code への登録
claude mcp add --transport sse -s user proxmox-lab http://<pi-ip>:8000/sse
利用可能なツール
Phase 1: Proxmox 読み取り系 ✅
| ツール名 | 説明 |
|---|---|
proxmox_list_nodes |
ノード一覧・CPU/メモリ/稼働状態 |
proxmox_list_vms |
全ノードの VM/LXC 一覧 |
proxmox_get_vm_status |
特定 VM の詳細状態 |
proxmox_get_node_resources |
ノードのリソース使用量 |
proxmox_list_storage |
ストレージプール一覧・使用量 |
Proxmox 操作系 ✅
| ツール名 | 説明 | 破壊的 |
|---|---|---|
proxmox_start_vm |
VM / LXC 起動 | ✗ |
proxmox_stop_vm |
VM / LXC 停止 | ✓ confirm 必須 |
proxmox_reboot_vm |
VM / LXC 再起動 | ✓ confirm 必須 |
proxmox_list_snapshots |
スナップショット一覧 | ✗ |
proxmox_create_snapshot |
スナップショット作成 | ✗ |
proxmox_rollback_snapshot |
スナップショットへロールバック | ✓ confirm 必須 |
proxmox_list_tasks |
直近タスク一覧 | ✗ |
Proxmox 調査系 ✅
| ツール名 | 説明 |
|---|---|
proxmox_get_vm_config |
VM / LXC の設定詳細(CPU / メモリ / ディスク / ネットワーク) |
proxmox_get_task_log |
タスク UPID のログ取得(list_tasks で得た UPID を指定) |
proxmox_get_cluster_status |
クラスター全体の健全性ステータス |
proxmox_list_networks |
ノードのネットワーク設定一覧 |
proxmox_get_storage_content |
ストレージ内の ISO / テンプレート一覧 |
proxmox_get_replication_status |
ZFS レプリケーションジョブの状態(node01 ↔ node02 同期確認) |
proxmox_get_backup_jobs |
vzdump バックアップタスク履歴 |
proxmox_get_certificate_info |
TLS 証明書情報と残り有効日数 |
Phase 2: Terraform tools ✅
| ツール名 | 説明 | 破壊的 |
|---|---|---|
terraform_plan |
terraform plan 実行・差分表示 | ✗ |
terraform_validate |
構文検証のみ(apply なし) | ✗ |
terraform_state_list |
state 内リソース一覧 | ✗ |
terraform_state_show |
特定リソースの state 詳細 | ✗ |
terraform_output |
output 値取得 | ✗ |
terraform_apply |
terraform apply 実行 | ✓ confirm 必須 |
terraform_destroy |
terraform destroy 実行 | ✓ confirm 必須 |
Phase 3: Ansible tools ✅
| ツール名 | 説明 | 破壊的 |
|---|---|---|
ansible_ping |
全ホスト疎通確認 | ✗ |
ansible_list_inventory |
インベントリ構成確認 | ✗ |
ansible_run_module |
アドホックモジュール実行(shell, setup 等) | ✗ |
ansible_get_facts |
ホストの facts 収集(OS / ハードウェア情報) | ✗ |
ansible_run_playbook |
playbook 実行 | ✓ confirm 必須 |
Phase 4: kubectl / Helm tools ✅
| ツール名 | 説明 | 破壊的 |
|---|---|---|
kubectl_get |
kubectl get <resource>(label_selector / output / jq_filter 引数対応) | ✗ |
kubectl_describe |
kubectl describe <resource> <name> | ✗ |
kubectl_logs |
Pod ログ取得(--previous / container / since 引数対応) | ✗ |
kubectl_exec |
Pod 内コマンド実行(シェル調査・疎通確認等) | ✗ |
kubectl_get_events |
Namespace / Pod のイベント一覧(障害原因特定) | ✗ |
kubectl_get_secret |
Secret 内容確認(値はマスク表示) | ✗ |
kubectl_get_configmap |
ConfigMap 内容確認 | ✗ |
kubectl_run |
一時 Pod でコマンド実行(Pod は自動削除) | ✗ |
kubectl_port_forward |
ローカルへのポートフォワード(バックグラウンド実行) | ✗ |
kubectl_apply |
マニフェスト apply(ファイルパス or インライン YAML 対応) | ✓ confirm 必須 |
kubectl_delete |
リソース削除 | ✓ confirm 必須 |
kubectl_patch |
リソース部分更新(merge / strategic / json パッチ対応) | ✗ |
kubectl_annotate |
アノテーション追加・更新 | ✗ |
kubectl_rollout_status |
Deployment ロールアウト状態確認 | ✗ |
kubectl_rollout_restart |
Deployment / StatefulSet / DaemonSet のローリングリスタート | ✗ |
kubectl_wait |
リソースが指定条件になるまで待機(condition / timeout 指定可) | ✗ |
kubectl_top |
Node / Pod リソース使用量 | ✗ |
helm_list |
Helm リリース一覧 | ✗ |
helm_get_values |
リリースの values 確認 | ✗ |
helm_show_values |
チャートのデフォルト values 確認(インストール前の設定確認に有用) | ✗ |
helm_upgrade |
リリースのアップグレード/インストール | ✓ confirm 必須 |
helm_uninstall |
リリースの削除 | ✓ confirm 必須 |
Phase 5: ArgoCD tools ✅
環境変数 ARGOCD_SERVER / ARGOCD_TOKEN が必要。
| ツール名 | 説明 | 破壊的 |
|---|---|---|
argocd_list_apps |
全アプリの一覧と sync/health 状態 | ✗ |
argocd_get_app |
アプリ詳細(リソース一覧・条件付き状態) | ✗ |
argocd_sync |
アプリの sync 実行(revision / prune / dry_run 対応) | ✓ |
argocd_refresh |
hard refresh トリガー(Git から再取得) | ✗ |
argocd_app_history |
sync 履歴(いつ・どのリビジョンがデプロイされたか) | ✗ |
argocd_app_managed_resources |
管理リソース一覧(status / health / prune 状態) | ✗ |
argocd_app_diff |
リソース差分(live vs desired)— OutOfSync 原因特定 | ✗ |
argocd_app_terminate_op |
実行中オペレーションの終了(sync 詰まり解消) | ✗ |
argocd_list_out_of_sync |
OutOfSync アプリの一覧 | ✗ |
argocd_list_unhealthy |
Unhealthy アプリの一覧 | ✗ |
Longhorn / Cilium / Vault ✅
| ツール名 | 説明 | 破壊的 |
|---|---|---|
longhorn_volumes |
ボリューム一覧と状態(attached / detached / faulted) | ✗ |
cilium_status |
Cilium CNI の状態(agent health / endpoint 数) | ✗ |
vault_status |
Vault の状態(sealed / unsealed / HA モード) | ✗ |
Velero (バックアップ / リストア) ✅
| ツール名 | 説明 | 破壊的 |
|---|---|---|
velero_backup_list |
バックアップ一覧と状態 | ✗ |
velero_restore_list |
リストア一覧と状態 | ✗ |
velero_schedule_list |
スケジュール一覧 | ✗ |
velero_create_backup |
バックアップ作成 | ✓ confirm 必須 |
velero_create_restore |
リストア実行 | ✓ confirm 必須 |
kubectl / Helm 追加 ✅
| ツール名 | 説明 | 破壊的 |
|---|---|---|
kubectl_drain |
ノードからワークロード退避(メンテナンス用) | ✓ confirm 必須 |
kubectl_cordon |
ノードをスケジュール不可にする | ✗ |
kubectl_uncordon |
ノードのスケジュール再開 | ✗ |
kubectl_scale |
レプリカ数変更 | ✗ |
helm_history |
リリースの履歴(リビジョン一覧) | ✗ |
helm_rollback |
リリースを指定リビジョンに戻す | ✓ confirm 必須 |
Proxmox 追加 ✅
| ツール名 | 説明 | 破壊的 |
|---|---|---|
proxmox_migrate_vm |
VM / LXC を別ノードにマイグレーション | ✓ confirm 必須 |
Lab ユーティリティ ✅
| ツール名 | 説明 | 破壊的 |
|---|---|---|
lab_ping |
Raspberry Pi から疎通確認 | ✗ |
lab_wakeup |
Wake-on-LAN でホスト起動 | ✗ |
lab_exec |
SSH 経由で VM / ホスト上のコマンドを直接実行 | ✗ |
lab_check_port |
ポート開閉・疎通の確認 | ✗ |
lab_check_ports |
複数ポート一括確認 | ✗ |
lab_dns_lookup |
DNS 名前解決(Pi-hole 経由確認等) | ✗ |
lab_traceroute |
ネットワーク経路確認 | ✗ |
lab_curl |
HTTP リクエスト実行(ヘルスチェック等) | ✗ |
lab_journal |
SSH 経由で journalctl ログ取得 | ✗ |
lab_start_cluster |
クラスター全体の起動 | ✗ |
lab_stop_cluster |
クラスター全体の停止 | ✓ confirm 必須 |
lab_cluster_health |
ラボ全体の健全性サマリー | ✗ |
安全設計
破壊的操作には confirm: bool パラメータを必須化:
@mcp.tool()
def terraform_apply(confirm: bool = False) -> str:
if not confirm:
return "ERROR: confirm=true を明示してください"
# 実行
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。