- Explore MCP Servers
- kvm-mcp
Kvm Mcp
What is Kvm Mcp
kvm-mcp is a powerful JSON-RPC server designed for managing KVM virtual machines through a simple and intuitive interface, providing a centralized way to control and monitor VMs using a standardized protocol.
Use cases
Use cases for kvm-mcp include automating VM management tasks, enabling remote control of VMs, standardizing VM configurations across infrastructures, and simplifying the process of managing multiple VMs.
How to use
To use kvm-mcp, you need to configure the server using a JSON configuration file. Once set up, you can manage your VMs through JSON-RPC calls, allowing for operations such as creating, starting, stopping, and rebooting VMs.
Key features
Key features of kvm-mcp include VM lifecycle management, network management with bridge support, storage management with configurable disk formats, display management with VNC support, and installation support from various media.
Where to use
kvm-mcp can be used in data centers, cloud environments, and development environments where KVM virtualization is implemented, providing an efficient way to manage virtual machines.
Clients Supporting MCP
The following are the main client software that supports the Model Context Protocol. Click the link to visit the official website for more information.
Overview
What is Kvm Mcp
kvm-mcp is a powerful JSON-RPC server designed for managing KVM virtual machines through a simple and intuitive interface, providing a centralized way to control and monitor VMs using a standardized protocol.
Use cases
Use cases for kvm-mcp include automating VM management tasks, enabling remote control of VMs, standardizing VM configurations across infrastructures, and simplifying the process of managing multiple VMs.
How to use
To use kvm-mcp, you need to configure the server using a JSON configuration file. Once set up, you can manage your VMs through JSON-RPC calls, allowing for operations such as creating, starting, stopping, and rebooting VMs.
Key features
Key features of kvm-mcp include VM lifecycle management, network management with bridge support, storage management with configurable disk formats, display management with VNC support, and installation support from various media.
Where to use
kvm-mcp can be used in data centers, cloud environments, and development environments where KVM virtualization is implemented, providing an efficient way to manage virtual machines.
Clients Supporting MCP
The following are the main client software that supports the Model Context Protocol. Click the link to visit the official website for more information.
Content
KVM MCP Server
A powerful JSON-RPC server for managing KVM virtual machines through a simple and intuitive interface. This server provides a centralized way to control and monitor your KVM virtual machines using a standardized protocol.
Why This Project?
Managing KVM virtual machines typically requires using multiple command-line tools like virsh, virt-install, and qemu-system. This project aims to:
- Simplify VM Management: Provide a single, unified interface for all VM operations
- Enable Remote Control: Allow remote management of VMs through JSON-RPC
- Automate VM Operations: Make it easy to script and automate VM management tasks
- Standardize VM Configuration: Ensure consistent VM setup across your infrastructure
- Optimize Performance: Implement efficient resource management and caching strategies
Features
-
VM Lifecycle Management:
- Create new VMs with customizable parameters
- Start/stop/reboot VMs
- List all available VMs with their status
- Automatic state tracking and recovery
-
Network Management:
- Configure VM networking using bridges
- Support for the
brforvmsbridge - Automatic network interface configuration
- IP address tracking and management
-
Storage Management:
- Configurable VM disk storage location
- Support for various disk formats (qcow2)
- Configurable disk sizes
- Automatic disk cleanup and management
-
Display Management:
- VNC support for graphical access
- Automatic VNC port assignment
- Tools to find and connect to VM displays
- Display state tracking and recovery
-
Installation Support:
- Network installation from ISO images
- Local installation from CDROM
- Support for various OS variants
- Automated installation configuration
-
Performance Optimizations:
- Connection pooling for libvirt to reduce connection overhead
- VM information caching for improved responsiveness
- Asynchronous processing for better concurrency
- Advanced logging for diagnostics and troubleshooting
- Graceful shutdown handling for proper resource cleanup
- Automatic connection recovery and validation
- Rate limiting for API operations
- Performance metrics collection
Performance Benefits
Connection Pooling
- Reduced Latency: Eliminates the overhead of repeatedly opening and closing libvirt connections
- Resource Efficiency: Maintains a pool of reusable connections, reducing system resource usage
- Automatic Recovery: Detects and replaces dead connections automatically
- Configurable Pool Size: Adjust the number of connections based on your workload
Caching
- Faster Response Times: Reduces repeated queries to libvirt for common operations
- Configurable TTL: Set cache expiration based on your needs
- Selective Bypass: Option to bypass cache for operations requiring fresh data
- Automatic Invalidation: Cache is automatically invalidated when VM states change
Asynchronous Processing
- Improved Concurrency: Handle multiple requests simultaneously
- Better Resource Utilization: Efficient use of system resources
- Non-blocking Operations: Long-running operations don’t block the server
- Graceful Shutdown: Proper cleanup of resources during shutdown
Monitoring and Diagnostics
- Structured Logging: Easy-to-parse log format for analysis
- Performance Metrics: Track operation timing and resource usage
- Error Tracking: Detailed error logging for troubleshooting
- Resource Monitoring: Track connection pool usage and cache effectiveness
Configuration
The server uses a JSON configuration file (config.json) to store default values and paths. This makes the server more portable and easier to customize. The configuration includes:
You can modify these values to match your environment’s requirements. The configuration supports environment variable overrides using the following format:
VM_DISK_PATHfordisk_pathVM_DEFAULT_ISOfordefault_isoVM_DEFAULT_MASTER_IMAGEfordefault_master_imageVM_DEFAULT_NAMEfordefault_nameVM_DEFAULT_MEMORYfordefault_memoryVM_DEFAULT_VCPUSfordefault_vcpusVM_DEFAULT_DISK_SIZEfordefault_disk_sizeVM_DEFAULT_OS_VARIANTfordefault_os_variantVM_DEFAULT_NETWORKfordefault_networkVM_IGNITION_DEFAULT_HOSTNAMEforignition.default_hostnameVM_IGNITION_DEFAULT_USERforignition.default_userVM_IGNITION_DEFAULT_SSH_KEYforignition.default_ssh_keyVM_IGNITION_DEFAULT_TIMEZONEforignition.default_timezoneVM_IGNITION_DEFAULT_LOCALEforignition.default_localeVM_IGNITION_DEFAULT_PASSWORD_HASHforignition.default_password_hash
Performance Tuning
Connection Pool Configuration
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
)
Cache Configuration
vm_info_cache = VMInfoCache(
max_size=50, # Maximum number of VMs to cache
ttl=60 # Time-to-live for cache entries (seconds)
)
Logging Configuration
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()
]
)
Getting Started
Prerequisites
- Python 3.6 or higher
- KVM and libvirt installed on the host system
- The network bridge configured (default:
brforvms) - VM storage directory created (default:
/vm/) - Sufficient system resources for your VM workload
Installation
-
Clone this repository:
git clone https://github.com/yourusername/kvm-mcp.git cd kvm-mcp -
Create and activate a virtual environment:
python3 -m venv .venv source .venv/bin/activate -
Install dependencies:
pip install -r requirements.txt -
Configure the server:
- Edit
config.jsonto match your environment - Ensure all required directories exist
- Verify network bridge configuration
- Adjust performance settings as needed
- Edit
Usage
-
Start the server:
python3 kvm_mcp_server.py -
Send commands using JSON-RPC. Example scripts are provided:
create_vm.sh: Create a new VM using default configurationget_vnc_ports.sh: Find VNC ports for running VMs
Example Commands
Create a New VM
./create_vm.sh
This will create a new VM using the default configuration from config.json. You can override any of these defaults by providing them in the request.
Find VNC Ports
./get_vnc_ports.sh
This will show all running VMs and their VNC ports, making it easy to connect to their displays.
List VMs with Cache Bypass
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "list_vms", "arguments": {"no_cache": true}}, "id": 1}' | python3 kvm_mcp_server.py
Monitoring and Troubleshooting
Log Files
kvm_mcp.log: Current log filekvm_mcp.log.1: Previous log file (rotated)- Logs include timing information, connection pool status, and cache hits/misses
Performance Metrics
- Connection pool usage statistics
- Cache hit/miss ratios
- Operation timing metrics
- Resource utilization statistics
Common Issues and Solutions
-
Connection Pool Exhaustion
- Symptom: Slow response times or connection errors
- Solution: Increase
max_connectionsin the connection pool configuration
-
Cache Invalidation Issues
- Symptom: Stale VM information
- Solution: Use
no_cacheparameter or reduce cache TTL
-
Resource Cleanup
- Symptom: Resource leaks or connection issues
- Solution: Ensure proper shutdown using SIGTERM or SIGINT
Project Structure
kvm_mcp_server.py: Main server implementationconfig.json: Configuration filerequirements.txt: Python dependencies- Example scripts in the root directory
- Test suite in the
tests/directory
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Dev Tools Supporting MCP
The following are the main code editors that support the Model Context Protocol. Click the link to visit the official website for more information.










