Skip to main content
Glama

Set device parameters

set_parameter
DestructiveIdempotent

Writes one or more TR-069 parameter values to a CPE device, such as WiFi SSID, key, or periodic inform interval, overwriting current values.

Instructions

Write one or more TR-069 parameter values on a CPE device, overwriting the current values: WiFi SSID or key, periodic inform interval, management server URL, or any writable parameter. A wrong value can cut the device off (a wrong WAN or ACS URL setting, for example). parameter_values is a JSON array of [path, value] or [path, value, xsdType] tuples; xsd types include xsd:string, xsd:boolean, xsd:unsignedInt, xsd:int and xsd:dateTime, and GenieACS infers the type when it is omitted. Example: [["InternetGatewayDevice.LANDevice.1.WLANConfiguration.1.SSID","Lab-2","xsd:string"]]. GenieACS queues the task and sends a connection request at once: status "done" means the device applied it, "queued" means it runs at the next inform. A read-only or unknown parameter makes the device fault the task; see genieacs://faults/{device_id}. Read the current value with get_parameter first.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "device_id": "<device_id>",
      "parameter_values": "<parameter_values>"
    },
    "name": "set_parameter"
  }
}

Input Schema

NameRequiredDescriptionDefault
device_idYesThe GenieACS device id (the _id field), exactly as GenieACS stores it, usually OUI-ProductClass-SerialNumber, e.g. "202BC1-BM632w-000001". GenieACS escapes characters other than letters and digits inside the product class and serial as %XX (a "-" there becomes "%2D"), so copy ids from genieacs://devices/list or search_devices rather than typing them.
parameter_valuesYesJSON array of tuples, each [path, value] or [path, value, xsdType]. Example: [["Device.WiFi.SSID.1.SSID","NewName","xsd:string"],["Device.ManagementServer.PeriodicInformInterval",300,"xsd:unsignedInt"]]

Output Schema

NameRequiredDescriptionDefault
taskNoThe task document GenieACS returned.
statusYesdone: the device ran the task in the session GenieACS opened at once. queued: the device did not answer within 3 seconds, so the task runs at its next inform or connection request.
messageYesWhat happened, in one sentence.
task_idNoThe GenieACS task id; use it with delete_task or retry_task, or look for it in genieacs://tasks/{device_id}.
device_idYesThe device the task was queued on.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.4.1
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / device_id / description
      Previous value: -"The exact GenieACS device identifier (_id field). Typically in the format OUI-ProductClass-SerialNumber (e.g. \"00236A-SmartRG585-SMRT00236a42\"). Obtain valid IDs from the genieacs://devices/list resource."New value: +"The GenieACS device id (the _id field), exactly as GenieACS stores it, usually OUI-ProductClass-SerialNumber, e.g. \"202BC1-BM632w-000001\". GenieACS escapes characters other than letters and digits inside the product class and serial as %XX (a \"-\" there becomes \"%2D\"), so copy ids from genieacs://devices/list or search_devices rather than typing them."
    • addedInput schema / properties / device_id / minLength
      Added value: +1
    • changedInput schema / properties / parameter_values / description
      Previous value: -"A JSON array of parameter tuples to set. Each tuple is either [path, value] or [path, value, xsdType]. Example: [[\"Device.WiFi.SSID.1.SSID\",\"NewName\",\"xsd:string\"],[\"Device.ManagementServer.PeriodicInformInterval\",300,\"xsd:unsignedInt\"]]"New value: +"JSON array of tuples, each [path, value] or [path, value, xsdType]. Example: [[\"Device.WiFi.SSID.1.SSID\",\"NewName\",\"xsd:string\"],[\"Device.ManagementServer.PeriodicInformInterval\",300,\"xsd:unsignedInt\"]]"
    • addedInput schema / properties / parameter_values / minLength
      Added value: +2
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "device_id": {
      +      "description": "The device the task was queued on.",
      +      "type": "string"
      +    },
      +    "message": {
      +      "description": "What happened, in one sentence.",
      +      "type": "string"
      +    },
      +    "status": {
      +      "description": "done: the device ran the task in the session GenieACS opened at once. queued: the device did not answer within 3 seconds, so the task runs at its next inform or connection request.",
      +      "enum": [
      +        "done",
      +        "queued"
      +      ],
      +      "type": "string"
      +    },
      +    "task": {
      +      "description": "The task document GenieACS returned."
      +    },
      +    "task_id": {
      +      "description": "The GenieACS task id; use it with delete_task or retry_task, or look for it in genieacs://tasks/{device_id}.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "device_id",
      +    "status",
      +    "message"
      +  ],
      +  "type": "object"
      +}
  2. Addedv0.3.3

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: warns a wrong WAN/ACS URL can cut the device off (concrete destruction mode), explains queueing semantics ("done" = applied, "queued" = next inform), discloses that read-only/unknown parameters fault the task, and points to genieacs://faults/{device_id}. This is the kind of context annotations alone cannot convey.

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 the risk warning, then format details, then status semantics. Dense but every sentence carries information. Slightly long as a single block — could be split, but nothing is wasted.

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?

Covers everything an agent needs for a destructive, open-world mutation: what it overwrites, the failure mode, the payload format, the async result semantics, and where to find faults. An output schema exists, yet the description still explains status values, which is a bonus rather than a redundancy.

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 coverage is 100%, so baseline is 3; the description adds real value on top by spelling out the tuple shape ([path, value] or [path, value, xsdType]), the allowed xsd types, GenieACS's type inference when omitted, and a concrete example. device_id is left to the rich schema description, which is fine.

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

Purpose5/5

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

Opens with a specific verb+resource+protocol: 'Write one or more TR-069 parameter values on a CPE device, overwriting the current values.' It then enumerates concrete examples (SSID, key, inform interval, ACS URL) and distinguishes itself implicitly from the read-side siblings (get_parameter, refresh_parameter).

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?

Explicitly routes the agent to get_parameter before writing ('Read the current value with get_parameter first') and warns against wrong values. It gives clear context but never states when *not* to use this tool (e.g. for read-only params, use refresh_parameter; to retry, use retry_task), so it stops short of full alternative routing.

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