Usage¶
Once the server is in your client (see Configuration), you talk to your devices through the client. This page is what the client sees: 7 resources it can read and 12 tools it can call, and which of them change something.
Example prompts¶
- "Which devices have not informed in the last 24 hours?" (the client calls
search_deviceswith a_lastInformfilter) - "What firmware do the devices tagged
pilotrun?" (search_devicesby tag, thenget_parameterforInternetGatewayDevice.DeviceInfo.SoftwareVersionon each) - "Reboot 202BC1-BM632w-000002 and tell me when it is back" (
reboot_device, thenrefresh_parameterfor the uptime)

Resources (read-only)¶
| URI | Returns |
|---|---|
genieacs://devices/list |
The ids of every device the ACS knows, up to DEVICE_LIMIT (default 500). Read this first to get valid ids. |
genieacs://device/{id} |
One device's full document: every parameter the ACS has collected, tags, last inform time, task history. |
genieacs://tasks/{id} |
The tasks still waiting for device {id}. GenieACS deletes a task once the device has run it, so a finished task is gone; a faulted one stays, with its fault under faults/{id}. |
genieacs://faults/{id} |
The faults recorded for device {id}. |
genieacs://file/{name} |
The metadata of a file stored on the ACS (a firmware image, a config file). |
genieacs://presets/list |
Every preset on the ACS. |
genieacs://provisions/list |
Every provision script on the ACS. |

Tools¶
Two tools only read. The other ten queue a task on a device (the ACS sends a connection request at once,
so a reachable device runs it within seconds), wake a device, or change the ACS. Each tool's annotations
say which. The two readers carry readOnlyHint. The rest say whether they are destructive and whether
running them twice is the same as once, so your client can ask before the ones that act.
GENIEACS_READ_ONLY=true serves only the two readers, and GENIEACS_TOOLS serves only the tools you name
(see Configuration).
| Tool | Arguments | What it does | Reads or acts |
|---|---|---|---|
search_devices |
query (JSON string, MongoDB syntax), limit (1 to 200, default 50), skip, projection (default a summary; all for full documents), sort (JSON, e.g. {"_lastInform":-1}) |
Finds devices by tag, manufacturer, model, firmware, last inform or any parameter. Query operators such as $eq, $ne, $gt, $lt, $in, $nin, $exists, $regex, $and and $or work; $where, $function, $accumulator and $expr are refused because they run code on the ACS database, and a $regex pattern may be at most 256 characters. Returns count, more (another page exists) and the devices. |
reads |
get_parameter |
device_id, parameter_path (one path or a comma-separated list) |
Returns the last values the ACS has for those parameters, without contacting the device, as parameters (path to value, type, timestamp) plus the paths it has no value for in missing. Stale if the device has not informed recently. |
reads |
refresh_parameter |
device_id, parameter |
Asks the device to report one parameter's current value; read it afterwards from genieacs://device/{id}. |
acts |
set_parameter |
device_id, parameter_values (JSON array of [path, value] or [path, value, xsdType] tuples; example below the table) |
Writes parameter values on the device; the type is inferred when omitted. | acts |
reboot_device |
device_id |
Reboots the device. No confirmation that it came back; check uptime afterwards. | acts |
download_firmware |
device_id, file_id, filename (optional) |
Tells the device to download and apply a file stored on the ACS. | acts |
connection_request |
device_id |
Wakes the device so it contacts the ACS now. Fails with 504 when the device is unreachable (NAT, offline). | acts |
tag_device |
device_id, tag, action (add or remove) |
Adds or removes a tag; presets match on tags. | acts |
manage_preset |
action (put or delete), name, body (JSON, for put) |
Creates, replaces or deletes a preset on the ACS. | acts |
manage_provision |
action (put or delete), name, script (for put) |
Creates, replaces or deletes a provision script on the ACS. | acts |
delete_task |
task_id |
Removes a queued task. | acts |
retry_task |
task_id |
Re-queues a failed task. | acts |
A parameter_values example for set_parameter, renaming the WiFi network:
The two readers (search_devices, get_parameter) and the four task tools below answer with structured
content as well as text, and declare their output schema; the other six tools answer with text. The tools that
queue a task (refresh_parameter, set_parameter, reboot_device, download_firmware) return status:
done when the device ran the task during the call (the NBI answered 200), queued when it was not
reachable in time and the task waits for its next inform (202). A queued task is listed under
genieacs://tasks/{id} until it runs.

On the wire¶
The client speaks MCP JSON-RPC to the server. A 2026-07-28 client may start with server/discover and
send its protocol version on every request; an older one starts with initialize. After that both use
resources/list, resources/read, tools/list and tools/call. The list results carry a five-minute
cache hint, so a client need not ask again on every turn. Over HTTP everything goes to the single /mcp endpoint; over stdio,
one JSON-RPC message per line. A worked exchange is on Getting started.