KVM MCP Server について
KVM MCP Serverは、KVM仮想マシンを管理・監視するJSON-RPCサービスです。管理者や自動化スクリプト向けに、VMのライフサイクル、ネットワーク、ストレージ、画面操作をまとめて提供します。
主な機能
- 01VMの作成、起動、停止、再起動
- 02VMネットワーク設定とIP追跡
- 03ディスクのパス、形式、サイズ管理
- 04インストールメディアとOSバリアントの設定
- 05VNCポート割り当てと画面検索
- 06接続プール、キャッシュ、非同期処理
活用シーン
- 01VMの作成やライフサイクル操作の自動化
- 02VMの状態や画面接続ポートの確認
- 03VMストレージとネットワーク設定の統一
MCP 対応
JSON-RPCサービスを通じて、MCPクライアントにKVM仮想マシンの管理機能を提供します。ツールはVM操作と関連する監視を扱います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
KVM MCP サーバー
シンプルで直感的なインターフェースを通じて KVM 仮想マシンを管理する、強力な JSON-RPC サーバーです。このサーバーを使うと、標準化されたプロトコルを通じて KVM 仮想マシンを一元的に制御・監視できます。
このプロジェクトの目的
KVM 仮想マシンの管理には通常、virsh、virt-install、qemu-system などの複数のコマンドラインツールを使う必要があります。このプロジェクトは、以下を実現することを目的としています。
- VM 管理の簡素化:すべての VM 操作に対して、統一された単一のインターフェースを提供します
- リモート制御の実現:JSON-RPC を通じて VM をリモート管理できるようにします
- VM 操作の自動化:VM 管理タスクのスクリプト化と自動化を容易にします
- VM 設定の標準化:インフラストラクチャ全体で一貫した VM セットアップを実現します
- パフォーマンスの最適化:効率的なリソース管理とキャッシュ戦略を実装します
特長
-
VM ライフサイクル管理:
- カスタマイズ可能なパラメーターで新しい VM を作成
- VM の起動/停止/再起動
- 利用可能なすべての VM とその状態を一覧表示
- 状態の自動追跡と復旧
-
ネットワーク管理:
- ブリッジを使用して VM のネットワークを設定
brforvmsブリッジに対応- ネットワークインターフェースを自動設定
- IP アドレスの追跡と管理
-
ストレージ管理:
- VM ディスクの保存先を設定可能
- 各種ディスク形式(qcow2)に対応
- ディスクサイズを設定可能
- ディスクの自動クリーンアップと管理
-
ディスプレイ管理:
- グラフィカルアクセス用の VNC に対応
- VNC ポートを自動割り当て
- VM ディスプレイの検出と接続用ツール
- ディスプレイ状態の追跡と復旧
-
インストール対応:
- ISO イメージからのネットワークインストール
- CDROM からのローカルインストール
- 各種 OS バリアントに対応
- インストール設定の自動化
-
パフォーマンスの最適化:
- libvirt の接続プーリングにより、接続のオーバーヘッドを削減
- VM 情報をキャッシュして応答性を向上
- 非同期処理により並行性を向上
- 診断とトラブルシューティングのための高度なロギング
- リソースを適切に解放するためのグレースフルシャットダウン処理
- 接続の自動復旧と検証
- API 操作のレート制限
- パフォーマンスメトリクスの収集
パフォーマンス上の利点
接続プーリング
- レイテンシの低減:libvirt 接続を繰り返し開閉するオーバーヘッドを解消します
- リソース効率の向上:再利用可能な接続プールを維持し、システムリソースの使用量を削減します
- 自動復旧:切断された接続を自動的に検出して置き換えます
- プールサイズの設定:ワークロードに応じて接続数を調整できます
キャッシュ
- 応答時間の短縮:一般的な操作で libvirt への問い合わせを繰り返す回数を減らします
- TTL の設定:ニーズに応じてキャッシュの有効期限を設定できます
- 選択的なバイパス:最新データが必要な操作では、キャッシュをバイパスできます
- 自動無効化:VM の状態が変わると、キャッシュは自動的に無効化されます
非同期処理
- 並行性の向上:複数のリクエストを同時に処理します
- リソース利用の向上:システムリソースを効率的に使用します
- ノンブロッキング操作:時間のかかる操作によってサーバーがブロックされません
- グレースフルシャットダウン:シャットダウン時にリソースを適切に解放します
監視と診断
- 構造化ログ:分析しやすいログ形式
- パフォーマンスメトリクス:操作時間とリソース使用量を追跡
- エラー追跡:トラブルシューティングのための詳細なエラーログ
- リソース監視:接続プールの使用状況とキャッシュの有効性を追跡
設定
サーバーは、デフォルト値とパスを保存するために JSON 設定ファイル(config.json)を使用します。これにより、サーバーの移植性が高まり、カスタマイズしやすくなります。設定には以下が含まれます。
{
"vm": {
"disk_path": "/vm", // Base directory for VM disk storage
"default_iso": "/iso/ubuntu-24.04.2-live-server-amd64.iso", // Default installation media for Ubuntu-based VMs
"default_master_image": "/iso/fedora-coreos-41-qemu.x86_64.qcow2", // Default base image for Fedora CoreOS VMs
"default_name": "newvmname", // Default VM name
"default_memory": 2048, // Default memory allocation in MB
"default_vcpus": 2, // Default number of virtual CPUs
"default_disk_size": 20, // Default disk size in GB
"default_os_variant": "generic", // Default OS variant for virt-install
"default_network": "brforvms", // Default network bridge for VM networking
"ignition": { // Fedora CoreOS specific configuration
"default_hostname": "coreos", // Default hostname for CoreOS VMs
"default_user": "core", // Default user for CoreOS VMs
"default_ssh_key": "~/.ssh/id_rsa.pub", // Default SSH public key path
"default_timezone": "UTC", // Default timezone
"default_locale": "en_US.UTF-8", // Default system locale
"default_password_hash": null // Optional: Default password hash for user
}
}
}
これらの値は、環境の要件に合わせて変更できます。以下の形式で環境変数による上書きが可能です。
disk_pathに対するVM_DISK_PATHdefault_isoに対するVM_DEFAULT_ISOdefault_master_imageに対するVM_DEFAULT_MASTER_IMAGEdefault_nameに対するVM_DEFAULT_NAMEdefault_memoryに対するVM_DEFAULT_MEMORYdefault_vcpusに対するVM_DEFAULT_VCPUSdefault_disk_sizeに対するVM_DEFAULT_DISK_SIZEdefault_os_variantに対するVM_DEFAULT_OS_VARIANTdefault_networkに対するVM_DEFAULT_NETWORKignition.default_hostnameに対するVM_IGNITION_DEFAULT_HOSTNAMEignition.default_userに対するVM_IGNITION_DEFAULT_USERignition.default_ssh_keyに対するVM_IGNITION_DEFAULT_SSH_KEYignition.default_timezoneに対するVM_IGNITION_DEFAULT_TIMEZONEignition.default_localeに対するVM_IGNITION_DEFAULT_LOCALEignition.default_password_hashに対するVM_IGNITION_DEFAULT_PASSWORD_HASH
パフォーマンスの調整
接続プールの設定
connection_pool = LibvirtConnectionPool(
max_connections=5, # Maximum number of connections in the pool
timeout=30, # Timeout for getting a connection (seconds)
uri='qemu:///system' # Libvirt connection URI
)
キャッシュの設定
vm_info_cache = VMInfoCache(
max_size=50, # Maximum number of VMs to cache
ttl=60 # Time-to-live for cache entries (seconds)
)
ロギングの設定
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
RotatingFileHandler(
'kvm_mcp.log',
maxBytes=10485760, # 10MB
backupCount=5
),
logging.StreamHandler()
]
)
はじめに
前提条件
- Python 3.6 以降
- ホストシステムに KVM と libvirt がインストールされていること
- ネットワークブリッジが設定されていること(デフォルト:
brforvms) - VM ストレージディレクトリが作成されていること(デフォルト:
/vm/) - VM のワークロードに十分なシステムリソースがあること
インストール
-
このリポジトリをクローンします。
git clone https://github.com/yourusername/kvm-mcp.git cd kvm-mcp -
仮想環境を作成して有効化します。
python3 -m venv .venv source .venv/bin/activate -
依存関係をインストールします。
pip install -r requirements.txt -
サーバーを設定します。
config.jsonを環境に合わせて編集します- 必要なディレクトリがすべて存在することを確認します
- ネットワークブリッジの設定を確認します
- 必要に応じてパフォーマンス設定を調整します
使用方法
-
サーバーを起動します。
python3 kvm_mcp_server.py -
JSON-RPC を使用してコマンドを送信します。サンプルスクリプトが用意されています。
create_vm.sh:デフォルト設定を使用して新しい VM を作成しますget_vnc_ports.sh:実行中の VM の VNC ポートを確認します
コマンドの例
新しい VM の作成
./create_vm.sh
これにより、config.json のデフォルト設定を使用して新しい VM が作成されます。リクエストで値を指定することで、これらのデフォルト値を任意に上書きできます。
VNC ポートの確認
./get_vnc_ports.sh
これにより、実行中のすべての VM とその VNC ポートが表示され、ディスプレイに簡単に接続できます。
キャッシュをバイパスして VM を一覧表示
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "list_vms", "arguments": {"no_cache": true}}, "id": 1}' | python3 kvm_mcp_server.py
監視とトラブルシューティング
ログファイル
kvm_mcp.log:現在のログファイルkvm_mcp.log.1:前回のログファイル(ローテーション済み)- ログには、処理時間、接続プールの状態、キャッシュヒット/ミスの情報が含まれます
パフォーマンス指標
- 接続プールの使用状況
- キャッシュヒット/ミス率
- 操作の処理時間
- リソース使用状況
よくある問題と解決策
-
接続プールの枯渇
- 症状:応答が遅い、または接続エラーが発生する
- 解決策:接続プール設定の
max_connectionsを増やします
-
キャッシュ無効化の問題
- 症状:VM 情報が古い
- 解決策:
no_cacheパラメーターを使用するか、キャッシュ TTL を短くします
-
リソースのクリーンアップ
- 症状:リソースリークまたは接続の問題
- 解決策:SIGTERM または SIGINT を使用して適切にシャットダウンします
プロジェクト構成
kvm_mcp_server.py:メインのサーバー実装config.json:設定ファイルrequirements.txt:Python の依存関係- ルートディレクトリにあるサンプルスクリプト
tests/ディレクトリにあるテストスイート
貢献
貢献を歓迎します!お気軽にプルリクエストを送信してください。
ライセンス
このプロジェクトは MIT ライセンスのもとでライセンスされています。詳細については LICENSE ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。