oVirt MCP Server
by puhamihai
README.md
# oVirt MCP Server
An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server for managing oVirt / Red Hat Virtualization (RHV) environments via AI assistants such as Claude.
## Requirements
- Python 3.10+
- Access to an oVirt Engine or RHV Manager instance
- An account with sufficient permissions (read-only for queries; admin for power operations)
## Installation
```bash
git clone https://github.com/your-org/ovirt-mcp-server.git
cd ovirt-mcp-server
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```
## Configuration
Copy the example environment file and fill in your values:
```bash
cp env.example .env
```
| Variable | Description | Example |
|---|---|---|
| `OVIRT_HOST` | oVirt Engine hostname or IP | `ovirt.domain.local` |
| `OVIRT_USER` | Username (include domain) | `admin@internal` |
| `OVIRT_PASSWORD` | Password | |
| `OVIRT_INSECURE` | Skip SSL verification (`True`/`False`) | `True` |
> Set `OVIRT_INSECURE=False` in production environments with a valid certificate.
## Running the server
```bash
python ovirt_mcp_server.py
```
The server communicates over **stdio** (standard MCP transport).
## Claude Code integration
Add the server to your Claude Code MCP configuration (`~/.claude/settings.json`):
```json
{
"mcpServers": {
"ovirt": {
"command": "/path/to/ovirt-mcp-server/.venv/bin/python",
"args": ["/path/to/ovirt-mcp-server/ovirt_mcp_server.py"],
"env": {
"OVIRT_HOST": "ovirt.domain.local",
"OVIRT_USER": "admin@internal",
"OVIRT_PASSWORD": "your_password",
"OVIRT_INSECURE": "True"
}
}
}
}
```
Alternatively, use a `.env` file in the project directory instead of inlining credentials in the config.
## Available tools
### VM Management
| Tool | Description |
|---|---|
| `list_vms` | List VMs with optional oVirt search query |
| `get_vm_details` | Full details for a specific VM |
| `get_vm_nics` | Network interfaces for a VM |
| `get_vm_disks` | Disk information for a VM |
| `get_vm_statistics` | CPU, memory, and network stats |
| `get_vm_events` | Recent events for a VM |
| `get_vm_by_ip` | Find a VM by IP address |
| `search_vms` | Search VMs by query string |
| `generate_vm_report` | Summary report of all VMs |
| `get_vms_with_high_resource_usage` | VMs exceeding CPU/memory thresholds |
### Power Operations
| Tool | Description |
|---|---|
| `power_on_vm` | Start a VM |
| `shutdown_vm` | Graceful shutdown |
| `power_off_vm` | Force power off (requires `confirm=true`) |
| `reboot_vm` | Reboot a VM |
| `suspend_vm` | Suspend a VM |
| `bulk_power_operations` | Power on/off/reboot multiple VMs |
### VM Lifecycle
| Tool | Description |
|---|---|
| `migrate_vm` | Migrate VM to a different host |
| `delete_vm` | Delete a VM (requires `confirm=true`) |
| `modify_vm_resources` | Change CPU/memory allocation |
### Snapshots
| Tool | Description |
|---|---|
| `list_vm_snapshots` | List snapshots for a VM |
| `create_vm_snapshot` | Create a snapshot |
| `delete_vm_snapshot` | Delete a snapshot (requires `confirm=true`) |
### Infrastructure
| Tool | Description |
|---|---|
| `list_hosts` | List hypervisor hosts |
| `get_host_details` | Details for a specific host |
| `get_host_statistics` | CPU, memory, and network stats for a host |
| `list_clusters` | List clusters |
| `get_cluster_details` | Details for a specific cluster |
| `list_datacenters` | List datacenters |
| `list_storage_domains` | List storage domains |
| `get_storage_domain_details` | Details for a storage domain |
| `list_networks` | List networks |
| `list_templates` | List VM templates |
| `get_events` | Retrieve global oVirt events |
## Notes
- Destructive operations (`delete_vm`, `power_off_vm`, `delete_vm_snapshot`, `bulk_power_operations`) require an explicit `confirm=true` parameter.
- All VM and host lookups accept oVirt UUIDs. Use `list_vms` or `search_vms` to find IDs.
- The oVirt REST API must be reachable from the machine running this server.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues