Skip to main content
Glama

keenetic-mcp, the Keenetic MCP server: secure automation and control for Keenetic routers via the Model Context Protocol. Your AI client talks to the MCP server, which talks to the router. Works natively with Claude and Codex, and with Cursor over MCP. Secure and private, all operations run locally in your network. No installation, nothing installed on your Keenetic. Manage settings, users, Wi-Fi and firewall. You decide what to automate and when.

keenetic-mcp

Control your Keenetic router from Claude, Codex, Cursor, or any MCP agent.

npm license MCP KeeneticOS

Ask your agent about your network in plain language. No USB stick, no Entware, nothing installed on the router.

> who is using the most bandwidth right now?

  Three devices are active. Sorted by traffic:

  work-laptop      wifi:HomeNet   -46 dBm    7.7 GB down
  living-room-tv   wired:Home                3.2 GB down
  hallway-camera   wifi:HomeNet   -48 dBm    5.4 MB down

  The laptop is on the 2.4 GHz radio at -46 dBm, which is a strong
  signal, so the throughput is not a coverage problem.

> block the camera until tomorrow morning

  Blocked hallway-camera (02:00:00:00:00:14).

  Applied to the running configuration and verified, but NOT saved.
  A reboot discards it. Backup taken before the change:
  ~/Library/Application Support/keenetic-mcp/backups/…txt

  Say the word and I will make it permanent, or leave it and it
  reverts on the next restart.

Why

  • Nothing on the router. It talks to the router's own HTTP API over your LAN. No USB drive, no Entware, no firmware modification.

  • Works on any Keenetic. The tool set adapts to what your specific model and firmware actually support.

  • Safe by construction. Changes are never saved unless you ask, a backup is taken before the first one, and every change is read back and verified before it is reported as done.

  • Read-only if you want it. One flag and the agent physically cannot change anything.

Related MCP server: keenetic-mcp

Install

Claude Code

/plugin marketplace add salatmaster/keenetic-mcp
/plugin install keenetic@keenetic

Then run the setup wizard in your terminal:

npx -y keenetic-mcp init

Codex

codex plugin marketplace add salatmaster/keenetic-mcp
codex plugin add keenetic@keenetic
npx -y keenetic-mcp init

This brings the skills along with the server. For the server on its own:

codex mcp add keenetic -- npx -y keenetic-mcp

Anything else

{
  "mcpServers": {
    "keenetic": { "command": "npx", "args": ["-y", "keenetic-mcp"] }
  }
}

The wizard finds your router from the default gateway, confirms it really is a Keenetic, checks the password against it, and stores the password in your operating system keychain. Only the address and login go in a settings file.

Prefer environment variables? KEENETIC_HOST, KEENETIC_USER and KEENETIC_PASSWORD override everything, which is what you want in a container.

What it can do

Read

Tool

list_devices

every device, filtered by active, wired, wireless or blocked, sorted by traffic or signal

get_device

one device in full: lease, Wi-Fi rate, policy, schedule, traffic

list_interfaces

WAN links, bridges, access points, VPN tunnels

get_interface

one interface in full, including WireGuard peers

get_wifi_status

radios by band, with client counts

get_internet_status

reachability, and which check failed

list_routes

routing table, or just the default route

list_policies

connection policies for selective routing

get_system_info

model, firmware, CPU, memory, installed components

get_config_state

unsaved changes, who changed what and when

list_segments

every bridge, and whether the web interface lists it as a segment

backup_config

download the configuration to a local file

Change

Tool

update_device

rename, block or allow, assign a routing policy, schedule or priority

set_interface_state

bring an interface up or down

create_segment

a guest or IoT network the web interface actually lists, with Wi-Fi, DHCP and optional VPN routing

delete_segment

remove a segment and everything created with it

save_config

make pending changes survive a reboot

Escape hatch

Tool

rci_call

any router API path at all, for whatever the tools above do not cover

Skills included

The plugin ships four skills, so the agent knows how your router behaves rather than guessing. One plugin directory serves both Claude Code and Codex: they read different manifests but share the same skills and the same server definition.

  • keenetic-rci teaches the router's API tree: which paths exist, which ones return 100 KB, and how to recover the exact syntax of a command from the router's own configuration.

  • keenetic-safe-changes teaches the change workflow: what the router's fail-safe does and does not protect against, and which interfaces will cut off your own access.

  • keenetic-segments covers building an isolated network the router will admit exists. The obvious way produces a guest network that carries traffic perfectly and never appears in the web interface, because a segment is VLAN-backed and the VLAN is the part everyone leaves out.

  • keenetic-troubleshoot is an ordered diagnostic playbook for "the internet is down", "Wi-Fi is bad" and "one device cannot connect".

Safety

  • Nothing is saved unless you ask. Changes apply to the running configuration and are discarded on reboot until save_config is called. The server never calls it on its own.

  • A backup is taken automatically before the first change of a session.

  • Every change is verified. The router accepts some wrong commands silently and changes nothing, so each write is read back and compared before it is reported as successful.

  • Read-only mode really is read-only. With --read-only, the write tools are not registered at all rather than registered and refusing, so the agent never sees them.

  • Your password goes in the system keychain, not in a config file, and never in a log or a tool response.

  • LAN only. No cloud, no telemetry, no outbound connection to anything but your router.

Where the password is stored on each platform, and how to report something privately, are in SECURITY.md.

Supported routers

RCI, the API this uses, is a standard part of KeeneticOS rather than a feature of expensive models, so this works across the range. Verified against a Keenetic Ultra (KN-1811) on KeeneticOS 5.1.3.

Models on the current 5.1 branch: Giga (KN-1010), Hero (KN-1011, KN-1012), Start and Starter (KN-1111, KN-1112, KN-1121), Air and Explorer (KN-1613, KN-1621), Extra and Carrier (KN-1713, KN-1714, KN-1721), Ultra and Titan (KN-1810, KN-1811, KN-1812). Older hardware on 4.x and earlier has RCI too; the tool set adapts to the components each router actually has.

How it works

Keenetic routers expose RCI, a JSON mirror of their command-line tree, over HTTP. This server authenticates with the router's challenge-response scheme, keeps one session alive across the agent's questions, and shapes the answers so they fit in a model's context: the raw interface listing alone is 32 KB, and the NAT table is over 100 KB.

There is no coherent public documentation for RCI, so docs/rci-api.md is the notes taken while building this: the authentication handshake, the paths that exist, the traps, and how to recover a command's syntax from the router itself.

Development

npm install
npm test          # no router required
npm run typecheck
npm run build

A checkout reports its version as 0.0.0-dev, because there is no version written down anywhere in the sources. Put KEENETIC_MCP_VERSION in a .env at the repository root to say otherwise; the same file can hold KEENETIC_HOST and KEENETIC_PASSWORD so you do not have to export them. A real environment variable always wins over that file, and an installed copy never reads one.

Tests run against sanitized fixtures captured from a real router. To refresh them, and to run a read-only smoke test against your own:

KEENETIC_HOST=… KEENETIC_PASSWORD=… npm run capture:fixtures
KEENETIC_TEST_HOST=… KEENETIC_TEST_PASSWORD=… npm run smoke

Fixtures are anonymized deterministically and a test scans the whole repository for anything that looks like a real MAC address, private IP or key.

The setup wizard reads a password from the terminal, which no unit test can reach: piped input takes a different code path entirely. That part is checked with a script that drives a real pty, so it needs a terminal and cannot run in CI:

KEENETIC_TEST_PASSWORD=… ./scripts/verify-wizard.exp

Releasing

A release is a tag and nothing else. There is no version commit to write, because there is no version in the repository to change: package.json carries 0.0.0-dev, the plugin manifests carry none at all, and the release workflow stamps the tag into package.json immediately before publishing without committing it.

git tag v0.2.2 && git push origin v0.2.2

The workflow refuses a tag that does not name a version, and a test refuses a tree that has a version written into it, so the two can never disagree. The plugins pin keenetic-mcp@^0, which tracks the major only and is meant to be edited once, at 1.0.

License

MIT

Available Tools

18 tools
backup_configDownload a configuration backupA
Read-only

Saves the router startup configuration to a local file. Take one before any sequence of changes so there is a known-good state to return to. Reading the configuration changes nothing on the router.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path of the local file to write.

TDQS

A4.5/5.0
Behavior5/5

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

The description clearly states that reading the configuration changes nothing on the router, reinforcing the readOnlyHint annotation. It also adds the side effect of writing to a local file, clarifying the tool's non-destructive impact on the router. Goes beyond annotations by explaining the purpose of the backup.

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?

Three concise sentences, each adding unique value: purpose, usage timing, and behavioral assurance. Front-loaded with the core action, then usage guidance, then safety note. No wasted words.

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 single-parameter tool with no output schema, the description fully covers purpose, when to use, and behavioral side effects. Nothing critical missing for correct invocation.

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

Parameters3/5

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

Schema coverage is 100% (path parameter clearly described as 'Absolute path of the local file to write'). The description adds no extra parameter context, but baseline 3 is appropriate when schema already documents the single parameter. No ambiguity.

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?

Description states specific verb ('saves'), resource ('router startup configuration'), and destination ('local file'), clearing distinguishing it from all sibling getter/list tools. No ambiguity about what the tool does.

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?

Explicit guidance: 'Take one before any sequence of changes so there is a known-good state to return to.' This clearly indicates when to use the tool, though it doesn't explicitly mention alternatives or when not to use it. Since no sibling performs backup, this is sufficient.

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

create_segmentCreate a network segmentA
Destructive

Creates an isolated network that the web interface actually lists as a segment: a VLAN subinterface trunked over every switch port, a bridge, an address, NAT, a DHCP pool, and optionally a Wi-Fi network and a routing policy. Free identifiers are chosen automatically. The result is verified against the router-computed iseg block, and a failure anywhere rolls the whole thing back. Nothing is saved; call save_config once the user confirms.

ParametersJSON Schema
NameRequiredDescriptionDefault
pskNoWi-Fi password, at least 8 characters. Required with ssid.
nameYesSegment name, shown in the web interface. One word works best.
ssidNoWi-Fi network name. Omit for wired only.
subnetNoThird octet of 192.168.x.0/24. Allocated when omitted.
permit_interfacesNoCreate a routing policy allowing only these interfaces, for example ["Wireguard1"]. Omit to leave the segment on the default route.
policy_descriptionNoDescription for the created policy.

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses that the result is verified against the router-computed iseg block, that any failure rolls the entire thing back atomically, and that nothing is persisted until save_config. These are non-obvious transactional semantics an agent must know before invoking a destructiveHint=true tool.

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-loads the purpose, then layers mechanics and the persistence caveat. The first sentence is long and dense but each clause carries distinct information, and no sentence is filler.

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?

For a multi-resource, destructive, non-persisting creation tool with no output schema, the description covers atomic rollback, verification, and the commit step. It is nearly complete; it stops short of describing what identifiers come back on success, which would matter given no output schema.

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

Parameters3/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; each parameter is already documented. The description adds only that free identifiers (the subnet third octet) are chosen automatically and that Wi-Fi/policy pieces are optional, which corroborates but does not extend the schema meaningfully.

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?

States a specific verb+resource and enumerates exactly what gets built: VLAN subinterface, bridge, address, NAT, DHCP pool, optional Wi-Fi and routing policy. It also distinguishes itself from the persistence step by naming save_config, so an agent can separate creation from commit without opening another schema.

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 tells the agent the workflow: this only stages the change, and save_config must be called once the user confirms. It does not name when-not to use it versus siblings like update_device or list_segments, but the commit boundary is clear enough to route correctly.

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

delete_segmentDelete a network segmentA
Destructive

Removes a segment and everything created with it: the Wi-Fi networks bound to it, its policy, its DHCP pool, NAT, the bridge, and the VLAN on every switch port. Removing the bridge alone leaves the VLAN trunked over the whole switch. Devices on the segment lose their connection. Refuses the home segment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bridgeYesSegment to remove, for example Bridge2.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description goes well beyond that: it enumerates exactly what is destroyed (Wi-Fi networks, policy, DHCP pool, NAT, bridge, VLAN trunking on every switch port), warns about a confusing partial outcome ('removing the bridge alone leaves the VLAN trunked'), states the user-visible impact (devices lose connection), and documents a refusal case.

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?

Three sentences, zero filler, with the destructive scope front-loaded ahead of the caveat and the refusal condition. Each sentence supplies decision-relevant information.

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 single-parameter, non-hierarchical destructive tool with no output schema, the description supplies everything needed: the cascade of side effects, the safety exclusion, and the user-facing consequence. Nothing an agent needs before invoking it is missing.

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

Parameters3/5

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

Schema description coverage is 100% with a single 'bridge' parameter already documented with an example ('Bridge2'), so the schema carries parameter meaning. The description adds no further semantics about the parameter's naming or format. Baseline 3 is appropriate.

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?

States a specific verb and resource ('Removes a segment') and immediately scopes it with the full cascade of dependent objects it takes with it. An agent can distinguish this from create_segment, list_segments, or update_device without opening any schema.

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/exclusion ('Refuses the home segment') and enough consequence detail to judge whether deletion is the right action. It does not name an alternative tool or describe the update/rename path as a less destructive option, so it stops short of full when/when-not routing.

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

get_config_stateConfiguration stateA
Read-only

Whether the running configuration has unsaved changes, who last changed it and when, and the state of the router fail-safe timer. Unsaved changes are lost on reboot. unsavedChanges is null when the saved checksum could not be read - treat that as unknown, not as saved.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description adds meaningful behavioral detail: unsaved changes are lost on reboot, and unsavedChanges being null means 'unknown', not 'saved'. This is valuable context that an agent needs to interpret results correctly.

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?

Two sentences, each earning its place. The core question is front-loaded, and the special null-case clarification is placed last without padding.

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?

For a zero-parameter, read-only state tool, the description covers what is returned, a critical edge case, and a consequence of unsaved changes. It would benefit from mentioning the fail-safe timer state more explicitly or noting the response structure, but overall it is nearly complete.

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?

The tool has no parameters, and the schema is already complete. With zero parameters, the description need not compensate for schema gaps, so the baseline of 4 applies.

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?

The description clearly identifies the resource (running configuration state) and the specific information returned: unsaved changes, last changer/time, and fail-safe timer status. It distinguishes this from sibling tools like get_system_info or get_connection_status, though it lacks an explicit verb like 'returns' or 'gets'.

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

Usage Guidelines3/5

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

The description implies when to use this tool (when wanting configuration state details) but provides no explicit guidance about alternatives or when not to use it. There is clear context about the info it provides, but no exclusions or sibling differentiation.

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

get_deviceGet one device in fullA
Read-only

Every field the router holds for a single device: DHCP lease, Wi-Fi rate and mode, access policy, traffic shaping, first and last seen. Identify it by MAC, IP or name.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipNoCurrent IPv4 address.
macNoMAC address, any case.
nameNoRegistered name or hostname.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark it as read-only, and the description adds that it is a full-record fetch with no filtering or projection. It does not mention not-found behavior or the exact response envelope, but for a simple read operation the added detail is sufficient.

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?

Two sentences with no wasted words. The most important facts—what is returned and how to identify the device—are front-loaded, and the field enumeration is concrete but compact.

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?

For a simple read-only lookup with full schema coverage, the description is nearly complete: it specifies the resource, the identifier options, and the content of the result. The main remaining omission is the response shape or error handling, which is minor for this tool.

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?

The schema already covers all three parameter descriptions, so the baseline is 3. The description adds the key semantic that MAC, IP, and name are alternate identifiers, which helps an agent know that supplying any one is the intended invocation pattern.

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?

The description states exactly what the tool does: returns the router's full record for a single device, enumerated by field categories. It also names the lookup key (MAC, IP, or name), which separates it from list_devices and similar siblings.

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?

It is clear this is the tool to call when a single device's complete record is needed rather than a list. It lacks an explicit contrast such as 'use list_devices for multiple devices,' but the single-device framing and identifier requirements provide enough context.

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

get_interfaceGet one interface in fullA
Read-only

Every field for a single interface, including protocol-specific detail such as WireGuard peers or PPPoE session state. Get the exact name from list_interfaces first.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesInterface id, for example Bridge0 or Wireguard3.

TDQS

A4.2/5.0
Behavior3/5

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

The readOnlyHint annotation already indicates this is a safe read operation)Skip, and the description adds that it returns protocol-specific detail, which is useful but not extensive. It doesn't elaborate on response size or additional side effects, but since the annotation covers the non-destructive nature, a 3 is appropriate.

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 two sentences long, with the core purpose stated first and immediate usage guidance following. Every word earns its place, making it both concise and effective.

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?

Given the tool has only one parameter, full schema coverage, and a readOnlyHint, the description provides the essential information: what it returns and how to obtain the required parameter. The only minor gap is not describing the response format, but since no output schema is present, some description of return value structure could be helpful, but overall it is sufficient.

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

Parameters3/5

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

The schema description for the 'name' parameter is 100% covered, providing examples. The description adds context that the name must be an exact interface id from list_interfaces, which is helpful but not essential beyond what the schema says. With full schema coverage, the baseline 3 is warranted.

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?

The description clearly states the tool's purpose: to retrieve every field for a single interface, including protocol-specific details. It also names the required input, 'name', and distinguishes it from list_interfaces by specifying the full detail level, making it distinguishable from siblings.

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

Usage Guidelines5/5

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

It explicitly instructs to 'Get the exact name from list_interfaces first,' which provides direct guidance on when to use this tool and implies that list_interfaces is for listing all interfaces while this one is for a single detailed view. This is clear usage context, though it does not list alternatives explicitly.

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

get_internet_statusInternet connectivityA
Read-only

Whether the router currently reaches the internet, and which check failed if not: gateway reachability, DNS resolution, and captive-portal detection. Start here when the user reports the internet is down.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=false. The description adds the diagnostic breakdown (which check failed) and clarifies it's a status read, not a configuration change. It doesn't describe return format or error handling, but for a read-only status tool the provided context is adequate.

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?

Two sentences, zero wasted words. The primary purpose and usage guidance are front-loaded, and the diagnostic detail is concise. Perfectly sized for the tool's simplicity.

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?

Given zero parameters, no output schema, and the readOnly annotation, the description covers everything an agent needs: what it does, what it checks, and when to use it. Nothing critical is missing.

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?

The tool has zero parameters, so the baseline is 4. The description doesn't need to explain parameters, and it correctly implies the tool takes no input.

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?

The description states a clear verb and resource ('checks internet connectivity') and enumerates the specific checks (gateway reachability, DNS, captive-portal). It also signals the primary use case ('Start here when the user reports the internet is down'), which distinguishes it from sibling tools like get_dns_status or get_connection_status.

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?

It explicitly says 'Start here when the user reports the internet is down', giving a concrete scenario. It doesn't explicitly mention when not to use it or point to alternatives, but the directive is sufficient for a zero-parameter diagnostic tool.

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

get_system_infoRouter system informationA
Read-only

Model, firmware version, uptime, CPU and memory load, and the list of installed KeeneticOS components. Call this first when you need to know what the router supports: the component list tells you which features exist on this device.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, covering the safety profile, so the bar is lower. The description adds useful context about what data is revealed (the data enumeration), but does not disclose additional behavioral traits beyond that. No contradiction with annotations.

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?

Two sentences with zero waste: the first front-loads the data content, the second delivers the usage rationale. Every phrase earns its place, including the justification for why the component list matters.

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?

For a zero-parameter, read-only tool with no output schema, the description covers the essentials: what data is returned and when to call it. It does not specify response structure or unit formats, but for a simple info tool this is sufficient and discoverable from the actual response.

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?

The tool has zero parameters, so the baseline is 4 per the rubric. There is nothing for the description to document regarding parameters, and it correctly implies a no-input call.

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?

The description states a specific verb and resource ('get system info') and enumerates the exact data returned: model, firmware version, uptime, CPU/memory load, and KeeneticOS component list. It clearly distinguishes itself from siblings like get_connection_status and get_internet_status by identifying its own scope.

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 explicit when-to-use guidance: 'Call this first when you need to know what the router supports.' It gives clear context for when the tool is appropriate, though it does not name specific sibling alternatives or exclusion conditions, leaving the comparison to other status tools implicit.

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

get_wifi_statusWi-Fi statusA
Read-only

Wi-Fi radios grouped by band, each with its access points, SSIDs, link state and the number of connected clients. Use this rather than list_interfaces when the question is about Wi-Fi coverage or which network a device should be on.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

The readOnlyHint and openWorldHint annotations already establish safety, and the description adds useful behavioral context about output granularity and grouping. It explains that data is organized by radio/band and what each entry contains, going beyond the bare annotation without needing to cover destructive concerns.

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?

Two sentences with no filler: the first states what is returned, the second gives the routing guidance. Every word adds value and the key information is front-loaded.

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 zero-parameter, read-only tool with no output schema, the description supplies the essential context: the data content, its structure, and when to prefer this over the closest sibling. Nothing critical is missing for an agent to invoke it correctly.

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?

There are zero parameters, so there is nothing for the description to explain. The tool takes no input, and the description's focus on what data is returned is appropriate for a parameterless read-only lookup.

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?

The description clearly identifies the resource (Wi-Fi status), the data grouping (radios by band), and the specific fields returned (access points, SSIDs, link state, connected clients). It also explicitly differentiates itself from the sibling tool list_interfaces, making the tool's role unambiguous.

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

Usage Guidelines5/5

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

The description states exactly when to use this tool: 'Use this rather than list_interfaces when the question is about Wi-Fi coverage or which network a device should be on.' This gives the agent an explicit selection rule and names the alternative.

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

list_devicesList devices on the networkA
Read-only

Every device the router knows about, with IP, name, how it is connected, signal strength and traffic counters. Use filter to narrow to active, wired, wireless or blocked devices, and sort to rank by traffic, name, signal or last seen.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoOrdering. Defaults to traffic, highest first.
limitNoMaximum rows. Defaults to 50.
filterNoWhich devices to include. Defaults to all.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the agent knows this is safe. The description adds valuable behavioral detail by enumerating the fields returned (IP, name, connection type, signal, traffic counters) and the filtering/sorting options, which sets expectations about output content. There is no contradiction with annotations, and the description enhances the read-only context with field-level transparency.

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?

Two sentences, front-loaded with the core purpose, followed by usage guidance. No redundancy, filler, or irrelevant detail. Every sentence earns its place by conveying scope and customization options efficiently.

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?

For a read-only list tool with three optional parameters and no output schema, the description covers the essential data scope and provides usage hints. It lists the fields that will appear in the result, which effectively substitutes for an output schema. It does not mention pagination or default behavior explicitly, but the schema already contains defaults, so the combination of schema and description is sufficiently complete for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters already have clear descriptions and enums. The description reinforces how filter and sort work (e.g., 'narrow to active, wired...' and 'rank by traffic...') but does not add semantically new information beyond the schema. Per the calibration, baseline 3 is appropriate when the schema carries the parameter documentation load.

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?

States the specific action 'list' on 'devices', and describes exactly what the result contains (IP, name, connection, signal, traffic). The phrase 'every device the router knows about' implies a broad listing scope, clearly distinguishing it from the sibling get_device, which presumably targets a single device. The description effectively tells an agent what this tool is for and how it differs from nearby tools.

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?

The description gives clear context on when to use the tool (when a comprehensive device list is needed) and how to refine results via 'filter' and 'sort'. However, it never explicitly mentions when not to use it or names alternatives (e.g., get_device). The guidance is adequate but lacks explicit exclusion or alternative routing, so it does not fully meet the 5-bar.

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

list_interfacesList network interfacesB
Read-only

Every interface on the router - WAN links, bridges, Wi-Fi access points and VPN tunnels - with link state, address and whether it carries the default route. Summary detail is the default because the full listing is very large.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoWhich interfaces to include. Defaults to all.
limitNoMaximum rows. Defaults to 100.
detailNosummary returns seven fields per interface; full returns every field.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description doesn't need to restate safety. It adds value by warning that the full listing is very large and that summary detail is the default, which helps the agent anticipate response size. It also mentions the fields returned. No contradiction with annotations.

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 a single, efficiently structured sentence. It front-loads the purpose and scope, then adds a key behavioral hint about default detail. No filler or redundancy; every piece of information is necessary.

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?

Without an output schema, the description partially compensates by naming the fields returned (link state, address, default route) and the default detail level. It does not mention pagination or handling of large results beyond the default, but the schema already defines a limit parameter. Given the simplicity of the tool, this is adequate but could hint at using limit for large listings.

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

Parameters3/5

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

Schema coverage is 100%, so each parameter is already documented with descriptions and enums. The description does not introduce additional parameter semantics beyond what the schema provides, so the baseline of 3 applies. It mentions fields returned but not parameter-specific details.

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?

The description clearly states the tool lists every interface on the router, enumerating types (WAN, bridges, Wi-Fi, VPN) and the included attributes (link state, address, default route). This distinguishes it from siblings like get_interface or list_devices, though it doesn't explicitly name an alternative. The verb 'list' and resource 'interfaces' are specific.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as get_interface for a single interface or list_vpn for VPN-specific listings. It only notes the default detail level, which is more about output behavior than usage context. No exclusions or alternative routing is given.

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

list_policiesList routing policiesA
Read-only

Connection policies, which decide that a given device leaves through a given link - typically used to send some devices through a VPN tunnel and the rest direct. The names returned here are what a device is assigned to.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, covering the safety profile. The description adds helpful domain context about what a connection policy is and what the returned names represent, but it doesn't disclose return format, ordering, pagination, or empty-result behavior. With annotations handling safety, this is adequate but not rich.

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?

Two sentences with no filler. The first sentence defines the domain, and the second states what the return values mean. It's efficient, though slightly dense and could be restructured for immediate clarity.

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?

For a zero-parameter, read-only listing tool, the description explains the domain, the typical use, and the meaning of the returned names. It doesn't explicitly state the return type (e.g., array of strings), but given the simple resource and no output schema, this is a minor gap.

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?

The tool has zero parameters and the schema fully documents that (100% coverage), so the baseline for a no-param tool is 4. The description adds useful semantic context about the returned values even though no parameters need explanation.

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?

The description explains that the tool returns connection policies, defines what they do (decide which link a device uses), and clarifies that the returned names are the values assigned to devices. It identifies the resource clearly, though the verb 'list' is only implied by 'The names returned here' rather than stated explicitly, and it doesn't directly contrast with sibling tools.

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

Usage Guidelines3/5

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

The description provides a typical use case—routing some devices through a VPN tunnel and the rest direct—which implies when an agent might need policy names. However, it doesn't explicitly say when to use this tool versus alternatives like list_vpn or list_routes, or when not to use it.

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

list_routesList IP routesA
Read-only

The routing table: destination, gateway, outgoing interface and metric. Use kind=default to see only the default route, which tells you which link traffic leaves through.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoall returns the full table; default returns only 0.0.0.0/0.
limitNoMaximum rows. Defaults to 100.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true and openWorldHint=false; the description does not contradict these. It adds the contextual note that kind=default reveals which link traffic leaves through, which provides behavioral insight beyond the schema. However, it does not elaborate on limits, formatting, or any side effects (none expected for a read-only operation). Given the annotations already cover safety, this is adequate but not rich.

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?

Two sentences with no superfluous content. The main return is front-loaded ('The routing table...'), and the optional parameter guidance follows. Every word earns its place, and the structure is immediately scannable.

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?

For a read-only list tool with fully specified parameters and no output schema required, the description covers the essential purpose and a key use case. It does not describe the exact output format, but that is not mandated for a straightforward list operation. The description is complete enough for an agent to call this correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (kind and limit) are fully documented in the input schema. The description only reinforces the kind=default usage without adding new meaning. Since the schema does the heavy lifting, the baseline 3 applies; the description adds little beyond what is already structured.

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?

The description clearly states the resource (routing table) and the fields it returns (destination, gateway, outgoing interface, metric). It also mentions the use of kind=default for the default route, adding specificity. It is distinct from sibling tools like list_vpn or get_connection_status, so purpose is unambiguous.

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

Usage Guidelines3/5

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

The description gives a specific usage hint for kind=default ('tells you which link traffic leaves through') but does not provide guidance on when to use this tool versus alternatives such as list_interfaces or get_connection_status. There is no explicit when/when-not comparison, though the default-route use case offers some context.

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

list_segmentsList network segmentsA
Read-only

Every bridge on the router, and whether the web interface lists it as a segment. A bridge that carries an address but has no VLAN behind it works for traffic and never appears under /access-points, so uiVisible is the field that matters.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description's added value is the explanation of uiVisible and the behavior of bridges without VLANs. This is useful beyond the structured metadata.

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?

Two sentences with no waste. The core purpose is front-loaded, and the explanatory nuance is concise and directly relevant.

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?

For a zero-parameter read-only list tool, the description covers the key output concept (uiVisible) and the edge case of non-VLAN bridges. It does not describe the exact output format, but given the absence of an output schema, this is a minor gap.

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?

No parameters exist, so the baseline is 4. The description does not need to add parameter details; it focuses on output semantics instead.

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?

The description clearly states it lists bridges and whether the web interface treats them as segments, with a precise distinction about uiVisible. It differentiates from sibling tools like list_interfaces and list_devices by focusing on bridge/segment semantics.

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?

The description implies when to use this tool (when you need segment visibility on bridges) and explains a key nuance about non-VLAN bridges. It does not explicitly name alternatives or exclusions, but the context is clear enough.

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

rci_callCall the router API directlyA
Destructive

Sends a raw request to the router RCI interface, for anything the other tools do not cover. GET reads a path such as "show/version" or "interface/Bridge0"; POST sends a command object mirroring the CLI tree. The response is capped, so ask for a narrow path rather than a broad one: show/ip/nat alone is over 100 KB.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoCommand object for POST, mirroring the CLI tree, or an array of them for a batch. Send JSON, not a stringified object.
pathNoPath after /rci/, for GET. Example: show/interface/Bridge0
methodYesGET reads, POST executes a command.
max_bytesNoLower the response ceiling for this call. It can never raise it.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, so the safety profile is known; the description adds real behavioral context the annotations do not carry, namely that responses are size-capped, that the cap can only be lowered and never raised, and that broad paths blow the budget. It stops short of warning about what POST actually mutates or whether commands are reversible.

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?

Three tight sentences with zero filler: purpose and fallback scope first, then method semantics, then the practical size constraint. Every sentence carries actionable information and the most decision-relevant content is front-loaded.

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?

For a raw pass-through tool with no output schema, the description covers invocation well and explains the one surprising return characteristic (a truncated/capped response). It could say more about error behavior or what a batch POST returns, but nothing an agent needs to make the call is missing.

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 the baseline is 3, but the description goes further by supplying concrete path examples ("show/version", "interface/Bridge0") and clarifying that body mirrors the CLI tree and must be JSON rather than a stringified object. That is meaning beyond the schema's own wording.

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?

States a specific verb and resource ("Sends a raw request to the router RCI interface") and immediately positions itself as the escape hatch relative to the other tools. An agent can distinguish it from get_interface or set_interface_state without opening any schema.

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

Usage Guidelines5/5

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

Explicitly scopes use to "anything the other tools do not cover," which is a when-not rule routing the agent to the 17 typed siblings first. It also disambiguates the two methods (GET reads a path, POST executes a command) so method selection is not left to inference.

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

save_configSave the configurationA
DestructiveIdempotent

Writes the running configuration to the startup configuration, so pending changes survive a reboot. Nothing else in this server saves, so call this only once the user has confirmed the changes are what they want.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=true, so the bar is lower. The description adds real context the annotations don't carry: the write target (startup config) and the reboot-persistence effect. It stops short of noting that an existing saved startup config is overwritten, which is what makes the destructive hint non-obvious.

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?

Two sentences, effect front-loaded before the usage caution, with no filler. Each sentence carries distinct information: what it does and when to invoke it.

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?

With no output schema, zero params, and a flat schema, the description supplies enough to call the tool correctly: action, persistence effect, and the confirmation condition. The one gap is not stating that the previous saved configuration is replaced, which would fully explain the destructive annotation.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The absence of args is consistent with the description's framing as a single global commit action.

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?

States a concrete verb and both resources ('writes the running configuration to the startup configuration') plus the observable consequence ('pending changes survive a reboot'). This clearly separates it from sibling read/backup tools like get_config_state and backup_config.

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

Usage Guidelines5/5

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

Explicitly scopes when to call: 'Nothing else in this server saves, so call this only once the user has confirmed the changes are what they want.' That names the exclusivity relative to all siblings and imposes a confirmation prerequisite, leaving nothing to inference.

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

set_interface_stateBring an interface up or downA
DestructiveIdempotent

Enables or disables a network interface. Taking down a bridge or the WAN link can cut off access to the router itself, including this connection. Confirm what the interface carries with get_interface before calling this.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesInterface id from list_interfaces.
stateYesDesired administrative state.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds substantial context they don't carry: taking down a bridge or WAN link can sever the router's own management connection, i.e. a self-lockout risk. That is exactly the kind of consequence information an agent needs before invoking a destructive mutation.

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?

Three tight sentences with no filler: purpose first, hazard second, precondition last. Every sentence carries actionable information and the ordering front-loads what the tool does before the caveat.

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?

With no output schema and a fully documented 2-parameter schema, the description covers the remaining gaps: pre-call verification and the potential to cut off access. Nothing an agent needs in order to call this safely is missing.

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

Parameters3/5

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

Schema description coverage is 100% for both parameters, with 'name' sourced from list_interfaces and 'state' constrained to an up/down enum, so the schema does the heavy lifting. The description adds no format, naming, or default details beyond that, so the baseline 3 applies.

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?

States a specific verb pair ('enables or disables') and an unambiguous resource ('network interface'), with the scope clarified as administrative state. An agent can tell this apart from read-only siblings like get_interface or list_interfaces without opening a schema.

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 names a prerequisite step ('Confirm what the interface carries with get_interface before calling this'), which routes the agent to a sibling for verification. It lacks an explicit when-not-to-use clause or guidance on alternatives to reach the same outcome, so it falls short of a full 5.

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

update_deviceChange a deviceA
DestructiveIdempotent

Rename a device, allow or block its internet access, put it on a routing policy or a schedule, or set its traffic priority. Changes apply immediately but are NOT saved: a reboot discards them until save_config is called.

ParametersJSON Schema
NameRequiredDescriptionDefault
macYesMAC address of the device, any case.
nameNoNew name. Also registers the device.
accessNoAllow or block internet access.
policyNoPolicy name from list_policies.
priorityNoTraffic priority, 0 to 7.
scheduleNoSchedule name.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true; the description adds the crucial non-obvious trait that changes are volatile until save_config is called. It does not, however, note that blocking access can cut a device off the network or confirm idempotency, so it stops short of a 5.

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?

Two tight sentences: capabilities first, then the persistence caveat. Every clause earns its place and nothing is padded.

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 mutation tool with no output schema, the description covers the operation surface and the key side-effect (reboot discards unsaved changes), which is exactly what an agent needs before invoking. Annotations carry the safety profile.

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

Parameters3/5

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

Schema description coverage is 100% and each parameter is already documented (including enums for access and the 0-7 priority range), so the baseline is 3. The description's phrasing largely restates those parameter descriptions rather than adding new syntax or format detail.

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?

States a specific verb and resource plus the full set of mutable attributes (rename, access, policy, schedule, priority). An agent can immediately tell this apart from read-oriented siblings like get_device or list_devices.

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 condition for how results behave (changes apply immediately, need save_config to persist) and points to list_policies as the source for policy names. It lacks an explicit when-not-to-use statement, but the context is unambiguous for a manage-device operation.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 18 tool updatesv0.0.0-dev
    • First observedbackup_config
    • First observedcreate_segment
    • First observeddelete_segment
    • First observedget_config_state
    • First observedget_device
    • First observedget_interface
    • First observedget_internet_status
    • First observedget_system_info
    • First observedget_wifi_status
    • First observedlist_devices
    • First observedlist_interfaces
    • First observedlist_policies
    • First observedlist_routes
    • First observedlist_segments
    • First observedrci_call
    • First observedsave_config
    • First observedset_interface_state
    • First observedupdate_device

TDQS

A3.9/5.0

Scored across 18 tools

Disambiguation4/5

Tools are mostly distinct: get_device vs list_devices, get_interface vs list_interfaces, and get_wifi_status vs list_interfaces are clarified by descriptions. The raw rci_call could be used instead of specific tools but is explicitly positioned as a fallback, so misselection risk is low. Minor overlap between get_wifi_status and list_interfaces remains.

Naming Consistency4/5

All tool names are snake_case, and nearly all follow a verb_noun pattern (get_, list_, update_, set_, create_, delete_, backup_, save_). The outlier rci_call breaks the pattern slightly, but otherwise naming is highly predictable.

Tool Count4/5

18 tools is slightly above the ideal 3–15 range, but each tool targets a distinct router management operation (devices, interfaces, segments, config, diagnostics). The breadth reflects the complex domain, so the count is reasonable, though not minimal.

Completeness3/5

Core lifecycle for devices (list/get/update) and segments (list/create/delete) is present, and config save/backup are covered. However, notable gaps exist: no dedicated tools for modifying Wi-Fi settings, static routes, policies (only list), interface creation, or firmware/reboot; rci_call provides a workaround but the surface feels incomplete for common router tasks.

Maintenance

ActivityStale
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    A
    maintenance
    Enables AI agents to manage Keenetic routers through the same RCI API used by the router's web interface, working directly over the local network without cloud involvement. It supports reading device statuses and executing configuration changes, with confirm, dry-run, and destructive-action safeguards.
    23
    -