sos-microtik-mcp
An MCP server that lets Claude discover, audit, validate and safely configure MikroTik RouterOS routers over SSH, with dry-run plans and automatic rollback.
Discover & connect: find MikroTiks on the LAN via MNDP (
discover_routers), open SSH sessions with passwords entered in a local popup (connect,reconnect,list_sessions,disconnect).Inspect:
router_overview(version, board, interfaces, Wi-Fi driver, bridges),run_commandfor read-only RouterOS commands, andcollect_infoto save a full export plus status per site.Validate before applying:
validate_networkchecks IPs/subnets (/prefixor dotted mask, comma-separated lists) for mask, network, broadcast, usable range, overlaps, and lockout risk.Wi-Fi:
configure_wifisets SSID, password (popup or generated), WPA2/WPA3, country across legacywireless,wifiandwifiwave2drivers.Bridge/LAN:
setup_bridge_with_wifi_subnetbridges LAN ports and Wi-Fi, gives Wi-Fi its own subnet with DHCP, optional LAN isolation, VLAN or separate-bridge modes.Security:
audit_security(read-only report with compromise indicators),harden_services(disable telnet/ftp/www/api, restrict management, strong SSH crypto),firewall_baseline(defconf-style input/forward/NAT rules).WireGuard (v7):
wireguard_status(peers, handshakes, traffic, firewall), plus create interface, add/update/remove peer, optional client.conf/QR generation, preshared keys. Never generates keys.Custom changes:
apply_changesfor arbitrary commands when no dedicated tool fits.Safety net: every change is dry-run by default and applies a router backup plus a 5-minute rollback timer (
confirm_changesto keep,rollback_nowto revert and reboot); secrets stay out of the chat and files are saved under~/mikrotik-sites/.
Enables discovery, auditing, and configuration of MikroTik RouterOS routers over SSH, including Wi-Fi setup, bridge and subnet configuration, security auditing and hardening, firewall baselines, WireGuard management on RouterOS v7, read-only command execution, and safe rollback-supported changes.
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., "@sos-microtik-mcpdiscover MikroTik routers on my LAN and run a security audit"
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.
sos-microtik-mcp
An MCP server that lets Claude (Claude Code CLI, Claude Code desktop, or Claude Desktop) discover, audit and configure MikroTik RouterOS routers over SSH, for technicians working on site.
The server runs locally on the technician's computer and talks to routers on the same network. Router passwords are entered in a local popup and are never sent to the chat.
⚠️ This tool changes the configuration of network equipment. Test it on a spare router before using it on a client's network. Use at your own risk.
Contents
Related MCP server: MikroTik RouterOS MCP
Features
Area | Tools |
Connection |
|
Information |
|
Wi-Fi |
|
Bridge |
|
Security |
|
Validation |
|
WireGuard (v7) |
|
Site-to-site tunnels (v7) |
|
Changes |
|
How it works
SSH only. The router just needs SSH enabled. The API and HTTP services can stay disabled.
Dry run by default. Every tool that changes something first returns the plan and the exact commands. It only applies them when you approve.
Automatic rollback ("commit confirmed"). Before applying a change, the server:
saves the current config to your computer,
saves a backup on the router (
mcp-pre.backup),starts a timer on the router, 5 minutes by default.
If you don't confirm the change in time (for example, because it locked you out), the router restores the backup and reboots.
No assumed values. The server has no default IP addresses, subnets or WireGuard keys. Claude asks you for every one of them and validates what you enter.
Secrets stay local. Router passwords, Wi-Fi passwords, and WireGuard private and preshared keys are entered in local popups or saved to files on your computer. They are never shown in the chat.
Requirements
On the technician's computer
Windows, macOS or Linux
One of: Claude Code (CLI or desktop app), or Claude Desktop
uv (recommended install method), or Python 3.10+
Network access to the router (plugged into its LAN)
On the router
RouterOS v6 or v7 (WireGuard features require v7)
SSH service enabled
A user with sufficient permissions (see Router preparation)
Installation
Option A: uv (recommended)
1. Install uv (once per computer)
Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | shClose and reopen your terminal afterwards so uv is on your PATH.
2. Install the server from GitHub
uv tool install git+https://github.com/howlerdevone/sos-microtik-mcpThis creates the command sos-microtik-mcp with all its dependencies included. To find its full path (you may need it later):
uv tool dir --binTypical locations:
Windows:
C:\Users\<you>\.local\bin\sos-microtik-mcp.exemacOS / Linux:
~/.local/bin/sos-microtik-mcp
Private repository? Make sure
gitcan access it first, for example by signing in with GitHub CLI (gh auth login) or by using an SSH URL:uv tool install git+ssh://git@github.com/howlerdevone/sos-microtik-mcp.git
Option B: Python virtual environment (manual)
Windows (PowerShell):
git clone https://github.com/howlerdevone/sos-microtik-mcp C:\tools\sos-microtik-mcp
cd C:\tools\sos-microtik-mcp
python -m venv venv
.\venv\Scripts\pip install .The command will be at C:\tools\sos-microtik-mcp\venv\Scripts\sos-microtik-mcp.exe.
macOS / Linux:
git clone https://github.com/howlerdevone/sos-microtik-mcp ~/tools/sos-microtik-mcp
cd ~/tools/sos-microtik-mcp
python3 -m venv venv
./venv/bin/pip install .The command will be at ~/tools/sos-microtik-mcp/venv/bin/sos-microtik-mcp.
On Linux, also install Tk for the password popups: sudo apt install python3-tk (Debian/Ubuntu).
Connect it to Claude
Register the server under the name mikrotik. The permission settings below depend on that name.
Claude Code (CLI)
claude mcp add mikrotik --scope user -- sos-microtik-mcpIf you get "command not found", use the full path from uv tool dir --bin instead:
# Windows example
claude mcp add mikrotik --scope user -- C:\Users\<you>\.local\bin\sos-microtik-mcp.exe--scope user makes the server available in every project.
Verify:
claude mcp listmikrotik should show as connected. Inside a claude session, /mcp lists the server and its tools.
Claude Code (desktop app, Code tab)
Servers added with claude mcp add --scope user are normally picked up by the Code tab as well. Fully quit and reopen the app, then type /mcp to check.
If it doesn't appear, add it through the Connectors settings as a local server, using the full path to sos-microtik-mcp as the command.
Claude Desktop (Chat tab)
The chat side of Claude Desktop uses its own config file:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"mikrotik": {
"command": "C:\\Users\\<you>\\.local\\bin\\sos-microtik-mcp.exe"
}
}
}Use the full path, since desktop apps don't always see your terminal's PATH. Then fully quit and restart Claude Desktop.
Interactive panel (Claude Desktop)
In the Chat tab of Claude Desktop, the server shows an interactive panel (in Spanish) right inside the conversation, using the MCP Apps extension. Claude Code (CLI and Code tab) doesn't render panels; everything works the same there as text.
Panel | Shown by | What you can do |
Plan de cambios | Any change tool in dry-run mode (Wi-Fi, bridge, firewall, hardening, WireGuard, custom changes) | Review the validations and exact commands, then click Aplicar cambios, which asks for a second confirmation |
Cambios aplicados | After applying | See each command's result and a rollback countdown, then click Todo funciona: confirmar or Revertir ahora |
Auditoría de seguridad |
| See findings by severity (filterable) with the fix for each, and re-run the audit |
WireGuard |
| See interfaces, firewall status, and peers with a connection indicator (green / yellow / red), handshake and traffic, and refresh |
When you apply, confirm or revert from the panel, the panel tells Claude, so it doesn't repeat the action. Note that Aplicar cambios runs the change directly from the panel (after its own second confirmation); it does not go through a separate approval in the chat, so read the plan before clicking. Secrets are never typed into the panel: router passwords, Wi-Fi passwords and WireGuard private and preshared keys still go through the local popup window on your computer.
To see the panel, register the server in the Chat side of Claude Desktop (claude_desktop_config.json, see Claude Desktop (Chat tab)) and fully restart the app.
For developers: the panel source is ui/panel.html. It embeds the official MCP Apps client (@modelcontextprotocol/ext-apps, Apache-2.0, vendored in ui/vendor/) so it also works offline at client sites. After editing the panel, regenerate the embedded copy:
python scripts/build_ui.pyThis writes mikrotik_ui.py. Commit that file too, so that installing from GitHub doesn't need a build step.
Recommended: auto-approve read-only tools
Claude Code asks permission before every tool call. You can let the read-only tools run freely while changes still require approval.
Edit ~/.claude/settings.json (Windows: C:\Users\<you>\.claude\settings.json):
{
"permissions": {
"allow": [
"mcp__mikrotik__discover_routers",
"mcp__mikrotik__connect",
"mcp__mikrotik__reconnect",
"mcp__mikrotik__list_sessions",
"mcp__mikrotik__router_overview",
"mcp__mikrotik__run_command",
"mcp__mikrotik__collect_info",
"mcp__mikrotik__audit_security",
"mcp__mikrotik__wireguard_status"
]
}
}Keep the change tools (configure_wifi, setup_bridge_with_wifi_subnet, harden_services, firewall_baseline, wireguard_* changes, apply_changes, confirm_changes, rollback_now) off this list. That way you approve each change in Claude on top of the tool's own dry run.
Router preparation
1. SSH enabled (on by default on most routers):
/ip service print
/ip service enable sshIf SSH is restricted by address, include your laptop's subnet:
/ip service set ssh address=192.168.88.0/242. A user with the right permissions. The built-in full group (used by admin) works for everything. Minimums:
Use | Policies needed |
Audit / collect info only |
|
Configuration changes + rollback |
|
Example of a read-only user:
/user group add name=readonly-ssh policy=ssh,read,sensitive,!write,!policy
/user add name=audit group=readonly-ssh password=...3. Firewall must allow TCP 22 from your laptop.
4. For discovery only: neighbor discovery must be enabled on the interface you're plugged into (it is by default on LAN interfaces). Your laptop's firewall must allow UDP 5678. Windows will ask the first time; allow it on private networks.
Factory-default routers are usually at 192.168.88.1, user admin, with either no password (older units) or the password printed on the sticker (newer units).
Addresses and keys: you always provide them
The server never invents network settings. Claude asks you for each value, and the server checks it before anything is applied.
IP addresses and subnets. You can use either mask format, and they can be mixed:
You type | Understood as |
| 192.168.20.1, mask 255.255.255.0 |
| same |
| same |
| a list (WireGuard allowed addresses) |
What gets checked:
Valid IP and mask. Non-contiguous masks are rejected, and Cisco-style wildcard masks like
0.0.0.255are caught, with the correct subnet mask suggested.No network or broadcast address used as a router or gateway address. A correct host address is suggested instead.
Host bits on a subnet. For example,
192.168.50.1/24used as a route is corrected to192.168.50.0/24, with a note.No overlap with subnets already on the router, between the LAN and Wi-Fi, or between WireGuard peers.
DHCP range stays inside the subnet and excludes the gateway.
WireGuard peer addresses don't use the router's own tunnel IP, and a warning appears if they're outside the tunnel subnet.
Lockout check: management restrictions that wouldn't include your own computer are refused.
You can also just ask, for example: "Check if 172.16.4.1 255.255.252.0 is OK for the Wi-Fi network."
WireGuard keys. The server never generates keys.
Key | Where it comes from |
Router interface key | RouterOS generates it, or you enter an existing private key in a local popup. Claude will ask which. |
Remote peer's public key | You provide it, in chat or in a popup. It's taken from the WireGuard app on the phone or laptop, or from the remote router. |
Preshared key (optional) | Entered in a local popup only |
Client private key (optional, for a complete client | Entered in a local popup only. If you skip it, a template |
Key checks:
Format: the key is 44 characters of base64.
Not the router's own key: catches the common mistake of pasting the router's key as the peer's key.
No duplicates: the key isn't already used by another peer on the same interface.
Matching pair: if you enter a client private key, it must match the public key you gave. Otherwise nothing is changed.
For client configs, Claude also asks which networks the client should route through the VPN (0.0.0.0/0 for all traffic, or specific subnets) and the public IP or hostname the client connects to.
Usage
Just ask Claude in plain language. Examples:
Find the MikroTik routers on this network and connect to the main one.Collect the full config and info for site "Acme Office", then run a security audit.Set the Wi-Fi SSID to "Acme-Staff" with WPA2/WPA3 and country Costa Rica.Put all LAN ports and the Wi-Fi in one bridge, with Wi-Fi gateway 192.168.20.1 255.255.255.0, isolated from the LAN.Apply the baseline firewall and harden the services.Show the WireGuard status.Add a WireGuard peer for Juan's phone. I'll give you the phone's public key and tunnel IP.Typical flow for a change
Claude runs the tool as a dry run and shows you the plan and the commands.
You approve. Claude applies the change, and the rollback timer starts.
You verify that the internet, Wi-Fi and LAN still work.
Claude calls
confirm_changes. If something is wrong, it callsrollback_now, or you simply wait for the timer.
Tips
Run
collect_infoat the start of every site visit so you always have a "before" copy.When changing bridges, Wi-Fi or firewall rules, connect through a LAN cable, not Wi-Fi.
Right after
connect, Claude tells you whether your PC is on the router's network and gets its IP from the router's DHCP. If you then change that network's IP/subnet, your PC loses the connection. After applying, release/renew its IP (Windows:ipconfig /release, thenipconfig /renew), have Claudereconnectto the router's new IP, and confirm before the rollback timer ends. The LAN DHCP server must also be moved to the new subnet, or the renew won't get a valid address. In the panel, this warning appears in the plan notes before you click Aplicar cambios.On many non-CRS3xx models (hAP, hEX, RB4011...), the single-bridge VLAN mode turns off hardware offloading, so switching goes through the CPU. Ask for
mode=separate_bridgeif LAN throughput matters.
Where files are saved
Everything is stored on the technician's computer under ~/mikrotik-sites/ (Windows: C:\Users\<you>\mikrotik-sites\):
mikrotik-sites/
├── <site>/<date_time>/ # collect_info: export.rsc, interfaces, routes, leases...
├── <site>/audit/<date_time>/ # security_audit.txt
├── <site>/wifi/<date_time>/ # generated Wi-Fi passwords
├── <site>/wireguard/<date_time>/ # client .conf files (complete or template) + QR codes
└── _changes/<router-ip>/<date_time>/
├── description.txt
├── commands.rsc
├── before.rsc # config before the change
├── result.txt
└── after_confirmed.rsc # config after confirm_changes🔒 These files contain passwords and private keys (exports use
show-sensitive). Keep this folder on an encrypted disk (BitLocker / FileVault) and don't sync it to shared drives.
Updating and uninstalling
Update (Option A):
uv tool upgrade sos-microtik-mcpIf it doesn't pick up the latest commit, reinstall it:
uv tool install --force git+https://github.com/howlerdevone/sos-microtik-mcpThen restart Claude Code or Claude Desktop.
Update (Option B): git pull, then pip install . again inside the venv.
Uninstall:
claude mcp remove mikrotik --scope user
uv tool uninstall sos-microtik-mcpAlso remove the mikrotik entry from claude_desktop_config.json if you added one there.
Troubleshooting
Problem | Fix |
Panel doesn't appear in Claude Desktop | The panel only shows in the Chat tab (not in Claude Code). Update Claude Desktop, check the server is in |
| Run |
Server not listed in Claude Desktop | Use the full path to the command in the config, then fully quit the app (including from the tray/menu bar) and reopen it. |
Password popup doesn't appear | It may be behind other windows. It opens on the computer running Claude, so it won't work if Claude Code runs over SSH on another machine. On Linux, install |
| Make sure you're on the router's LAN, allow UDP 5678 in your laptop's firewall, and check |
| Winbox (or another tool) is already listening on UDP 5678. Close Winbox and try again. |
Connection timed out | Check that SSH is enabled, the port is correct, the |
"not enough permissions" | The router user's group is missing policies. See Router preparation. |
Lost connection during a change | Wait for the rollback timer (default 5 min), or if the router's IP changed on purpose, ask Claude to |
WireGuard tools say v7 required | WireGuard only exists on RouterOS v7. Upgrade the router first. |
Disclaimer
Provided as-is, without warranty. The automatic rollback reduces risk but doesn't remove it. Always keep an independent way back into the router (console cable, MAC-Winbox, or physical reset) and test on lab hardware first.
Licensed under the MIT License. The vendored MCP Apps client in ui/vendor/ is Apache-2.0 (see ui/vendor/LICENSE-ext-apps.txt).
Available Tools
22 toolsapply_changesA
Apply arbitrary RouterOS commands (one per list item) when no dedicated tool fits. Same safety net: backup + rollback timer + stop on first error.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| dry_run | No | ||
| commands | Yes | ||
| description | Yes | ||
| rollback_minutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose key behaviors: backup, rollback timer, stop on first error. It omits what dry_run defaults to and how errors are surfaced, so it is strong but not complete.
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 compact sentences, front-loaded with the core purpose and then the safety behavior. Every clause earns its place 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?
An output schema exists, so return values need not be explained. But for a high-risk mutation tool with zero schema coverage and no annotations, the description should say more about dry_run, rollback semantics, and the run_command boundary.
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 0%, so the description must compensate and it partly does by implying the commands parameter is a one-command-per-item list. But the more consequential parameters (dry_run default true, rollback_minutes, name, description) get no explanation, leaving a meaningful 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+resource: apply arbitrary RouterOS commands. The routing note 'when no dedicated tool fits' distinguishes it from run_command and other siblings, though the exact boundary between apply_changes and run_command is somewhat blurry.
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 a clear condition: use when no dedicated tool fits. That is a genuine when-to-use gate. It does not, however, explain when to prefer run_command or the other command-oriented sibling, leaving one ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_securityA
Read-only security audit: version, users, exposed services, firewall, DNS resolver, proxies, MAC access, SNMP, Wi-Fi encryption, IPv6 firewall, and compromise indicators (schedulers/scripts, socks/proxy, static DNS). Optionally saves the report to ~/mikrotik-sites//.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| site | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the read-only nature plus the side effect of optionally writing a report to ~/mikrotik-sites/<site>/. However, it says nothing about required permissions, connection/session prerequisites, runtime cost, or error behavior for a multi-check audit.
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?
Front-loaded with the core purpose, then a dense enumeration, then the optional save behavior — no filler sentences. The list is long but each item is a distinct audit domain, so it earns its length.
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?
An output schema exists, so return values need not be described, and the description thoroughly covers the audit scope. The remaining gap is parameter meaning (name/site) and connection prerequisites, which is minor given the output schema carries the payload structure.
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 0% and both parameters are undocumented in the schema, so the description must compensate. It clarifies that 'site' selects the save destination path, but the 'name' parameter (defaulting to 'router') and its relationship to session/device selection are never explained.
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-only security audit') and enumerates the exact resources inspected (version, users, firewall, DNS resolver, compromise indicators, etc.). The 'read-only' qualifier implicitly separates it from mutating siblings like harden_services, firewall_baseline, and apply_changes, so an agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'read-only audit' and the optional report-saving behavior, but the description never states when to prefer this over collect_info, router_overview, or validate_network, nor when not to use it. No explicit alternative routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collect_infoB
Save full export + hardware/status/Wi-Fi/VPN/firewall info to ~/mikrotik-sites///. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does contribute the key behavioral facts: it writes files to disk and the operation is read-only against the device. However, it omits permission/auth requirements, how long the collection takes, and whether it overwrites existing snapshots in the timestamped directory.
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 action and the destination, with no filler. Slightly terse at the cost of the parameter guidance an agent 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?
An output schema exists, so return values need not be described, and the file destination plus 'Read-only' cover the essentials. Still missing is any explanation of the undocumented 'name' parameter and the usage relationship to sibling tools.
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 references <site> through the path template but says nothing about the 'name' parameter or its 'router' default, leaving half of the parameter surface 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?
Names a concrete verb (save) and enumerates the resource set it captures (full export, hardware/status/Wi-Fi/VPN/firewall info) plus the destination path template. That is more specific than the sibling router_overview, but the description never explicitly contrasts itself with that or run_command, so an agent must infer the difference.
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?
It says what will be saved but never when to choose this over router_overview or run_command, nor whether it should precede audit_security/validate_network. Usage is only implied by the output path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_wifiB
Set SSID and Wi-Fi password on the router's Wi-Fi interfaces.
interfaces: which Wi-Fi interfaces (default: all, e.g. both 2.4 and 5 GHz). password: leave empty to have the user type it in a local popup (preferred), or set generate_password=True to create a strong one (shown in a local popup and saved under ~/mikrotik-sites//, never returned to chat). security: 'wpa2', 'wpa2-wpa3' (mixed, default) or 'wpa3'. Legacy 'wireless' driver only supports WPA2; mixed falls back to WPA2 there. country: regulatory country, e.g. 'Costa Rica'. Recommended on first setup. Works with legacy wireless, new wifi (7.13+) and wifiwave2 drivers.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| site | No | ||
| ssid | Yes | ||
| country | No | ||
| dry_run | No | ||
| password | No | ||
| security | No | wpa2-wpa3 | |
| interfaces | No | ||
| ensure_ap_mode | No | ||
| rollback_minutes | No | ||
| generate_password | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose genuinely useful behavior: a typed password is never returned to chat and is saved under ~/mikrotik-sites/<site>/, generated passwords appear only in a local popup, and mixed WPA2-WPA3 falls back to WPA2 on the legacy driver. However, for a mutation tool it omits critical behavioral facts: whether changes take effect immediately or must be committed via apply_changes/confirm_changes, and how dry_run (default true) and rollback_minutes actually behave.
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 purpose is front-loaded in one sentence, followed by a scannable parameter list. Every sentence carries information; there is no filler. Slight deduction for the trailing driver-compatibility note being placed last rather than near the security parameter it qualifies.
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 output schema exists, so return values need not be described. But for an 11-parameter mutation tool with no annotations, the description leaves material gaps: the dry_run/rollback and apply/confirm workflow is unclear, and five parameters go unexplained. It covers the security-sensitive password handling well but is not complete enough for confident 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?
Schema description coverage is 0%, so the description must compensate for 11 parameters. It does well on the risky ones: password modes, generate_password, security enum values (wpa2 / wpa2-wpa3 / wpa3), interfaces default 'all', and country. But name, site, dry_run (notably defaulting to true, meaning no change is applied unless overridden), ensure_ap_mode, and rollback_minutes are never explained, leaving the mutation-safety parameters undocumented in both schema and 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?
The description opens with a specific verb+resource: 'Set SSID and Wi-Fi password on the router's Wi-Fi interfaces.' That is unambiguous about what the tool changes. It does not, however, distinguish itself from the nearby sibling setup_bridge_with_wifi_subnet, which also touches Wi-Fi configuration.
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 parameter guidance ('leave empty to have the user type it in a local popup (preferred)', 'country: ... Recommended on first setup'), which tells the agent something about when certain options are appropriate. But there is no explicit statement of when to choose this tool over setup_bridge_with_wifi_subnet, apply_changes, or confirm_changes, nor any preconditions such as an active session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_changesA
Disarm the rollback after verifying the change works; saves the new config locally.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two real behaviors: the rollback safety net is removed and the config is persisted locally. However it omits irreversibility, scope of persistence, and any permission/auth context, leaving meaningful gaps for a commit-like operation.
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 compact sentence with the action front-loaded and the side effect trailing; every clause carries information and nothing is padded.
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?
An output schema exists so return values need no explanation, and the workflow position is clear. Still, the lone parameter is unexplained and the behavioral profile of a config-committing action is thin, so the definition is 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 description coverage is 0% and the single 'name' parameter (default 'router') is never mentioned or explained in the description. An agent cannot tell from the text what 'name' selects or how it interacts with the saved config, 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?
States a specific verb+resource pair ('Disarm the rollback') with a concrete effect ('saves the new config locally'), which clearly separates it from rollback_now and apply_changes even though those siblings are not named. It is more precise than most, but stops short of explicitly contrasting with the sibling 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?
'after verifying the change works' supplies a clear trigger condition that places this step in the change workflow, implicitly distinguishing it from rollback_now. There is no explicit when-not or named alternative, so it is short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connectB
Open an SSH session to a router under name. Leave password empty so the
user is prompted in a local popup (keeps it out of the conversation).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| name | No | router | |
| port | No | ||
| password | No | ||
| username | No | admin |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose one valuable trait: an empty password triggers a local popup so the secret never enters the conversation. However, it omits authentication requirements, whether the session persists, and failure/interactive-prompt 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?
Two tight sentences with the core action front-loaded and the password caveat immediately after. The parenthetical rationale is short and earns its place by explaining why.
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?
An output schema exists, so return values need not be described. Still, for a session-establishing tool with zero annotations and 0% schema coverage, the description leaves lifecycle questions open: relation to 'reconnect'/'disconnect', auth mode, and what happens on failure.
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% across 5 parameters, so the description must compensate and only partially does. It clarifies 'name' (router identifier) and 'password' (leave empty for prompt), but 'host' — the sole required parameter — plus 'port' and 'username' are left entirely 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?
States a specific verb and resource: 'Open an SSH session to a router'. It is clear what the tool does, but does not distinguish itself from the sibling 'reconnect', which is a near-neighbor an agent could easily confuse with this one.
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 operational guidance for the password parameter (leave empty to trigger a prompt), but says nothing about when to use this versus 'reconnect', 'discover_routers', or whether a session must be opened before 'run_command'. 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.
disconnectC
Close a session and forget its credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It discloses one key trait — credentials are forgotten — but does not state whether the operation is destructive, reversible, or requires specific permissions. This partial disclosure is useful but incomplete.
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 zero waste. Every word contributes to the core action and its side effect.
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 tool with a parameter and no annotations, the description is too minimal. It omits how to specify the target session and when this operation is appropriate, though the presence of an output schema means return values need not be explained.
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% and there is one parameter ('name', default 'router') that is never mentioned in the description. The description says 'a session' without indicating that the parameter selects which session to close, so it fails to compensate for the schema 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 ('Close') and resource ('a session') and adds a behavioral consequence ('forget its credentials'). However, it does not explicitly differentiate from siblings like reconnect or connect, so it meets the 'clear but no sibling differentiation' bar for 4.
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 such as reconnect or connect. There are no exclusions or prerequisites mentioned; an agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_routersC
Find MikroTik devices on the local network via MNDP (like Winbox Neighbors).
| Name | Required | Description | Default |
|---|---|---|---|
| seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only, time-bounded multicast probe (MNDP), but does not state that it blocks for a dwell period, that it requires multicast-capable local network access, or whether it disrupts anything. Key behavioral facts are left unstated.
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 tight sentence, zero waste, with the mechanism and the familiar Winbox analogy front-loaded. Nothing to trim.
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?
Return values are covered by the output schema, so the description needn't describe results. However, for a network-discovery probe with no annotations, the absence of timeout behavior and network preconditions leaves the definition only minimally 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 0% and the single parameter 'seconds' (default 5) is never mentioned in the description. The title alone hints it is a duration, but the description does not explain that it controls how long discovery listens, which matters for latency expectations.
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 (Find), resource (MikroTik devices), scope (local network) and mechanism (MNDP, with a Winbox Neighbors analogy). No sibling tool performs discovery, so an agent can distinguish it readily, though the description never explicitly contrasts itself with siblings like connect or list_sessions.
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 on when to use discovery versus alternatives, nor any prerequisite such as needing to be on the same L2 network before calling connect or reconnect. Usage is only inferable 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.
firewall_baselineB
Apply a MikroTik-defconf-style IPv4 firewall: input: accept established/related/untracked, drop invalid, accept ICMP, accept WireGuard ports, drop everything not from LAN. forward: fasttrack, accept established/related, drop invalid, drop new WAN connections that aren't port-forwards. nat: masquerade out WAN (if none exists). If the router already has other filter rules, the tool stops and lists them; set replace_existing=True to replace them (rules tagged mcp-wifi/mcp-wg are kept).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| add_nat | No | ||
| dry_run | No | ||
| wan_interface | No | ||
| lan_interfaces | No | ||
| replace_existing | No | ||
| rollback_minutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the abort-on-existing-rules behavior, the tag-based rule preservation, NAT masquerading, and the different treatment of forward vs input chains. It omits the safety semantics of dry_run and rollback_minutes, which matter for a mutation tool.
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 purpose leads and the rule groups are laid out as a structured, scannable list with no filler. It is longer than typical but every line conveys concrete configuration behavior rather than padding.
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?
An output schema exists, so return values need no explanation, and the behavioral narrative is rich. The gap is parameters: with 0% schema coverage and no annotations, the description should clarify dry_run and rollback_minutes for a destructive firewall rewrite but does not.
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% and seven parameters exist, yet the description only explains replace_existing. name, add_nat, dry_run, wan_interface, lan_interfaces, and rollback_minutes are left entirely undocumented, forcing the agent to guess at their meaning and defaults.
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 ('Apply a MikroTik-defconf-style IPv4 firewall') and enumerates the exact input/forward/nat rules, so the agent knows precisely what will be configured. It does not, however, contrast itself with nearby siblings like harden_services or audit_security, leaving the agent to 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?
Provides a useful conditional: the tool stops and lists existing filter rules if any are present, and replace_existing=True overrides this while preserving mcp-wifi/mcp-wg rules. But it never states when to prefer this over siblings such as harden_services or audit_security, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
harden_servicesC
Common hardening. disable_services default: telnet, ftp, www, api, api-ssl (SSH and Winbox stay on; SSH can never be disabled here). restrict_mgmt_to: subnets allowed to use SSH/Winbox (ask the user), comma-separated, '/prefix' or dotted mask. Refused if this computer's IP is not inside them.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| dry_run | No | ||
| disable_upnp | No | ||
| disable_services | No | ||
| restrict_mgmt_to | No | ||
| rollback_minutes | No | ||
| ssh_strong_crypto | No | ||
| mac_access_lan_only | No | ||
| disable_socks_proxy_bwtest | No | ||
| neighbor_discovery_lan_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose two genuinely useful traits: SSH can never be disabled here, and restrict_mgmt_to is refused if this machine's IP is outside the listed subnets. However it says nothing about the mutation/rollback nature of the operation (rollback_minutes defaults to 5), permission needs, or what happens to the other eight flags.
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 dense clauses, no filler, and the most consequential constraint (SSH/Winbox staying on) is stated up front. Tightly written for the amount of parameter-relevant information it packs in.
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 10-parameter configuration-changing tool with no annotations, the description leaves major gaps: rollback behavior, the meaning of dry_run, and eight boolean flags are undocumented. An output schema exists so return values needn't be described, but the mutation-safety picture is incomplete.
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% across 10 parameters, so the description must compensate. It does so well for disable_services (explicit default list) and restrict_mgmt_to (comma-separated, '/prefix' or dotted mask, with a refusal condition), but leaves eight parameters – including the safety-relevant rollback_minutes and dry_run – entirely 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?
"Common hardening" names a broad activity rather than a specific verb+resource, but the disable_services and restrict_mgmt_to clauses make the actual effect (disable named services, restrict management subnets) inferable. It never distinguishes itself from close siblings such as firewall_baseline or audit_security, so an agent cannot tell which one is appropriate without more context.
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 when-to-use guidance and no comparison with firewall_baseline or audit_security, which appear to be the nearest alternatives. The only usage-like statement is "ask the user" for restrict_mgmt_to, which is a narrow interaction hint rather than selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sessionsB
List open router sessions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says only that it lists open sessions; it does not confirm read-only safety, explain the meaning of 'open,' mention pagination or filtering behavior, or disclose any other operational traits.
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 wasted words. For a simple zero-parameter list tool, it is appropriately sized.
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?
Because an output schema exists, return values need not be explained in the description. However, with no annotations and no usage context, the description is only minimally complete; it does not clarify what sessions are or when an agent should use 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 schema description coverage is 100%, so there are no parameter semantics to document. Per the rubric, zero parameters establish a baseline of 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?
The description states a specific verb ('List') and resource ('open router sessions'), making the basic operation clear. It does not, however, explicitly differentiate this tool from sibling tools such as router_overview or connect, so it falls 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 alternatives. The description gives no prerequisites, no context about what an 'open session' is, and no indication of when listing sessions is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reconnectB
Reconnect a session (optionally to a new IP) reusing the stored credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| new_host | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden. It usefully discloses that credentials are reused (no auth prompt needed) and that re-homing to a new host is possible, but says nothing about what happens to the prior connection, failure modes, or whether the change is reversible.
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 scope ('reusing stored credentials') and the optional argument are both packed efficiently into one line.
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?
An output schema exists, so return values need no explanation, but for a state-changing connection tool with zero annotation coverage the description is thin on prerequisites and side effects. It covers the basics but leaves an agent guessing about session state and error behavior.
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 0% for both parameters. The description only glosses the `new_host` parameter as 'optionally to a new IP' (and calls it IP where the schema says host), and never mentions the `name` parameter or its default of 'router', 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 (reconnect) and resource (a session), plus the key differentiator from plain `connect`: it reuses stored credentials and can optionally target a new host. An agent can distinguish it from siblings like connect/disconnect, 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?
Usage is implied rather than stated: the 'reusing stored credentials' clause suggests it applies when an existing session's credentials are still valid, but there is no explicit when/when-not guidance and no named alternative (e.g. use `connect` when credentials have changed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_nowC
Immediately restore the pre-change backup. The router REBOOTS.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the action is immediate and forces a router reboot, which is a significant side effect. However, it does not state whether the rollback is destructive, irreversible, requires elevated permissions, or what downtime to expect.
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 zero waste. The primary action is front-loaded, and the reboot warning follows immediately, making the definition easy to parse at a glance.
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 a simple mutation with an output schema, so return values need not be explained. However, the description omits key usage context and completely ignores the one parameter, leaving the agent without guidance on when to invoke it or what the 'name' argument does.
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 the single 'name' parameter, and the description does not mention or explain it at all. The default 'router' is in the schema, but the description adds no meaning about what the parameter selects or how it affects the rollback.
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 ('restore') and resource ('pre-change backup'), and adds the critical side effect that the router reboots. It is clear what the tool does and how it differs from passive read or configuration tools, though it does not explicitly name sibling 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?
No guidance is given on when to use this tool versus alternatives such as apply_changes, confirm_changes, or run_command. The word 'Immediately' implies urgency, but there are no conditions, prerequisites, or exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_overviewB
Version, board, interfaces by type, Wi-Fi driver, bridges and interface lists. Call this before planning any change.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It implies a read-only overview and gives a sequencing prerequisite, but it does not explicitly state safety, permissions, side effects, or output 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?
Two short sentences, front-loaded with the most important information and no wasted wording. The usage instruction is succinctly appended.
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 overview tool with no output schema, the description lists the returned fields and gives a usage cue. However, it omits parameter semantics and does not compensate for the lack of 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 schema has one parameter, 'name', with 0% description coverage, and the description does not mention the parameter at all. An agent cannot tell whether 'name' selects the router, a device, or something else.
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 the specific resources returned: version, board, interfaces by type, Wi-Fi driver, bridges, and interface lists. That makes the tool's purpose clear, though it is a noun list rather than an explicit verb and does not differentiate itself from sibling tools like collect_info.
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?
It gives a clear usage rule: 'Call this before planning any change.' This tells the agent when to invoke it, but it does not name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_commandA
Run a READ-ONLY RouterOS command (print, export, monitor, ping count=4...). For changes use the dedicated tools or apply_changes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| command | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It clearly discloses the READ-ONLY boundary and warns that changes belong elsewhere, but it omits prerequisites such as an active session/connection and does not explain what makes a command read-only or how errors are surfaced.
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 zero waste. The critical READ-ONLY constraint is front-loaded, and the alternative routing sentence 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?
An output schema exists, so return values need not be described. However, with no annotations and 0% schema coverage, the description should still cover session/connection prerequisites and clarify the command parameter; those gaps leave it only 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?
Schema description coverage is 0% and the description never mentions the command or name parameters. The command examples hint at valid values, but the description does not explain that command is the RouterOS command string to execute or what the name parameter selects.
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: run a READ-ONLY RouterOS command, with examples like print, export, monitor, and ping count=4. It also distinguishes itself from write-oriented siblings by directing changes to dedicated tools or apply_changes.
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?
Explicitly says when to use it, for read-only commands, and when not to, for changes. It names the alternative apply_changes and other dedicated tools, so an agent can route correctly without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_bridge_with_wifi_subnetA
Put all LAN ports and Wi-Fi in a bridge, with Wi-Fi in its own subnet.
wifi_gateway (REQUIRED, ask the user, never invent): router IP + mask for the
Wi-Fi subnet, as '192.168.20.1/24' or '192.168.20.1 255.255.255.0'.
lan_address: only if the user wants to set/change the LAN gateway (same formats).
If omitted, the current LAN address is kept (shown in the dry run; confirm it).
dhcp_range: optional pool 'first-last' (e.g. '192.168.20.100-192.168.20.200').
Default: the usable range after the first 9 addresses. Confirm with the user.
mode='vlan' (default): ONE bridge with VLAN filtering. LAN ports untagged on
VLAN 1, Wi-Fi ports on wifi_vlan_id, router IP on a VLAN interface.
Caution: on many non-CRS3xx models this disables hardware offload (CPU switching).
mode='separate_bridge': LAN ports in bridge, Wi-Fi in wifi_bridge.
wan_interface: excluded from bridging (default: members of the WAN interface list).
lan_ports / wifi_ports: default all Ethernet (minus WAN) / all Wi-Fi interfaces.
isolate_wifi_from_lan: block traffic between Wi-Fi and LAN; Wi-Fi gets internet,
DNS and DHCP only (no router management from Wi-Fi).
| Name | Required | Description | Default |
|---|---|---|---|
| dhcp | No | ||
| mode | No | vlan | |
| name | No | router | |
| bridge | No | bridge | |
| dry_run | No | ||
| lan_ports | No | ||
| dhcp_range | No | ||
| wifi_ports | No | ||
| lan_address | No | ||
| wifi_bridge | No | bridge-wifi | |
| wifi_gateway | Yes | ||
| wifi_vlan_id | No | ||
| wan_interface | No | ||
| rollback_minutes | No | ||
| isolate_wifi_from_lan | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the hardware-offload caveat for VLAN mode on non-CRS3xx models, the traffic-blocking effect of isolate_wifi_from_lan, and the dry-run confirmation flow. It omits any explanation of rollback_minutes and its 5-minute safety window, which is a notable behavioral gap for a disruptive mutation.
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 parameter-by-parameter bullet structure is front-loaded and dense; each line carries format, default, or effect information rather than filler. It is long but nearly every sentence 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 15-parameter disruptive network mutation with no annotations, the description covers most decision-relevant behavior and an output schema exists so returns need no explanation. The main omission is the rollback_minutes safety mechanism and the exact semantics of dry_run, which an agent would want spelled out.
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 0%, so the description must compensate, and it does explain formats and semantics for wifi_gateway, lan_address, dhcp_range, mode, wan_interface, lan_ports, wifi_ports and isolate_wifi_from_lan. But roughly half the parameters (dhcp, name, bridge, dry_run, wifi_bridge, wifi_vlan_id, rollback_minutes) get no meaning at all, so the coverage is only partial.
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 with scope: bridge all LAN ports and Wi-Fi, with Wi-Fi on its own subnet. This is clearly distinguishable from siblings like configure_wifi or firewall_baseline without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong operational guidance: wifi_gateway is REQUIRED and must be asked of the user, lan_address only when changing the LAN gateway, and defaults must be confirmed with the user. It does not, however, name a sibling alternative or state when this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_networkA
Check IP addresses / subnets the user provided BEFORE using them, and explain
the result to the user. Accepts '/prefix' or dotted masks:
'192.168.20.1/24', '192.168.20.1 255.255.255.0', '192.168.20.1/255.255.255.0'.
Several values can be separated by commas.
purpose='interface': an address for the router itself (gateway, tunnel IP).
purpose='network' : a subnet or route (LAN range, WireGuard allowed-address).
If name is a connected router session, also checks overlap with its subnets.
Reports mask in both formats, network, broadcast, usable range and host count.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| value | Yes | ||
| purpose | No | interface |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses useful behavioral traits: it checks overlap against connected router session subnets, accepts multiple input formats, and reports detailed network calculations. It does not explicitly state that it is read-only or list permission requirements, but its validation framing makes the non-destructive nature clear.
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 front-loaded with the core purpose, then details formats, purpose values, and reporting behavior. Every sentence adds useful information, and the examples are compact and directly 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?
Despite low schema coverage and no annotations, the description covers input formats, parameter semantics, conditional behavior, and reporting output. Since an output schema exists, it does not need to fully define return values, and the description is complete enough for correct 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?
Schema description coverage is 0%, so the description must compensate, and it does: it documents value syntax with examples, comma-separated input, the meaning of purpose='interface' and purpose='network', and the conditional overlap behavior when name is a connected router session. All three parameters are given meaning beyond the bare 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 states a specific verb ('Check') and resource ('IP addresses / subnets') and frames the tool as a pre-use validation step, which clearly distinguishes it from sibling tools that configure or apply changes. It also explains the user-facing purpose of explaining results.
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?
It explicitly says to use this tool BEFORE using the addresses, giving a clear usage context. It also explains the meaning of purpose='interface' vs purpose='network', though it does not name alternatives or explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wireguard_add_peerA
Add a WireGuard peer. This server never generates keys; all values come from the user.
allowed_address (REQUIRED, ask the user): addresses this peer uses/routes, comma-separated, '/prefix' or dotted mask. E.g. '10.10.10.2/32' (phone/laptop) or '10.10.10.2/32, 192.168.50.0 255.255.255.0' (remote site + its LAN). Validated: format, overlap with other peers, inside the tunnel subnet, not the router's own IP. public_key: the REMOTE peer's public key (shown in its WireGuard app / remote router). Leave empty to have the user type it in a local popup on apply. Checked: format, not this router's own key, not already used on this interface. use_preshared_key: on apply the preshared key is entered in a local popup (or via preshared_key). Never ask the user to paste it in chat. endpoint: 'host:port' of the remote side for site-to-site. Omit for roaming clients. write_client_config: also save a .conf for the remote device. Requires (ask the user): client_allowed_ips: '0.0.0.0/0' for full tunnel, or specific subnets (split tunnel); server_endpoint: public IP/hostname (and :port) the client connects to. On apply the user may enter the client's private key in a popup to get a complete config + QR; it is checked against public_key. If left empty, a template is saved. client_dns: optional DNS server IP(s) for the client config.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| site | No | ||
| comment | No | ||
| dry_run | No | ||
| endpoint | No | ||
| interface | Yes | ||
| client_dns | No | ||
| public_key | No | ||
| preshared_key | No | ||
| allowed_address | Yes | ||
| server_endpoint | No | ||
| rollback_minutes | No | ||
| use_preshared_key | No | ||
| client_allowed_ips | No | ||
| write_client_config | No | ||
| persistent_keepalive | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden and does well: it discloses that keys are never generated server-side, that preshared keys are entered via a local popup (not chat), that public_key is validated against the router's own key and existing peers, and that empty public_key yields a template. It does not explain dry_run semantics, rollback_minutes behavior, or the apply/confirm/rollback workflow from the sibling tools, which are significant for a mutation tool.
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 front-loaded with the core action and then uses a clear field-by-field list that is easy to scan. It is somewhat long, but every line maps to a parameter or a behavioral rule, so it largely earns its space. Slightly dense but well organized.
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?
An output schema exists, so return values needn't be explained. Still, for a 16-parameter mutation tool with no annotations and 0% schema coverage, the description leaves several parameters (dry_run, rollback_minutes, name, site, comment, persistent_keepalive) unexplained. The core peer-creation flow is covered, but the gaps on operational parameters reduce completeness.
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% and there are 16 parameters, so the description must compensate. It documents handful of key parameters (allowed_address, public_key, use_preshared_key, endpoint, write_client_config and its dependents, client_dns) with real semantics and formats. However, it ignores name, site, comment, dry_run, preshared_key, persistent_keepalive, rollback_minutes, and server_endpoint, leaving many undocumented despite the low coverage. Partial compensation warrants a middle score.
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 (add) and resource (WireGuard peer), clearly distinguishing it from wireguard_update_peer and wireguard_remove_peer. The scope is unambiguous. It doesn't explicitly name siblings, but the verb distinction makes purpose unmistakable.
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 when to provide each field and gives channel-specific guidance (e.g., 'ask the user', 'Never ask the user to paste it in chat'), which is helpful operational context. However, it never states when to use this tool vs wireguard_update_peer or wireguard_create_interface, nor does it mention prerequisites like an existing interface. Usage is implied rather than scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wireguard_create_interfaceA
Create (or update) a WireGuard interface. All values come from the user.
address (REQUIRED, ask the user, never invent): the router's tunnel IP with mask, as '10.10.10.1/24' or '10.10.10.1 255.255.255.0'. Validated and checked for overlap with the router's existing subnets. private_key_source (REQUIRED, ask the user): 'router' = RouterOS creates the interface's own key (never leaves the router). 'user' = the user enters an existing private key (e.g. rebuilding a tunnel). Leave private_key empty: it is entered in a local popup on apply. wg_name, listen_port (REQUIRED, ask the user; RouterOS commonly uses 13231).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| address | Yes | ||
| dry_run | No | ||
| wg_name | Yes | ||
| listen_port | Yes | ||
| private_key | No | ||
| trust_as_lan | No | ||
| rollback_minutes | No | ||
| allow_in_firewall | No | ||
| private_key_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses validation/overlap checks, that 'router' keys never leave the router, and that user-supplied keys arrive via a local popup on apply. However, it omits major behavioral traits encoded as defaults: dry_run=true (nothing actually applied unless changed), rollback_minutes=5, allow_in_firewall=true, and trust_as_lan=false.
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?
Front-loads the purpose, then uses a compact field-by-field list where each item carries substantive information (formats, ask-the-user mandate, key-source branching). Slightly dense but no filler sentences.
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?
An output schema exists, so return values need not be described. But for a mutating network-configuration tool with no annotations, 10 params, and 0% schema coverage, leaving dry_run and rollback_minutes unexplained leaves an agent unsure what will actually be applied and what safety net 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% with 10 parameters, so the description must compensate. It does explain 5 of 10 (address format and validation, private_key_source semantics, private_key handling, wg_name, listen_port) with real added meaning. The remaining 5 — name, dry_run, trust_as_lan, rollback_minutes, allow_in_firewall — are undocumented despite dry_run and rollback_minutes being behaviorally critical.
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 ('Create (or update) a WireGuard interface'), which cleanly separates it from the peer-management siblings. The '(or update)' dual purpose adds slight ambiguity but the core operation is unmistakable.
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 operational guidance on required inputs and, notably, a decision rule for private_key_source ('router' vs 'user' with the rebuild-tunnel case). It does not state when this tool should be chosen over alternatives like wireguard_add_peer, but the resource scope makes that implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wireguard_remove_peerC
Remove a WireGuard peer, identified by its public key or comment.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| peer | Yes | ||
| dry_run | No | ||
| interface | Yes | ||
| rollback_minutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It states that a peer is removed but does not disclose that dry_run defaults to true, that rollback_minutes defaults to 5, or that actual deletion likely requires dry_run=false. The destructive nature is implied but safety, reversibility, and side effects are unexplained.
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. It is not verbose, but its extreme brevity leaves important invocation details unstated. The issue is under-specification rather than excessive length.
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?
An output schema exists, so return values need not be explained. However, the input schema has no field descriptions and the description only covers one of five parameters. For a destructive operation with dry-run and rollback defaults, the definition is incomplete for safe 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?
Schema description coverage is 0%, so the description must compensate for five undocumented parameters. It only clarifies that 'peer' can be a public key or comment. It does not explain the required 'interface' parameter, the 'name' default, the 'dry_run' safety behavior, or the 'rollback_minutes' rollback mechanism.
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: remove a WireGuard peer. It also clarifies the peer identifier can be either a public key or comment. It is clearly distinguishable from sibling tools like wireguard_add_peer and wireguard_update_peer, though it does not name alternatives 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?
There is no guidance about when to use this tool versus wireguard_update_peer or other WireGuard management tools. It also does not mention prerequisites, required context, or when removal should be avoided. Usage is implied only by the verb 'remove'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wireguard_statusA
Show WireGuard interfaces (address with mask in both formats), peers (handshake, traffic, endpoints) and whether the firewall allows each port. Secrets are masked.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose a meaningful trait: 'Secrets are masked.' The verb 'Show' signals read-only, and it enumerates the returned facets (handshake, traffic, endpoints, firewall). It stops short of permissions/rate-limit context, but adds genuine value beyond structured fields.
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 tightly packed sentence, front-loaded with the primary resource and using parentheticals that each carry substantive detail. Slightly dense, but no wasted wording.
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?
An output schema exists, so return values needn't be explained, yet the description helpfully enumerates them anyway. For a zero-required-param read tool this is close to complete; only the input parameter's meaning is left unaddressed.
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 'name' parameter has 0% schema description coverage, and the description never addresses it or its 'router' default. The parentheticals describe output, not the input, so nothing compensates for the schema 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 (Show) and precise resources: WireGuard interfaces, peers, and firewall per-port allowance. An agent can distinguish it from the mutating siblings (wireguard_create_interface, wireguard_add_peer), though it doesn't name any sibling 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 read-only 'Show' framing implies diagnostic/inspection use before or after mutation, but there is no explicit when-to-use, when-not, or alternative routing (e.g., vs. router_overview or audit_security). Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wireguard_update_peerA
Modify a WireGuard peer, found by its public key or comment. allowed_address: new value (validated, '/prefix' or dotted mask, comma-separated). endpoint: 'host:port', or '' to clear (roaming client). replace_public_key / replace_preshared_key: new key entered in a local popup on apply (public key may also be given as new_public_key). Keys are never generated.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | router | |
| peer | Yes | ||
| dry_run | No | ||
| disabled | No | ||
| endpoint | No | ||
| interface | Yes | ||
| new_comment | No | ||
| new_public_key | No | ||
| allowed_address | No | ||
| rollback_minutes | No | ||
| replace_public_key | No | ||
| persistent_keepalive | No | ||
| replace_preshared_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose real behavior: keys are never generated, key entry happens 'in a local popup on apply', allowed_address is validated, and endpoint accepts '' to clear. It omits other important behaviors, notably the dry_run default of true and the rollback_minutes safety window, which an agent needs to know before mutating a peer.
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?
Dense and front-loaded: the core purpose comes first, then per-parameter notes in a compact format. Slightly fragmented across lines but every sentence adds information with little waste.
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?
An output schema exists, so return values need not be explained, and the description covers the trickiest parameters. But for a 13-parameter mutation tool with no annotations, the omission of dry_run/rollback safety semantics and most parameter meanings leaves the agent under-informed.
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, and it only documents about half the 13 parameters (allowed_address syntax, endpoint format, replace_*_key, new_public_key alias). It says nothing about disabled, new_comment, persistent_keepalive, rollback_minutes, or dry_run, leaving significant gaps on a low-coverage 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 and resource ('Modify a WireGuard peer') and names the lookup key ('found by its public key or comment'), which clearly separates it from wireguard_add_peer, wireguard_remove_peer, and wireguard_create_interface.
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 word 'Modify' plus the peer lookup implies this is for changing existing peers rather than creating them, and the endpoint note ('"" to clear (roaming client)') gives a concrete usage condition. However, there is no explicit when-to-use vs the sibling mutation tools, and no mention of prerequisites such as needing an existing interface.
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.2.0- First observed
apply_changes - First observed
audit_security - First observed
collect_info - First observed
configure_wifi - First observed
confirm_changes - First observed
connect - First observed
disconnect - First observed
discover_routers - First observed
firewall_baseline - First observed
harden_services - First observed
list_sessions - First observed
reconnect - First observed
rollback_now - First observed
router_overview - First observed
run_command - First observed
setup_bridge_with_wifi_subnet - First observed
validate_network - First observed
wireguard_add_peer - First observed
wireguard_create_interface - First observed
wireguard_remove_peer - First observed
wireguard_status - First observed
wireguard_update_peer
TDQS
Scored across 22 tools
Most tools have clearly distinct purposes (e.g., configure_wifi vs firewall_baseline vs wireguard_create_interface). However, there is some overlap between run_command, apply_changes, and collect_info, and between connect, reconnect, and disconnect, which could cause minor confusion. The descriptions help clarify boundaries.
All tool names follow a consistent snake_case verb_noun pattern. Examples include discover_routers, configure_wifi, validate_network, apply_changes, and wireguard_add_peer. There are no naming inconsistencies.
22 tools is slightly on the higher side but appropriate for the breadth of functionality (session management, Wi-Fi, firewall, WireGuard, auditing, etc.). Each tool appears to serve a distinct purpose, though some could potentially be merged (e.g., connect/reconnect).
The tool set covers a wide range of MikroTik management tasks: discovery, connection, configuration, security, and WireGuard. Some areas might be missing, such as user management, logging, or advanced routing, but core workflows are well-supported.
Maintenance
Related MCP Connectors
Scoped, audited SSH exec, sessions, and SFTP on your saved servers without exposing credentials
- emisarOAuthdev.emisar
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Securely control computers you explicitly pair through files, terminals, processes, screenshots, desktop UI/input, clipboard, browser automation, diagnostics, and document tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables management of MikroTik routers running RouterOS 6 and 7 via SSH, Telnet, or API with automatic command adaptation. Provides over 46 MCP tools for device management, firewall, DHCP, VPN, configuration profiles, and more.3MIT
- AlicenseDqualityBmaintenanceEnables managing MikroTik RouterOS devices via natural language, with read-heavy network inspection and guarded write access across multiple routers.261Apache 2.0
- FlicenseAqualityBmaintenanceEnables management of multiple MikroTik RouterOS devices over SSH via two tools: device listing and command execution.2-
- 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.26 npm1GPL 3.0