Skip to main content
Glama

VMware-VDI

Investigate Horizon desktops and sessions with focused operational tools.

English · 简体中文

Community-maintained · MIT · Not an official VMware/Broadcom/Omnissa product.

18-second illustrative investigation demo

Synthetic-data animation, not a live recording. Watch the AI-narrated family introduction (~2 min)

Why use it?

  • Inspect pools, farms, machines and health.

  • Work with sessions and entitlements.

  • Plan supported image and desktop operations explicitly.

Related MCP server: vSphere MCP Server

Get started

Install the published CLI and inspect its commands:

uv tool install vmware-vdi==2.4.5
vmware-vdi --help

Requires uv and Python >=3.10. Configure targets and credentials locally before remote queries. Setup guide.

For Claude Code and other host installation paths, see the family portal.

Know the boundaries

Includes session logoff, desktop reset and image operations. Missing or incomplete evidence must not be treated as a complete inventory. Horizon live-validation limits remain documented.

Go deeper

Part of VMware Skills: 15 skills, 14 MCP servers and one shared Policy library. If it helps your work, star the family portal.

Issues and feedback · MIT

Available Tools

27 tools
add_entitlementA
Idempotent

[WRITE] Grant desktop-pool access to AD user/group SID(s).

Get SIDs from search_ad_users. A bare call returns blast_radius (pool identity, which principals are already entitled and which are new) and grants nothing; confirm=True grants. Refused when the pool's current entitlements cannot be read. Show blast_radius to the user and wait for their decision. Do not set confirm=True on your own because the user asked for this earlier: they have not seen the blast radius yet. Audited.

Inputs: pool_id (required), ad_user_or_group_ids (required), target, confirm.

cancel_vdi_taskA
Destructive

[WRITE] Cancel a running pool task (e.g. an in-progress image push).

A bare call reads the task and returns blast_radius (task type, state, progress) and cancels nothing; confirm=True cancels. A task whose type or state cannot be read is refused. Work already applied is not rolled back. Show blast_radius to the user and wait for their decision. Do not set confirm=True on your own because the user asked for this earlier: they have not seen the blast radius yet. Audited.

Inputs: pool_id (required), task_id (required), target, confirm.

disconnect_vdi_sessionA
Destructive

[WRITE] Disconnect Horizon session(s) — state preserved, the user can reconnect.

Less disruptive than logoff. Identify by session_ids OR user. A bare call returns blast_radius (session ids, count, affected users) and changes nothing; confirm=True disconnects. A session whose user cannot be read is refused. Show blast_radius to the user and wait for their decision. Do not set confirm=True on your own because the user asked for this earlier: they have not seen the blast radius yet. Audited.

Inputs: user, target, confirm, session_ids.

get_desktop_poolA
Read-onlyIdempotent

[READ] One desktop pool by id (teaching 404 on a wrong id).

Same projection as one list_desktop_pools row — id, name, type, enabled, provisioning_enabled, assignment — fetched with a single GET instead of listing every pool. Use it to re-check one pool after a write, or when you already hold an id.

Inputs: pool_id (required), target.

get_desktop_pool_utilizationA
Read-onlyIdempotent

[READ] Per-pool capacity: total / available / in-use / error machines and utilization %.

The "am I running out of desktops?" view, sorted by utilization. Drill in with list_vdi_machines --pool.

Inputs: target.

get_vdi_health_summaryA
Read-onlyIdempotent

[READ] One-glance Horizon VDI health: session totals by state, problem machines, pool availability.

The first thing to call for "how is VDI right now?". Aggregates sessions, machines, and pools into a compact status. Drill into problems with list_vdi_machines --state or list_vdi_sessions.

Inputs: target.

get_vdi_machineA
Read-onlyIdempotent

[READ] One Horizon desktop machine by id (teaching 404 on a wrong id).

Same projection as one list_vdi_machines row — id, name, pool_id, state, assigned user, agent_version, base_image — fetched with a single GET instead of scanning the estate. Use it to re-check one machine after a write, or when you already hold an id.

Inputs: machine_id (required), target.

get_vdi_sessionA
Read-onlyIdempotent

[READ] Full detail for one Horizon session by id.

A wrong id returns a teaching error ("run list_vdi_sessions for current ids"), not a traceback. Use list_vdi_sessions to discover ids.

Inputs: session_id (required), target.

get_vdi_session_statsA
Read-onlyIdempotent

[READ] Session statistics: concurrency by state / protocol, current concurrent, busiest pools.

The reporting counterpart to list_vdi_sessions — aggregate numbers, not per-session rows.

Inputs: target.

get_vdi_task_statusA
Read-onlyIdempotent

[READ] Status of a pool's long task (image push / provisioning), or all tasks for the pool.

Horizon tasks are pool-scoped. Give task_id (from push_desktop_pool_image or a prior get_vdi_task_status) for one task; omit it to list all tasks for the pool.

Inputs: pool_id (required), target, task_id.

list_app_poolsA
Read-onlyIdempotent

[READ] List published application pools: id, name, farm, enabled, executable path. Paginated.

Inputs: limit, offset, target.

list_desktop_poolsA
Read-onlyIdempotent

[READ] List Horizon desktop pools: id, name, type (AUTOMATED/MANUAL/RDS), enabled, assignment.

The verify pair for set_desktop_pool_enabled and push_desktop_pool_image. Paginated envelope.

Inputs: limit, offset, target.

list_entitlementsA
Read-onlyIdempotent

[READ] List the AD users/groups entitled to a desktop pool (who can access it). Paginated.

A wrong pool id returns a teaching 404. Use list_desktop_pools for pool ids.

Inputs: pool_id (required), limit, offset, target.

list_farmsA
Read-onlyIdempotent

[READ] List Horizon RDS farms: id, name, type, enabled, RDS server count. Paginated.

Inputs: limit, offset, target.

list_vdi_eventsA
Read-onlyIdempotent

[READ] List Horizon audit events (newest first), optionally filtered by severity. Paginated.

Each item: time, severity, type, module, user, machine, message. Use for "what went wrong recently".

Inputs: limit, offset, target, severity.

list_vdi_imagesA
Read-onlyIdempotent

[READ] List instant-clone base VMs and snapshots (the golden-image catalog for push_desktop_pool_image).

Inputs: target, base_vm_id.

list_vdi_machinesA
Read-onlyIdempotent

[READ] List Horizon desktop machines, filtered by pool id / state. Paginated.

Each item: id, name, pool_id, state (AVAILABLE/CONNECTED/AGENT_UNREACHABLE/PROVISIONING/ ERROR/MAINTENANCE/…), assigned user, agent_version, base_image. Verify pair for the machine write tools.

Inputs: pool, limit, state, offset, +1 more.

list_vdi_sessionsA
Read-onlyIdempotent

[READ] List Horizon VDI sessions, filtered by user / pool id / state. Paginated.

Returns a {items, returned, limit, total, truncated, hint} envelope; each item has id, user, type (DESKTOP/APPLICATION), state (CONNECTED/DISCONNECTED/PENDING), protocol (BLAST/PCOIP/RDP), pool_id, machine_id, start_time. This is the verify pair for logoff/disconnect — get a session id or confirm a user's sessions here first.

Inputs: pool, user, limit, state, +2 more.

logoff_vdi_sessionA
Destructive

[WRITE] Force-logoff Horizon session(s) — kicks the user, triggers profile write-back.

Identify targets by explicit session_ids OR by user (all of that user's sessions). A bare call returns blast_radius — session ids, count and affected users — and logs off nothing; confirm=True logs off. A session whose user cannot be read is refused. Show blast_radius to the user and wait for their decision. Do not set confirm=True on your own because the user asked for this earlier: they have not seen the blast radius yet. Audited.

Inputs: user, target, confirm, session_ids.

push_desktop_pool_imageA
Destructive

[WRITE] Apply the pending image to an instant-clone pool — RECREATES EVERY DESKTOP in it.

Highest blast radius in the family: the preview states affected-desktop and in-session counts before you confirm, plus blast_radius.occupancy — "determined" when those counts can be believed, "unknown" when sessions exist that cannot be attributed to any pool or farm. confirm=True schedules the apply. Show blast_radius to the user and wait for their decision. Do not set confirm=True on your own because the user asked for this earlier: they have not seen the blast radius yet. Audited.

Inputs: pool_id (required), target, confirm, logoff_policy, +2 more.

remove_entitlementA
DestructiveIdempotent

[WRITE] Revoke desktop-pool access from AD user/group SID(s).

Get SIDs from list_entitlements. A bare call returns blast_radius (pool identity, which principals lose access and which were not entitled) and revokes nothing; confirm=True revokes. Refused when the pool's current entitlements cannot be read. Show blast_radius to the user and wait for their decision. Do not set confirm=True on your own because the user asked for this earlier: they have not seen the blast radius yet. Audited.

Inputs: pool_id (required), ad_user_or_group_ids (required), target, confirm.

remove_vdi_machineA
Destructive

[WRITE] Remove machine(s) from their pool — for instant clones this DELETES the backing VM.

A bare call returns blast_radius (machine ids, names, states, assigned users) and removes nothing; confirm=True removes. A machine whose state cannot be read is refused. Show blast_radius to the user and wait for their decision. Do not set confirm=True on your own because the user asked for this earlier: they have not seen the blast radius yet. Audited.

Inputs: machine_ids (required), target, confirm.

reset_vdi_machineA
Destructive

[WRITE] Hard-reset desktop machine(s) — the user loses unsaved state.

A bare call returns blast_radius (machine ids, names, states, assigned users) and resets nothing; confirm=True resets. A machine whose state cannot be read is refused. Show blast_radius to the user and wait for their decision. Do not set confirm=True on your own because the user asked for this earlier: they have not seen the blast radius yet. For a graceful in-guest reboot use vmware-aiops (the vCenter VM). Audited.

Inputs: machine_ids (required), target, confirm.

search_ad_usersA
Read-onlyIdempotent

[READ] Resolve AD users/groups by name to their SIDs — needed to entitle a pool (add_entitlement).

Inputs: name (required), limit, target.

send_vdi_session_messageA

[WRITE] Send a message to Horizon session(s) — e.g. "save your work, maintenance in 10 min".

Low blast radius (informational only, no session disruption), so no confirm gate. Identify by session_ids OR user. Audited.

Inputs: message (required), user, target, session_ids, +1 more.

set_desktop_pool_enabledA
Idempotent

[WRITE] Enable or disable a desktop pool — disabling stops NEW sessions (existing keep running).

Idempotent (matching state returns a noop). A bare call returns blast_radius (pool identity, current and new enabled state) and changes nothing; confirm=True applies. A pool whose current enabled state cannot be read is refused. Show blast_radius to the user and wait for their decision. Do not set confirm=True on your own because the user asked for this earlier: they have not seen the blast radius yet. Audited.

Inputs: enabled (required), pool_id (required), target, confirm.

set_vdi_machine_maintenanceA
Idempotent

[WRITE] Enter (enabled=True) or exit (False) maintenance mode for machine(s).

Maintenance drains the machine (no new sessions). A bare call returns blast_radius (machine ids, states, assigned users) and changes nothing; confirm=True applies. A machine whose state cannot be read is refused. Show blast_radius to the user and wait for their decision. Do not set confirm=True on your own because the user asked for this earlier: they have not seen the blast radius yet. Audited.

Inputs: enabled (required), machine_ids (required), target, confirm.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 27 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action: lists vs single-gets are paired (list_desktop_pools/get_desktop_pool, list_vdi_machines/get_vdi_machine, list_vdi_sessions/get_vdi_session), write operations are unique verbs (reset, maintenance, remove, enable, push, logoff, disconnect, message), and the three reporting tools (health_summary, session_stats, utilization) are explicitly differentiated as aggregate vs per-row views. Descriptions even cross-reference ('the reporting counterpart to list_vdi_sessions'), leaving little room for misselection.

    Naming Consistency4/5

    Names follow a predictable snake_case verb_noun pattern (list_*, get_*, set_*, remove_*, add_*, cancel_*, search_*). Minor deviation: the 'vdi' domain token appears inconsistently (list_vdi_machines, list_vdi_sessions) while other resources drop it (list_desktop_pools, list_app_pools, list_farms).

    Tool Count4/5

    27 tools is on the heavy side, but each covers a genuinely distinct object (pools, farms, images, machines, sessions, entitlements, tasks, events) with no redundant duplicates. Slightly over the ideal band but justified by the broad VDI management surface.

    Completeness4/5

    Strong lifecycle coverage: pools (list/get/enable/push image), machines (list/get/reset/maintenance/remove), sessions (list/get/logoff/disconnect/message), entitlements (list/add/remove), plus tasks, events, and health/stats reporting. Gaps exist in provisioning (no desktop pool/farm creation or deletion, farms are read-only), which is acceptable for an operations-focused server but leaves some lifecycle dead ends.

    Maintenance

    ActivityActive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for VMware vSphere/vCenter operations, enabling natural language control of VMs, hosts, and infrastructure.
      Apache 2.0
    • F
      license
      Not graded
      quality
      C
      maintenance
      A comprehensive MCP server for VMware vSphere management, enabling AI agents to perform VM operations, monitoring, snapshots, and reporting through a secure, Dockerized environment.
      26
      -
    • A
      license
      A
      quality
      D
      maintenance
      MCP server for Nutanix Prism Central v4 REST API, enabling AI agents to list and inspect VMs, control VM power state, list clusters, read alerts, and list subnets.
      8
      MIT