
XCP-ng AIops
io.github.AIops-toolsPublished by GitHub account AIops-toolsv0.11.0Updated Oct 30, 2026
Governed XCP-ng ops via Xen Orchestra — 29 MCP tools with audit, budget, undo guards.
Overview
Governed XCP-ng operations through Xen Orchestra's REST API, giving an assistant 29 audited tools to inspect and change VMs, hosts, storage, snapshots and…
- What you can do
- Inspect fleet state: overview, VM list/get/stats, host and pool details, storage repositories and VDIs, backup jobs and logs, tasks
- Run root-cause analyses for VM health, SR usage, backup failures, and pool patch and HA posture
- Change VMs: start, stop, reboot and migrate, each with a dry-run preview
- Manage snapshots: list, create, delete and revert
- Rescan storage repositories
- Review and replay recorded undo entries for reversible writes
- When to use it
- For homelabs and small self-hosted XCP-ng fleets managed through Xen Orchestra, where you want an agent to triage VM health, storage pressure, backup failures and patch posture, and to perform routine VM and snapshot actions with an audit trail.
- Requirements
- A local Python install (PyPI package, run via uvx or uv tool) and a reachable Xen Orchestra 5.x instance exposing the REST v0 API. An XO personal token stored in an encrypted local store, unlocked by the XCPNG_AIOPS_MASTER_PASSWORD environment variable or an interactive prompt; MCP clients must pass it in the env block. Optional variables set the config home, config path, approver name and call/time budget caps.
Installation
In SourceWeft
- Open XCP-ng AIops in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
XCP-ng AIops
Audit availability: Real writes require a committed
pendingaudit row and stop before contacting the platform if storage is unavailable. Reads and previews may continue with a warning; new audit rows store outcome summaries rather than full responses.
Disclaimer: Community-maintained open-source project. Not affiliated with, endorsed by, or sponsored by Vates, the XCP-ng project, or the Xen Orchestra project. "XCP-ng", "Xen Orchestra", and "Xen" are trademarks of their owners. MIT licensed.
AI-powered XCP-ng operations via Xen Orchestra's REST API with a
built-in governance harness — unified audit log, policy engine,
token/runaway budget guard, undo-token recording, and descriptive risk
tiers. Built for homelabs and small/self-hosted XCP-ng fleets that want an AI
agent to triage VM health, storage pressure, backup failures, and patch
posture — with every write audited, previewable, and (where honest)
reversible. Self-contained: no dependencies beyond httpx and the MCP SDK.
Requires a Xen Orchestra instance (XO from sources or the Xen Orchestra Appliance, 5.x with
/rest/v0). XO is the management plane this tool talks to — direct per-host XAPI access is out of scope for v0.1. Do NOT use for Proxmox VE — use proxmox-aiops.
What works
- CLI (
xcpng-aiops ...):init,overview,vm list/get/stats/health-rca/start/stop/reboot/migrate,host list/get/missing-patches,pool list/get/posture,sr list/get/vdis/usage-rca/rescan,snapshot list/create/delete/revert,backup jobs/logs/failure-rca,task list,secret set/list/rm/migrate/rotate-password,doctor,mcp. - MCP server (
xcpng-aiops mcporxcpng-aiops-mcp): 29 tools (19 read, 8 write, 2 undo), every one wrapped with the bundled@governed_toolharness. - Four flagship RCA analyses (cause + action structured output): VM health, SR usage, backup-job failures, pool patch & HA posture.
- Encrypted credentials: the XO authentication token lives in an encrypted store
~/.xcpng-aiops/secrets.enc(Fernet + scrypt) — never plaintext on disk. Unlock with a master password fromXCPNG_AIOPS_MASTER_PASSWORD(MCP/CI) or an interactive prompt (CLI). - Reversibility:
vm_start↔vm_stoprecord each other as inverses;vm_migratecaptures the REAL source host before moving and records "migrate back";snapshot_createcaptures the created snapshot's REAL id from the XO response and records "delete THAT snapshot". Irreversible ops (snapshot_delete,snapshot_revert,vm_reboot) capture prior state for the audit record and honestly declare no undo. - Safety: destructive CLI ops require double confirmation and support
--dry-run; every write MCP tool takes adry_runpreview (no write call, no undo recorded). - Self-lockout guard (partial — read this): Xen Orchestra is commonly a VM on a pool it manages, and stopping that VM kills the API this tool talks to —
vm_startcan then no longer be sent, so recovery needs hypervisor console access (xe vm-start). Setxo_self_vm_uuidon the target (xcpng-aiops initasks) andvm_stoprefuses exactly that uuid — on--dry-runas well, since a preview that green-lights a call the tool will then refuse is reporting the wrong outcome. If you do not set it there is no protection at all: XO's REST API exposes no self endpoint and its token carries no claims, so the tool cannot discover which VM it runs on, and it fails open rather than guess. Thedry_runpreview adds a weakerselfVmHintwhen a VM's reported IP matches the configured XO host — that is a coincidence worth checking, not a finding, and it never blocks (it sees nothing without the guest agent and fires on every VM behind a shared proxy).
Capability matrix (29 MCP tools)
Flagship RCAs
vm_health_rca— VMs halted unexpectedly (auto-poweron / HA restart priority set), paused/suspended VMs, running VMs without guest tools, CPU/memory pressure from RRD stats → cause + action per finding.sr_usage_rca— SRs ranked by physical fullness (near-full ≥ 85%, critical ≥ 95%), thin-provision overcommit (virtual allocation > capacity), orphaned VDIs (attached to no VM) with reclaimable bytes per SR.backup_failure_rca— failed/skipped/interrupted XO backup runs classified: vdi-chain (coalesce not finished), quiesce (guest VSS), transport (remote unreachable), storage-full, unknown — with per-job counts and sample messages.pool_patch_ha_posture— hosts missing patches, hosts pending reboot, version skew across a pool's hosts (breaks live migration / rolling updates), multi-host pools without HA.
What this tool does, and does not, decide
It delivers XCP-ng operations — reads and writes — accurately and efficiently, and records every one of them. It does not decide whether a write is allowed to happen. That is the agent's judgement, or the permission of the Xen Orchestra account whose token you connect it with: give that XO user a read-only ACL, or scope its token down, and the writes fail at Xen Orchestra — the place that actually owns the permission.
So there is no read-only switch, no policy file, no approval gate to configure.
The one thing the tool guarantees is that nothing is silent: every call, over
MCP and over the CLI alike, lands an audit row in ~/.xcpng-aiops/audit.db,
and reversible writes still capture their before-state and record an inverse.
Each tool declares a
risk_level, kept in agreement with its[READ]/[WRITE]documentation tag by a test, and carried into the audit row as a descriptive tier — so a reviewer can see at a glance that a row was a high-risk snapshot delete. It is a label, not a gate.
Running a smaller / local model? See agent-guardrails.md — it lists the guardrails this tool now enforces for you (so you don't spend prompt budget restating them) and gives a ready-made system prompt for what's left.
Quick start
As a Claude Code plugin
One install gives an agent both the skill and the MCP server:
The MCP server is fetched with uv and pinned to the
package version this plugin declares, so an audit row can be traced back to the
code that wrote it. Credentials are still configured with xcpng-aiops init — see below.
As an OpenClaw plugin
The same bundle is published on ClawHub, where one install delivers the skill and its MCP server together:
Restart the OpenClaw gateway afterwards so it loads the plugin. The MCP server is
fetched with uv, pinned to this exact release, so
uvx has to be on PATH — without it the skill still installs but reports
Visible to model: no. Credentials are configured exactly as below.
As a CLI or standalone MCP server
init writes ~/.xcpng-aiops/config.yaml (non-secret connection details) and
stores the XO token encrypted in ~/.xcpng-aiops/secrets.enc. Example
config it produces:
Create the token in the XO UI (user menu → Personal tokens) or with
xo-cli --createToken. For non-interactive use (MCP server, CI, cron) export
the master password so the store can be unlocked without a prompt:
Where that password then lives: an exported variable is readable by every process this shell starts and is recorded by shell history. On a shared or long-lived host, prefer the interactive prompt, or inject it from a secret manager for the life of the one command that needs it.
MCP client config
Env-block caveat: MCP clients launch the server with a minimal environment — your shell profile's exports are not inherited. Put
XCPNG_AIOPS_MASTER_PASSWORD(and, if you use them,XCPNG_AIOPS_HOME/XCPNG_AIOPS_CONFIG/XCPNG_AUDIT_APPROVED_BY) in theenvblock above, or the encrypted store cannot be unlocked and every tool returns a teaching error.
Managing secrets
A legacy plaintext env var XCPNG_<TARGET_NAME_UPPER>_TOKEN is still honoured
as a fallback with a deprecation warning (migrate with xcpng-aiops secret migrate).
Governance
Every MCP tool — and every CLI write, which routes through the same governed
functions — passes through @governed_tool. It records; it does not authorize
(see above).
- Audit — every call (tool, params with secrets redacted, result, status, duration, risk tier, and any operator-supplied approver/rationale) lands in
~/.xcpng-aiops/audit.db(relocate withXCPNG_AIOPS_HOME). The CLI writes the same row the MCP path does — there is no unaudited entry point. - Budget / runaway guard — a safety backstop, not an authorization gate: cumulative call and wall-time caps plus a tight-loop circuit breaker (
XCPNG_MAX_TOOL_CALLS,XCPNG_MAX_TOOL_SECONDS,XCPNG_RUNAWAY_MAX) stop a stuck agent from burning unbounded calls/time. - Undo recording — reversible writes record a replayable inverse descriptor to
~/.xcpng-aiops/undo.dband return an_undo_id; irreversible writes record prior state only. - Risk tier — a descriptive label on the audit row derived from
risk_level; it gates nothing. - Output hygiene — all XO-returned text is sanitized and bounded before it reaches the agent.
支持范围 / Supported scope
缺功能?(Missing something?) Coverage is intentionally focused. Open an issue or PR at github.com/AIops-tools/XCPng-AIops — feature requests, contributions, and comments are all welcome.
Scope & caveats
- Verification status: all behaviour is validated against mocked REST
responses; there is no recorded end-to-end run against a live Xen Orchestra
instance yet.
xcpng-aiops doctoris the fastest live check — seedocs/VERIFICATION.mdfor the full checklist. - Endpoint paths (e.g.
/vms/<id>/actions/snapshot,/vm-snapshots/<id>,/srs/<id>/actions/rescan,/hosts/<id>/missing_patches,/backup/logs) are modelled against the documented XO REST/rest/v0API and need live verification — action names may differ across XO releases. - Management plane only: everything goes through XO. Per-host XAPI, XO server management (adding servers, users), and backup job execution (run/restore) are out of scope for v0.1.
- Out of scope by design: anything that destroys bulk data (VM/VDI deletion) —
only
snapshot_delete/snapshot_revertdiscard state, and both arehighrisk + double-confirmed.
Not for
Other hypervisors or VM platforms (use their own ops tools — e.g. Proxmox VE → proxmox-aiops), NAS/storage appliances, backup software suites, container clusters, or network devices — those are out of scope for this tool.
License
Source: README.md at commit 738a219
Tools
0Version history
4- v0.11.0LatestOct 30, 2026
- v0.10.0Oct 15, 2026
- v0.9.0Oct 15, 2026
- v0.8.4Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts