vmware-vdi
One-line summary: This server gives read/write operational control over VMware Horizon VDI — inspecting pools, machines, sessions, entitlements and health, and performing gated (blast-radius preview + confirm) actions like logoff, reset, maintenance, entitlement changes, pool enable/disable and image pushes.
Read/inspect: list desktop pools, app pools, RDS farms, machines, sessions, entitlements, VDI images, and audit events; get single pool/machine/session by id (teaching 404s on bad ids).
Health & reporting: one-glance health summary, session statistics (concurrency by state/protocol), and per-pool utilization/capacity.
User/AD lookup: resolve AD users/groups to SIDs via search for entitlement work.
Entitlements: add or remove desktop-pool access for AD users/groups (preview first, audited).
Machine operations: hard reset, enter/exit maintenance mode, and remove machines from pools (which deletes backing instant-clone VMs).
Pool operations: enable/disable a desktop pool, and push a new image to an instant-clone pool (recreates every desktop, highest blast radius, with occupancy acknowledgement option).
Session operations: force logoff, disconnect (reconnectable), or send informational messages to sessions, by session id or user.
Task management: check status of pool-scoped long tasks (image push/provisioning) and cancel a running task.
Safety model: all writes are audited, preview blast_radius unless confirmed, refuse when current state can't be read, and require explicit user confirmation.
Manages VMware Horizon VDI environments, including desktop pools, RDS farms, published apps, user sessions, desktop machines, entitlements, instant-clone images, and Horizon events/health/statistics through the Horizon Connection Server REST API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vmware-vdi Show me all active sessions in the Finance pool"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
VMware-VDI
Investigate Horizon desktops and sessions with focused operational tools.
English · 简体中文
Community-maintained · MIT · Not an official VMware/Broadcom/Omnissa product.

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 --helpRequires 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.
Available Tools
27 toolsadd_entitlementAIdempotent
[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_taskADestructive
[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_sessionADestructive
[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_poolARead-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_utilizationARead-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_summaryARead-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_machineARead-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_sessionARead-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_statsARead-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_statusARead-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_poolsARead-onlyIdempotent
[READ] List published application pools: id, name, farm, enabled, executable path. Paginated.
Inputs: limit, offset, target.
list_desktop_poolsARead-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_entitlementsARead-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_farmsARead-onlyIdempotent
[READ] List Horizon RDS farms: id, name, type, enabled, RDS server count. Paginated.
Inputs: limit, offset, target.
list_vdi_eventsARead-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_imagesARead-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_machinesARead-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_sessionsARead-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_sessionADestructive
[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_imageADestructive
[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_entitlementADestructiveIdempotent
[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_machineADestructive
[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_machineADestructive
[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_usersARead-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_enabledAIdempotent
[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_maintenanceAIdempotent
[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
Scored across 27 tools
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.
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).
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.
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
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP gateway and cloud hosting for MCP servers, agents and apps like RAG, managed from your agent.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for VMware vSphere/vCenter operations, enabling natural language control of VMs, hosts, and infrastructure.Apache 2.0
- FlicenseNot gradedqualityCmaintenanceA comprehensive MCP server for VMware vSphere management, enabling AI agents to perform VM operations, monitoring, snapshots, and reporting through a secure, Dockerized environment.26-
- AlicenseAqualityDmaintenanceMCP 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.8MIT
- AlicenseAqualityAmaintenanceMCP server for managing VMware vCenter (vSphere 7/8) with 39 tools covering VMs, clusters, and ESXi hosts. Supports direct and jump host deployment modes.20MIT