Skip to main content
Glama
matt-coppinger

Horizon MCP Server

list_machines

Read-only

Retrieve virtual desktop machines in Horizon, with filters for pool and power state plus pagination to handle large inventories.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based)
sizeNoResults per page (max 1000)
filterNoHorizon filter JSON string. Example: {"type":"Equals","name":"desktop_pool_id","value":"<pool-id>"}
sort_byNoField name to sort by, e.g. name
order_byNoSort direction: ASC or DESC
fetch_allNoFetch successive pages automatically (up to 10 pages / 5000 items). Prefer a filter when you only need a subset.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.2.0
    • addedInput schema / properties / fetch_all
      Added value: +{
      +  "default": false,
      +  "description": "Fetch successive pages automatically (up to 10 pages / 5000 items). Prefer a filter when you only need a subset.",
      +  "type": "boolean"
      +}
    • addedOutput schema / additionalProperties
      Added value: +true
    • removedOutput schema / properties
      Removed value: -{
      -  "result": {
      -    "items": {},
      -    "type": "array"
      -  }
      -}
    • removedOutput schema / required
      Removed value: -[
      -  "result"
      -]
    • removedOutput schema / x-fastmcp-wrap-result
      Removed value: -true
  2. First observedv0.1.0

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false. The description goes well beyond them by disclosing pagination semantics, truncation behavior, automatic fetch limits (10 pages / 5000 items), and the critical warning that has_more=true means the list is incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose, then gives filter examples, return information, and pagination guidance in a compact, well-structured form. Every sentence supports correct invocation or result interpretation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paginated list tool with a full input schema, read-only annotations, and an output schema, the description supplies complete operational context: filtering syntax, return shape, pagination controls, and the safety warning about incomplete results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description still adds practical meaning by giving exact filter JSON examples and explaining how page, next_page, and fetch_all interact, which is more than the schema alone provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: listing machines (virtual desktops) in the environment. Clear enough to distinguish from mutation tools like machine_action, but it does not explicitly differentiate itself from get_machine or list_desktop_pools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete usage guidance for filtering by pool and state, and explains pagination behavior. It does not explicitly state when to choose this over sibling tools such as get_machine or list_desktop_pools, but the operational context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.