Skip to main content
Glama

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

discover_routers (finds MikroTiks on the LAN, like Winbox Neighbors), connect, reconnect, list_sessions, disconnect

Information

router_overview, run_command (read-only), collect_info (full export plus status, saved per site)

Wi-Fi

configure_wifi: SSID, password, WPA2/WPA3, country. Supports the legacy wireless, new wifi (7.13+) and wifiwave2 drivers

Bridge

setup_bridge_with_wifi_subnet: LAN ports and Wi-Fi in a bridge, Wi-Fi on its own subnet with DHCP, optional isolation from the LAN

Security

audit_security (read-only report), harden_services, firewall_baseline

Validation

validate_network: checks any address/subnet you enter (/24 or 255.255.255.0) and shows mask, network, broadcast, usable range and overlaps

WireGuard (v7)

wireguard_status, wireguard_create_interface, wireguard_add_peer (optional client .conf / QR), wireguard_update_peer, wireguard_remove_peer. Keys are never generated by the server

Site-to-site tunnels (v7)

tunnel_setup (WireGuard + iBGP/OSPF/static, hub and spokes; generates a CLI script when the other router is unreachable), tunnel_verify (handshake, ping both ways, routing, login to every router through the tunnel). See docs/runbook-tunnels.md

Changes

apply_changes (custom commands), confirm_changes, rollback_now

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:

    1. saves the current config to your computer,

    2. saves a backup on the router (mcp-pre.backup),

    3. 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

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 | sh

Close 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-mcp

This creates the command sos-microtik-mcp with all its dependencies included. To find its full path (you may need it later):

uv tool dir --bin

Typical locations:

  • Windows: C:\Users\<you>\.local\bin\sos-microtik-mcp.exe

  • macOS / Linux: ~/.local/bin/sos-microtik-mcp

Private repository? Make sure git can 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-mcp

If 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 list

mikrotik 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.json

  • macOS: ~/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

audit_security

See findings by severity (filterable) with the fix for each, and re-run the audit

WireGuard

wireguard_status

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.py

This writes mikrotik_ui.py. Commit that file too, so that installing from GitHub doesn't need a build step.


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 ssh

If SSH is restricted by address, include your laptop's subnet:

/ip service set ssh address=192.168.88.0/24

2. 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

ssh,read,sensitive

Configuration changes + rollback

ssh,read,write,policy,sensitive,reboot

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/24

192.168.20.1, mask 255.255.255.0

192.168.20.1 255.255.255.0

same

192.168.20.1/255.255.255.0

same

10.10.10.2/32, 192.168.50.0 255.255.255.0

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.255 are 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/24 used as a route is corrected to 192.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 .conf / QR code)

Entered in a local popup only. If you skip it, a template .conf is saved instead.

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

  1. Claude runs the tool as a dry run and shows you the plan and the commands.

  2. You approve. Claude applies the change, and the rollback timer starts.

  3. You verify that the internet, Wi-Fi and LAN still work.

  4. Claude calls confirm_changes. If something is wrong, it calls rollback_now, or you simply wait for the timer.

Tips

  • Run collect_info at 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, then ipconfig /renew), have Claude reconnect to 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_bridge if 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-mcp

If it doesn't pick up the latest commit, reinstall it:

uv tool install --force git+https://github.com/howlerdevone/sos-microtik-mcp

Then 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-mcp

Also 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 claude_desktop_config.json, and fully restart the app. The tools still work as text without the panel.

claude mcp list shows failed

Run sos-microtik-mcp by hand in a terminal. If it waits silently, it works (press Ctrl+C). Otherwise it prints the real error. Use the full path when registering.

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 python3-tk and use Option B.

discover_routers finds nothing

Make sure you're on the router's LAN, allow UDP 5678 in your laptop's firewall, and check /ip neighbor discovery-settings. You can still connect directly by IP.

discover_routers says the address is in use

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 /ip service address restriction includes you, and the firewall allows TCP 22.

"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 reconnect to the new IP and then confirm.

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 tools
apply_changesA

Apply arbitrary RouterOS commands (one per list item) when no dedicated tool fits. Same safety net: backup + rollback timer + stop on first error.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
dry_runNo
commandsYes
descriptionYes
rollback_minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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//.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
siteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
siteYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
siteNo
ssidYes
countryNo
dry_runNo
passwordNo
securityNowpa2-wpa3
interfacesNo
ensure_ap_modeNo
rollback_minutesNo
generate_passwordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYes
nameNorouter
portNo
passwordNo
usernameNoadmin

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
add_natNo
dry_runNo
wan_interfaceNo
lan_interfacesNo
replace_existingNo
rollback_minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
dry_runNo
disable_upnpNo
disable_servicesNo
restrict_mgmt_toNo
rollback_minutesNo
ssh_strong_cryptoNo
mac_access_lan_onlyNo
disable_socks_proxy_bwtestNo
neighbor_discovery_lan_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
new_hostNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
commandYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
dhcpNo
modeNovlan
nameNorouter
bridgeNobridge
dry_runNo
lan_portsNo
dhcp_rangeNo
wifi_portsNo
lan_addressNo
wifi_bridgeNobridge-wifi
wifi_gatewayYes
wifi_vlan_idNo
wan_interfaceNo
rollback_minutesNo
isolate_wifi_from_lanNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
valueYes
purposeNointerface

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
siteNo
commentNo
dry_runNo
endpointNo
interfaceYes
client_dnsNo
public_keyNo
preshared_keyNo
allowed_addressYes
server_endpointNo
rollback_minutesNo
use_preshared_keyNo
client_allowed_ipsNo
write_client_configNo
persistent_keepaliveNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
addressYes
dry_runNo
wg_nameYes
listen_portYes
private_keyNo
trust_as_lanNo
rollback_minutesNo
allow_in_firewallNo
private_key_sourceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
peerYes
dry_runNo
interfaceYes
rollback_minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNorouter
peerYes
dry_runNo
disabledNo
endpointNo
interfaceYes
new_commentNo
new_public_keyNo
allowed_addressNo
rollback_minutesNo
replace_public_keyNo
persistent_keepaliveNo
replace_preshared_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 22 tool updatesv0.2.0
    • First observedapply_changes
    • First observedaudit_security
    • First observedcollect_info
    • First observedconfigure_wifi
    • First observedconfirm_changes
    • First observedconnect
    • First observeddisconnect
    • First observeddiscover_routers
    • First observedfirewall_baseline
    • First observedharden_services
    • First observedlist_sessions
    • First observedreconnect
    • First observedrollback_now
    • First observedrouter_overview
    • First observedrun_command
    • First observedsetup_bridge_with_wifi_subnet
    • First observedvalidate_network
    • First observedwireguard_add_peer
    • First observedwireguard_create_interface
    • First observedwireguard_remove_peer
    • First observedwireguard_status
    • First observedwireguard_update_peer

TDQS

A3.5/5.0

Scored across 22 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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).

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables 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 npm
    1
    GPL 3.0