MikroTik MCP
Provides tools for managing MikroTik RouterOS routers and switches, including checking system status, listing interfaces, routes, firewall rules, DHCP leases, wireless clients, reading logs, running diagnostics, creating backups, rebooting, and changing RouterOS configuration through the REST or binary API.
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., "@MikroTik MCPShow my router's interfaces and any firewall rules blocking traffic"
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.
MikroTik MCP Server: manage RouterOS routers with Claude and AI assistants
MikroTik MCP is an open-source Model Context Protocol (MCP) server that connects Claude, and any other MCP-compatible AI assistant, to MikroTik RouterOS routers and switches. In plain language you can check router status, list interfaces, routes, firewall rules, DHCP leases and Wi-Fi clients, read logs, ping and traceroute, block IP addresses, back up the configuration, and change any RouterOS setting.
Quick facts
What it is: an MCP server (stdio) written in TypeScript for Node.js 20+.
Works with: Claude Desktop, Claude Code, Cursor, VS Code, Windsurf and any MCP client.
Supports: RouterOS v7 through the REST API, and RouterOS v6 and v7 through the binary API (ports 8728/8729).
Hardware: any MikroTik device running RouterOS, including hAP, hEX, RB, CCR, CRS, cAP, wAP and Cloud Hosted Router (CHR).
Safety: read-only mode, per-device permissions, and confirmation hints on destructive tools.
No WinBox needed: it uses MikroTik's documented APIs, which expose the same configuration as WinBox and the terminal.
License: MIT.
It talks to the router over RouterOS's own documented interfaces:
Transport | RouterOS | Port | Service to enable |
| v7.1+ | 443 (HTTPS) / 80 |
|
| v6 and v7 | 8728 / 8729 (TLS) |
|
Both expose the full configuration tree that WinBox and the terminal use, so every menu (/ip/..., /interface/..., /routing/..., /queue/..., ...) is reachable.
Tools
Generic (any menu path)
Tool | What it does |
| Read any menu, with filters and property selection |
| Add an item to any menu |
| Change an item (by |
| Remove an item |
| Enable or disable an item |
| Run any command ( |
Curated
Tool | What it does |
| Configured routers |
| Identity, version, board, CPU/RAM/disk, uptime, clock, health, packages |
| Interfaces with state and counters |
| IPv4/IPv6 addresses |
| Routing table |
| filter / nat / mangle / raw rules with counters |
| DHCP leases |
| Wi-Fi registration table (wifi, wifiwave2, wireless, CAPsMAN) |
| ARP entries and discovered neighbors |
| Recent log entries, filterable by topic or text |
| Diagnostics from the router |
| Add a firewall rule, optionally above an existing one |
| Add/remove addresses in firewall address lists (block/allow hosts) |
| Save a |
| Reboot (requires |
Write tools carry MCP readOnlyHint: false / destructiveHint annotations so clients can ask before running them.
Related MCP server: MikroTik MCP
Install
Requires Node.js 20+.
git clone https://github.com/RexGuard/MikroTik-MCP.git
cd mikrotik-mcp
npm install # also builds into dist/Prepare the router
Create a dedicated user rather than using admin. For a read-only assistant use the built-in read group; for changes use full (or a custom group).
/user group add name=mcp policy=read,write,api,rest-api,test,ping,reboot,policy,sensitive
/user add name=mcp group=mcp password=CHANGE-ME
# RouterOS v7 REST API (HTTPS needs a certificate on www-ssl)
/certificate add name=self common-name=router
/certificate sign self
/ip service set www-ssl certificate=self disabled=no
# or the binary API (v6/v7)
/ip service set api disabled=no address=192.168.88.0/24Restrict the service address= to the network the MCP server runs on.
Configure
One router (environment variables)
Variable | Default | Meaning |
| — | Router IP or hostname |
|
| User name |
| empty | Password |
|
|
|
| 443 / 80 / 8728 / 8729 | Override the port |
|
| Use HTTPS / API-SSL |
|
| Accept self-signed certificates |
|
| Block every write tool |
|
| Request timeout |
Several routers
Point MIKROTIK_CONFIG at a JSON file (see examples/devices.example.json) or put the same array in MIKROTIK_DEVICES. Every tool then takes an optional device argument; the first device is the default. Each device can set "readOnly": true.
Use with Claude
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"mikrotik": {
"command": "node",
"args": ["/path/to/mikrotik-mcp/dist/src/index.js"],
"env": {
"MIKROTIK_HOST": "192.168.88.1",
"MIKROTIK_USERNAME": "mcp",
"MIKROTIK_PASSWORD": "CHANGE-ME",
"MIKROTIK_INSECURE": "true"
}
}
}
}Claude Code
claude mcp add mikrotik \
-e MIKROTIK_HOST=192.168.88.1 -e MIKROTIK_USERNAME=mcp -e MIKROTIK_PASSWORD=CHANGE-ME -e MIKROTIK_INSECURE=true \
-- node /path/to/mikrotik-mcp/dist/src/index.jsThen ask things like:
"What's the CPU load and uptime on my router?"
"Which devices are on Wi-Fi right now?"
"Block 203.0.113.5 for one day."
"Show me the NAT rules and explain what each one does."
"Make a backup before we change anything."
Safety
Start with
MIKROTIK_READ_ONLY=trueuntil you trust the setup.Use a dedicated RouterOS user with only the policies you need.
Firewall, bridge and address changes can lock you out. Consider Safe Mode or run
mikrotik_backupfirst.The plain binary API (8728) sends the password unencrypted; prefer REST over HTTPS or API-SSL (8729) outside a trusted LAN.
Development
npm test # builds and runs the test suite against an in-memory mock RouterOS (REST and binary API)Why not reverse engineer WinBox?
WinBox, the mobile app and the web UI all drive the same RouterOS configuration tree that the REST API and the binary API expose, and those APIs are documented and stable across versions. Using them gives the same feature coverage without depending on undocumented, encrypted WinBox protocol details that can change between releases.
FAQ
How do I connect Claude to a MikroTik router?
Install this server, enable the REST API (www-ssl) or the API service on the router, and add the server to Claude Desktop or Claude Code with the router's address and a RouterOS user (see Use with Claude). Claude can then query and configure the router in plain language.
Does it work with RouterOS 6?
Yes. Set MIKROTIK_TRANSPORT=api to use the binary API, which works on RouterOS v6 and v7. The REST API transport needs RouterOS v7.1 or newer.
Does it work with ChatGPT, Cursor or other AI tools?
It works with any client that supports the Model Context Protocol, including Claude Desktop, Claude Code, Cursor, VS Code (GitHub Copilot agent mode) and Windsurf. Use the same command, args and env settings shown for Claude Desktop.
Can it run on the MikroTik router itself?
Not from the RouterOS console. It runs on your computer (or any machine that can reach the router) and connects to the router over the network. Running it inside a RouterOS 7 container is possible on ARM, ARM64 and x86 models but is not packaged yet.
Is it safe to let an AI change my router configuration?
Use a dedicated RouterOS user with limited policies, start with MIKROTIK_READ_ONLY=true, and make a backup with mikrotik_backup before changes. Write and destructive tools are marked so MCP clients can ask for confirmation, and mikrotik_reboot requires an explicit confirm: true.
Can it manage more than one router?
Yes. List several devices in MIKROTIK_CONFIG or MIKROTIK_DEVICES and pass device to any tool. Each device can be read-only or read-write.
What can I ask it?
Examples: "Why is my internet slow?", "Which devices are using the most bandwidth?", "Show the firewall rules and find anything risky", "Block this IP for a day", "Add a port forward for 8080 to 192.168.88.10", "Which Wi-Fi clients have a weak signal?", "Back up the config".
Related
License
MIT. MikroTik and RouterOS are trademarks of MikroTik SIA. This project is not affiliated with or endorsed by MikroTik.
Available Tools
22 toolsmikrotik_addAdd a RouterOS itemB
Add an item to any RouterOS menu (/<path> add ...). Returns the new item's .id.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | RouterOS menu path, e.g. "/ip/address", "/interface/bridge/port" or "ip firewall filter". | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| properties | Yes | Item properties as in the CLI, e.g. {"address": "10.0.0.1/24", "interface": "ether2"}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds real value by disclosing the return value (the new item's .id), which matters because no output schema exists. It says nothing about duplicate creation on repeat calls, whether the item is enabled by default, or how invalid paths/properties fail.
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 sentences, front-loaded with the action and the CLI equivalent, with zero filler. Nothing could be removed without losing information.
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 generic write tool against a live router with no output schema, the definition is minimally adequate: the schema covers inputs fully and the return value is stated. It is missing guidance on failure modes, on the generic-vs-specialized tool choice, and on the live-impact of the write, which an agent would want before invoking.
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 `path` formats, `device` defaulting, and the free-form `properties` object with an example. The description adds no parameter meaning beyond this, so the baseline 3 applies. The nested `properties` pass-through, the most error-prone parameter, is not elaborated further.
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 gives a specific verb+resource ('Add an item to any RouterOS menu') and even shows the equivalent CLI form `/<path> add ...`, which makes the scope concrete. It is distinguishable from mikrotik_set/mikrotik_remove by the verb, but never names those siblings explicitly, 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 statement of when to use this generic add versus overlapping siblings such as mikrotik_firewall_add_rule (purpose-built) or mikrotik_run_command (which can also issue `add` commands). The only implicit guidance is 'any menu', which leaves the agent guessing at the boundary cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_address_listManage firewall address listsC
Add or remove an address in a firewall address list (commonly used to block or allow hosts).
| Name | Required | Description | Default |
|---|---|---|---|
| ipv6 | No | ||
| list | Yes | ||
| action | Yes | ||
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| address | Yes | IP, range, subnet or DNS name | |
| comment | No | ||
| timeout | No | Auto-expire, e.g. "1h" or "1d" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds nothing behavioral: it does not say whether adding an existing entry duplicates or errors (notably with idempotentHint=false), how removal behaves when the entry is absent, or that timeout creates auto-expiring entries.
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 zero filler. It is efficient, though its brevity comes at the cost of the missing detail flagged in other dimensions.
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 7-parameter mutating tool with no output schema and under half of parameters documented, one sentence is not enough. An agent gets no information on list creation, duplicate handling, removal semantics, or what the response contains.
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 only 43% across 7 parameters. The description mentions no parameters at all, leaving 'list', 'action' (the enum), 'comment', and 'ipv6' undocumented in both places, so it fails to compensate for the coverage gap.
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 pair (add/remove) and resource (firewall address list), plus the typical intent (block/allow hosts). It is clearly narrower than the generic siblings mikrotik_add/mikrotik_remove, but the description never names those siblings to make the distinction explicit.
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 parenthetical 'commonly used to block or allow hosts' explains intent, not tool selection. There is no guidance on when to use this versus mikrotik_add, mikrotik_remove, or mikrotik_firewall_add_rule, and no stated prerequisites (e.g. whether the list must already exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_arp_tableARP table and neighborsARead-onlyIdempotent
List ARP entries and discovered neighbors (MNDP/CDP/LLDP) to see which hosts are on the network.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return (default 200). | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| interface | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered elsewhere. The description adds real value by disclosing that results merge ARP entries with MNDP/CDP/LLDP neighbor discovery, which explains why the output may contain hosts outside the ARP table. It does not mention truncation behavior or that rows are capped, so it stops short of a 4.
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 zero filler; the resource comes first and the rationale trails it. Nothing is redundant with the title or schema.
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 listing tool with no output schema and no required parameters, the description is adequate but leaves the undocumented 'interface' filter and the shape of returned rows (address, MAC, interface, neighbor protocol) unexplained. An agent can call it correctly but cannot predict the response fields.
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 67%: limit and device are well documented in the schema, but the 'interface' parameter has no description anywhere and the description never compensates for it. The description adds no parameter meaning beyond the schema, so the 3 baseline for high-ish coverage 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?
States a specific verb ('List') and precise resource ('ARP entries and discovered neighbors'), plus names the discovery protocols (MNDP/CDP/LLDP). This lets an agent distinguish it from mikrotik_dhcp_leases or mikrotik_ip_addresses, though it doesn't explicitly name those siblings as the alternatives.
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 trailing clause 'to see which hosts are on the network' implies the use case, but there is no explicit when-to-use-vs-alternatives guidance despite several overlapping siblings (dhcp_leases, wireless_clients, ip_addresses) that also answer 'which hosts exist'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_backupCreate a backupA
Save a binary backup (.backup) and/or a text export (.rsc) of the configuration to the router's file system.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Base file name (default: mcp-backup-<timestamp>) | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| password | No | Encrypt the binary backup with this password | |
| exportScript | No | Also write a text export (<name>.rsc) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds real value beyond annotations by disclosing the side effect's location: files are written to the router's own file system (not downloaded to the caller). However, with idempotentHint=false it never warns that an existing file of the same name may be overwritten, nor does it mention possible size/time cost of a full config backup, which are the traits an agent most needs.
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; the action, both artifact types, and the destination are all in the first clause.
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?
With no output schema, the description should say what the agent gets back (created file names/paths, or confirmation) and whether a backup can overwrite an existing file; neither is covered. For a write tool that creates persistent files, this leaves a meaningful gap, though the schema carries the parameter detail well.
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%, so all four parameters (name, device, password, exportScript) are already documented in the schema, making 3 the baseline. The description's only added meaning is the pairing of 'binary backup' with password encryption and 'text export' with exportScript, which is useful but already inferable from 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?
States a specific verb (Save) and resource (binary .backup and/or text .rsc configuration export) plus the destination (the router's file system). No sibling tool does backups, so no differentiation is needed, but the description never says how this relates to the read-oriented siblings (e.g., that it writes rather than reads config).
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 is only implied: the 'and/or' phrasing hints that either artifact can be produced, and the schema's exportScript default covers the choice, but there is no explicit when-to-use context (e.g., before upgrades), no prerequisite that a device must be configured, and no guidance on when a password-protected binary backup is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_dhcp_leasesList DHCP leasesARead-onlyIdempotent
List DHCP server leases (IP, MAC, hostname, status), optionally for one DHCP server.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return (default 200). | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| server | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered structurally. The description usefully enumerates the returned fields but says nothing about pagination limits, whether dynamic/static leases are both included, or behavior when a device/server is unreachable. With annotations carrying the behavioral load, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that gives the resource, the returned fields, and the optional scoping filter with zero 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 simple read-only list tool with no output schema, the description appropriately names the returned fields, which the structured data does not provide. Minor gaps remain around pagination defaults and error behavior, but nothing essential to calling it correctly 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?
Schema coverage is 67%; device and limit are well documented in the schema. The undocumented `server` parameter is partially compensated by "optionally for one DHCP server," but neither source explains the expected identifier format or what happens if the server name is unknown.
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 and resource (list DHCP leases) and names the returned fields (IP, MAC, hostname, status), which distinguishes it from mikrotik_arp_table and mikrotik_ip_addresses by implication. It stops short of explicitly naming a sibling alternative, so it isn't a full 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?
The phrase "optionally for one DHCP server" hints at when to pass the server filter, but there is no explicit guidance on when to use this tool versus mikrotik_arp_table, mikrotik_ip_addresses, or generic mikrotik_print. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_firewall_add_ruleAdd a firewall ruleB
Add a firewall rule. properties takes any rule property (src-address, dst-port, protocol, in-interface, connection-state, to-addresses, ...). Use placeBefore with a rule .id to insert it above an existing rule; otherwise it is appended to the end of the table.
| Name | Required | Description | Default |
|---|---|---|---|
| ipv6 | No | ||
| chain | Yes | ||
| table | No | filter | |
| action | Yes | e.g. "accept", "drop", "reject", "masquerade", "dst-nat", "add-src-to-address-list" | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| comment | No | ||
| properties | No | ||
| placeBefore | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-readonly, non-idempotent, open-world write. The description adds a useful behavioral fact the annotations don't: default append position and the ordering effect of placeBefore. It omits other traits such as the default device selection, and what happens on invalid properties (RouterOS may reject or silently ignore).
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, front-loaded with the purpose, each carrying distinct information about properties and placement. Slight name-restating in the opening clause, but nothing wasteful.
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 an 8-parameter mutation tool with no output schema and a nested free-form object, the description covers the two most subtle parameters but leaves half the surface (chain vs table vs ipv6 interplay, device default, action semantics) to the schema, which itself is thinly described.
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 only 25%, so the description needs to compensate. It does add genuine meaning for `properties` (accepts any RouterOS rule property, with examples) and `placeBefore` (takes a rule .id), but leaves chain, action, table, device, ipv6, and comment undocumented in prose.
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 and resource ('Add a firewall rule'), which distinguishes it from the sibling mikrotik_firewall_rules (listing) and from mikrotik_set (modification). It doesn't explicitly name the siblings it differs from, but the operation is 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 gives clear guidance for the placement decision — use placeBefore to insert above an existing rule, otherwise it is appended — which is real when-to-use advice. It offers no guidance on how this relates to generic siblings like mikrotik_add or mikrotik_set, or when to prefer this over editing an existing chain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_firewall_rulesList firewall rulesBRead-onlyIdempotent
List firewall rules in order (filter, nat, mangle or raw), including packet/byte counters.
| Name | Required | Description | Default |
|---|---|---|---|
| ipv6 | No | ||
| chain | No | e.g. "input", "forward", "srcnat", "dstnat" | |
| limit | No | Maximum rows to return (default 200). | |
| table | No | filter | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered structurally. The description adds that rules come back in evaluation order and include packet/byte counters, which is genuine value. It says nothing about device scoping, ordering guarantees across tables, or truncation 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?
A single front-loaded sentence with no filler; the table list and the counters note are the two facts an agent most needs.
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?
With no output schema, the description's mention of counters partially covers return content, and annotations cover safety. But for a five-parameter tool spanning multiple devices, tables, chains and an ipv6 switch, the description leaves truncation, default-device scoping and ipv6 behavior unexplained.
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?
At 60% schema coverage the baseline is 3, and the description roughly holds there: it echoes the table enum values and the notion of order, but a rule's ordering relative to chain/ipv6 selection is unaddressed. The undocumented ipv6 parameter and the semantics of chain filtering are not compensated for.
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?
Specific verb+resource ("List firewall rules") with the enumerated tables and a note that counters are included, which tells an agent exactly what it gets back. It is implicitly the read counterpart to mikrotik_firewall_add_rule, but it never names or contrasts that sibling.
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 statement of when to use this versus mikrotik_print, mikrotik_firewall_add_rule, or other table-listing siblings, and no prerequisites. The read-only intent is only inferable from the verb "List".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_interfacesList interfacesBRead-onlyIdempotent
List interfaces with type, running/disabled state, MAC, MTU and traffic counters.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by type, e.g. "ether", "bridge", "vlan", "wlan", "wifi", "wg", "pppoe-out". | |
| limit | No | Maximum rows to return (default 200). | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| running | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so safety is covered. The description adds value by disclosing what data comes back (state, MAC, MTU, traffic counters), which matters since there is no output schema, but says nothing about pagination, truncation, or the cost of collecting counters.
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, front-loaded with the verb and resource, zero filler. It is efficient but thin enough that the space saved is not spent on routing or filter clarification.
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?
Four optional params and no output schema, so the description should carry return-value and filter meaning. It covers return fields adequately but leaves usage routing, the 'running' filter, and the default-device behavior to the schema or nothing at all.
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 75%, so baseline is 3. The description does not clarify the parameters; worse, 'type' and 'running' read as returned fields rather than as filters, leaving the 'running' filter (the one undocumented schema param) undefined anywhere.
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?
Specific verb ('List') plus resource ('interfaces'), and it enumerates the fields returned (type, running/disabled, MAC, MTU, counters). That distinguishes it from siblings like mikrotik_ip_addresses or mikrotik_routes by resource, though no sibling is named explicitly.
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 statement of when to use this versus alternatives such as mikrotik_print or mikrotik_list_devices. The only routing hint in the whole definition is inside the schema's 'device' parameter, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_ip_addressesList IP addressesBRead-onlyIdempotent
List IPv4 (or IPv6) addresses assigned to interfaces.
| Name | Required | Description | Default |
|---|---|---|---|
| ipv6 | No | ||
| limit | No | Maximum rows to return (default 200). | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| interface | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered structurally. The description adds nothing beyond that baseline — no pagination behavior, no note that results are capped, no indication of per-device scoping — so it neither informs nor contradicts.
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. Nothing is wasted, though the brevity contributes to the gaps in the other dimensions.
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 four-parameter, no-output-schema read tool, the description covers the core purpose but leaves the interface filter and IPv6 toggle unexplained and says nothing about result limits or device defaulting. It is minimally adequate rather than 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 50%: 'limit' and 'device' are documented in the schema, while 'ipv6' and 'interface' are not. The parenthetical '(or IPv6)' hints at the ipv6 toggle but never explains its boolean semantics, and the 'interface' filter is not described at all, so the description fails to compensate for the coverage gap.
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 gives a specific verb ('List') and resource ('IPv4/IPv6 addresses assigned to interfaces'), which is clearer than the bare title. It does not differentiate itself from nearby siblings such as mikrotik_interfaces or mikrotik_address_list, so an agent must infer which listing tool to pick.
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 statement of when to use this tool versus mikrotik_interfaces, mikrotik_address_list, or mikrotik_print, and no mention of prerequisites or filtering scenarios. The only implicit guidance is that it is a read/listing operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_list_devicesList MikroTik devicesARead-only
List the MikroTik routers this server is configured to manage (no credentials are returned).
| 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 openWorldHint=false, so the safety profile is covered. The description adds genuinely new context — that the result is limited to devices the server is configured to manage and that no credentials are returned — which is meaningful for an agent deciding whether it needs a separate auth step. No pagination or result-size behavior is disclosed.
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 with zero padding, front-loaded with the verb and resource. The parenthetical security note is short and 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 trivial zero-parameter read tool with annotations covering safety, the description gives enough to call it correctly. The only minor gap is that no output schema exists and the description does not indicate what fields a device entry contains (name, host, id), which an agent may need to interpret the response.
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 there is nothing to document; the schema is empty and fully described. Baseline for a no-parameter tool is 4.
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 (list) and resource (MikroTik routers this server is configured to manage), which is concrete and distinct from the operational siblings like mikrotik_print or mikrotik_system_overview. It does not explicitly contrast itself with those siblings, which keeps it at 4 rather than 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?
Usage is only implied: an agent can infer this is the discovery entry point before calling per-device tools. There is no explicit 'use this when...' or note about what to do with the returned device identifiers, and no exclusion of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_logsRead system logARead-onlyIdempotent
Read the most recent system log entries, optionally filtered by topic or text.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of newest entries (default 100). | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| topics | No | Only entries whose topics contain this, e.g. "firewall", "dhcp", "error". | |
| contains | No | Case-insensitive text search in the message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds useful behavior by specifying that results are the *most recent* entries (an implicit newest-first ordering), but it says nothing about truncation, how many entries exist, or what a log entry contains.
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 wasted clauses; the ordering constraint comes first and the optional filters follow it.
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 low-complexity read-only tool with full parameter documentation and complete annotation coverage, this is nearly sufficient. The only remaining gap is the return shape (fields per log entry), which matters somewhat 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?
Schema coverage is 100% and all four parameters carry descriptions, so the schema does the heavy lifting. The description confirms that topics and text filtering are optional, but adds no syntax or semantics beyond what the schema already provides for limit, device, topics and contains.
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 and resource ("Read the most recent system log entries") and adds the filtering scope, so it is clearly the log-reading tool rather than the generic mikrotik_print or the system_overview sibling. It does not name a sibling explicitly, but the resource is distinctive enough to be told apart.
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 "optionally filtered by topic or text" implies when the filters are appropriate, but there is no explicit guidance on when to choose this over mikrotik_print or the other read-only inspection tools, nor any stated prerequisites (device reachability, permissions).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_pingPing from the routerARead-onlyIdempotent
Ping a host from the router itself (useful to test connectivity from a specific interface or source address).
| Name | Required | Description | Default |
|---|---|---|---|
| vrf | No | VRF to ping from (RouterOS v7) | |
| count | No | ||
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| address | Yes | ||
| interface | No | ||
| srcAddress | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds that execution originates on the router rather than the MCP host, which is genuinely useful context, but it says nothing about timeouts, likely latency or packet-loss results, or how the default count of 4 is applied.
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 with the core action front-loaded and the parenthetical earning its place by adding usage context. Nothing is repeated from the title or restated without 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 6-parameter diagnostic tool with no output schema and no return-value documentation, the description should say what comes back (latency, loss, per-packet results) and how the device default is resolved. It covers the core action adequately but leaves an agent guessing about results and several parameters.
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 only 33% — address, interface, srcAddress, and count are undocumented in the schema. The description partially compensates by surfacing the interface and source-address concepts, hinting at what those two parameters do, but leaves count and address semantics unaddressed, so it is a partial rather than complete 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?
States a specific verb and resource ('ping a host') and disambiguates direction by saying 'from the router itself', which separates it from pinging the router. It does not name the nearest sibling (mikrotik_traceroute), so it falls short of full 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 parenthetical gives a positive use case ('test connectivity from a specific interface or source address'), which is real guidance. However, it offers no exclusions and no mention of the obvious alternative, mikrotik_traceroute, for path diagnosis rather than reachability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_printRead any RouterOS menuARead-onlyIdempotent
Print items from any RouterOS menu path (the equivalent of /<path> print in the terminal or opening a window in WinBox). Use this for anything without a dedicated tool, e.g. /ip/dns, /interface/bridge/port, /ip/ipsec/peer, /routing/ospf/neighbor, /queue/simple, /user.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | RouterOS menu path, e.g. "/ip/address", "/interface/bridge/port" or "ip firewall filter". | |
| limit | No | Maximum rows to return (default 200). | |
| query | No | Raw RouterOS API query words for advanced filters, e.g. ["dynamic=false", "#!"] or [">rx-byte=1000"]. | |
| where | No | Equality filters, e.g. {"type": "ether", "disabled": false}. | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| properties | No | Only return these properties, e.g. [".id", "name", "running"]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. The description adds the useful equivalence to `/<path> print`, but says nothing about output volume, the 200-row default cap, or what happens on an invalid path — gaps for a tool that can return up to 5000 rows.
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 sentences, both front-loaded: first sentence establishes the operation and the terminal analogy, second gives the selection rule and examples. Nothing repeats the name or the schema.
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 catch-all read tool with no output schema, an agent would benefit from knowing the return shape (rows of properties, .id presence) and that results are capped/filterable. The description stops at what the command is equivalent to, leaving output and error behavior to be inferred.
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% and each of the six parameters is documented inline, including path examples, limit default, query syntax and where semantics. The description adds only the convenience that path is expressed like a terminal menu path, so baseline 3 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?
Names a specific verb ('Print items') and a fully general resource ('any RouterOS menu path'), and anchors it with the terminal/WinBox equivalents. It also explicitly separates itself from the dedicated sibling tools by scoping itself to 'anything without a dedicated tool'.
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?
Gives an explicit selection rule ('use this for anything without a dedicated tool') plus concrete example paths (/ip/dns, /interface/bridge/port, /user) that show the intended fallback role. An agent can decide when to reach for this versus mikrotik_interfaces or mikrotik_firewall_rules without opening any schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_rebootReboot the routerADestructive
Reboot the router. The connection will drop for about a minute. Always confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| confirm | Yes | Must be true to confirm the reboot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real information the agent cannot get elsewhere: the connection drops for roughly a minute, and user confirmation is mandatory. It stops short of saying whether the device comes back automatically or whether in-flight config is lost.
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?
Three short sentences, zero filler, with the action and its impact front-loaded and the safety instruction last. Every sentence carries distinct information.
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 two-parameter destructive action with no output schema, the description covers the action, its observable effect, the downtime window, and the human-in-the-loop requirement. Only a note on post-reboot state or failure behavior 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?
Schema coverage is 100%, so both the 'device' default behavior and the const-true 'confirm' guard are already documented in the schema. The description adds no parameter detail beyond that, which is acceptable at full 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?
States a specific verb and resource ('Reboot the router') in the first sentence. No sibling tool performs reboots, so the action is unambiguous against the long list of mikrotik_* diagnostic and config tools.
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?
Gives an explicit precondition ('Always confirm with the user first') that governs whether the agent may invoke at all. It doesn't name alternatives, but no sibling offers a comparable action, so there is little to disambiguate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_removeRemove a RouterOS itemADestructive
Remove an item (/<path> remove <id>), identified by id or a where filter matching exactly one item.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| path | Yes | RouterOS menu path, e.g. "/ip/address", "/interface/bridge/port" or "ip firewall filter". | |
| where | No | Equality filters, e.g. {"type": "ether", "disabled": false}. | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare `destructiveHint: true`, `idempotentHint: false`, and `openWorldHint: true`. The description adds a meaningful behavioral safety rule: the item is removed by `id` or by a `where` filter that matches exactly one item, which helps prevent accidental mass deletion. It omits details about permissions, irreversibility, and response behavior, but the annotations carry much of that burden.
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. The action and command syntax come first, followed by the key targeting constraint.
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 destructive mutation tool with rich annotations and no output schema, the description supplies enough to call it correctly: `path` is required, and the target is selected by `id` or an exactly-one-match `where` filter. It could say more about confirmation/irreversibility, but the annotations already signal destructiveness.
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 75%, so the schema already documents `path`, `where`, and `device`. The description adds useful semantics beyond the schema by clarifying that the target is identified either by `id` or by a `where` filter matching exactly one item.
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 ('Remove'), resource ('item'), and even the RouterOS command form, with identification by `id` or a `where` filter. It does not explicitly contrast with siblings like `mikrotik_run_command` or `mikrotik_set`, so it stops short of the sibling-differentiation bar for 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?
The description gives an important selection constraint: a `where` filter must match exactly one item. However, it provides no explicit when-to-use/when-not guidance and does not name alternatives such as `mikrotik_run_command` or `mikrotik_set`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_routesList routesARead-onlyIdempotent
List the IPv4 (or IPv6) routing table, optionally only active routes or a single destination.
| Name | Required | Description | Default |
|---|---|---|---|
| ipv6 | No | ||
| limit | No | Maximum rows to return (default 200). | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| activeOnly | No | ||
| dstAddress | No | e.g. "0.0.0.0/0" for default routes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered. The description adds the meaningful scope fact that it returns the routing table and can be narrowed, but says nothing about result volume, pagination, or the default device fallback that affects what data comes back.
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-formed sentence with the resource front-loaded and the optional modes trailing. No filler or restatement of the title.
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 list tool with no output schema, the description covers what is returned and the optional filters. The only gap is the default-200/pagination and default-device behavior, which the schema partially covers.
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 60% and already documents limit, device and the dstAddress example. The description only adds loose meaning for the undocumented ipv6 and activeOnly flags ('IPv4 (or IPv6)', 'only active routes') without formats or edge cases.
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 (list) and resource (IPv4/IPv6 routing table) with the optional narrowing filters named inline. It is clearly the routes tool among the siblings, though it never explicitly contrasts itself with generic readers like mikrotik_print.
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 optional 'activeOnly' and 'single destination' modes imply when the filters are used, but there is no explicit when-to-use vs when-to-use-an-alternative guidance or prerequisite note (e.g. that device defaults to the first configured device).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_run_commandRun any RouterOS commandBRead-onlyIdempotent
Run an arbitrary RouterOS command, e.g. /system/script/run, /interface/ethernet/monitor (with once=yes), /ip/dhcp-server/lease/make-static, /tool/fetch. Commands that never finish (monitor, torch, ping without count) must be given once or count/duration arguments. On read-only devices only print/get/monitor/ping/traceroute style commands are allowed.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Command arguments, e.g. {"interface": "ether1", "once": true}. | |
| limit | No | Maximum rows to return (default 200). | |
| query | No | Raw API query words (for print-like commands). | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| command | Yes | Full command path, e.g. "/system/script/run" or "/interface/monitor-traffic". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description supplies real behavioral context beyond the annotations, notably the hang risk on monitor/torch/ping without `once`/`count` and the read-only-device command whitelist. However, it also advertises mutating commands (/ip/dhcp-server/lease/make-static, /system/script/run, /tool/fetch) and frames the read-only restriction as a per-device property, which contradicts the readOnlyHint=true, destructiveHint=false and idempotentHint=true 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?
Three sentences, front-loaded with the capability and its examples, then the two operational caveats. The example list is slightly long but each example illustrates a distinct command shape (script, monitoring, mutation, fetch), so no sentence is wasted.
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?
With no output schema and a nested `args` object, the description covers invocation pitfalls well but leaves open what a failed command returns, how output is formatted/truncated at the 200-default/5000-max row limit, and why a specialized sibling tool would be safer. Given the tool can mutate device state despite read-only annotations, that omission matters.
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%, so `command`, `args`, `query`, `limit` and `device` are already documented with examples and a default. The description reinforces `args` by demonstrating `once=yes`, but adds no semantics for `query`, `limit` bounds, or `device` resolution beyond what the schema states.
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 and resource ('Run an arbitrary RouterOS command') and anchors it with four concrete command examples spanning script, monitor, DHCP and fetch operations. It is clear what the tool does, but with 20 sibling tools that already encapsulate discrete operations (mikrotik_print, mikrotik_add, mikrotik_set, mikrotik_ping), it never says when this generic escape hatch should be preferred over 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?
Usage is implied through imperative constraints: non-terminating commands must receive `once` or `count`/`duration`, and read-only devices restrict the command set. This is genuinely actionable guidance, but there is no routing rule telling the agent to use the specialized siblings first and fall back here only when no dedicated tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_setChange a RouterOS item or settingA
Change properties of an item (/<path> set <id> ...). Identify the item by id (e.g. "*1F") or a where filter matching exactly one item. For singleton menus such as /system/identity, /ip/dns or /ip/cloud omit both.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Item .id, e.g. "*1F". For most menus the item name also works. | |
| path | Yes | RouterOS menu path, e.g. "/ip/address", "/interface/bridge/port" or "ip firewall filter". | |
| where | No | Equality filters, e.g. {"type": "ether", "disabled": false}. | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| properties | Yes | Item properties as in the CLI, e.g. {"address": "10.0.0.1/24", "interface": "ether2"}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnly=false, idempotent=false, destructive=false, openWorld=true), and the description adds the constraint that a `where` filter must match exactly one item and that singleton menus need no identifier. It stops short of saying what happens on multi-match (error vs silent partial apply), whether unrelated properties are preserved, or what the call returns.
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?
Three tight sentences: the operation, the identification strategy, then the singleton exception. The CLI form is front-loaded and every clause carries operational information with no 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 5-parameter mutation tool with no output schema, the description covers identification and the singleton edge case well. It is slightly thin on result behavior (what the response contains, whether the item is re-read after the change) and on error conditions when a filter matches zero or many items.
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%, so baseline is 3, but the description adds semantics the schema does not encode: the mutual-exclusivity/omission rule for `id` and `where` in singleton menus, and the requirement that a filter resolve to exactly one item. That is real decision-making value beyond the per-parameter text.
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+resource ("Change properties of an item") and grounds it in the underlying RouterOS CLI form (`/<path> set <id> ...`), which unambiguously separates it from mikrotik_add and mikrotik_remove. It does not explicitly name the closest siblings (mikrotik_set_enabled for a single boolean, mikrotik_run_command for arbitrary CLI), so it falls short of full 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 description explains how to target the item (id, or a where filter matching exactly one item, or neither for singleton menus), which is genuinely actionable guidance. However it gives no guidance on when to prefer this over mikrotik_set_enabled or mikrotik_run_command, and no exclusions such as bulk edits across many matches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_set_enabledEnable or disable a RouterOS itemA
Enable or disable an interface, firewall rule, route, user, etc. Identify it by id or a where filter.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| path | Yes | RouterOS menu path, e.g. "/ip/address", "/interface/bridge/port" or "ip firewall filter". | |
| where | No | Equality filters, e.g. {"type": "ether", "disabled": false}. | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| enabled | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/idempotency/open-world profile, and the description usefully adds the range of item types affected. However, for a mutation tool it omits the key behavioral question: what happens when a `where` filter matches zero or multiple items (bulk toggle vs error), and whether the change is immediate and persistent.
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 short sentences with the action front-loaded and the targeting mechanism second; 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?
With five parameters including a nested free-form `where` object, no output schema, and destructive-adjacent consequences (disabling a firewall rule or interface), the definition should say more about match cardinality and failure modes. As written it is callable but leaves real ambiguity for a mutation 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?
Schema coverage is 60%, with `path`, `where`, and `device` documented inline; the description only adds the framing that `id` and `where` are alternative identification mechanisms. It does not clarify whether they are mutually exclusive, what happens if both are supplied, or why `path` is required alongside `id`.
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 pair (enable/disable) and the resource family it acts on (interface, firewall rule, route, user), so the action is unambiguous. It is implicitly distinct from the generic sibling mikrotik_set, but the description never names that sibling or states the contrast explicitly.
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 targeting guidance (identify by `id` or a `where` filter), which is useful, but it never says when to prefer this tool over mikrotik_set or mikrotik_run_command, nor when a `where` filter is appropriate versus a single `id`. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_system_overviewSystem overviewBRead-onlyIdempotent
Identity, RouterOS version, board, CPU/memory/disk usage, uptime, clock and health sensors in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds one genuinely useful behavioral trait — that all these data points are fetched in a single round trip — but says nothing about what happens on unreachable devices or how absent health sensors are handled.
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, front-loaded with the returned data categories, with zero filler. Nothing could be removed without losing information.
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?
Although there is no output schema, the description effectively enumerates the return contents, and the read-only annotations make the risk profile clear. The only gap is that it does not note platform-dependent variability in the returned set (e.g. health sensors on boards that lack them or fields unsupported by older RouterOS).
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% and the single 'device' parameter is fully documented in the schema, including its default and a pointer to mikrotik_list_devices. The description adds nothing about the parameter, which is acceptable given the schema does the work — baseline 3.
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 enumerates exactly what the tool returns (identity, RouterOS version, board, CPU/memory/disk usage, uptime, clock, health sensors), which makes the resource unambiguous and clearly distinct from the sibling list-style tools (interfaces, routes, logs). The verb is only implied by 'in one call' rather than stated, so it falls just short of a perfect verb+resource statement.
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 choose this over alternatives such as mikrotik_print, mikrotik_list_devices, or the per-resource tools. The phrase 'in one call' hints that it is an aggregate convenience read, but no exclusions or preconditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_tracerouteTraceroute from the routerCRead-onlyIdempotent
Trace the path from the router to a host.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). | |
| address | Yes | ||
| maxHops | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds one useful behavioral fact — execution happens on the router itself — but says nothing about how long a trace blocks, whether the target must be resolvable from the device, or what hops output looks like.
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 waste and the scope constraint ('from the router') placed early. It is arguably under-specified rather than over-long, so conciseness itself is fine but earns no bonus.
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 network diagnostic with no output schema and two undocumented parameters, the description leaves too much open: nothing about hop output, timeout/failure behavior, or what maxHops controls. Annotations cover safety but not operation, so the definition is thin for the task.
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 only 33%: only 'device' is documented. The required 'address' is bare, and 'maxHops' has no description in either the schema or the description, so the agent gets no guidance on its default, units, or the 1-64 bound's meaning. 'to a host' barely implies that address is a target host/IP.
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 ('Trace') and resource ('the path from the router to a host'), and the phrase 'from the router' pins down that the probe originates on the device rather than the caller. It is clearly distinct from siblings like mikrotik_ping or mikrotik_run_command, though it never names 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 statement of when to prefer this over mikrotik_ping (reachability) or mikrotik_run_command (arbitrary command), nor any exclusion or prerequisite. The agent must infer the use case entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mikrotik_wireless_clientsList wireless clientsBRead-onlyIdempotent
List connected Wi-Fi clients from the registration table (supports the wifi, wifiwave2, legacy wireless and CAPsMAN packages).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return (default 200). | |
| device | No | Name of the configured device. Defaults to the first device (see mikrotik_list_devices). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds genuine domain context by naming the four supported packages (wifi, wifiwave2, legacy wireless, CAPsMAN), which tells the agent the tool works across firmware families. It says nothing about result ordering or the default row cap beyond what the schema already states.
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 zero filler; the parenthetical package-support note is the only elaboration and it 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 two-parameter, zero-required, read-only listing tool with full schema coverage and no output schema, the definition is essentially sufficient. The only unmet need is telling the agent which client attributes come back or how this differs from other table-listing siblings.
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%, so both parameters (limit with its default of 200, and device defaulting to the first device) are fully documented in the schema. The description contributes no additional parameter meaning, so the baseline 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?
States a specific verb and resource (list connected Wi-Fi clients) plus the data source (the registration table), which is far more precise than the sibling-sounding mikrotik_print. It does not explicitly contrast itself with neighboring table tools like mikrotik_dhcp_leases or mikrotik_arp_table, so an agent must infer the distinction.
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 says what the tool returns but gives no when-to-use guidance, no exclusions, and no pointers to alternatives. An agent choosing between this, mikrotik_dhcp_leases, and mikrotik_arp_table for 'who is on my network' gets no routing signal.
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.
22 tool updates
v0.1.0- First observed
mikrotik_add - First observed
mikrotik_address_list - First observed
mikrotik_arp_table - First observed
mikrotik_backup - First observed
mikrotik_dhcp_leases - First observed
mikrotik_firewall_add_rule - First observed
mikrotik_firewall_rules - First observed
mikrotik_interfaces - First observed
mikrotik_ip_addresses - First observed
mikrotik_list_devices - First observed
mikrotik_logs - First observed
mikrotik_ping - First observed
mikrotik_print - First observed
mikrotik_reboot - First observed
mikrotik_remove - First observed
mikrotik_routes - First observed
mikrotik_run_command - First observed
mikrotik_set - First observed
mikrotik_set_enabled - First observed
mikrotik_system_overview - First observed
mikrotik_traceroute - First observed
mikrotik_wireless_clients
TDQS
Scored across 22 tools
The generic mikrotik_print/add/set/remove/run_command tools overlap substantially with dedicated tools such as mikrotik_ip_addresses, mikrotik_interfaces, mikrotik_firewall_add_rule, mikrotik_address_list, and mikrotik_set_enabled. Descriptions help by steering agents toward dedicated tools for common tasks, but an agent can still reasonably choose either path for several operations.
All tools use a consistent mikrotik_ snake_case prefix, and the split between noun-style read tools and verb-style action tools is mostly predictable. Minor inconsistency remains because some read tools include list_ while others are bare resource nouns.
Twenty-two tools is on the high side but reasonable for the broad MikroTik management domain, covering system info, interfaces, routing, firewall, DHCP, wireless, ARP, logs, diagnostics, and generic RouterOS operations. The generic CRUD tools also prevent the surface from needing dozens of menu-specific tools.
The set covers core read views, generic add/set/remove operations for any RouterOS menu, arbitrary command execution, diagnostics, firewall/address-list helpers, backup, and reboot. Remaining lifecycle operations such as restore or package updates can be reached through mikrotik_run_command, so there are no obvious dead ends.
Maintenance
Related MCP Connectors
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with MikroTik RouterOS devices through API and SSH connections, supporting network monitoring, configuration management, and diagnostics across multiple routers with automatic connection fallback.3MIT
- AlicenseCqualityAmaintenanceProvides a bridge between AI assistants and MikroTik RouterOS devices, enabling natural language management of VLANs, firewall rules, DNS settings, and more.2121,754 PyPI309MIT
- AlicenseBqualityCmaintenanceMCP server that enables Claude Code to access, monitor, and manage MikroTik RouterOS devices via its REST API, with 92 tools for read-only and optional write operations.92Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to audit, inspect, and safely configure MikroTik RouterOS v7 routers through tools for connection testing, system status, security audits, firewall mangle management, routing, DHCP leases, sanitized exports, containers, and adlist queries.176 npmGPL 3.0