Horizon MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HOST | No | Host interface to bind when using HTTP transport. | 0.0.0.0 |
| MCP_PORT | No | Port for HTTP transport when MCP_TRANSPORT is not stdio. | 8000 |
| MCP_API_KEY | No | Optional API key for authenticating MCP clients when using HTTP transport. If set, clients must send it as a Bearer token. Ignored for stdio. | |
| MCP_TRANSPORT | No | Transport protocol for the MCP server: 'stdio' (default), 'streamable-http', or 'sse'. | stdio |
| HORIZON_BASE_URL | Yes | The URL of the Omnissa Horizon Connection Server, e.g. https://horizon.corp.example.com | |
| HORIZON_VERIFY_SSL | No | Set to 'false' to disable TLS certificate verification (not recommended for production). Defaults to true. | true |
| HORIZON_ACCESS_TOKEN | No | Access 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
| Capability | Details |
|---|---|
| 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
| Name | Description |
|---|---|
| horizon_loginA | Authenticate to Horizon and return access and refresh tokens. The access_token is valid for ~8 hours. The refresh_token can be used with horizon_refresh_token to obtain a new access_token without re-entering credentials. This tool also updates the running server's active token so subsequent tool calls work immediately without restarting the server. SECURITY: Copy the returned access_token to your MCP client config (HORIZON_ACCESS_TOKEN env var), then clear it from the conversation. Treat both tokens as passwords — do not share or log them. |
| horizon_refresh_tokenA | Exchange a refresh token for a new access token. Use this before the current access token expires (~8 hours) to maintain an active session without re-entering credentials. |
| horizon_logoutA | Invalidate the current Horizon session (access + refresh tokens). |
| list_connection_serversA | List all Horizon Connection Servers in the pod. |
| get_connection_serverA | 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. |
| 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_managementB | List image management streams, versions, or tags. |
| 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. |
| 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"} |
| 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 the ad_container_rdn in create_desktop_pool and create_rdsh_farm provisioning_settings to control which OU newly provisioned computers are placed in. This is the OU picker equivalent of what the Horizon Console shows during pool creation. |
| get_domain_netbios_mapB | 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. |
| list_base_vmsB | List VMs in vCenter that can be used as base images for instant clone pools/farms. |
| list_datastoresB | List datastores available in vCenter for desktop pool or farm provisioning. |
| list_vm_foldersB | 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 snapshot_id is required by create_desktop_pool and create_rdsh_farm provisioning_settings when source is INSTANT_CLONE. |
| 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 network interface cards (NICs) available for pool or farm NIC configuration. The nic_id from these results pairs with a network_label_id (from list_network_labels) in the nics array of create_desktop_pool and create_rdsh_farm provisioning_settings: "nics": [{"nic_id": "", "network_label_id": ""}] Pass base_vm_id + base_snapshot_id to filter NICs for an instant-clone pool, or vm_template_id to filter NICs for a full/linked-clone pool. |
| 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 its error message as a string rather than failing the whole call. |
| 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. |
| get_desktop_poolB | Get detailed configuration and status of a specific desktop pool. |
| 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_poolB | 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"} |
| get_machineA | Get detailed information about a specific machine. |
| machine_actionA | Perform a bulk action on one or more machines. Actions:
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_farmsB | List all RDS (Remote Desktop Session Host) farms in the environment. |
| get_rdsh_farmA | Get detailed information about a specific RDS farm. |
| 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. |
| list_application_poolsB | List published application pools in the environment. |
| get_application_poolA | Get detailed information about a specific application pool. |
| create_application_poolB | Publish a new application pool from an RDS farm. |
| update_application_poolC | Update an existing application pool's configuration. |
| 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. |
| 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:
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:
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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| config_roles | RBAC roles defined in Horizon (name, id, privileges). |
| config_permissions | Permission assignments mapping roles to access groups and principals. |
| config_privileges | All selectable Horizon admin privileges. |
| config_local_access_groups | Local access groups used for role-based admin delegation. |
| config_federation_access_groups | Federation access groups (Cloud Pod Architecture). |
| config_gateway_access | Users and groups with gateway access. |
| config_users_groups_global_summary | Global summary of admin users and groups across pods. |
| config_saml_authenticators | SAML 2.0 authenticators configured in Horizon. |
| config_radius_authenticators | RADIUS authenticators configured in Horizon. |
| config_gssapi_authenticators | GSSAPI/Kerberos authenticators configured in Horizon. |
| config_jwt_authenticators | JWT authenticators configured in Horizon. |
| config_unauthenticated_access_users | Users configured for unauthenticated (kiosk) access. |
| config_app_volumes_managers | App Volumes Managers registered with Horizon (id, URL, status). |
| config_uem_servers | User Environment Manager servers registered with Horizon. |
| config_true_sso | TrueSSO connector configurations. |
| config_true_sso_enrollment_servers | TrueSSO enrollment servers. |
| config_compute_profiles | Compute profiles available for pool and farm provisioning. |
| config_customization_specifications | vCenter customization specifications (Sysprep/QuickPrep) defined in config. |
| config_external_deployments | External deployments (e.g. Horizon Cloud links) registered with this pod. |
| config_secondary_credentials | Secondary credentials configured for connection servers. |
| config_message_clients | Message security mode clients registered with Horizon. |
| config_rcx_servers | RCX (Remote Console) servers registered with Horizon. |
| config_settings_agent_restriction | Agent restriction settings (allowed client versions and types). |
| config_settings_client | Client feature and behaviour settings. |
| config_settings_feature | Feature toggle settings. |
| config_settings_general | General Horizon settings. |
| config_settings_security | Security-related Horizon settings. |
| config_pre_logon_settings | Pre-logon message and warning banner settings. |
| config_syslog | Syslog server configuration. |
| config_ceip | Customer Experience Improvement Program (CEIP) enrollment status. |
| config_url_redirection | URL content redirection rules. |
| config_log_levels | Current log level settings for Horizon components. |
| config_log_collector_tasks | Log collection tasks (in-progress and completed bundles). |
| monitor_app_volumes_managers | App Volumes Manager health and connectivity status. |
| monitor_event_database | Event database connection status and metrics. |
| monitor_rds_servers | Health and session load for all RDS servers across all farms. |
| monitor_saml_authenticators | SAML authenticator health and certificate status. |
| monitor_true_sso | TrueSSO connector health and certificate status. |
| monitor_datastore_usage | Datastore space usage metrics broken down by pool and farm. |
| monitor_pods | Remote pod health in Cloud Pod Architecture (CPA) federation. |
| monitor_global_session_metrics | Aggregate session counts across all pods in CPA federation. |
| monitor_message_clients | Message security client health status. |
TDQS
Scored across 72 tools
Each tool targets a distinct resource/action pair, and the many list/get/create/update/delete groups have clear boundaries. Even similar-sounding tools like get_settings vs get_global_policies or get_metrics vs get_infrastructure_health are separated by explicit scope descriptions.
The dominant list_/get_/create_/update_/delete_ + resource pattern is consistent and readable, and all names use snake_case. Minor deviations like horizon_login and machine_action/desktop_pool_action slightly break the strict verb-noun pattern but remain predictable.
72 tools is a very large surface, even for a broad Horizon administration API. Many granular inventory/discovery tools (datastores, VM folders, NICs, network labels, resource pools) could plausibly be consolidated into fewer parameterized tools without losing clarity.
The set provides full lifecycle coverage for desktop pools, RDS farms, application pools, entitlements, sessions, global policies, and infrastructure health/monitoring. Unsupported operations are explicitly exposed via get_api_coverage, so there are no obvious dead ends for the Horizon administration domain.