openwrt-luci-mcp
This server provides a read-only MCP interface to an OpenWrt/LuCI router over its native /ubus/ JSON-RPC API, exposing status and diagnostic data without SSH, without installing router-side agents, and without any configuration-changing tools.
Read router system info: board, firmware, kernel, uptime, load, memory, LuCI version, local time, and time services.
Inspect network state: logical interfaces, interface details, network devices, port status, VLAN/Switch config, active routes, neighbors, and policy rules.
Query DHCP and DNS: current DHCPv4/v6 leases, hostname/IP/MAC hints, dnsmasq/odhcpd settings, and DNS records.
Inspect Wi-Fi: configured radios/networks, radio status, associated clients, and on-demand scanning of nearby Wi-Fi.
Read firewall and nftables state: firewall zones, rules, forwardings, redirects, and filtered/paginated active nftables rules.
View system activity: procd services, bounded process lists, real-time interface/wireless/conntrack/load samples, conntrack connections, and bounded system/kernel logs.
Examine storage and packages: mounted filesystems with byte counts, installed/world package search, and LuCI installed/available package catalog browsing.
Run passive and active diagnostics: WAN/DNS/route consistency checks without probes, plus fixed non-configuring ping, traceroute, and DNS lookups with validated targets and immutable limits.
Perform security audit: checks for unsafe WAN input, management port forwards, HTTP-only LuCI, and SSH password authentication.
Produce a merged client inventory combining DHCP leases, host hints, and Wi-Fi associations.
List LuCI page coverage and allowed ubus method signatures via router_luci_pages and router_capabilities.
All tools return both JSON text and structuredContent; larger results support offset/limit pagination, and sensitive secrets (passwords, PSKs, tokens, keys) are hidden before returning data.
Provides read-only access to OpenWrt router status through the LuCI ubus JSON-RPC interface, including system info, network interfaces, routes, Wi-Fi clients and scans, DHCP leases, firewall status, logs, storage, packages, and security auditing.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@openwrt-luci-mcpShow me the current Wi-Fi clients and their signal strengths"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OpenWrt LuCI HTTP MCP
标准 OpenWrt LuCI Web 界面的只读 MCP 表达,通过 LuCI 原生 POST /ubus/ JSON-RPC 接口读取状态和运行其诊断页中的固定命令,不使用 SSH,也不在路由器上安装代理。
当前版本:0.4.0。以 OpenWrt 25.12.3 / LuCI openwrt-25.12 为 ground truth;可选方法不存在时返回明确的 supported: false,不会把权限或认证错误误报为不支持。
安全范围
使用现有 LuCI
root登录,不创建新账户。密码只从环境变量读取,不写入源码或日志。
不注册任意 ubus 调用、任意 shell、重启、固件升级或 UCI 写入工具。
ip、nft、dmesg、软件目录和网络诊断只执行代码中写死的程序与参数结构;不经过 shell。网络诊断只允许经过校验的目标,Ping 次数、Traceroute 超时和跳数均不可由调用者改变。
返回给模型前隐藏密码、PSK、community、令牌、会话标识、私钥、HTTP Authorization 和 URL 内嵌认证材料。
单次 LuCI 响应限制为 2 MiB,单个 MCP 结果限制为 256 KiB;超限返回有效 JSON 错误而非截断内容。
这只是 Demo。root 密码通过普通 HTTP 发送时没有传输加密,只应在可信 LAN 中临时测试。长期使用应开启 LuCI HTTPS,并改为受限 rpcd 账户。
Related MCP server: openwrt-mcp
环境要求
Node.js 20 或更高版本
OpenWrt/LuCI 可通过局域网访问
uhttpd-mod-ubus与rpcd正常工作
安装
cd C:\absolute\path\to\openwrt-luci-mcp-demo
npm install不要复制 .env.example 后把真实密码提交到 Git。推荐直接在 MCP 客户端的进程环境中设置变量:
OPENWRT_URL=http://router.example.invalid
OPENWRT_USERNAME=root
OPENWRT_PASSWORD=<LuCI root 密码>
OPENWRT_ALLOW_INSECURE_HTTP=1OPENWRT_ALLOW_INSECURE_HTTP=1 是显式风险确认。若 LuCI 已启用 HTTPS,请使用 https://... 并删除该变量。
运行
npm startstdio 是 MCP 协议通道;程序日志只写入 stderr。通常由 MCP 客户端启动本程序,而不是手动交互。
参考 mcp-config.example.json 配置客户端,并把其中的 Node 与 src/index.mjs 路径改为绝对路径。
工具
router_capabilitiesrouter_luci_pagesrouter_system_inforouter_interfacesrouter_interface_detailsrouter_routing_configrouter_network_devicerouter_port_statusrouter_vlan_configrouter_dhcp_leasesrouter_dhcp_configrouter_dns_configrouter_known_hostsrouter_wifi_overviewrouter_wifi_detailsrouter_wifi_clientsrouter_servicesrouter_processesrouter_realtime_statsrouter_routesrouter_neighborsrouter_firewall_statusrouter_firewall_configrouter_nftables_rulesrouter_wifi_scanrouter_logsrouter_connectionsrouter_storagerouter_packagesrouter_package_catalogrouter_time_statusrouter_system_settingsrouter_network_diagnosticsrouter_network_consistencyrouter_run_diagnosticrouter_security_auditrouter_client_summary
每个工具同时返回兼容的文本 JSON 和 MCP structuredContent。路由、DHCP/DNS、Firewall、VLAN、大型规则和软件目录使用 offset、limit 分页。
v0.4.0 增加 LuCI 网络配置控制面的只读表达:静态路由与策略规则、dnsmasq/odhcpd、DNS 记录、Firewall 关系、DSA/swconfig VLAN、基础 System 设置,以及配置与运行态一致性检查。工具只读取已提交配置;不会读取其他 LuCI 会话中尚未应用的 UCI 暂存变更。
router_network_diagnostics 只分析现有状态。router_run_diagnostic 对应 LuCI Network → Diagnostics 页面,会产生 Ping、Traceroute 或 DNS 流量,但不修改配置。router_package_catalog 只调用 LuCI package manager 的 list-installed 和 list-available,不更新软件源。
LuCI 页面覆盖
LuCI 页面 | MCP 工具 | 状态 |
Status → Overview |
| supported |
Status → Realtime Graphs |
| supported |
Status → Routes |
| supported |
Status → System Log |
| supported |
Status → Processes |
| supported |
Status → Firewall |
| supported |
Network → Interfaces |
| supported |
Network → Switch/VLAN |
| supported/conditional |
Network → Wireless |
| supported |
Network → Routing |
| supported |
Network → DHCP |
| supported |
Network → DNS |
| supported |
Network → Diagnostics |
| supported |
Network → Firewall Configuration |
| supported |
System → System |
| supported |
System → Software |
| supported |
System → Mount Points |
| supported |
同一矩阵可由 router_luci_pages 读取。Switch/VLAN 仅在 DSA bridge-vlan 或旧 swconfig 配置存在时支持。WireGuard、SQM、UPnP 等可选 LuCI 应用不在 v0.4.0 范围内。
没有提供以下能力:
uci.set / uci.delete / uci.apply
任意 file.exec / file.write / file.remove
system.reboot
luci.setPassword
hostapd.*.del_client测试
27 项测试使用本机模拟 /ubus/ 服务,不连接或修改真实路由器:
npm test一次性真实连接检查
在 PowerShell 中使用安全密码提示,不把密码写入文件:
$secure = Read-Host 'LuCI root password' -AsSecureString
$ptr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
try {
$env:OPENWRT_PASSWORD = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr)
$env:OPENWRT_URL = 'http://router.example.invalid'
$env:OPENWRT_USERNAME = 'root'
$env:OPENWRT_ALLOW_INSECURE_HTTP = '1'
npm run check:live
}
finally {
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ptr)
Remove-Item Env:OPENWRT_PASSWORD -ErrorAction SilentlyContinue
}该检查只调用 system.board、system.info 和 luci.getVersion。
目标路由器核验范围
通过已登录 LuCI 页面确认以下模块在目标路由器上存在且可正常读取,没有出现 RPC access denied:
活动 IPv4/IPv6 路由、策略规则和邻居表
nftables
fw4运行时状态系统日志
Wi-Fi 信道分析
软件包管理器
网络诊断
静态路由、DHCP/DNS 与 Firewall 配置
DSA/bridge-vlan 与基础 System 设置
实现方法与 OpenWrt 25.12 使用的 LuCI/rpcd 接口保持一致;若将来更换固件或裁剪 LuCI 软件包,可调用 router_capabilities 和 router_luci_pages 核对实际支持情况。
Available Tools
30 toolsrouter_capabilitiesARead-onlyIdempotent
List method signatures for the read-only ubus objects allowed by this MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the context that these are the methods 'allowed by this MCP server', implying a restricted set. It does not contradict annotations, but it adds little beyond what annotations provide. There is no description of output format or side effects, though side effects are covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with no wasted words. The key information (listing method signatures, read-only scope, server allowance) is front-loaded, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with annotations covering safety, the description is largely sufficient. However, since there is no output schema, the agent is left to infer what 'list method signatures' returns exactly—whether it's a flat list of signatures, a mapping of object names to signatures, or something else. This ambiguity could affect how the agent interprets the response. Additional clarification on the response format would make it completely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is 100% (empty properties object). There is nothing for the description to explain about parameters. The baseline of 4 for 0-parameter tools is appropriate; the description does not need to compensate for any undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and a precise resource ('method signatures for the read-only ubus objects allowed by this MCP server'). It clearly distinguishes itself from sibling tools that query actual router data (stats, routes, neighbors, etc.) by focusing on available method signatures rather than data itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for discovering what read-only ubus methods are available on this server, which contrasts with the data-returning sibling tools. However, it does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions (e.g., 'use this before calling other tools to see allowed methods'). The context is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_client_summaryARead-onlyIdempotent
Merge DHCP leases, LuCI host hints, and Wi-Fi associations into one client inventory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds meaningful behavioral context by indicating that the tool merges and reconciles three different client data sources into one inventory, which is more than a simple fetch and clarifies the tool's integration behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that starts with the action verb and immediately states the inputs and output concept. Every word contributes meaning, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only, idempotent summary tool, the description provides the essential information: what data sources are merged and what the result represents. It could be slightly more explicit about the output shape (e.g., what fields a client entry contains), but the core invocation context is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter documentation burden to carry. The description does not need to add parameter semantics, and the schema is fully consistent with the tool being a no-input summary operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Merge') and names the exact resources being combined (DHCP leases, LuCI host hints, Wi-Fi associations) into a single client inventory. This clearly differentiates it from sibling tools like router_dhcp_leases and router_wifi_clients, which each return individual data sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied but not explicit. The description suggests the tool is for obtaining a unified client inventory, and an agent can infer it should be used instead of querying multiple individual source tools. However, it does not explicitly state when to choose this over alternatives or mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_connectionsARead-onlyIdempotent
Get a bounded snapshot of active conntrack entries.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context by saying the result is a bounded snapshot, which signals a point-in-time view with a size limit. It does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the action and scope. Every word adds meaning, and there is no unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter and strong annotations, the description is nearly sufficient. The main gaps are the lack of explicit return-shape information and no direct comparison to sibling tools, but these are minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not explicitly explain the `limit` parameter, but 'bounded' hints at it. The schema fully documents `limit` with default, minimum, and maximum values, so the agent can invoke the tool correctly despite the lack of description-level parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a specific resource ('active conntrack entries'), and 'bounded snapshot' further clarifies scope. This clearly distinguishes it from sibling tools like router_routes, router_neighbors, or router_firewall_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for viewing current connection-tracking entries, but it does not explicitly state when to prefer this tool over alternatives or when not to use it. There is enough context to infer the general purpose, but no explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_dhcp_leasesARead-onlyIdempotent
Get current DHCPv4 and DHCPv6 leases.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety. The description adds the behavioral detail that leases are 'current' (live), but says nothing about return format or edge cases. With annotations carrying the safety profile, this is acceptable though minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no wasted words. The resource and scope are front-loaded and entirely relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only, non-destructive tool, the description sufficiently identifies what is retrieved. It does not detail the output structure, but no output schema exists and the resource name conveys the expected result. Minor gaps around empty results or formatting exist but are not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and parameter schema coverage is trivially 100%. The description adds no parameter information, which is unnecessary. Baseline 4 for zero-parameter tools applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and exact resource ('current DHCPv4 and DHCPv6 leases'), which clearly distinguishes it from sibling tools like router_client_summary or router_connections. It is specific and avoids tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use when you need current DHCP leases. However, it does not explicitly mention when to prefer this over the many sibling router status tools, nor does it name alternatives. The context is clear but the guidance is not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_firewall_statusARead-onlyIdempotent
Get a read-only summary of firewall defaults, zones, forwardings, redirects, and rules from UCI.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description reinforces this with 'read-only summary.' It adds useful behavioral context by specifying 'from UCI,' clarifying that the tool returns configuration data rather than live firewall state. It also states the scope as a 'summary' rather than exhaustive detail, which goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action and resource immediately. Every word contributes value, listing the specific firewall components covered without waste. It is highly scannable and appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless, read-only tool, the description adequately covers the context by enumerating the expected content areas: defaults, zones, forwardings, redirects, and rules. There is no output schema, so a bit more detail on the response structure could be helpful, but the listed components give an agent a clear expectation of what will be returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the input schema is an empty object, so the schema fully covers parameter semantics. According to the rubric, a baseline of 4 applies when there are no parameters. The description does not need to add parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' and a specific resource: 'read-only summary of firewall defaults, zones, forwardings, redirects, and rules from UCI.' It clearly identifies what the tool does and distinguishes it from siblings like router_nftables_rules or router_security_audit, which serve different firewall-related purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its usage: when a read-only firewall configuration summary is needed. However, it does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives such as router_nftables_rules for live/nftables details. No exclusions are stated, so the context is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_interface_detailsARead-onlyIdempotent
Get the read-only LuCI interface status view for one logical interface.
| Name | Required | Description | Default |
|---|---|---|---|
| interface | Yes | Logical interface name, for example wan or lan |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description repeats the read-only intent already stated by readOnlyHint=true and does not contradict annotations. It adds the 'LuCI status view' framing, but no further behavioral details such as what happens if the interface does not exist or whether data is a snapshot; annotations already cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one short, front-loaded sentence with no filler. Every word contributes to the tool's purpose and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one documented parameter, read-only annotations, and a single-interface scope, the description is mostly complete. The only missing piece is a brief indication of what fields the status view contains, but no output schema exists and 'status view' reasonably conveys the return nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% because the 'interface' parameter is already documented as a logical interface name with examples. The description adds no parameter-specific detail beyond the schema, so it meets the baseline for high coverage but does not enhance it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), a clear resource ('LuCI interface status view'), and a singular scope ('one logical interface'), so an agent can tell it targets a single interface rather than all interfaces. It does not explicitly name sibling tools like router_interfaces, so it lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one logical interface' gives clear context for when to invoke this tool: when a single interface's status is needed. It does not explicitly mention alternative tools or exclusion conditions, but the singular scope usefully implies not to use it for listing all interfaces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_interfacesARead-onlyIdempotent
Get the current status of all logical network interfaces.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is read-only, idempotent, and non-destructive. The description adds modest context by specifying the scope as 'current status' across 'all logical' interfaces, but it does not disclose the output structure or edge cases such as empty results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler or redundancy; every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 thorough safety annotations, the description is nearly sufficient. The main gap is the lack of any indication about the shape or fields of the returned status, which would be useful since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there are no parameter semantics for the description to explain. This aligns with the baseline for parameterless tools and requires no additional compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Get') and a bounded resource ('the current status of all logical network interfaces'). The qualifiers 'all logical' clearly distinguish this from physical port or single-interface/detail tools like router_port_status and router_interface_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when the current status of all logical interfaces is needed. However, it does not explicitly mention alternatives or exclusion cases, and with closely related siblings like router_interface_details, explicit guidance would have been valuable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_known_hostsARead-onlyIdempotent
Get LuCI host hints that correlate hostnames, IP addresses, and MAC addresses.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the LuCI host-hints source and the nature of the data, but does not disclose potential staleness, cache behavior, or whether it reflects live network state. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It names the verb, resource, and data content compactly, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 this is workable, but there is no output schema and the description does not state the return shape (e.g., list of objects with hostname/ip/mac fields). It also omits caveats about data freshness or the distinction between host hints and active DHCP leases, which would matter for correct selection and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so the description carries no parameter burden. Baseline for zero parameters is 4, and the description adds useful meaning about what the returned data represents, which is more than the empty schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Get') and resource ('LuCI host hints') and specifies the data dimensions (hostnames, IP addresses, MAC addresses). It is not a tautology and gives a concrete idea of what the tool returns, though it does not explicitly differentiate itself from sibling tools like router_dhcp_leases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: an agent can infer this tool is appropriate when it needs LuCI's host hint correlations. However, the description provides no explicit when-to-use guidance, exclusions, or mention of alternatives such as router_neighbors or router_dhcp_leases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_logsARead-onlyIdempotent
Read a bounded tail of system or kernel logs. Kernel access uses only the fixed command /bin/dmesg -r.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | ||
| source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the tool as read-only, idempotent, and non-destructive, so the description does not need to restate those. It adds valuable context by disclosing that kernel access is restricted to a fixed command, /bin/dmesg -r, which rules out arbitrary command execution or privileged paths.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The core action is front-loaded, and the security-relevant fixed-command constraint earns its place as the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two well-schematized parameters and strong annotations, the description gives enough information for an agent to invoke it correctly. The main omission is that no output shape is described, but for a log-tail tool this is relatively minor and no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry semantic weight. It does clarify that 'source' maps to system or kernel logs and that 'lines' controls a bounded tail, but it never explicitly ties 'bounded tail' to the lines parameter or explains the numeric bounds beyond what the schema's default/min/max already show.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and a precise resource ('bounded tail of system or kernel logs'), making the tool's function immediately clear. The kernel-specific note about /bin/dmesg -r further distinguishes the kernel log path from general system logging.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of any of the many router_* siblings, nor are there exclusions or prerequisites. The fixed-command note is about operational safety, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_luci_pagesARead-onlyIdempotent
List the standard LuCI pages represented by this MCP server and their implementation status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety expectations. The description adds useful context beyond those annotations by indicating the result will include not just pages but also their implementation status, which helps the agent understand what the tool returns. There is no contradiction, and the behavior of a read-only list operation is simple enough that no further disclosure is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence that front-loads the verb and resource, then adds the relevant detail about implementation status. There is no redundant wording or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only listing tool, the description is fully complete: it states what is listed and what information is provided. The empty schema and strong annotations handle the remaining calling context, and no output schema is needed for an agent to know what to expect from this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema confirms this with empty properties. Per the calibration baseline for tools with no parameters, the description does not need to explain parameter semantics, and it does not attempt to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and identifies a clear resource (standard LuCI pages represented by this MCP server) plus what is reported about them (implementation status). It is easily distinguished from the sibling tools, which cover network statuses, diagnostics, and system information rather than a server page inventory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes that this tool is for discovering which standard LuCI pages the server exposes and their implementation status. It does not explicitly name alternatives or exclusion conditions, but no sibling tool appears to overlap with this purpose, so the usage context is clear enough without needing to rule out alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_neighborsARead-onlyIdempotent
Get the current IPv4 ARP and IPv6 NDP neighbor tables using two fixed read-only ip commands.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the annotations by stating the operation uses 'fixed read-only ip commands' and returns 'current' tables, conveying determinism and non-mutating behavior. This adds context beyond the readOnlyHint, idempotentHint, and destructiveHint annotations, though it does not describe potential edge cases like empty tables or command failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the action and resource, then adds the read-only execution detail. Every element earns its place and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only, idempotent lookup tool, the description is sufficiently complete. It identifies the exact data returned and the read-only nature of the operation, though a bit more detail about the output shape or command behavior could further help, but this is not critical given the tool's simplicity and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema already documents this completely. With no parameters to explain, the description appropriately focuses on what the command fetches rather than parameter details, exceeding the baseline for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb 'Get', the resource ('current IPv4 ARP and IPv6 NDP neighbor tables'), and the mechanism ('two fixed read-only ip commands'). This clearly distinguishes the tool from siblings like router_routes or router_known_hosts by naming the exact neighbor-table data being fetched.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear what the tool retrieves, so an agent can infer when to use it for neighbor table information. However, it does not explicitly mention when to prefer this tool over alternatives such as router_routes or router_known_hosts, and it provides no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_network_deviceBRead-onlyIdempotent
Get status and counters for one network device such as eth0 or br-lan.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Network device name, for example eth0 or br-lan |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds that the tool returns status and counters for one device, slightly expanding the contract, but it does not mention counter semantics (e.g., cumulative, per-boot), error behavior for unknown device names, or whether status includes link state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence conveys the operation, scope, and examples without wasted words. Everything in the description earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one fully documented parameter and safety annotations, the description is nearly complete. The only notable omission is a more concrete statement of what 'status and counters' includes, but an agent can correctly invoke this tool based on the provided text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains the name parameter with the same examples (eth0, br-lan). The tool description repeats these examples but adds no semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('status and counters for one network device'), with concrete examples (eth0, br-lan). It distinguishes this from list-style siblings by emphasizing 'one,' but it does not explicitly differentiate from similarly scoped tools like router_interface_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this over siblings, such as router_interfaces for a list, router_realtime_stats for live metrics, or router_interface_details for fuller interface details. There are no prerequisites, exclusions, or alternative routing statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_network_diagnosticsARead-onlyIdempotent
Perform passive diagnostics of WAN state, addressing, DNS, default routes, uptime, and Wi-Fi without sending probes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds the valuable behavioral guarantee of 'without sending probes,' which is not captured by those annotations. It gives the agent confidence that invocation has no active network side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence front-loads the action and scope while ending with the key behavioral constraint. Every word adds value and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only diagnostic tool, the description is complete: it states the tool's purpose, its passive nature, and the specific network domains covered. No further information is needed for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema, so parameter documentation is not needed. The description compensates by enumerating what diagnostic areas are covered, which is the only relevant semantic information for invoking the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('perform passive diagnostics') and names the exact resources involved: WAN state, addressing, DNS, default routes, uptime, and Wi-Fi. This clearly distinguishes it from sibling tools like router_run_diagnostic by emphasizing passivity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes a clear usage context: passive diagnostics without sending probes. It implies this is the safe, non-intrusive option versus active diagnostics, though it does not explicitly name alternatives or state when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_nftables_rulesARead-onlyIdempotent
Get a filtered, paginated read-only view of the active nftables rules, sets, maps, and counters.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | ||
| limit | No | ||
| table | No | ||
| family | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context by specifying that it shows 'active' rules (not just configured ones) and that the view is 'filtered' and 'paginated', which goes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one efficient sentence that front-loads the verb and resource, includes key qualifiers ('filtered', 'paginated', 'read-only', 'active'), and contains no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 undocumented parameters and no output schema, so a complete description would need to explain parameter relationships and the return shape. While the description names the resources and mentions filtering/pagination, it lacks details on how filters interact, pagination defaults, or what the output contains, making it adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 5 parameters, so the description must compensate by explaining their meaning. It only hints at 'filtered' and 'paginated' behavior without mapping them to the chain, table, family, limit, and offset parameters, leaving the agent to infer which parameters correspond to which behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a precise resource ('active nftables rules, sets, maps, and counters'), which clearly distinguishes it from sibling tools like router_firewall_status or router_routes. The qualifier 'filtered, paginated read-only view' further clarifies the tool's exact scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The resource name and description imply the tool is for nftables-related inspection, but there is no explicit statement of when to use this tool vs alternatives, nor mention of any exclusions. Sibling tools like router_firewall_status could overlap conceptually, and no guidance is given to differentiate them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_package_catalogARead-onlyIdempotent
Browse the installed and available package catalog shown by LuCI without updating, installing, or removing packages.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| scope | No | installed | |
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context about the LuCI catalog and reinforces that no package mutations occur, but it does not disclose behavior around pagination, query matching, or result structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that front-loads the core action and then adds the key non-obvious context about package mutations. Every phrase earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only browse tool with strong annotations, the description is mostly sufficient, but gaps remain: no output schema, no parameter explanations, and no mention of pagination/filtering behavior. An agent could call it correctly, but would be uncertain about the exact meaning of query and result formatting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters. It only hints at the scope dimension by mentioning 'installed and available', but leaves limit, query, and offset entirely unexplained; these are not self-evident beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Browse') and the resource ('package catalog shown by LuCI'). It explicitly scopes the tool to installed and available packages and contrasts it with updating, installing, or removing packages, making it easy to distinguish from package-management siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description communicates a clear read-only browsing context and signals when this tool is appropriate relative to mutation operations. It does not explicitly name an alternative sibling like router_packages, but the 'without updating, installing, or removing' phrasing effectively conveys the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_packagesARead-onlyIdempotent
Search the installed/world package list and return a bounded result.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the description only needs to add context beyond that. It adds 'bounded result' and the installed/world scope, but does not explain query matching behavior, ordering, or pagination. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Every word contributes to scope ('installed/world') or outcome ('bounded result').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only search with two optional parameters and no output schema, the description gives the core purpose but leaves query behavior and result shape unspecified. It is minimally viable but has clear gaps an agent would need to make confident calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for documenting query and limit. 'Search' and 'bounded result' only hint at the parameters without explaining query matching semantics or how the bound is applied. This is insufficient for a tool with undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Search' and identifies the resource as the 'installed/world package list', which distinguishes this tool from the sibling router_package_catalog (available packages). It clearly states the operation and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'installed/world package list' implies this tool is for installed packages rather than the catalog, but the description never explicitly says when to use it versus alternatives or lists exclusions. Usage guidance is largely inferred from the resource wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_port_statusARead-onlyIdempotent
Get the LuCI overview port table with bridge/VLAN, link, counters, zones, and optional PoE state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as readOnlyHint=true, idempotentHint=true, and destructiveHint=false; the description's 'Get' is consistent with those. It adds context about the returned content but does not disclose details like whether the PoE state is hardware-dependent, how current the counters are, or any response-size caveat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence delivers the verb, resource, and key output fields with no filler. It is front-loaded and every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only status tool, the description is largely complete: it names the exact table and its data fields. The only minor gap is that 'optional PoE state' is not explained (e.g., when it is present), and there is no explicit mention of the return shape, but the annotations cover safety and no parameters need clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero properties, and the description references the optional PoE state without claiming a parameter to toggle it. With no parameters to document, the baseline is 4; the description correctly focuses on the result content instead of inventing parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a precise resource ('the LuCI overview port table'), then enumerates the returned data categories (bridge/VLAN, link, counters, zones, optional PoE state). This is distinct from sibling tools like router_interface_details or router_realtime_stats because it targets a particular LuCI overview table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool returns but gives no guidance about when to prefer it over sibling tools. There are no alternatives named, no exclusions, and no context such as 'use for port-level visibility'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_processesARead-onlyIdempotent
Get a bounded snapshot of running processes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds the 'bounded' behavior, which is useful, but it does not disclose output shape, pagination behavior, or any operational nuances beyond the schema's limit parameter. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence that front-loads the core action and scope. Every word earns its place, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only snapshot tool with one well-constrained parameter and safe annotations, the description is largely sufficient. It could be more complete by hinting at the returned process fields (e.g., PID, command), but the scope and bounded nature are clear enough for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'limit' is not described in the description, but the JSON schema provides clear type, default, minimum, and maximum constraints. The word 'bounded' weakly reinforces the limit parameter's purpose, but the description does not meaningfully compensate for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get a bounded snapshot of running processes' uses a specific verb and resource, clearly identifying the tool as a process-list reader. It also distinguishes itself from siblings like router_services and router_system_info by focusing on running processes and a bounded snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention that this is for current running-process state, nor does it contrast with related tools such as router_services or router_system_info. The usage context is only implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_realtime_statsBRead-onlyIdempotent
Get LuCI bandwidth, wireless, conntrack, or load samples.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| device | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds minor context by framing the data as 'samples' from LuCI, but it does not disclose output format, device behavior, or any other behavioral traits 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the tool's purpose and lists all major modes. There is no filler, repetition, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low schema coverage, no output schema, and the large set of sibling tools, the description leaves important gaps: it does not explain the 'device' parameter, describe return values, or clarify how this relates to similar status/detail tools. An agent could call it correctly for 'mode' but is left guessing about the optional parameter and expected result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It partially covers the 'mode' parameter by listing the four sample categories, though it uses 'bandwidth' where the schema says 'interface'. It says nothing about the optional 'device' parameter, so a non-trivial part of the invocation is left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Get') and specific resource ('LuCI bandwidth, wireless, conntrack, or load samples'), and enumerates the main modes. It does not explicitly differentiate from sibling tools like router_wifi_overview or router_interface_details, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus the many sibling tools that also report router status, interface details, or wireless information. The description merely states what it returns, not why an agent should choose it over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_routesARead-onlyIdempotent
Get active IPv4/IPv6 routes and policy rules using fixed read-only ip commands.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds useful operational context by stating it uses fixed read-only ip commands and covers both IPv4 and IPv6, which clarifies the tool's deterministic, non-mutating behavior without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence that front-loads the action and resource. Every word conveys useful information, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple parameterless read-only query with no output schema, the description provides sufficient context for correct invocation: it names the resource, the scope, and the non-mutating implementation. There are no missing inputs or complex behaviors that would require additional explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to explain about inputs. The baseline of 4 for parameterless tools applies, and the description does not need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a clear resource ('active IPv4/IPv6 routes and policy rules'), making the tool's function immediately obvious. This distinguishes it from sibling tools focused on interfaces, neighbors, WiFi, or diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the tool is for retrieving route and policy rule information, giving a clear context in which it applies. It does not explicitly name alternative tools or exclusions, but the resource-specific scope is enough for an agent to select it appropriately among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_run_diagnosticARead-onlyIdempotent
Run the fixed, non-configuring Ping, Traceroute, or DNS command used by the LuCI diagnostics page.
| Name | Required | Description | Default |
|---|---|---|---|
| family | No | ||
| target | Yes | ||
| operation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds useful behavioral context with 'fixed, non-configuring', clarifying that the command does not modify router state and is not interactive or configurable. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tight sentence that front-loads the action and the key qualifiers ('fixed', 'non-configuring'). Every word earns its place; there is no filler or repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and annotations cover safety, but the description omits parameter details and return behavior. For a diagnostic command runner, an agent would benefit from knowing that 'target' is an address or hostname and whether output is raw command output. The description is minimally viable but has gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate by explaining the parameters. It names operation values Ping, Traceroute, and DNS, which maps to the 'operation' enum, but it says nothing about 'target' or 'family'. An agent would still be left guessing what target format is expected or how family is used.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Run') and a clear resource: the fixed, non-configuring Ping, Traceroute, or DNS command used by the LuCI diagnostics page. It conveys what the tool does and hints at its scope, though it does not explicitly differentiate it from the sibling 'router_network_diagnostics'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context that this tool executes the same diagnostic commands as the LuCI diagnostics page, which implies when an agent would use it. However, it does not explicitly state when not to use it or name alternative tools, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_security_auditARead-onlyIdempotent
Run a read-only audit for unsafe WAN input, management port forwards, HTTP-only LuCI, and SSH password authentication.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly says 'read-only audit,' which aligns with the annotations readOnlyHint=true, idempotentHint=true, and destructiveHint=false. However, it adds little behavioral context beyond what the annotations already provide; it does not disclose output format, permissions, or what happens when issues are found. This is acceptable given the strong annotation coverage, but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately identifies the operation ('read-only audit') and then lists the specific checks. Every word earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-input, read-only audit tool, the description is largely complete: it names the audit areas and is backed by clear annotations. The absence of an output schema means the description might ideally mention what the returned result looks like, but the verb 'audit' strongly implies a report of findings, so this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to explain about inputs. The schema coverage is effectively 100% and the description correctly implies that invoking this tool requires no arguments. A baseline of 4 is appropriate for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Run'), a clear resource ('router security audit'), and enumerates the concrete audit categories: unsafe WAN input, management port forwards, HTTP-only LuCI, and SSH password authentication. This clearly distinguishes it from sibling tools like router_firewall_status or router_luci_pages, which are more general or unrelated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended use case clear: perform a read-only security audit of specific router security concerns. It does not explicitly name alternatives or exclusion conditions, but the audit scope and read-only nature give an agent enough context to select it over real-time stats, logs, or configuration tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_servicesARead-onlyIdempotent
Get procd service status. This tool cannot start, stop, or restart services.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral context beyond those by explicitly stating the tool cannot alter service state, which is a useful operational boundary for the agent. It does not elaborate on return format, but the safety profile is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no fluff. The core purpose is front-loaded, and the key limitation is stated immediately after. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only status tool, the description is nearly complete: it states the resource, the operation, and the key limitation. It does not describe the shape of the returned status information, but for this simple scope and with annotations covering safety, the gap is minor. The agent can safely call this tool without additional clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema and description are both complete by default. The description does not need to add parameter-level detail because there are none to document. The baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a clear resource ('procd service status'), making the tool's purpose immediately understandable. The explicit statement that it cannot start, stop, or restart services further distinguishes it from service-management tools. This is clear enough to separate from its many router_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when not to use the tool: it cannot start, stop, or restart services. This gives the agent a firm exclusion for mutation attempts, though it does not name an alternative tool for those actions. The context is otherwise clear for a status-checking tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_storageARead-onlyIdempotent
Get mounted filesystems with total, available, and free byte counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), and the description is consistent with them. The description adds return-content context (byte counts for mounted filesystems) but does not disclose edge behavior such as whether virtual/pseudo filesystems are included or whether any mount access is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 11-word sentence with no filler. The verb is front-loaded, and every detail (resource and three data fields) earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the description adequately covers what the tool does and what it returns. With no output schema present, the description carries the return-shape burden and meets it by naming the three byte counts, though it omits minor optional details like filesystem type filtering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The empty schema is trivially fully covered, and no parameter-level semantics need to be explained in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a concrete resource ('mounted filesystems') and states the returned data (total, available, free byte counts). This clearly differentiates it from the 29 siblings, which cover routes, neighbors, wifi, logs, services, and other distinct domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, nor any mention of prerequisites or exclusions. Given the large sibling group, an agent must infer appropriate usage purely from the resource name rather than receiving any routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_system_infoARead-onlyIdempotent
Get board, firmware, kernel, load, memory, uptime, and LuCI version information.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true, idempotentHint true, and destructiveHint false. The description adds value by enumerating the exact categories of information returned (board, firmware, kernel, etc.), which goes beyond the annotations and gives the agent a precise expectation of the response content. No contradictions 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundancy. The verb and resource are front-loaded, and the enumerated fields are carefully chosen to be both comprehensive and compact. Every word contributes to the agent's understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only system info tool with no parameters and no output schema, the description fully specifies what the agent will get. It lists all relevant information categories (board, firmware, kernel, load, memory, uptime, LuCI version), which is sufficient for an agent to decide to call it and interpret the result. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the description does not need to explain parameter semantics. Per the rubric, a 0-parameter tool gets a baseline of 4. The description's list of fields further clarifies what the agent will receive, so no additional parameter explanation is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'system info' with a specific enumeration of fields: board, firmware, kernel, load, memory, uptime, and LuCI version. This distinguishes it from sibling tools like router_realtime_stats or router_routes, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. With 29 sibling tools, an agent cannot know whether to pick this over more specific ones (e.g., router_realtime_stats for real-time data, router_storage for disk usage). No exclusions or conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_time_statusARead-onlyIdempotent
Get router local time, uptime, timezone-related system configuration, and time service status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which fully communicate the safe read-only nature. The description agrees with these annotations and adds specificity about the data returned, but it does not provide additional behavioral details such as output format or response characteristics beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the verb and primary resource, then efficiently enumerates the specific data categories. Every phrase contributes meaning and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no parameters, no output schema, and clear annotations, the description is complete. It enumerates all the information categories returned—local time, uptime, timezone configuration, and time service status—which is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty with 100% coverage, so there is nothing for the description to add about parameter semantics. The baseline for a zero-parameter tool is 4, and the description appropriately focuses on the output rather than inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and identifies a clear resource: router local time, uptime, timezone-related configuration, and time service status. This cleanly separates it from the sibling tools, none of which focus on time information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states exactly what information the tool returns, so an agent can infer when to choose it: whenever router time, uptime, timezone settings, or time service status is needed. It does not name alternatives, but no sibling tool appears to cover this same domain, so explicit exclusions are less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_wifi_clientsARead-onlyIdempotent
List clients associated with one wireless interface, for example phy1-ap0.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | Wireless interface name, for example phy1-ap0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds the useful scoping detail that the operation targets one wireless interface, but it does not disclose edge-case behavior such as empty client lists or invalid interface names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that states the operation, the target resource, and a concrete example. Every word earns its place, and the key scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and no output schema, the description gives enough context for an agent to call it correctly: what it lists and on which interface. It could mention result format or error behavior, but given the tool's simplicity and strong annotations, the current description is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the 'device' parameter is already described as 'Wireless interface name, for example phy1-ap0'. The tool description repeats the same example and adds no new semantic information beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List clients') and the specific resource scope ('one wireless interface'), with a concrete interface example. It is unambiguous and meaningful, though it does not explicitly compare itself to sibling tools like router_wifi_overview or router_client_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this tool when you need clients for a particular wireless interface. However, it does not state when not to use it or mention any alternative tool, leaving some routing decisions to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_wifi_detailsARead-onlyIdempotent
Get the LuCI wireless status view including radio details, frequencies, and associated clients.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | Optional wireless interface, for example phy1-ap0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds useful context by identifying the underlying source (LuCI status view) and the broad output categories, but it does not discuss response formatting, device filtering behavior, or any operational constraints 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one focused sentence with no filler. The main action and resource are front-loaded, and the content details are presented compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional, fully documented parameter and rich annotations, the description adequately conveys what will be returned: radio details, frequencies, and associated clients. It does not specify the exact response structure, but this is acceptable given the low complexity and the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the single optional parameter with a description and example ('Optional wireless interface, for example phy1-ap0'), so schema coverage is 100%. The tool description does not add additional parameter meaning, but the schema is sufficient on its own.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a specific resource ('LuCI wireless status view'), then enumerates the content: radio details, frequencies, and associated clients. This distinguishes it from nearby siblings like router_wifi_overview, router_wifi_clients, and router_wifi_scan even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as router_wifi_overview, router_wifi_clients, or router_wifi_scan. The description states what it returns but gives no context for choosing it over similar wireless tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_wifi_overviewARead-onlyIdempotent
Get configured wireless radios and networks without returning UCI secrets.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds a meaningful behavioral safeguard: it explicitly promises not to return UCI secrets. This is valuable privacy-oriented context beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence that front-loads the core purpose and adds a key safety qualifier. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description sufficiently explains what the tool returns for a zero-parameter read-only endpoint. It lacks details about the exact shape or depth of the overview, but given the absence of an output schema and the simplicity of the tool, the information provided is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so no parameter documentation is needed. The description does not need to compensate for missing parameter information, and the baseline for zero-parameter tools applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Get') and resource ('configured wireless radios and networks'), and the scope is explicitly defined. It distinguishes itself from real-time or client-focused sibling tools by emphasizing 'configured' rather than live state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving configuration-level wireless information, but it does not explicitly state when to prefer this over router_wifi_details, router_wifi_clients, or other wireless-related siblings. There are no explicit exclusions or alternative routing instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_wifi_scanARead-onlyIdempotent
Scan nearby Wi-Fi networks on one interface or every interface reported by iwinfo without changing wireless configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | Optional wireless interface, for example phy1-ap0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds a useful behavioral note ('without changing wireless configuration') and the iwinfo dependency, but it does not disclose potential scan latency or the shape of the returned network list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence carries the action, scope, and safety guarantee with no filler. The critical information is front-loaded and every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: one optional parameter, no output schema, and strong annotations. The description tells the agent exactly what the tool does, how the parameter behaves, and that it is non-mutating, which is sufficient to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the optional device parameter, and the description reinforces that the parameter selects a single interface while omission means all interfaces. This clarifies the default behavior beyond the schema's 'optional' label.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Scan nearby Wi-Fi networks') plus a clear scope ('one interface or every interface'). This distinguishes it from sibling Wi-Fi tools like router_wifi_overview and router_wifi_clients, which inspect existing state rather than discover nearby networks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: call when you need to discover reachable Wi-Fi networks, optionally constrained to a specific interface. It does not name alternatives or spell out when not to use it, but the scanning semantics provide enough contextual guidance for an agent to select it appropriately.
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.
30 tool updates
v0.3.0- First observed
router_capabilities - First observed
router_client_summary - First observed
router_connections - First observed
router_dhcp_leases - First observed
router_firewall_status - First observed
router_interface_details - First observed
router_interfaces - First observed
router_known_hosts - First observed
router_logs - First observed
router_luci_pages - First observed
router_neighbors - First observed
router_network_device - First observed
router_network_diagnostics - First observed
router_nftables_rules - First observed
router_package_catalog - First observed
router_packages - First observed
router_port_status - First observed
router_processes - First observed
router_realtime_stats - First observed
router_routes - First observed
router_run_diagnostic - First observed
router_security_audit - First observed
router_services - First observed
router_storage - First observed
router_system_info - First observed
router_time_status - First observed
router_wifi_clients - First observed
router_wifi_details - First observed
router_wifi_overview - First observed
router_wifi_scan
TDQS
Scored across 30 tools
Most tools target distinct network/system domains (routes, neighbors, firewall, WiFi, DHCP, packages), and descriptions are precise. The only mild confusions are `router_wifi_details` vs `router_wifi_clients` and `router_network_diagnostics` vs `router_run_diagnostic`, but the descriptions make the differences clear.
All tools share a consistent `router_` prefix and use snake_case noun phrases organized by domain. The convention is uniform; `router_run_diagnostic` introduces a verb but still follows the same overall pattern.
With 30 tools, the set exceeds the practical limit for easy agent selection and includes many low-level status endpoints that could be consolidated into grouped retrieval tools. Although the domain is broad, 30 tools is too many for a cohesive MCP surface.
The tool surface covers all major read-only OpenWrt/LuCI domains: interfaces, routes, WiFi, firewall, logs, system stats, packages, clients, diagnostics, and security. No obvious dead ends or missing core read-only operations exist for a status/diagnostics MCP server.
Maintenance
Related MCP Connectors
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
- InfrapageOAuthpage.infra
Read-only access to your Infrapage dashboards: pages, widgets, live values, weekly recaps.
Read-only local AI advice, shared reports and website audits. No PC scan or local actions.
Read-only Bitcoin blockchain, mempool, mining, market, and on-chain analytics; no API key.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables management and control of OpenWrt devices via a simple API, including reboot, status checks, log reading, and LED control.51-
- AlicenseNot gradedqualityCmaintenanceProvides full administrative control of OpenWRT routers via SSH, with a preview-confirm safety model for mutating operations.13 npmMIT
- AlicenseAqualityDmaintenanceEnables AI assistants to read-only monitor iStoreOS/OpenWRT routers via SSH or HTTP/ubus API, providing 31 tools for system status, network info, logs, and plugin status (OpenClash, Passwall, AdGuardHome, etc.).31MIT
- FlicenseNot gradedqualityDmaintenanceAllows you to interact with an OpenWrt router via SSH, enabling command execution, file operations, and system info retrieval.-