Xen Orchestra MCP server

Query and, if enabled, manage XCP-ng pools, hosts, VMs and backups through Xen Orchestra

Official · Vates TypeScript Local · stdio Cloud platformsDevOps and monitoring

47 popularity score ★ 996 ↓ 163/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs XO_URL, XO_TOKEN. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add xen-orchestra -e XO_URL=<XO_URL> -e XO_TOKEN=<XO_TOKEN> -- npx -y @xen-orchestra/mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "xen-orchestra": {
      "command": "npx",
      "args": [
        "-y",
        "@xen-orchestra/mcp"
      ],
      "env": {
        "XO_URL": "<XO_URL>",
        "XO_TOKEN": "<XO_TOKEN>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "xen-orchestra": {
      "command": "npx",
      "args": [
        "-y",
        "@xen-orchestra/mcp"
      ],
      "env": {
        "XO_URL": "<XO_URL>",
        "XO_TOKEN": "<XO_TOKEN>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "xen-orchestra": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@xen-orchestra/mcp"
      ],
      "env": {
        "XO_URL": "<XO_URL>",
        "XO_TOKEN": "<XO_TOKEN>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.xen-orchestra]
command = "npx"
args = ["-y", "@xen-orchestra/mcp"]

[mcp_servers.xen-orchestra.env]
XO_URL = "<XO_URL>"
XO_TOKEN = "<XO_TOKEN>"
Gemini CLITerminal
gemini mcp add --scope user -e XO_URL=<XO_URL> -e XO_TOKEN=<XO_TOKEN> xen-orchestra npx -- -y @xen-orchestra/mcp

Settings 7

XO_URL Required: Address of the Xen Orchestra server, e.g. https://xo.example.com.
XO_TOKEN Required: XO authentication token; or set XO_USERNAME and XO_PASSWORD instead. The token wins when both are set.
XO_USERNAME Optional: XO admin user, used when no token is given.
XO_PASSWORD Optional: Password for XO_USERNAME.
XO_MCP_ENABLE_ACTIONS Optional: Set to 1 to add the write {domain}_action tools; read-only otherwise.
XO_MCP_DENY_LIST Optional: Comma-separated operationIds to drop, e.g. DeleteVm,HardShutdownVm.
HTTPS_PROXY Optional: Outbound proxy for HTTPS requests (HTTP_PROXY and NO_PROXY are also read).

What it does

@xen-orchestra/mcp is Vates' own MCP server for Xen Orchestra (XO), the web management layer for XCP-ng and XenServer. It runs on your machine over stdio and talks to an XO instance through its REST API, so an assistant can answer questions about pools, hosts, VMs, storage repositories, networks, backup jobs, alarms and tasks.

Its tools are not a fixed list. At start it downloads the OpenAPI spec from your XO server (/rest/v0/docs/swagger.json) and creates one {domain}_query tool per resource group, each taking an operation name plus optional id, filter, fields and limit. A newer XO therefore brings new tools without a new package release. Three utility tools are always present: a connection check, a documentation search and an infrastructure summary.

By default it only reads. Setting XO_MCP_ENABLE_ACTIONS=1 adds a {domain}_action tool per group for create, update and delete operations, from snapshots to VM deletion or a pool emergency shutdown. Each action first returns a preview and a one-time confirm_token that must be sent back within five minutes before anything runs. XO_MCP_DENY_LIST removes named operations entirely.

In the code (src/xo-client.mts), every request to XO is cut off after 30 seconds and the start-up check that MCP is enabled on the server after 10 seconds; a token is sent as XO's authenticationToken cookie, a username and password as HTTP Basic auth.

What it needs

RuntimeNode.js 20+

Node.js 20 or later (the docs launch it with npx). A running Xen Orchestra 6.5 or later with the REST API enabled; older versions fail at start with 'Unable to verify MCP status (HTTP 404)'. An XO account: either an authentication token (made on the XO /user page or with xo-cli create-token) or a username and password of a user with admin rights. The XO admin must not have turned MCP off in xo-server's config ([mcp] enabled = false).

Limits

Read-only unless XO_MCP_ENABLE_ACTIONS=1 is set. Stats endpoints and binary downloads (.xva, .ova, .vhd, .raw exports) are not exposed as tools. The tool list depends on the XO version it connects to, so the domains listed here are those of a current xo-server. One process serves one XO instance; several instances need one entry each. Proxy support is Basic auth only (no NTLM or Kerberos) and NO_PROXY takes no CIDR ranges. If an admin disables MCP on the XO side, the server exits at start with 'MCP disabled by admin'. Each request to XO times out after 30 seconds.

Who it suits

Suits XCP-ng / Xen Orchestra administrators on XO 6.5 or later who want to ask about their infrastructure, inventory and backup status in plain language, with the option to allow guarded changes behind a confirm step. Because it is from Vates and builds its tools from XO's own API spec, it tracks the product closely. Not for older XO releases, for VMware, Proxmox or plain Xen without XO, or for pulling performance stats and disk exports, which it leaves to the REST API directly.

Tools 32

check_connection
Checks that the configured XO server can be reached and signed in to
search_documentation
Searches and fetches pages of the Xen Orchestra documentation
get_infrastructure_summary
Builds a markdown overview of pools, hosts and VMs
pools_query
Reads pools
hosts_query
Reads hosts
vms_query
Reads VMs, templates, snapshots and controllers
vdis_query
Reads virtual disks and their snapshots
srs_query
Reads storage repositories
vbds_query
Reads VM-to-disk attachments
pbds_query
Reads host-to-storage connections
networks_query
Reads networks
vifs_query
Reads VM network interfaces
pifs_query
Reads host physical interfaces
backup_jobs_query
Reads backup jobs
backup_logs_query
Reads backup run logs
restore_logs_query
Reads restore logs
backup_repositories_query
Reads backup repositories
backup_archives_query
Reads backup archives
schedules_query
Reads job schedules
users_query
Reads XO users
groups_query
Reads XO user groups
servers_query
Reads the pool servers XO is connected to
alarms_query
Reads alarms
messages_query
Reads XAPI messages
events_query
Reads events
tasks_query
Reads running and past tasks
proxies_query
Reads XO proxies
pgpus_query
Reads physical GPUs
pcis_query
Reads PCI devices
sms_query
Reads storage managers
xoa_query
Reads XOA appliance information
docs_query
Reads the REST API's own documentation endpoints

Similar servers