Skip to main content
Glama
matt-coppinger

Horizon MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MCP_HOSTNoHost interface to bind when using HTTP transport.0.0.0.0
MCP_PORTNoPort for HTTP transport when MCP_TRANSPORT is not stdio.8000
MCP_API_KEYNoOptional API key for authenticating MCP clients when using HTTP transport. If set, clients must send it as a Bearer token. Ignored for stdio.
MCP_TRANSPORTNoTransport protocol for the MCP server: 'stdio' (default), 'streamable-http', or 'sse'.stdio
HORIZON_BASE_URLYesThe URL of the Omnissa Horizon Connection Server, e.g. https://horizon.corp.example.com
HORIZON_VERIFY_SSLNoSet to 'false' to disable TLS certificate verification (not recommended for production). Defaults to true.true
HORIZON_ACCESS_TOKENNoAccess token for Horizon API. Can be provided here or obtained at runtime via the horizon_login tool.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
horizon_loginA

Authenticate to Horizon and activate the session for this server.

The tokens are kept server-side: subsequent tool calls work immediately, and when the access token expires (~8 hours) the server renews it automatically with the refresh token. Only short token hints are returned.

horizon_refresh_tokenA

Exchange the refresh token for a new access token.

Rarely needed: the server already refreshes an expired access token automatically.

horizon_logoutB

Invalidate the current Horizon session (access + refresh tokens).

list_connection_serversB

List all Horizon Connection Servers in the pod.

get_connection_serverC

Get configuration details for a specific Connection Server.

list_virtual_centersA

List all vCenter Servers configured in the Horizon environment.

get_environment_propertiesA

Get environment-level properties including version, FIPS mode, and feature flags.

get_settingsA

Get the global Horizon configuration settings.

Includes client session timeouts, pre-launch settings, display protocol defaults, HTML Access settings, and other global options.

get_global_policiesA

Get global VDI policies including USB redirection, multimedia redirection, clipboard settings, and other environment-wide policy settings.

update_global_policiesA

Update global VDI policies (USB redirection, clipboard, multimedia redirection).

Always call get_global_policies first to read current values. Only modify the specific fields you intend to change — pass the full object back.

update_settingsA

Update a Horizon settings section.

setting_type maps to these resources and endpoints: general → horizon://config/settings/general security → horizon://config/settings/security client → horizon://config/settings/client feature → horizon://config/settings/feature agent-restriction → horizon://config/settings/agent-restriction

Always read the current settings first and only modify the fields you intend to change.

general: Horizon returns restricted_client_data entries that have only a "type", but rejects them on update with "Restricted client version must be set for client type " (verified on 2606), so passing the settings back unchanged fails. Give every restricted_client_data entry a "version" before calling this.

list_licensesA

List all Horizon licenses and their status, mode, and expiry information.

get_event_databaseA

Get the configuration and connection status of the Horizon event database.

list_ic_domain_accountsA

List instant clone domain accounts used for provisioning instant clone desktops.

list_image_managementA

List image management streams, versions, or tags.

Versions and tags belong to a stream, so Horizon requires a stream ID for them (verified live — omitting it returns 400 "im_stream_id parameter is missing"). List streams first, then pass a stream's id as stream_id.

list_gatewaysA

List all registered Unified Access Gateways.

trigger_connection_server_backupA

Initiate an immediate backup of one or more Connection Servers.

CAUTION: This triggers an active backup operation, not a validation check. If no server_ids are provided, all Connection Servers are backed up.

get_api_coverageA

List all available Horizon MCP tools, resources, and unsupported operations.

Call this to understand what can be managed via this MCP server before attempting a task, or to accurately inform users which Horizon features are and are not supported.

Returns three sections: tools — all callable tools grouped by function resources — read-only MCP Resources (horizon://) for config and monitor data not_yet_supported — Horizon API operations not yet implemented

list_pool_entitlementsA

List entitlements for all pools of the given type.

Returns which users and groups are entitled to each pool. Use get_pool_entitlement for a specific pool's details.

get_pool_entitlementB

Get the users and groups entitled to access a specific pool.

set_pool_entitlementsA

Add, replace, or remove entitlements for a desktop or application pool.

CAUTION: action='replace' removes any existing entitlements not in the provided list. CAUTION: action='remove' immediately revokes access for the specified principals. Always confirm with the user before using replace or remove.

NOTE: action='replace' is only supported for desktop pools — the Horizon API has no bulk-replace endpoint for application pools.

search_ad_users_or_groupsA

Search for AD users and groups in the Horizon environment.

Use the returned 'id' field when setting pool entitlements.

Common filter fields: name, login_name, group, domain. Example filters: Find user by login: {"type":"Equals","name":"login_name","value":"jsmith"} Find by display name: {"type":"Contains","name":"name","value":"John"} Groups only: {"type":"Equals","name":"group","value":"true"}

Returns {items, count, page, size, pages_fetched, has_more, next_page, truncated}. If has_more is true there may be more results: call again with page=next_page (or narrow the filter), or pass fetch_all=true to fetch pages automatically (stops after 10 pages or 5000 items and sets truncated=true). Never treat a result with has_more=true as the complete list.

get_ad_user_or_groupB

Get detailed information about a specific AD user or group.

list_ad_domainsA

List all Active Directory domains configured in the Horizon environment.

Returns domain details including trust relationships, status, and bind accounts.

list_ad_containersA

List AD containers (OUs) available in a domain for pool provisioning.

The rdn (relative distinguished name) from these results is used as ad_container_rdn in create_desktop_pool's customization_settings (or create_rdsh_farm's automated_farm_settings.customization_settings) to control which OU newly provisioned computers are placed in — NOT provisioning_settings. This is the OU picker equivalent of what the Horizon Console shows during pool creation.

get_domain_netbios_mapA

Get a mapping of domain NETBIOS names to DNS names for all configured domains.

list_audit_eventsA

List Horizon audit events (administrative actions and system events).

Useful for reviewing recent changes, troubleshooting, and compliance auditing.

Returns {items, count, page, size, pages_fetched, has_more, next_page, truncated}. If has_more is true there may be more results: call again with page=next_page (or narrow the filter), or pass fetch_all=true to fetch pages automatically (stops after 10 pages or 5000 items and sets truncated=true). Never treat a result with has_more=true as the complete list.

list_base_vmsA

List VMs in vCenter that can be used as base images for instant clone pools/farms.

list_datastoresA

List datastores available in vCenter for desktop pool or farm provisioning.

list_vm_foldersA

List VM folders in a vCenter datacenter for use in pool/farm configuration.

list_datacentersA

List datacenters in a vCenter Server.

The datacenter ID is required by list_vm_folders, list_hosts_or_clusters, and create_desktop_pool / create_rdsh_farm provisioning_settings.

list_hosts_or_clustersA

List hosts and clusters in a vCenter datacenter.

The host_or_cluster_id is required by list_datastores, list_resource_pools, list_network_labels, and create_desktop_pool / create_rdsh_farm provisioning_settings.

list_resource_poolsA

List resource pools on a host or cluster.

The resource_pool_id is required by create_desktop_pool and create_rdsh_farm provisioning_settings.

list_base_vm_snapshotsA

List snapshots of a base VM that can be used as the image for an instant clone pool or farm.

The result's id is used as base_snapshot_id in create_desktop_pool's or create_rdsh_farm's provisioning_settings when source is INSTANT_CLONE.

CAUTION: don't just pick the first or most recent result. The chosen snapshot must have been taken AFTER the Horizon Agent (with Instant Clone support) was installed and configured on the VM — a snapshot from before that point will provision machines that fail customization (observed live: Horizon reports "AGENT_CUSTOMIZATION_FAULT ... IC Agent missing"). If multiple snapshots exist, check their names/descriptions for one indicating the agent is installed (e.g. containing "agent") rather than an earlier generic checkpoint (e.g. "clean"). When in doubt, ask the user which snapshot to use.

list_network_labelsA

List network labels (port groups / distributed port groups) available on a host or cluster.

Network label IDs are used in the nics array of create_desktop_pool and create_rdsh_farm provisioning_settings: "nics": [{"nic_id": "", "network_label_id": ""}]

list_network_interface_cardsA

List the network interface cards (NICs) on a base VM or VM template.

Horizon requires either base_vm_id (instant-clone pools/farms, optionally with base_snapshot_id) or vm_template_id (full-clone pools) — verified live, omitting both returns 400.

Each result's id is the network_interface_card_id in the top-level nics array of create_desktop_pool / create_rdsh_farm: "nics": [{"network_interface_card_id": "", "network_label_assignment_specs": [...]}]

list_vm_templatesA

List VM templates available in vCenter for use as pool base images.

Templates are used for full-clone or linked-clone desktop pools (source=FULL_CLONE or LINKED_CLONE). Use the template_id in create_desktop_pool provisioning_settings instead of parent_vm_id.

list_datastore_clustersA

List datastore clusters (Storage DRS pods) available on a host or cluster.

Use the datastore_cluster_id in create_desktop_pool or create_rdsh_farm provisioning_settings when using Storage DRS for automated datastore placement.

list_customization_specificationsA

List vCenter customization specifications (Sysprep/QuickPrep) available for pool provisioning.

The customization_specification_id from these results is used in create_desktop_pool and create_rdsh_farm provisioning_settings to apply OS customization (hostname, domain join, license key) to provisioned VMs.

diagnose_sessionA

Retrieve diagnostic information for a user session in a single call.

Fetches any combination of: logon timing breakdown, real-time display protocol metrics, 15-minute historical performance, running processes, and active remote applications. Results are keyed by aspect name; a failed aspect returns {"error": ""} rather than failing the whole call.

The help desk endpoints take the session's internal_session_id, not its id (verified live: passing the id returns "Session with requested id was not found"), so this looks the session up first to get it.

get_remote_assistance_ticketA

Generate a Microsoft Remote Assistance ticket for a user session.

Returns an MSRA connection ticket that allows a help desk technician to view and control the user's desktop session.

end_remote_applicationA

Terminate a specific remote application running in a session.

CAUTION: The application will be force-closed. Unsaved data will be lost. Confirm with the user before calling this.

list_desktop_poolsA

List all desktop pools (VDI and RDS) in the Horizon environment.

Returns {items, count, page, size, pages_fetched, has_more, next_page, truncated}. If has_more is true there may be more results: call again with page=next_page (or narrow the filter), or pass fetch_all=true to fetch pages automatically (stops after 10 pages or 5000 items and sets truncated=true). Never treat a result with has_more=true as the complete list.

get_desktop_poolA

Get detailed configuration and status of a specific desktop pool.

Uses the v13 endpoint (not v1) specifically so this response contains every field update_desktop_pool's schema can require — verified live, zero gap. Earlier versions of this tool used v1, whose response is missing most of those fields, making a real get-then-update round trip impossible without guessing at values Horizon never returns.

create_desktop_poolA

Create a new desktop pool.

CAUTION: Provisioning an AUTOMATED pool immediately begins creating VMs in vCenter. Always confirm with the user before calling this.

update_desktop_poolA

Update an existing desktop pool's configuration.

delete_desktop_poolA

Delete a desktop pool and all of its machines.

CAUTION: This is irreversible. All machines in the pool are deleted and any active user sessions are terminated. Always confirm with the user before calling this.

desktop_pool_actionA

Enable, disable, or toggle provisioning for one or more desktop pools.

enable/disable controls whether new user sessions can be established. enable-provisioning/disable-provisioning controls whether new VMs are provisioned. Disabling provisioning is the correct way to pause scale-out during maintenance.

list_machinesA

List machines (virtual desktops) in the environment.

To filter by pool, use: filter={"type":"Equals","name":"desktop_pool_id","value":""} To filter by state, use: filter={"type":"Equals","name":"state","value":"AVAILABLE"}

Returns {items, count, page, size, pages_fetched, has_more, next_page, truncated}. If has_more is true there may be more results: call again with page=next_page (or narrow the filter), or pass fetch_all=true to fetch pages automatically (stops after 10 pages or 5000 items and sets truncated=true). Never treat a result with has_more=true as the complete list.

get_machineC

Get detailed information about a specific machine.

machine_actionA

Perform a bulk action on one or more machines.

Actions:

  • shutdown: gracefully power off (use force=true to override active sessions)

  • restart: reboot the machine (use force=true to override active sessions)

  • reset: hard reset (power cycle) — may cause data loss

  • rebuild: re-provision the machine from the pool's image

  • recover: recover a machine stuck in an error state

  • enter_maintenance: put machine into maintenance mode (prevents new sessions)

  • exit_maintenance: take machine out of maintenance mode

  • archive: initiate machine archival

CAUTION: rebuild and reset are destructive and will discard unsaved user data. Always confirm with the user before calling these actions.

assign_machine_usersA

Assign or unassign users to a dedicated desktop machine.

Only applicable to machines in dedicated (non-floating) desktop pools. A machine can only have one assigned user at a time in most pool configurations.

list_rdsh_farmsA

List all RDS (Remote Desktop Session Host) farms in the environment.

Returns {items, count, page, size, pages_fetched, has_more, next_page, truncated}. If has_more is true there may be more results: call again with page=next_page (or narrow the filter), or pass fetch_all=true to fetch pages automatically (stops after 10 pages or 5000 items and sets truncated=true). Never treat a result with has_more=true as the complete list.

get_rdsh_farmB

Get detailed information about a specific RDS farm.

Uses the v10 endpoint (not v1) so this response contains every field update_rdsh_farm's schema can require — verified live, zero gap (mirrors the same fix applied to get_desktop_pool).

create_rdsh_farmA

Create a new RDS farm.

CAUTION: Provisioning an AUTOMATED farm immediately begins creating VMs in vCenter. Always confirm with the user before calling this.

update_rdsh_farmC

Update an existing RDS farm's configuration.

delete_rdsh_farmA

Delete an RDS farm and all of its servers.

CAUTION: This is irreversible. All servers in the farm are deleted and any active user sessions are terminated. Always confirm with the user before calling this.

rdsh_farm_actionA

Enable or disable one or more RDS farms.

Disabling a farm prevents new sessions from being routed to it without terminating existing sessions — useful for draining a farm before maintenance.

Unlike desktop pools, farms have no bulk enable/disable endpoint, and Horizon's farm update schema requires several fields beyond "enabled" (verified live — a naive partial-body PUT gets rejected). So this fetches each farm's full current state first, changes only "enabled", and PUTs the complete spec back — a real get-then- update round trip, not a guess. Reports per-farm results if any still fail.

list_application_poolsA

List published application pools in the environment.

Returns {items, count, page, size, pages_fetched, has_more, next_page, truncated}. If has_more is true there may be more results: call again with page=next_page (or narrow the filter), or pass fetch_all=true to fetch pages automatically (stops after 10 pages or 5000 items and sets truncated=true). Never treat a result with has_more=true as the complete list.

get_application_poolB

Get detailed information about a specific application pool.

create_application_poolC

Publish a new application pool from an RDS farm.

update_application_poolA

Update an existing application pool's configuration.

Horizon returns supported_file_types_data with both its auto-discovered file_types and enable_auto_update_file_types=true, then rejects that combination on update ("file_types cannot be set when enable_auto_update_file_types is enabled", verified on 2606). So when auto-update is on, file_types is dropped here: Horizon manages that list itself.

delete_application_poolA

Delete a published application pool.

CAUTION: Users will immediately lose access to this application. Always confirm with the user before calling this.

list_sessionsA

List active user sessions in the environment.

Common filter fields: user_name, desktop_pool_id, machine_name, client_name, state. Session states: CONNECTED, DISCONNECTED, PENDING.

Returns {items, count, page, size, pages_fetched, has_more, next_page, truncated}. If has_more is true there may be more results: call again with page=next_page (or narrow the filter), or pass fetch_all=true to fetch pages automatically (stops after 10 pages or 5000 items and sets truncated=true). Never treat a result with has_more=true as the complete list.

get_sessionB

Get detailed information about a specific user session.

disconnect_sessionsA

Disconnect one or more user sessions (sessions remain active, clients are disconnected).

The user's applications keep running. Use logoff_sessions to fully terminate sessions.

logoff_sessionsA

Log off one or more user sessions, terminating their running applications.

CAUTION: This will close all running applications in the session. Unsaved data will be lost. Always confirm with the user before calling this.

reset_or_restart_sessionsA

Reset or restart the virtual machine backing one or more sessions.

CAUTION: Both actions will terminate the user's session. reset is a hard power-cycle and may cause data loss. restart attempts a graceful reboot but the session will still end. Always confirm with the user before calling this.

send_message_to_sessionsA

Send a pop-up notification message to one or more active user sessions.

get_infrastructure_healthA

Get health and status across Horizon infrastructure in a single call.

Components:

  • summary: overall health rollup across all component types

  • connection_servers: per-server reachability, load, and tunnel counts

  • gateways: Unified Access Gateway connectivity status

  • virtual_centers: vCenter Server connectivity and health

  • ad_domains: Active Directory domain reachability and bind status

  • farms: RDS farm health and server capacity

Results are keyed by component name. A failed component returns its error as a string rather than failing the whole call.

get_connection_server_healthB

Get detailed health information for a specific Connection Server.

get_metricsA

Get performance and capacity metrics across the Horizon environment in a single call.

Scopes:

  • pools: session and machine counts per desktop pool

  • sessions: aggregate connected/disconnected/pending session totals

  • machines: aggregate machine state counts across all pools

  • system: CPU and memory metrics for connection servers

  • rds_servers: RDS server state counts across all farms

  • license: current and peak license usage

Results are keyed by scope name. A failed scope returns its error as a string rather than failing the whole call.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
config_rolesRBAC roles defined in Horizon (name, id, privileges).
config_permissionsPermission assignments mapping roles to access groups and principals.
config_privilegesAll selectable Horizon admin privileges.
config_local_access_groupsLocal access groups used for role-based admin delegation.
config_federation_access_groupsFederation access groups (Cloud Pod Architecture).
config_gateway_accessUsers and groups with gateway access.
config_users_groups_global_summaryGlobal summary of admin users and groups across pods.
config_saml_authenticatorsSAML 2.0 authenticators configured in Horizon.
config_radius_authenticatorsRADIUS authenticators configured in Horizon.
config_gssapi_authenticatorsGSSAPI/Kerberos authenticators configured in Horizon.
config_jwt_authenticatorsJWT authenticators configured in Horizon.
config_unauthenticated_access_usersUsers configured for unauthenticated (kiosk) access.
config_app_volumes_managersApp Volumes Managers registered with Horizon (id, URL, status).
config_uem_serversUser Environment Manager servers registered with Horizon.
config_true_ssoTrueSSO connector configurations.
config_true_sso_enrollment_serversTrueSSO enrollment servers.
config_compute_profilesCompute profiles available for pool and farm provisioning.
config_customization_specificationsvCenter customization specifications (Sysprep/QuickPrep) defined in config.
config_external_deploymentsExternal deployments (e.g. Horizon Cloud links) registered with this pod.
config_secondary_credentialsSecondary credentials configured for connection servers.
config_message_clientsMessage security mode clients registered with Horizon.
config_rcx_serversRCX (Remote Console) servers registered with Horizon.
config_settings_agent_restrictionAgent restriction settings (allowed client versions and types).
config_settings_clientClient feature and behaviour settings.
config_settings_featureFeature toggle settings.
config_settings_generalGeneral Horizon settings.
config_settings_securitySecurity-related Horizon settings.
config_pre_logon_settingsPre-logon message and warning banner settings.
config_syslogSyslog server configuration.
config_ceipCustomer Experience Improvement Program (CEIP) enrollment status.
config_url_redirectionURL content redirection rules.
config_log_levelsCurrent log level settings for Horizon components.
config_log_collector_tasksLog collection tasks (in-progress and completed bundles).
monitor_app_volumes_managersApp Volumes Manager health and connectivity status.
monitor_event_databaseEvent database connection status and metrics.
monitor_rds_serversHealth and session load for all RDS servers across all farms.
monitor_saml_authenticatorsSAML authenticator health and certificate status.
monitor_true_ssoTrueSSO connector health and certificate status.
monitor_datastore_usageDatastore space usage metrics broken down by pool and farm.
monitor_podsRemote pod health in Cloud Pod Architecture (CPA) federation.
monitor_global_session_metricsAggregate session counts across all pods in CPA federation.
monitor_message_clientsMessage security client health status.

TDQS

A3.5/5.0

Scored across 72 tools

Disambiguation4/5

Tools are largely separated by resource and action (create/get/update/delete_desktop_pool, list_sessions/get_session, etc.), and the *_action tools are clearly documented as bulk lifecycle toggles. There is mild overlap in the settings surface (get_settings vs get_global_policies vs get_environment_properties, and their update counterparts), but descriptions clarify boundaries.

Naming Consistency4/5

Names follow a predictable snake_case verb_noun convention (list_, get_, create_, update_, delete_) almost throughout, including consistent horizon_* auth tools. Minor deviations are the noun_action tools (machine_action, desktop_pool_action, rdsh_farm_action) and slightly irregular list_hosts_or_clusters, but these are still readable and systematic.

Tool Count2/5

At 72 tools this is a very heavy surface, well beyond the 3-15 sweet spot, and an agent must sift through many near-sibling calls. The domain (pools, farms, machines, sessions, entitlements, AD, vCenter inventory, settings, monitoring) is genuinely broad so most tools earn their place, but the sheer count risks selection errors.

Completeness4/5

Core lifecycles are well covered: full CRUD for desktop pools, RDS farms, and application pools, plus machine/session actions, entitlements, AD search, vCenter inventory helpers, and health/metrics rollups. Gaps are mostly read-only areas (e.g. connection servers, licenses, gateways lack update/management ops), which an agent can work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues