Skip to main content
Glama
matt-coppinger

Horizon MCP Server

update_settings

DestructiveIdempotent

Update a Horizon VDI settings section by reading current values, changing only intended fields, and saving. For general settings, add version to restricted_client_data entries to avoid errors.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
specYesUpdated settings object. Read current values first, modify only the fields you intend to change, then pass the full object here.
confirmNoOnly used when the server runs with HORIZON_CONFIRMATION=flag (clients without elicitation). Otherwise the user is asked to confirm directly in the client.
setting_typeYesSettings section to update. Read current values via the corresponding horizon://config/settings/<type> resource before modifying.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.2.0
    • addedInput schema / properties / confirm
      Added value: +{
      +  "default": false,
      +  "description": "Only used when the server runs with HORIZON_CONFIRMATION=flag (clients without elicitation). Otherwise the user is asked to confirm directly in the client.",
      +  "type": "boolean"
      +}
  2. First observedv0.1.0

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, so the safety profile is covered. The description adds genuinely non-structured behavior: the confirmation flow that depends on HORIZON_CONFIRMATION, and a subtle server-side quirk where general-section restricted_client_data entries are rejected unless a 'version' is supplied. That is real value beyond the annotations.

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

Conciseness4/5

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

Front-loaded with the action and a scannable setting_type→endpoint table, followed by the ordering rule and the general-section caveat. Slight redundancy exists because the schema's setting_type description already mentions reading via the resource URI, but the length is justified by the trap it documents.

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

Completeness4/5

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

An output schema exists so return values need no explanation, and the description covers the mutation preconditions and the one known failure mode. It leaves some ambiguity about behavior on partial/invalid spec (e.g. whether omitted fields reset) for a destructive, idempotent update, which keeps it from a 5.

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 baseline is 3; the description adds meaning by mapping each setting_type enum value to a concrete resource URI and by clarifying that spec must be the full updated object rather than a patch. This is more than the schema alone conveys.

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+resource ('Update a Horizon settings section') and enumerates all five sections with their backing resource URIs, so an agent can tell exactly what domain this mutates. It does not explicitly contrast itself with the read-only sibling get_settings or the unrelated update_global_policies, so it falls short of a 5.

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?

Gives a clear precondition ('Always read the current settings first and only modify the fields you intend to change') that routes the agent through get_settings before calling. It stops short of explicitly naming when-not-to-use or spelling out the alternative tool by name, keeping it at 4 rather than 5.

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