Skip to main content
Glama

MikroMCP

AI-native network automation for MikroTik RouterOS. MikroMCP exposes RouterOS as a typed, auditable Model Context Protocol server so Claude, Cursor, Codex, and other MCP clients can inspect, diagnose, and safely operate MikroTik routers in natural language.

CI Release Version License: MIT Node.js >= 22 RouterOS 7.x MCP Server Tools MikroMCP MCP server

MikroMCP exists because raw router CLI access is the wrong abstraction for AI agents. RouterOS is powerful, but asking an LLM to improvise shell commands against production network gear is risky. MikroMCP gives agents a controlled tool surface: strict schemas, idempotent writes, dry-run previews, per-router circuit breakers, retry policies, RBAC, audit logs, snapshots, and rollback-aware change workflows.

In one sentence: MikroMCP turns MikroTik RouterOS into a production-minded MCP control plane for AI infrastructure, DevOps automation, and modern router management.

AI assistant connected through MikroMCP to a small MikroTik fleet, with tool calls flowing through validation, audit, and RouterOS REST


Quick Start

That's the whole setup for a single-router stdio deployment. For standalone binaries, Docker, HTTP/SSE mode, the RouterOS API prerequisites, and the full 15-minute walkthrough, see the Getting Started guide.


Related MCP server: RouterOS MCP Server

Feature Showcase

Category

What MikroMCP covers

๐Ÿงญ Router management

System status, clock, reboot, packages, files, scripts, scheduler jobs, containers

๐ŸŒ Network operations

Interfaces, VLANs, IP addresses, DHCP leases, DNS static records, bridge ports, WiFi clients

๐Ÿ”ฅ Firewall and policy

Filter/NAT rules, mangle rules, address lists, route tables, routing rules

๐Ÿ›ฐ๏ธ Routing visibility

Static routes, routing tables, BGP peers, OSPF neighbors

๐Ÿ”€ SwOS switches

Experimental. MikroTik SwOS and SwOS Lite switches (deviceType: "swos") over the reverse-engineered .b HTTP API: port links, PoE, SFP diagnostics, and guarded whole-blob writes with a firmware-compatibility check

๐Ÿ” Secure access

HTTP bearer auth, bcrypt token hashes, RBAC, router/tool restrictions, confirmation tokens

๐Ÿงช Diagnostics

Router-originated ping, traceroute, torch, log filtering, guarded SSH command execution

๐Ÿ›ก๏ธ Change safety

Dry-run, idempotent writes, snapshots, write journal, plan_changes, apply_plan, rollback_change

โš™๏ธ Production behavior

Retries for read tools, per-router circuit breakers, correlation IDs, structured logs, audit logs

๐Ÿค– AI-agent fit

Human-readable responses plus structured JSON content for reasoning, chaining, and automation; server advertises an instructions string on MCP initialize so clients self-configure; optional routerId resolved via MIKROMCP_DEFAULT_ROUTER for single-router setups; usage skill for safe, guided tool use in Claude Code

๐Ÿงฉ MCP compatibility

stdio for desktop clients, Streamable HTTP and legacy SSE for remote or service-style clients

122 typed tools in total โ€” browse the full catalog with parameters, defaults, and copy-paste example prompts in Available Tools.


Demo

Usage

Review by Claude

Claude Reviewed Router Configuration


Real-World Usage Examples

Router Inspection

Use MikroMCP to inspect core-01. Summarize system resources, RouterOS version,
running interfaces, active routes, DNS settings, and recent warning/error logs.
Flag anything that looks operationally risky.

Firewall Management

List firewall filter and NAT rules on edge-01. Identify disabled rules,
overlapping port forwards, broad accept rules, and anything without comments.
Do not change anything yet.

Safe Static Route Change

Dry-run a route on core-01 for 10.20.0.0/16 via 192.168.88.1 in the main table.
Show the exact planned diff and tell me whether an existing route conflicts.

WireGuard Operations

Show WireGuard peers on branch-02. Sort by last handshake age and flag peers
that have not handshaken recently or have no transfer counters.

Interface Diagnostics

Check interface health on edge-01, then run ping and traceroute from the router
to 1.1.1.1. If packet loss is present, use torch on the WAN interface for a
short traffic snapshot.

Plan / Apply / Rollback Workflow

Create a change plan that adds a DNS record and a firewall address-list entry
on edge-01. Use dry-run first, explain the plan, then wait for approval before
applying anything.

Why MikroMCP Is Useful For AI Agents

MCP gives LLMs a standard way to call tools. MikroMCP makes RouterOS a high-quality MCP target by turning network operations into well-described, machine-readable, permission-aware actions.

AI assistants can use MikroMCP to:

  • Investigate router state without memorizing RouterOS command syntax.

  • Chain tool calls across interfaces, routes, firewall rules, logs, and diagnostics.

  • Return both operator-friendly summaries and structured JSON for follow-up reasoning.

  • Preview changes before mutation and explain exactly what would happen.

  • Respect tool-level authorization, router scoping, maintenance windows, and confirmation gates.


FAQ

What is MikroMCP?

MikroMCP is an open-source Model Context Protocol (MCP) server that exposes MikroTik RouterOS as 122 typed, auditable tools โ€” letting AI assistants inspect, diagnose, and safely operate routers in natural language instead of improvising CLI commands.

MikroMCP vs RouterOS API

The RouterOS REST/API exposes raw endpoints. MikroMCP wraps them in schema-validated, idempotent, dry-run-able tools with RBAC, audit logging, snapshots, and rollback โ€” the safety layer an LLM needs before it touches production gear.

MikroMCP vs SSH automation

Instead of brittle SSH scripts that screen-scrape CLI output, MikroMCP returns structured, typed results with confirmation gates and per-router circuit breakers. SSH is used only where REST can't reach โ€” ping, traceroute, torch, and guarded run_command.

MikroMCP for Claude Code

MikroMCP speaks MCP over stdio and HTTP/SSE, so Claude Code and Claude Desktop drive RouterOS directly. Pair it with the bundled usage skill for safe, guided workflows.

MikroMCP for Codex

Codex connects to MikroMCP over the standard MCP protocol โ€” see Connecting to AI Assistants.

MikroMCP for Cursor

Cursor connects to MikroMCP as an MCP server (stdio or HTTP) to inspect and manage MikroTik routers without leaving the editor.

MikroMCP for OpenClaw

Any MCP-compatible client โ€” OpenClaw included โ€” can use MikroMCP; configure it as a stdio or HTTP MCP server.

RouterOS AI Automation Guide

Start with Getting Started to install and connect, then use the usage skill and Available Tools to automate RouterOS safely with an AI assistant.

Best MCP Servers for Network Engineers

MikroMCP is purpose-built for MikroTik/RouterOS operations with production-grade safety โ€” dry-run, rollback, audit, and RBAC โ€” making it a strong MCP choice for network engineers adopting AI tooling.


Documentation

The README stays intentionally short. Everything below is documented in depth in the wiki:

Resource

Use it for

Getting Started

Install (npm, binary, Docker), configure, and connect in 15 minutes

RouterOS API Setup

Enable the REST API, create a user, TLS and firewall

Configuration

Router registry, credentials, all environment variables

Running

Run commands, HTTP/SSE transport, troubleshooting

Connecting to Claude Desktop

Register MikroMCP in Claude Desktop

Connecting to AI Assistants

Claude Code, Cursor, Codex, HTTP/Docker/systemd

Using the Skill

Install the MikroMCP usage skill so your assistant drives the tools safely

Available Tools

All 122 tools โ€” parameters and example prompts

Architecture

System layers, request pipeline, auth model

Error Handling

Error categories, retry engine, circuit breaker

Security

Threat model, hardening checklist, vulnerability reporting

Development

Project structure, tests, MCP Inspector workflow

Contributing

Adding tools, coding conventions, PR checklist

Roadmap ยท ROADMAP.md

Shipped milestones and guiding principles


Contributing

Issues, bug reports, tool requests, documentation improvements, and pull requests are welcome.

Good first contributions:

  • Add a read-only tool for an uncovered RouterOS surface.

  • Add screenshots, demo GIFs, or topology diagrams.

  • Expand tests around RouterOS response normalization and idempotency edge cases.

  • Help validate RouterOS version compatibility across real MikroTik devices and CHR.

Development standards:

  • TypeScript strict mode, ESM imports with .js extensions

  • Zod schemas with .strict(), idempotency and dryRun for write tools

  • MikroMCPError for domain errors, focused Vitest coverage for every tool

Please open an issue before large changes so maintainers can align on scope.

Acknowledgements

  • @f0086 โ€” SwOS / SwOS Lite switch support (v1.9.0), which took MikroMCP beyond RouterOS for the first time.


Security

MikroMCP controls real network devices โ€” treat it like an operations system: least-privilege RouterOS users, verified TLS (or pinned fingerprints), credentials only in ~/.mikromcp/.env, scoped RBAC identities, and audit logging for shared use. The full hardening checklist and vulnerability-reporting process are on the Security page.


Community And Support

  • โญ Star the repository if MikroMCP helps your MikroTik or MCP workflow.

  • ๐Ÿด Fork it to add RouterOS surfaces your network depends on.

  • ๐Ÿงต Open an issue for bugs, feature requests, compatibility notes, or documentation gaps.


License

MikroMCP is released under the MIT License.

Available Tools

122 tools
apply_planApply PlanA
Destructive

Execute write operations in order, stopping on first failure. Each step is snapshotted and journaled individually. Non-admin identities need a confirmationToken (same two-step flow as other destructive tools). Undo individual steps via rollback_change with the returned journal IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesOrdered list of write operations to apply in sequence
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark the tool as destructive. The description adds detailed behavior: execution order, stopping on first failure, individual snapshotting and journaling, and the two-step auth flow for non-admins. It also exposes the undo capability via journal IDs, going well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long, front-loaded with the core behavior. Each sentence adds necessary information: execution behavior, authentication requirement, and undo mechanism. No redundant or extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and the presence of a detailed schema and annotations, the description covers key aspects: execution model, auth, and undo. It does not explain the structure of steps (handled by schema) or what happens after a failure (state might need clarification), but it mentions journal IDs for rollback, which implies the return value. Overall, it is sufficiently complete for an agent to use the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so parameters routerId, steps, and confirmationToken are already described. The description adds meaning by explaining that confirmationToken is part of a two-step flow for non-admins, and that steps are journaled individually, which hints at the return of journal IDs (used in rollback). This improves upon the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool executes write operations sequentially, stopping on failure, and distinguishes from siblings like plan_changes (which presumably creates the plan) and rollback_change (undo). The verb 'execute' paired with 'write operations in order' is specific and unambiguous.

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

Usage Guidelines4/5

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

The description provides guidance on when to use the tool: after obtaining a confirmationToken for non-admin identities, similar to other destructive tools. It also suggests using rollback_change for undoing steps. However, it does not explicitly state prerequisites (e.g., needing a plan from plan_changes) or when not to use it, but the sibling context implies this.

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

bandwidth_testBandwidth TestA
Read-only

Run a RouterOS bandwidth test from the router to a remote host running a RouterOS btest server. Returns TX and RX throughput in Mbps. Duration capped at 20 seconds. Saturates the link โ€” not auto-retried.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesRemote host running RouterOS btest server
durationNoTest duration in seconds (max 20)
protocolNoTest protocoltcp
routerIdNoRouter ID; omit to use the default router.
directionNoTest directionboth

TDQS

A4.2/5.0
Behavior4/5

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

Annotations include readOnlyHint=true and destructiveHint=false, but the description adds critical context: the test saturates the link and is not auto-retried. This goes beyond the annotations, which already indicate safe behavior, to warn about real-world impact.

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 just two sentences. The first sentence states purpose and output, the second adds key constraints and warnings. Every word is necessary; no fluff.

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?

No output schema exists, so the description correctly includes return format. It covers the main behavioral traits (duration cap, link saturation, no retry). However, it does not mention error cases (e.g., if the remote host is not running a btest server). For a simple diagnostic tool, this is nearly complete.

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

Parameters4/5

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

All 5 parameters are documented in the schema (100% coverage). The description adds value by specifying that the tool returns TX and RX throughput in Mbps, which is not present in the input schema. No further parameter details are needed beyond what schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool runs a RouterOS bandwidth test, specifies it tests from router to a remote host running a btest server, and returns TX/RX throughput. It distinguishes itself from sibling diagnostic tools like ping, traceroute, and torch by focusing specifically on bandwidth testing.

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

Usage Guidelines3/5

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

The description provides context about duration cap and link saturation, implying careful use, but does not explicitly state when to use vs. alternatives (e.g., ping for latency, traceroute for path). No exclusions or when-not-to-use guidance is given.

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

bulk_executeBulk ExecuteA

Fan out a single-router tool to many routers in parallel (up to concurrency), targeted by routerIds or tag. Destructive tools need two-step confirmation: call without confirmationToken to get a fleet token (needs MIKROMCP_CONFIRMATION_SECRET), then re-call with it. Writes snapshot+journal each router for rollback. Returns per-router results with succeeded/failed counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTarget all routers with ALL of these tags (mutually exclusive with routerIds)
paramsYesParams to pass to the tool (omit routerId โ€” injected per router)
toolNameYesName of the tool to fan out (must be a single-router tool)
routerIdsNoExplicit list of router IDs to target
concurrencyNoMax simultaneous router calls
confirmationTokenNoFleet confirmation token from a prior APPROVAL_REQUIRED response. Required to fan out a destructive tool.

TDQS

A4.4/5.0
Behavior4/5

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

With sparse annotations, the description adds valuable behavioral context: it writes snapshot+journal per router for rollback and requires two-step confirmation for destructive tools. It does not disclose idempotency or all side effects, but covers key behaviors.

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 three sentences, front-loaded with the main purpose, and every sentence adds value. No fluff or waste.

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 tool with 6 parameters, 2 required, no output schema, and nested objects, the description covers the main points: purpose, targeting, destructive confirmation, rollback, and return format. It could mention that params are passed to the target tool, but overall it is complete enough for an agent.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds meaning beyond schema: explains targeting methods, the two-step confirmation, return structure (per-router results with counts), and that params should omit routerId. This clarifies the purpose of each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool's purpose: 'Fan out a single-router tool to many routers in parallel.' It specifies the verb (fan out) and resource (single-router tool to many routers), and distinguishes it from siblings which are single-router tools.

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

Usage Guidelines4/5

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

The description provides explicit guidance on the two-step confirmation for destructive tools and targeting by routerIds or tags. It does not explicitly state when not to use it, but the context makes it clear that this is a bulk operation for coordinating multiple routers.

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

check_router_healthCheck Router HealthA
Read-onlyIdempotent

Probe a device: RouterOS routers via system/resource, SwOS switches via sys.b. Returns health status, firmware version, uptime, and (RouterOS only) CPU load and memory info. Unlike other tools, this never throws โ€” unreachable devices are reported as healthy=false.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds valuable behavioral context: 'never throws' and the unreachable-device handling (reported as healthy=false), plus the distinction between RouterOS and SwOS. This goes beyond annotations without contradiction, though it doesn't cover auth or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the primary action, and every clause adds value (device types, return fields, and the non-throwing behavior). No redundancy or fluff; it is efficiently structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and no output schema, the description sufficiently covers what the tool does, what it returns, and its failure mode. It also clarifies platform-specific differences in returned data, making it complete for the given complexity.

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

Parameters3/5

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

Schema coverage is 100% since the only parameter, routerId, has a clear description ('Router ID; omit to use the default router'). The description does not add any additional semantics beyond the schema, matching the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool's action: 'Probe a device' with specific protocols (system/resource, sys.b) and explicitly lists the returned fields (health status, firmware version, uptime, CPU load, memory info). It distinguishes itself from siblings by mentioning 'Unlike other tools, this never throws,' making its unique behavior clear.

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

Usage Guidelines3/5

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

The description implies usage via 'Probe a device' and its focus on health, but it does not explicitly state when to use this tool over alternatives, nor does it name specific sibling tools. The 'Unlike other tools' hint suggests robustness as a differentiator, but exclusions or alternative recommendations are absent.

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

create_backupCreate BackupA

Create a binary configuration backup on a MikroTik router. The backup is saved as .backup on the router's filesystem. Supports optional encryption via password and dry-run mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoBackup file name (without extension)backup
dryRunNoPreview the backup without creating it
passwordNoPassword to encrypt the backup file
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate non-destructive and read-write nature. The description adds dry-run mode and encryption support but does not mention potential overwrites of existing files, permissions required, or whether the backup is synchronous. The added context 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 brief with three sentences. The first sentence immediately states the core purpose, followed by details. No wasted words.

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?

No output schema is provided, yet the description does not hint at the return value (e.g., success message, file path). It also omits potential errors like insufficient space or existing backup handling. For a creation tool, additional context about the outcome would be beneficial.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining that the name parameter results in a .backup file and that password enables encryption. Dry-run mode is also clarified. This goes beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool creates a binary configuration backup on a MikroTik router and specifies the output file format. This verb+resource combination is specific and distinct from sibling tools like export_config or delete_file.

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

Usage Guidelines3/5

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

The description implies the tool is for creating backups but does not explicitly state when to use it versus alternatives like export_config (which exports readable config). No when-not-to-use guidance is provided.

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

delete_fileDelete FileA
DestructiveIdempotent

Delete a file from the router filesystem by name. Idempotent: returns not_found gracefully if the file does not exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact file name on the router (e.g. flash/backup.backup)
dryRunNoPreview deletion without removing the file
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.6/5.0
Behavior4/5

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

The description adds value beyond annotations by stating 'returns not_found gracefully if the file does not exist.' Annotations already provide destructiveHint=true and idempotentHint=true, so the description elaborates on the idempotent behavior. However, it could mention permission requirements or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences, front-loading the key action ('Delete a file...'). No redundant information, and each sentence serves a purpose.

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?

Given the tool has 4 parameters including dryRun and confirmationToken, the description does not explain their purpose or the approval flow. Since there is no output schema, the description should hint at return values. The tool is destructive, so missing context on confirmation token undermines safe usage.

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

Parameters3/5

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

Schema coverage is 100%, so the input schema already documents each parameter (routerId, name, dryRun, confirmationToken). The tool description adds no additional meaning beyond the schema, meeting the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool's purpose: 'Delete a file from the router filesystem by name.' It uses a specific verb ('Delete') and resource ('file'), distinguishing it from sibling tools like upload_file, list_files, and manage_* tools.

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 explicit guidance on when to use this tool versus alternatives. The description mentions idempotency and graceful handling of non-existent files, but does not provide context for when deletion is appropriate or when to prefer other tools (e.g., backup before delete).

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

export_configExport ConfigA
Idempotent

Export the router configuration as a RouterOS script. When no file is specified, returns the script text inline. When a file is specified, saves it as .rsc on the router's filesystem. Supports compact mode to show only non-default values.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoSave the export to a file on the router (without extension); omit to return inline
compactNoExport only non-default settings (compact format)
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate safe behavior (idempotent, non-destructive). The description adds context about inline vs file output and compact mode, but doesn't mention file overwrite behavior or permissions. With annotations, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, no filler. Front-loaded with purpose. Every sentence adds essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters, no required fields, and no output schema, the description covers the main behaviors (inline vs file, compact). Lacks error handling or return format details beyond 'script text', but sufficient for a non-destructive export 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?

Schema description coverage is 100%, so schema already documents parameters. The description adds value by specifying that file saves as <file>.rsc and that inline returns script text, which enriches the schema's bare explanations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states that the tool exports router configuration as a RouterOS script, distinguishes between inline output and file saving, and mentions compact mode. It differentiates from siblings by being the only config export tool.

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

Usage Guidelines3/5

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

The description implies usage for exporting config but does not explicitly state when to use this over alternatives like create_backup or other config retrieval methods. No exclusions or alternative tool names are given.

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

fetch_urlFetch URLA

Send an HTTP/HTTPS request from the router using /tool/fetch. Response body is returned inline (capped at 64 KB with [TRUNCATED] marker). Use outputFile to save to router filesystem instead. Not read-only: POSTs have side effects and outputFile writes to the router.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to fetch from the router
methodNoHTTP methodGET
httpDataNoRequest body for POST
routerIdNoRouter ID; omit to use the default router.
outputFileNoSave response body to this router file path instead of returning inline

TDQS

A4.6/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=false, destructiveHint=false), the description adds critical details: inline response capped at 64 KB with truncation marker, side effects of POST, and filesystem writes via outputFile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences efficiently convey purpose, usage, and behavioral traits without redundancy. Front-loaded with the action and resource, each sentence adds distinct value.

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 tool with 5 parameters and no output schema, the description covers main aspects: request method, response behavior, output options, and side effects. Lacks details on authentication or error handling, but sufficient for most use cases.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all parameters. The tool description does not add new parameter-specific details beyond the schema, but it provides context on outputFile behavior. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool sends HTTP/HTTPS requests from the router using /tool/fetch, specifying the verb (send) and resource (request). It distinguishes itself from sibling network tools by its unique action.

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

Usage Guidelines5/5

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

The description explicitly explains when to use inline response vs outputFile, and warns that POSTs have side effects and outputFile writes to the router filesystem. This provides clear guidance on tool usage and alternatives.

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

get_container_configGet Container ConfigA
Read-onlyIdempotent

Read global container configuration: registry URL, RAM high-water mark, and veth interface.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate read-only, non-destructive, and idempotent behavior. The description confirms the read operation and lists specific fields returned, adding some context but not elaborating on other behavioral traits like permissions or error 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?

The description is a single 12-word sentence that is front-loaded and contains no unnecessary words. Every part is informative and 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 simple read tool with one optional parameter, the description is fairly complete. It lists the specific configuration items returned. Minor omission: does not clarify behavior when routerId is omitted vs provided, but the schema param description covers that. Output schema is absent but the description mitigates it by listing fields.

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

Parameters3/5

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

The input schema has 100% coverage with a clear description for the optional 'routerId' parameter. The description does not need to add further parameter details, and the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb 'Read' and specifies the resource 'global container configuration' along with exact items (registry URL, RAM high-water mark, veth interface). This distinguishes it from write siblings like manage_container_config.

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

Usage Guidelines3/5

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

The description implies usage for reading configuration but does not explicitly state when to use this tool versus alternatives (e.g., manage_container_config for modifications). No exclusions or when-not-to-use guidance is provided.

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

get_dns_settingsGet DNS SettingsA
Read-onlyIdempotent

Read DNS resolver configuration: upstream servers, cache size, cache TTL, and whether remote DNS requests are allowed.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, indicating a safe, read-only, idempotent operation. The description adds context by enumerating exactly what configuration fields are read (upstream servers, cache size, etc.), which goes beyond the annotation metadata and helps the agent understand the return content.

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, well-structured sentence that begins with the imperative verb 'Read' and immediately states the resource. Every word serves a purpose, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with one optional parameter and no output schema, the description is fairly complete. It lists all major fields that would be returned. However, it lacks details about potential error conditions or the exact structure of the response, but it is sufficient given the tool's low complexity and the presence of supportive annotations.

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

Parameters3/5

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

Schema coverage is 100% for the single optional parameter 'routerId', which the schema describes as 'Router ID; omit to use the default router.' The description does not add any additional meaning about this parameter beyond what the schema already provides. Since coverage is high, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool reads DNS resolver configuration and lists specific attributes: upstream servers, cache size, cache TTL, and remote DNS request allowance. It uses a specific verb ('Read') and resource ('DNS resolver configuration'), and is easily distinguishable from sibling tools like manage_dns_settings (write) and get_ntp_settings (different resource).

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention that manage_dns_settings is used for modifications, nor does it specify any prerequisites or restrictions (e.g., router context). The agent must infer usage from the 'Read' verb alone.

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

get_file_contentGet File ContentA
Read-onlyIdempotent

Read a text file's contents from a MikroTik router. Only suitable for text files โ€” binary files will return garbled content.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact file name on the router (e.g. flash/script.rsc)
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate read-only and idempotent behavior. The description adds a critical behavioral note about binary files causing garbled output, which is not captured in 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no extraneous information. Every word adds value.

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?

No output schema, so the description could specify return format (e.g., plain text). However, given the simple read operation and rich annotations, the current description is nearly complete.

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

Parameters3/5

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

Schema coverage is 100% and parameter descriptions are adequate. The description does not add new meaning beyond the schema, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states 'Read a text file's contents from a MikroTik router,' providing a specific verb and resource. It effectively distinguishes from sibling tools like upload_file or delete_file.

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

Usage Guidelines4/5

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

Explicitly warns that binary files return garbled content, guiding the agent to use this tool only for text files. Does not name alternative tools for binary files, but the guidance is clear.

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

get_logGet LogA
Read-onlyIdempotent

Read and filter the system log from a MikroTik router. Supports filtering by topic, message prefix, and a time window (last N minutes) measured against the router's own clock. Entries with unparseable timestamps are included conservatively.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
prefixNoSubstring to match against the log message
topicsNoFilter entries whose topics field contains any of these strings (e.g. ["firewall", "dhcp"])
routerIdNoRouter ID; omit to use the default router.
sinceMinutesNoOnly return entries from the last N minutes (1โ€“1440), measured against the router's clock

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds valuable behavioral details: time window measured against router's clock and conservative inclusion of unparseable timestamps, which go beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, with the first sentence delivering the core purpose and the second adding key features and an edge case. Every word serves a purpose; no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 6 optional parameters and no output schema, the description covers main filtering options and an edge case. It lacks detail on return format, but the tool's name and purpose imply a list of log entries; sufficient for a read operation.

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?

All parameters have descriptions in the schema (100% coverage). The description only summarizes filtering by topic, prefix, and time window, adding no new details beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly specifies the verb 'Read and filter' and the resource 'system log from a MikroTik router'. It distinguishes the tool from sibling list tools by focusing on log reading with filtering capabilities, leaving no ambiguity about its purpose.

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

Usage Guidelines4/5

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

The description outlines supported filters (topic, prefix, time window), implying when to use the tool (e.g., when logs need filtering). However, it does not explicitly state when not to use it or suggest alternatives, though no direct sibling conflict exists.

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

get_ntp_settingsGet NTP SettingsA
Read-onlyIdempotent

Retrieve NTP client settings from a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds only generic context ('from a MikroTik router') without additional behavioral details.

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 concise sentence that conveys the core purpose without unnecessary words, well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with no output schema, the description adequately covers what the tool does, though it could specify what 'NTP client settings' includes.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter 'routerId' is already described in the schema. The description adds no further parameter information.

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 ('Retrieve') and resource ('NTP client settings') and clearly distinguishes from sibling tools like 'manage_ntp_client' which suggests mutation.

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

Usage Guidelines3/5

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

The description provides no explicit guidance on when to use this tool versus alternatives, though the purpose is clear from the name and context.

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

get_ovpn_serverGet OpenVPN ServerA
Read-onlyIdempotent

Get the OpenVPN server configuration on a MikroTik router. Throws NOT_FOUND if the OpenVPN package is not installed.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate safe, read-only, idempotent behavior. The description adds value by disclosing that a NOT_FOUND error occurs if the OpenVPN package is missing, which is not covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the main action, and contains no redundant or irrelevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with good annotations, the description covers the core purpose and one key error. However, it could mention the return format or additional error cases for 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 coverage is 100% with a clear description for the single optional parameter (routerId). The tool description does not add extra parameter meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool retrieves OpenVPN server configuration on a MikroTik router, with a specific error condition. It distinguishes from siblings like manage_ovpn_server (modification) and list_ovpn_clients (client list).

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

Usage Guidelines4/5

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

The verb 'Get' and readOnlyHint imply read-only usage, and the description mentions an error condition (NOT_FOUND). However, it does not explicitly state when to avoid using it or name alternatives for write operations.

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

get_snmp_settingsGet SNMP SettingsA
Read-onlyIdempotent

Retrieve SNMP settings from a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate the tool is read-only, non-destructive, idempotent, and has a closed world. The description adds minimal behavioral context beyond stating the resource type and source device. It does not contradict annotations but also does not disclose any additional behaviors or constraints.

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, concise sentence with no unnecessary words. It is front-loaded and immediately conveys the tool's purpose.

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?

Given the simplicity of the tool (one optional parameter, no output schema, no nested objects), the description is minimally adequate. However, it lacks details about which specific SNMP settings are returned or any format expectations, which would improve 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 100%, with the single optional parameter well-documented in the schema. The description adds no additional meaning about parameters beyond what the schema provides, so the baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb 'Retrieve', the resource 'SNMP settings', and the target 'MikroTik router'. It distinctly identifies the tool's function and differentiates it from sibling tools like get_dns_settings or get_ntp_settings.

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. There is no mention of prerequisites, typical usage scenarios, or when to prefer other tools for similar purposes.

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

get_swos_endpointGet SwOS EndpointA
Read-onlyIdempotent

Fetch and decode a single SwOS '.b' endpoint (link.b, sys.b, poe.b, lacp.b, rstp.b, snmp.b, fwd.b, vlan.b, stats.b, sfp.b, host.b, acl.b, ...) as structured data. Unknown keys are preserved under '_raw'.

ParametersJSON Schema
NameRequiredDescriptionDefault
endpointYes'.b' endpoint to fetch (see list_swos_endpoints)
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds useful behavioral detail beyond those hints: it decodes the payload into structured data and preserves unknown keys under '_raw'. It does not describe error cases or pagination, but with the strong annotation safety profile the description contributes enough meaningful context.

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 only two sentences and opens with an imperative verb for the intended action. Example endpoints are embedded, no filler words, and the key behavior about unknown keys comes in the final sentence. Every line is informative.

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 small read-only tool with two parameters and an enum, the description covers the essential message: fetch one endpoint, decode it, and handle unknown keys. It does not go into exact output shape or error scenarios, but no output schema exists and the annotations and latitude with the schema improve completeness. A short description of the return structure would bring it to a 5.

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

Parameters3/5

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

The schema reports 100% description coverage for both parameters, including an explicit enumeration for endpoint and a note for routerId. The tool description adds endpoint examples and behaves for unknown keys ('_raw'), but those are not parameter-level semantics, so the baseline of 3 is appropriate since structured schema data already carries the main payload.

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+resource: 'Fetch and decode a single SwOS .b endpoint' and clarifies the output format ('as structured data'). It lists many concrete endpoint examples (link.b, sys.b, poe.b, etc.), making the tool's scope unmistakable and distinguishing it from siblings like list_swos_endpoints and write_swos_blob.

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

Usage Guidelines4/5

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

The description makes clear when to invoke it: when you need to retrieve a single endpoint's decoded value, with handling for unknown keys. However, it never names alternatives or explicitly states when not to use this tool, so while context is crisp, it lacks explicit exclusion/alternative guidance.

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

get_swos_statusGet SwOS StatusA
Read-onlyIdempotent

Retrieve status from a MikroTik SwOS switch (SwOS or SwOS Lite): identity, model, firmware, uptime, per-port link state/speed/duplex, PoE mode/state/power, and SFP modules.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoWhich status endpoints to fetch
routerIdNoRouter ID; omit to use the default router.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds a compatibility constraint ('SwOS or SwOS Lite') and lists return content, but does not disclose deeper behavior like multiple HTTP requests, failure modes, or return format. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that leads with the action and resource, then compacts the full scope into a list. Every clause contributes meaning; no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only status tool with two well-documented parameters and strong annotations, the description is largely complete. It lists the returned data categories, making up for the lack of an output schema. It could have mentioned the include parameter's default behavior or the distinction from get_swos_endpoint, but these are minor gaps.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining what the cryptic enum values ('link.b', 'sys.b', 'poe.b', 'sfp.b') actually return: link state/speed/duplex, system identity/model/uptime, PoE details, and SFP modules. This maps directly to the include parameter, exceeding the schema's minimal 'Which status endpoints to fetch'.

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 uses a specific verb ('Retrieve') and a clear resource ('status from a MikroTik SwOS switch'), then enumerates the exact data categories: identity, model, firmware, uptime, per-port link state, PoE, and SFP modules. This distinguishes it from siblings like get_system_status (RouterOS status) and get_swos_endpoint (raw endpoint retrieval).

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

Usage Guidelines3/5

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

The description implies usage: it should be used when you need switch status information from a SwOS/SwOS Lite device. However, it provides no explicit when-to-use guidance, exclusions, or alternatives, such as noting that get_swos_endpoint is for raw endpoint data.

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

get_system_clockGet System ClockA
Read-onlyIdempotent

Read the current date, time, and timezone from a MikroTik router. Focused single-purpose alternative to the clock section in get_system_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds that it reads the clock, but no further behavioral details are provided. With annotations covering the safety profile, a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no wasted words. It is front-loaded with the purpose and immediately provides distinguishing context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with good annotations, the description is complete enough. It does not specify return values, but given the straightforward nature of the tool, this is not a major gap.

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

Parameters3/5

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

The schema provides 100% coverage for the single optional parameter (routerId). The description does not add additional semantics beyond the schema's parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states it reads date/time/timezone from a MikroTik router. It distinguishes itself from get_system_status by being a focused single-purpose alternative.

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

Usage Guidelines4/5

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

The description positions it as an alternative to the clock section in get_system_status, providing usage context. However, it does not explicitly state when not to use it or list other alternatives.

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

get_system_statusGet System StatusA
Read-onlyIdempotent

Retrieve system status information from a MikroTik router including resource usage, identity, license, routerboard details, health sensors, and clock.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.
sectionsNoWhich system information sections to include

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds context about the variety of data sections retrievable (e.g., health, clock) and mentions the routerId parameter. No contradictions.

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 that efficiently conveys the tool's purpose and scope. No wasted words.

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?

With 2 parameters fully described, no output schema, and annotations confirming safety, the description is adequate. However, it lacks any description of the output format or structure, which would be helpful for an agent to interpret results.

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

Parameters3/5

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

Schema coverage is 100% with both parameters (routerId, sections) having clear descriptions and enums. The description's mention of 'resource usage, identity, license, routerboard details, health sensors, and clock' maps directly to the sections enum, but adds no new meaning beyond the 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 clearly states the verb 'Retrieve' and resource 'system status' with a specific list of included sections (resource usage, identity, license, routerboard details, health sensors, clock). This distinguishes it from sibling tools like get_system_clock, which only returns clock info.

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

Usage Guidelines3/5

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

The description implies usage for retrieving broad system status but does not explicitly provide when-to-use or when-not-to-use guidance. Given many sibling tools that retrieve specific status pieces, it would benefit from stating that this is a comprehensive overview.

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

get_upgrade_statusGet Upgrade StatusA
Read-onlyIdempotent

Read the current RouterOS package upgrade status and routerboard firmware versions. Shows installed version, latest available version, update channel, and firmware upgrade availability.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds value by specifying the exact information returned (versions, channel, firmware availability), enhancing transparency beyond the annotations. No contradictions. A slight deduction because the description doesn't mention any side effects (though none exist).

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?

Single sentence, front-loaded with the key action and resource. No unnecessary words. Highly efficient.

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?

Tool is simple with one optional parameter and no output schema. Description fully explains the return values and covers all necessary context. No gaps.

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

Parameters3/5

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

Schema coverage is 100% (both properties described). The description does not add any additional meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description uses specific verb 'Read' and identifies the resource as 'RouterOS package upgrade status and routerboard firmware versions'. It lists concrete output fields (installed version, latest available, update channel, firmware upgrade availability), making its purpose crystal clear and distinguishing it from siblings like 'manage_upgrade' which perform modifications.

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?

No explicit 'when to use' or alternative guidance, but the name and description strongly imply it is for pre-upgrade checks. The sibling tool 'manage_upgrade' exists, suggesting this is for read-only status. A score of 4 reflects clear implicit usage without explicit exclusions.

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

list_address_list_entriesList Address List EntriesA
Read-onlyIdempotent

List firewall address list entries on a MikroTik router. Supports filtering by list name and address.

ParametersJSON Schema
NameRequiredDescriptionDefault
listNoFilter by address list name
addressNoFilter by address (IP or CIDR)
routerIdNoRouter ID; omit to use the default router.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so description does not need to reiterate safety. It adds filtering context but no additional behavioral details beyond schema. No contradictions.

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, efficient sentence that front-loads the core purpose and includes key detail (filtering) without superfluous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity as a read-only list operation with three optional parameters and no output schema, the description sufficiently covers the functionality. Slight gap: no mention of return format or ordering, but not critical.

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

Parameters3/5

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

Schema description coverage is 100%, providing clear definitions for all three parameters. The description merely repeats the filtering capability, adding no new meaning beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'firewall address list entries', and distinguishes it from sibling tools like 'manage_address_list_entry' by focusing on listing. The mention of filtering adds specificity.

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

Usage Guidelines4/5

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

The description indicates when to use the tool (to list entries with filtering options) but does not explicitly state when not to use it or suggest alternatives among siblings, though context is clear.

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

list_arp_entriesList ARP EntriesB
Read-onlyIdempotent

List ARP table entries on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
addressNoFilter by IP address (substring match)
routerIdNoRouter ID; omit to use the default router.
interfaceNoFilter by interface (substring match)
macAddressNoFilter by MAC address (substring match)

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds no behavioral details beyond that, such as pagination, performance impact, or rate limits. It fails to disclose any hidden behaviors.

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 extremely concise at 8 words, single sentence, no redundant information. Every word is meaningful.

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 description provides the basic purpose but omits details like the return format, default router behavior, or that filters use substring matching. For a simple list tool with full schema coverage, it is adequate but not thorough.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does not add any additional meaning beyond the schema descriptions. Parameters are adequately documented in the schema itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool lists ARP table entries on a MikroTik router. It is specific about the resource (ARP entries) and the action (list), and distinguishes it from other list tools by naming the resource type.

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 this tool versus alternatives like list_neighbors or address list tools. The description lacks context for when filtering by interface/address/mac is appropriate, and does not mention when to avoid using it.

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

list_bgp_peersList BGP PeersA
Read-onlyIdempotent

List BGP sessions on a MikroTik router (RouterOS 7+). Returns state, remote AS, prefix counts, and uptime.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoFilter by session state (e.g. established, active, idle)
routerIdNoRouter ID; omit to use the default router.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating safe read-only behavior. The description adds useful context: target RouterOS version 7+ and specific returned fields, enhancing transparency beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence that front-loads the purpose and returns, with no wasted words. It efficiently conveys the necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description provides sufficient context by listing return fields. It covers the core functionality, though missing details like default router behavior or error handling. Still, it is largely complete for a simple list tool.

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 covers both parameters with descriptions, achieving 100% coverage. The description adds examples of allowed state values (established, active, idle) but does not significantly add meaning beyond the schema. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states it lists BGP sessions on a specific platform (MikroTik RouterOS 7+), with explicit mention of returned fields (state, remote AS, prefix counts, uptime). This distinguishes it from sibling list tools like list_ospf_neighbors or list_ipsec_peers.

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?

No explicit guidance on when to use this tool vs alternatives (e.g., list_ospf_neighbors). Usage is implied by the purpose (BGP sessions), but no exclusions or context for when not to use it.

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

list_bridgesList BridgesA
Read-onlyIdempotent

List bridge interfaces and their port members on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate read-only, non-destructive, idempotent. Description adds that port members are included, but no additional behavioral details (e.g., pagination behavior, performance characteristics). Value added beyond annotations is minimal.

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?

Single sentence of 14 words, front-loaded with the verb 'List'. No unnecessary words or repetition. Every word 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?

Given the tool's simplicity and high schema coverage, the description is complete enough. It states what the tool returns (bridge interfaces and port members), which is sufficient for an agent to decide to invoke it. No output schema, but the implied return structure is clear.

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?

Input schema covers all 3 parameters (routerId, limit, offset) with descriptions. Description does not add further meaning beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description clearly states the action (List) and resource (bridge interfaces and their port members). It differentiates from sibling tools like 'list_interfaces' or 'manage_bridge' by specifying both the resource and the scope.

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?

No explicit guidance on when to use or when not to use this tool over alternatives. The name and description imply it's for retrieving bridge interface information, but no alternatives or exclusions are mentioned.

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

list_certificatesList CertificatesB
Read-onlyIdempotent

List certificates on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by certificate name (substring match)
limitNoMax results to return.
expiredNoFilter by expiry status; omit to return all
routerIdNoRouter ID; omit to use the default router.

TDQS

B3.2/5.0
Behavior3/5

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

The description does not add behavioral context beyond annotations (readOnlyHint=true, idempotentHint=true). It is truthful but shallow; no mention of filtering behavior or results handling.

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 sentence, no wasted words. However, the simplicity suits a list tool and information density is adequate.

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?

No output schema exists, but the description does not explain return values. Annotations cover safety, but for a list tool, describing the result format would improve 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?

Parameter descriptions in the input schema are complete (100% coverage). The tool description adds no new meaning, so baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description clearly states 'List certificates on a MikroTik router' with a specific verb and resource. It distinguishes the tool from siblings like list_files or list_interfaces, but does not elaborate on scope or differentiation.

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 this tool versus alternatives. Despite many sibling list tools, the description offers no context for selection or exclusion.

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

list_connectionsList ConnectionsA
Read-onlyIdempotent

List active connection tracking entries from the router firewall table. Filters are applied client-side. Useful for diagnosing NAT and firewall behavior.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
protocolNoFilter by protocol (exact match, e.g. tcp, udp, icmp)
routerIdNoRouter ID; omit to use the default router.
dstAddressNoFilter by destination address (substring match)
srcAddressNoFilter by source address (substring match)

TDQS

A4.4/5.0
Behavior5/5

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

Annotations (readOnlyHint: true, destructiveHint: false, idempotentHint: true) indicate a safe, read-only operation. The description adds that 'Filters are applied client-side,' which is crucial behavioral context not present in annotations, informing the agent about performance and data handling.

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 extremely concise, consisting of two sentences that cover purpose, source, filter behavior, and use case. Every word serves a purpose; no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 5 parameters, all documented in schema, and no output schema, the description covers the main function and filter behavior. It does not specify the return format (e.g., list of objects with fields), but for a simple list tool with read-only hints, this is reasonably complete.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents each parameter. The description adds limited value beyond the schema, only mentioning that filters are client-side, which is a general observation. No specific parameter meanings are elaborated beyond what's in the 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 clearly states the action (list) and the resource (active connection tracking entries from the router firewall table). This distinguishes it from many sibling list_* tools that target different resources (e.g., list_firewall_rules, list_interfaces).

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

Usage Guidelines4/5

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

The description mentions the tool is 'useful for diagnosing NAT and firewall behavior,' providing a clear use case. It does not explicitly state when not to use it or list alternatives, but the context is adequate given the sibling list of many specialized tools.

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

list_container_envsList Container EnvsA
Read-onlyIdempotent

List container environment variable entries, optionally filtered by container name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by container name (exact match)
limitNoMax results to return.
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds the filtering behavior, but overall adds little beyond the annotations. No contradiction.

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 sentence, 8 words, front-loaded with action and resource. Every word is necessary; no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with complete schema descriptions and informative annotations, the description is sufficient. No output schema is present, but the tool's purpose is straightforward. Could briefly note that entries are key-value pairs, but not critical.

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?

All three parameters have descriptions in the input schema (100% coverage). The description does not add new meaning beyond repeating the filtering capability. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the action (list), resource (container environment variable entries), and optional filtering by container name. It distinguishes itself from siblings like list_containers or manage_container_env.

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

Usage Guidelines3/5

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

The description implies usage for reading env entries, optionally filtered, but does not explicitly state when to use this tool vs alternatives like manage_container_env (which modifies). No when-not or exclusions are provided.

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

list_container_mountsList Container MountsA
Read-onlyIdempotent

List container volume mount definitions with source path, destination path, and mount name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by mount name (exact match)
limitNoMax results to return.
routerIdNoRouter ID; omit to use the default router.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description carries minimal burden. It adds no new behavioral details (e.g., pagination, permissions, default router behavior), which is acceptable but not exemplary.

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 extraneous words. It efficiently communicates purpose and output details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list query with three optional parameters and no output schema, the description is largely sufficient. It specifies returned fields. Minor omission: behavior when routerId is omitted (default router) is in schema, not description, but that's acceptable.

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

Parameters4/5

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

Schema coverage is 100%, so parameters are already described. The description adds value by specifying the output fields (source path, destination path, mount name), which aids in tool selection beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool lists container volume mount definitions and specifies the returned fields (source path, destination path, mount name). It distinguishes itself from sibling tools like manage_container_mount (which modifies mounts) and list_containers.

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 does not explicitly provide when-to-use or when-not-to-use guidance. It implies a read-only query, but lacks mention of alternatives or exclusions. However, the context of sibling tools makes usage inferable.

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

list_containersList ContainersA
Read-onlyIdempotent

List RouterOS container instances with status, image, and network information.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already declare the tool as readOnly (readOnlyHint=true), non-destructive, and idempotent. The description adds no behavioral context beyond these annotations, such as authorization needs or rate limits.

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, efficient sentence that is front-loaded with the core purpose. No wasteful words.

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 description provides basic purpose but lacks details on output format, pagination, or behavior when routerId is omitted. Given the simplicity and absence of output schema, it is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 100% for the only parameter (routerId). The description does not add any additional meaning or usage guidance for the parameter, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool lists RouterOS container instances with specific details (status, image, network information). It uses a specific verb 'List' and resource, and distinguishes from sibling list_* tools for other resource types.

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?

No explicit when-to-use or when-not-to-use guidance is provided. However, the name and description imply it is for listing containers, and siblings cover other resources, so usage is straightforward.

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

list_dhcp_clientsList DHCP ClientsA
Read-onlyIdempotent

List DHCP client configurations on a MikroTik router. Shows which interfaces obtain their IP via DHCP, current status, and assigned address.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
statusNoFilter by DHCP client statusall
routerIdNoRouter ID; omit to use the default router.
interfaceNoFilter by interface name (exact match)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, which assure safety. The description adds that it shows interface, status, and assigned address, enhancing transparency without contradiction.

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 consists of two concise, front-loaded sentences that state purpose and output without any unnecessary words. Every phrase adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, complete schema coverage, and read-only annotations, the description sufficiently explains the tool's purpose and output. No output schema is needed as the return values are straightforward.

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

Parameters3/5

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

Schema coverage is 100%, with all 5 parameters described in the schema. The description adds no additional parameter-level information beyond what the schema provides, meeting the baseline.

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 specifies the verb 'List', the resource 'DHCP client configurations', and the scope 'on a MikroTik router'. It clearly distinguishes from sibling tools like list_dhcp_leases (leases vs. client configs) and list_interfaces (broader scope).

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 does not explicitly state when to use this tool over alternatives, nor does it provide when-not-to-use or alternative suggestions. Usage context is only implied by the resource name and description.

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

list_dhcp_leasesList DHCP LeasesA
Read-onlyIdempotent

List DHCP leases on a MikroTik router with optional filtering by server, status, lease type (dynamic/static), and MAC address. Supports pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
serverNoFilter by DHCP server name
statusNoFilter by lease statusall
routerIdNoRouter ID; omit to use the default router.
leaseTypeNoFilter by lease type (dynamic or static)all
macAddressNoFilter by MAC address (exact match, case-insensitive)

TDQS

A4.5/5.0
Behavior5/5

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

The description is fully consistent with annotations (readOnlyHint, destructiveHint, idempotentHint). It adds context about filtering and pagination behavior, which complements the annotations without contradiction.

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, clear sentence that front-loads the core function and lists key capabilities. Every word adds value; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the rich schema, the description is complete. It mentions pagination (important for listing tools) and all filter options. No output schema is needed as the return format is implicit.

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

Parameters3/5

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

Schema coverage is 100% with good descriptions for all 7 parameters. The description briefly mentions the filter options but adds no significant semantic value beyond what the schema already provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool lists DHCP leases on a MikroTik router, with optional filtering by server, status, type, and MAC address, and supports pagination. It is specific and distinguishes it from sibling tools like 'list_dhcp_clients' and 'manage_dhcp_lease'.

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

Usage Guidelines4/5

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

The description implies when to use it (to view leases with optional filters) but does not explicitly mention when not to use it or suggest alternatives like 'manage_dhcp_lease' for modifications. The context is clear enough for a read-only list tool.

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

list_dhcp_serversList DHCP ServersA
Read-onlyIdempotent

List DHCP servers on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
routerIdNoRouter ID; omit to use the default router.
interfaceNoFilter by interface name (exact match)

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, fully describing the safety profile. The description adds no extra behavioral details beyond the obvious listing 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?

The description is a single, front-loaded sentence of six words. Every word is necessary and there is no redundancy.

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?

The tool is a simple list operation with no output schema, so the description is nearly complete. A minor improvement could be mentioning pagination or default router behavior, but it is adequate as is.

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

Parameters3/5

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

Schema coverage is 100% with all parameters documented. The description does not add any semantic beyond what the schema already provides, so baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the action (List), the resource (DHCP servers), and the scope (on a MikroTik router). It is specific and distinguishes from sibling tools like list_dhcp_clients and list_dhcp_leases.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as manage_dhcp_server for configuration. No situational context is given.

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

list_dns_entriesList DNS EntriesA
Read-onlyIdempotent

List static DNS entries on a MikroTik router with optional filtering by name and type.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by hostname (partial match)
typeNoFilter by record typeall
limitNoMax results to return.
offsetNoPagination offset.
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds the specificity of 'static DNS entries' (implying non-dynamic records) and optional filtering, which is consistent and adds value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the core purpose and filtering capability without any fluff or redundancy.

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 description lacks mention of return values (e.g., list of matching entries or empty response) or behavior for edge cases. Given the absence of an output schema, this information would help complete the context, though the description is minimally sufficient for a list operation.

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

Parameters3/5

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

Schema coverage is 100%, with each parameter having clear descriptions. The tool description only mirrors 'optional filtering by name and type' without adding new semantics or context beyond the 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 clearly states the action 'List' and the resource 'static DNS entries on a MikroTik router' with optional filtering. It distinguishes itself from sibling list tools by specifying the DNS entry type and from manage_dns_entry which handles modifications.

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 this tool vs alternatives. While it mentions filtering, it does not explain when list_dns_entries is preferred over manage_dns_entry or other list tools for different DNS scenarios.

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

list_filesList FilesA
Read-onlyIdempotent

List files on a MikroTik router filesystem. Supports filtering by name and type.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by file name (substring match)
typeNoFilter by file type (e.g. script, backup, package)
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate read-only, non-destructive, and idempotent behavior. The description adds no significant behavioral context beyond 'list files,' which is consistent with annotations but does not address aspects like completeness or ordering of results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. Front-loaded with core purpose, followed by filtering capabilities. No unnecessary information.

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?

Meets minimal needs for a simple list tool with optional filters. Minor ambiguity about filter behavior (substring vs exact) and no mention of return format, but adequate given annotations cover safety and idempotency.

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

Parameters3/5

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

Schema coverage is 100% with clear parameter descriptions. The description reiterates filtering by name and type but adds no semantics beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states it lists files on a MikroTik router filesystem, with specific filtering support, distinguishing it from sibling list tools (e.g., list_interfaces, list_scripts) by explicitly naming the resource type.

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 does not provide guidance on when to use this tool versus alternatives like get_file_content or delete_file, nor does it mention prerequisites or context. However, the purpose is straightforward for a list operation.

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

list_firewall_rulesList Firewall RulesA
Read-onlyIdempotent

List firewall rules from the filter or nat table on a MikroTik router. Supports filtering by chain and disabled state, with pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoFilter rules by chain name (e.g. forward, input, srcnat)
limitNoMax results to return.
tableNoFirewall table to query: filter or natfilter
offsetNoPagination offset.
disabledNoFilter by disabled state: true, false, or allall
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds that it supports filtering and pagination, which is consistent. No contradictions.

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 concise sentences, front-loaded with purpose and followed by capabilities. No unnecessary words.

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?

No output schema, and the description does not describe the return format or pagination metadata. For a list tool, this is adequate but incomplete for an agent to fully understand the output.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description reinforces the meaning of table, chain, disabled, and pagination parameters, but adds limited additional value beyond the 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 clearly states it lists firewall rules from the filter or nat table on a MikroTik router, with filtering and pagination. This distinguishes it from siblings like list_mangle_rules and manage_firewall_rule.

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

Usage Guidelines4/5

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

The description implies usage for read-only listing of firewall rules, but does not explicitly mention when to use this tool versus alternatives. However, the context of sibling tools and the clear purpose makes it adequate.

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

list_interface_listsList Interface ListsA
Read-onlyIdempotent

List all interface lists defined on the router.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds no behavioral detail beyond confirming the list 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?

Single sentence of 8 words, perfectly concise and front-loaded with the core action and resource.

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?

No output schema and no description of return format; for a list tool, the agent would need to know what fields are returned (e.g., IDs, names). Missing this context.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for both parameters; the description adds no extra semantic meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the action ('List') and the specific resource ('interface lists'), distinguishing it from sibling tools like 'list_interfaces' and 'manage_interface_list'.

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?

No explicit guidance on when to use this tool vs alternatives; the read-only nature is implied by annotations but not clarified in text.

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

list_interfacesList InterfacesA
Read-onlyIdempotent

List network interfaces on a MikroTik router with optional filtering by type and status. Supports pagination and optional traffic counters.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by interface typeall
limitNoMax results to return.
offsetNoPagination offset.
statusNoFilter by running statusall
routerIdNoRouter ID; omit to use the default router.
macAddressNoFilter by MAC address (case-insensitive exact match on mac-address field)
includeCountersNoInclude traffic counters (tx-byte, rx-byte, etc.)

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds value by mentioning pagination support and optional traffic counters, which are behavioral traits not covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The purpose is front-loaded, and every part adds value. Highly concise and well-structured.

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 list tool with comprehensive schema and annotations, the description is complete. It covers filtering, pagination, and counters. However, no output schema exists, so return value details are not explained. Still adequate given the context.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description mentions filtering, pagination, and counters, which correspond to parameters, but adds no new meaning beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the action ('List'), the resource ('network interfaces on a MikroTik router'), and optional features (filtering, pagination, counters). It distinguishes from sibling list tools by specifying 'interfaces'.

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

Usage Guidelines3/5

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

The description implies usage for listing interfaces but does not explicitly state when to use this tool vs alternatives like list_bridges or list_wifi_interfaces. No exclusion or alternative guidance is provided.

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

list_ip_poolsList IP PoolsA
Read-onlyIdempotent

List IP address pools on a MikroTik router. Supports filtering by name and pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by pool name (substring match)
limitNoMax results to return.
offsetNoPagination offset.
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description adds minimal behavioral context. It mentions filtering and pagination, which are consistent with a read operation, but does not elaborate on other traits like rate limits or performance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and contains no redundant information. Every word 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 list tool with comprehensive parameter schema and annotations highlighting safety, the description covers the key behaviors (filtering, pagination). The absence of an output schema reduces the need to explain return format. Minor omission: could mention default router behavior, but that's already in schema.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter (routerId, name, limit, offset) well-described. The description reiterates 'filtering by name and pagination' but adds no new meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the action ('List'), the resource ('IP address pools'), and the context ('on a MikroTik router'). It also mentions filtering and pagination, differentiating it from sibling tools like manage_ip_pool.

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

Usage Guidelines3/5

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

The description implies usage for listing IP pools with optional filters and pagination, but does not explicitly state when to use this tool versus alternatives, nor does it provide exclusion conditions. Given the large set of sibling list tools, more guidance would be helpful.

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

list_ipsec_peersList IPSec PeersA
Read-onlyIdempotent

List IPSec peers on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
addressNoFilter by remote address (substring match)
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no additional behavioral context beyond the obvious 'list' operation. No contradiction.

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 concise sentence that efficiently conveys the tool's purpose without any redundant words or unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with comprehensive annotations and full schema coverage, the description is complete enough. It covers what the tool does without needing to explain return values (no output schema).

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

Parameters3/5

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

The input schema has 100% coverage with descriptions for all three parameters (routerId, address, limit). The description does not add extra meaning beyond the schema, so baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states 'List IPSec peers on a MikroTik router', specifying the verb (List), resource (IPSec peers), and context (MikroTik router). It effectively distinguishes from sibling tools like manage_ipsec_peer and other list_* tools.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., list_ipsec_policies, manage_ipsec_peer). There is no mention of prerequisites, context for filtering, or conditions for use.

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

list_ipsec_policiesList IPSec PoliciesB
Read-onlyIdempotent

List IPSec policies on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
routerIdNoRouter ID; omit to use the default router.
dstAddressNoFilter by destination address (substring match)
srcAddressNoFilter by source address (substring match)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, covering behavioral traits. The description adds no extra behavioral context beyond stating the resource type. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no redundant information. Efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list operation with complete schema and no output schema, the description is sufficient. It could mention that results are returned as a list, but not critical.

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?

Input schema has 100% description coverage for all 4 parameters, each with clear descriptions. The tool description adds no additional meaning beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description clearly states the verb 'List' and resource 'IPSec policies' with scope 'on a MikroTik router'. It effectively conveys the tool's function, though it does not explicitly differentiate from sibling tools like list_ipsec_peers.

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 this tool vs alternatives (e.g., manage_ipsec_policy for modifications). There is no mention of use cases or conditions.

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

list_ip_servicesList IP ServicesA
Read-onlyIdempotent

List IP services on a MikroTik router (api, api-ssl, ssh, telnet, www, www-ssl, winbox, ftp) with their port numbers and enabled/disabled status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by service name (api, api-ssl, ssh, telnet, www, www-ssl, winbox, ftp)
enabledNoWhen true, return only enabled services; when false, only disabled services
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds that it returns port numbers and status, which is consistent with annotations. No additional behavioral traits disclosed beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the tool's purpose and the resources it covers, with no extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with no output schema, the description adequately specifies what is returned (port numbers and enabled/disabled status). All parameters are optional, implying full list by default. No missing critical context.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters adequately. The description does not add significant meaning beyond the schema's parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb 'list' and resource 'IP services' on a MikroTik router, and specifies the services and returned data (port numbers, enabled/disabled status). It distinguishes from sibling 'manage_ip_service' tools.

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

Usage Guidelines3/5

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

The description implies a read operation, and sibling tools like 'manage_ip_service' provide context, but it does not explicitly state when to use this tool vs alternatives or mention any prerequisites.

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

list_log_actionsList Log ActionsA
Read-onlyIdempotent

List RouterOS logging action targets (system/logging/action) with optional type filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by action type (exact match): memory, disk, remote, echo, email
limitNoMax results to return.
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds the path and filter capability but does not disclose additional behavioral aspects such as pagination or error handling beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence (12 words) that conveys the essential purpose without unnecessary elaboration. Every word 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?

For a simple list tool with no output schema, the description is adequate but lacks details on pagination, default limit behavior, or what the response contains. It is minimally complete given the context.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for each parameter. The description briefly mentions 'type filter' but does not add meaningful meaning beyond what the schema already specifies for parameters like 'type' (enum) and 'limit' (default).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb 'List', the resource 'RouterOS logging action targets', and specifies the API path 'system/logging/action'. It also mentions an optional type filter, distinguishing it from sibling tools like 'list_log_rules' and 'manage_log_action'.

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 does not explicitly state when to use this tool versus alternatives. While the read-only nature is implied by 'list', no guidance is given for choosing between this and other list or manage tools.

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

list_log_rulesList Log RulesA
Read-onlyIdempotent

List RouterOS logging rules (system/logging) with optional topic substring and action exact-match filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
topicsNoFilter by topics (substring match)
routerIdNoRouter ID; omit to use the default router.
logActionNoFilter by log action target (exact match on action field)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds minimal behavioral detail beyond the annotations, only confirming the listing action.

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, well-structured sentence that efficiently conveys the tool's purpose and key filtering capabilities without unnecessary words.

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?

The description, alongside comprehensive annotations and schema, fully covers the tool's behavior for its simplicity. No output schema is provided, but typical list tool patterns apply.

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

Parameters4/5

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

Schema descriptions cover all 4 parameters (100% coverage). The description adds that 'topics' uses substring matching and 'logAction' uses exact matching, providing extra clarity beyond the 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 clearly states the tool lists RouterOS logging rules with specific filtering options (topic substring, action exact-match), distinguishing it from related list tools like list_log_actions and manage_log_rule.

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

Usage Guidelines4/5

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

The description implies usage for reading logging rules with optional filters, but does not explicitly mention when not to use it or suggest alternative tools for related tasks.

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

list_mangle_rulesList Mangle RulesA
Read-onlyIdempotent

List firewall mangle rules on a MikroTik router in evaluation order. Supports filtering by chain, action, and disabled state.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoFilter by chain name (e.g. prerouting, forward, postrouting)
actionNoFilter by mangle action (e.g. mark-routing, mark-connection)
disabledNoFilter by disabled state
routerIdNoRouter ID; omit to use the default router.

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent behavior. The description adds that rules are listed in evaluation order, which is a useful behavioral detail not covered by annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states core function and ordering, second lists filters. Extremely concise with no wasted words, front-loading the essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with optional filters and no output schema, the description covers the key aspects: resource, order, and filter capabilities. It could mention what fields are returned, but it is mostly complete.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all parameters. The description merely restates that filtering by chain, action, and disabled state is supported, adding no new meaning beyond the 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 clearly states the tool lists firewall mangle rules on a MikroTik router in evaluation order. The verb 'List' and resource 'mangle rules' are specific and differentiate it from sibling list tools like list_firewall_rules.

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

Usage Guidelines3/5

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

The description implies usage for mangle rules with filtering, but it does not explicitly contrast with similar tools like list_firewall_rules or state when not to use it. No exclusion or alternative guidance is provided.

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

list_neighborsList NeighborsB
Read-onlyIdempotent

List discovered neighbors (CDP/LLDP/MNDP) on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
routerIdNoRouter ID; omit to use the default router.
interfaceNoFilter by interface name (substring match)

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no further behavioral context (e.g., no mention of required permissions, default return behavior, or pagination). It does not contradict annotations, but adds minimal value.

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, well-structured sentence that conveys the core functionality without any superfluous words. It is front-loaded and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with an output schema absent, the description adequately covers the tool's purpose and scope. It could mention default behavior (e.g., returns all neighbors if no filter) but overall is sufficient given the annotations and schema richness.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for all three parameters (routerId, interface, limit). The description does not add meaning beyond what the schema provides, meeting the baseline for high coverage.

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 explicitly states the action (list), the resource (discovered neighbors), and the specific protocols (CDP/LLDP/MNDP) on a MikroTik router. It clearly distinguishes from sibling tools like list_ospf_neighbors or list_bgp_peers.

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool versus alternatives (e.g., list_ospf_neighbors, list_bgp_peers). There are no exclusions, prerequisites, or contextual hints to help an agent decide.

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

list_netwatch_entriesList Netwatch EntriesB
Read-onlyIdempotent

List Netwatch monitoring entries on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoFilter by host (substring match)
limitNoMax results to return.
statusNoFilter by current status
routerIdNoRouter ID; omit to use the default router.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate readOnly, non-destructive, and idempotent behavior. The description adds minimal context about the resource type but does not elaborate on pagination, filtering details, or return structure. With annotations covering safety, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no unnecessary words. It is concise and front-loaded.

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 tool has no output schema and 4 parameters. The description is minimal but combined with annotations and schema, it covers essential information. It could mention that it returns a list of entries, but overall it is adequate for a simple list tool.

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

Parameters3/5

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

Schema description coverage is 100%, and each parameter is well-documented in the schema. The description adds no additional parameter meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description clearly states the tool lists Netwatch monitoring entries on a MikroTik router, specifying the resource and action. However, it does not explicitly differentiate from sibling list tools, though the resource name is distinct.

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 like manage_netwatch_entry for create/update/delete operations. There is no mention of prerequisites or context.

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

list_ospf_neighborsList OSPF NeighborsA
Read-onlyIdempotent

List OSPF neighbors on a MikroTik router (RouterOS 7+). Returns neighbor state, interface, DR/BDR, and uptime.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoFilter by neighbor state (e.g. full, 2-way, init)
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that it returns specific fields and targets RouterOS 7+, but does not disclose any additional behavioral traits beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the core purpose, and includes relevant return fields. No superfluous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with read-only semantics and no output schema, the description adequately covers the purpose, router version, and returned fields. Slightly more detail on filtering or scope could be added but not necessary.

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

Parameters3/5

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

The input schema already provides descriptions for both parameters (routerId and state) with 100% coverage. The tool description does not add further meaning beyond what the schema offers.

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?

Clearly states it lists OSPF neighbors on a MikroTik router with RouterOS 7+, and specifies the return fields (state, interface, DR/BDR, uptime). Distinct from sibling tools like list_bgp_peers or list_neighbors.

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

Usage Guidelines3/5

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

The description implies usage for retrieving OSPF neighbor information but does not provide explicit guidance on when to use this tool over alternatives such as list_neighbors or other protocol-specific list tools.

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

list_ovpn_clientsList OpenVPN ClientsA
Read-onlyIdempotent

List OpenVPN client interfaces on a MikroTik router. Shows name, remote server, and connection status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations (readOnlyHint: true, destructiveHint: false) already convey the non-destructive behavior. The description adds minor context about returned fields but does not discuss pagination or response format. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states purpose, second lists output. Clearly front-loaded and no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose and returned data. Annotations and schema handle safety and parameters. No output schema but the description compensates by listing key fields.

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?

Input schema has 100% coverage with descriptions for all 3 parameters. The tool description does not add extra meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states it lists OpenVPN client interfaces on a MikroTik router and specifies the output fields (name, remote server, connection status). It distinguishes itself from sibling tools like manage_ovpn_client and other list 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?

While no explicit when-to-use or alternatives are provided, the context of list tools and the sibling manage_ovpn_client implies this is for read-only listing. The description does not guide against misuse, but the purpose is clear enough.

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

list_packagesList PackagesA
Read-onlyIdempotent

List installed RouterOS packages with version and enabled status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by package name (exact match)
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description does not contradict these and adds minimal extra behavioral context (e.g., 'installed' implies read-only). With annotations present, the description's burden is lowered, but it does not provide additional transparency beyond what is already structured.

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, clear sentence with no wasted words. It is front-loaded with the main purpose and is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 optional parameters, no output schema) and the annotations covering safety, the description is fairly complete. It mentions the output fields (version and enabled status). However, it could note the lack of pagination or sorting, but that is not critical for a list tool.

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

Parameters3/5

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

Schema coverage is 100%, and both routerId and name are well-described in the schema. The description does not add further meaning beyond the schema, which already provides adequate semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description clearly states the tool lists installed packages with version and enabled status, specifying the resource (packages), action (list), and output details. It is distinct from sibling tools like manage_package.

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 this tool versus alternatives, such as manage_package or other list tools. The description lacks context about exclusions or when not to use it.

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

list_pppoe_clientsList PPPoE ClientsA
Read-onlyIdempotent

List PPPoE client interfaces on a MikroTik router. Shows name, parent interface, ISP username, and connection status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
statusNoFilter by running statusall
routerIdNoRouter ID; omit to use the default router.
interfaceNoFilter by parent interface name (exact match)

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description only adds that it returns specific fields. It does not describe pagination behavior or the meaning of the status filter, which are present in the schema but not in the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loading the purpose and key output fields. Every sentence provides necessary information without redundancy or unnecessary detail.

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?

The description covers the main purpose and output fields. However, it could mention that the tool supports pagination via limit and offset parameters, though these are detailed in the schema. For a simple listing tool, the description is nearly complete.

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?

All 5 parameters have descriptions in the schema with 100% coverage. The tool description does not add any additional meaning or constraints beyond what is already provided in the input schema, so it meets the baseline without adding value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool lists PPPoE client interfaces on a MikroTik router and specifies the fields returned (name, parent interface, ISP username, connection status). It uses a specific verb-resource pair and effectively distinguishes from sibling tools like manage_pppoe_client.

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

Usage Guidelines3/5

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

The description implies a read-only query but does not provide explicit guidance on when to use this tool versus alternatives. It lacks information about prerequisites, such as requiring a router connection, and does not mention when not to use it.

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

list_ppp_profilesList PPP ProfilesA
Read-onlyIdempotent

List PPP profiles including the built-in default and default-encryption profiles.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by profile name (exact match)
limitNoMax results to return.
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds context about built-in profiles but does not disclose any additional behavioral traits such as pagination behavior or whether the list includes inactive profiles. The description does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no redundancies. It is front-loaded with the core action and includes an important detail about built-in profiles. Every word contributes meaning.

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 list tool with 3 parameters and high schema coverage, the description is adequate but minimal. It does not specify the return format (e.g., array of profile objects) or pagination details, though annotations indicate read-only and idempotent behavior. Without an output schema, the description could be more complete.

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

Parameters3/5

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

Schema coverage is 100% (all 3 parameters have descriptions). The description does not add any extra meaning beyond what the schema already provides. For example, it does not explain the purpose of filtering by name or the limit parameter. Baseline 3 is appropriate since the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool lists PPP profiles, specifically mentioning built-in profiles like 'default' and 'default-encryption'. The verb 'List' with resource 'PPP profiles' is specific, and the tool distinguishes itself from siblings like 'list_pppoe_clients' which lists connections, not profiles.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., 'list_pppoe_clients' for active connections) or any prerequisites. An agent cannot infer appropriate usage context beyond the obvious listing action.

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

list_queuesList QueuesA
Read-onlyIdempotent

List simple queues on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
targetNoFilter by target address (substring match)
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, indicating a safe read operation. The description adds no further behavioral context, such as potential side effects or performance implications, but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that conveys the purpose efficiently with no redundant information. It is front-loaded and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with 3 optional parameters and no output schema, the description is reasonably complete. It covers the core purpose and the parameter details are in the schema. However, it could optionally mention the return format or that it returns a list of queue objects.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already fully documents the three parameters (routerId, target, limit). The description does not add any additional meaning or clarification beyond the 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 clearly states 'List simple queues on a MikroTik router' using a specific verb and resource. It distinguishes itself from sibling tools like manage_queue and other list_* tools by specifying 'simple queues'.

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 manage_queue or other list tools. The description does not include any context about usage conditions or exclusions.

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

list_routersList RoutersA
Read-onlyIdempotent

List the routers configured in the registry (routers.yaml): id, host, port, TLS status, tags, ROS version, and which is the default. Read-only reflection of local config โ€” no RouterOS API call, no credentials in the response. Use it to discover valid routerId values and tags for targeting other tools (including bulk_execute).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOnly return routers having any of these tags (e.g. ["edge", "prod"])

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds that the data comes from a local YAML file (routers.yaml), no RouterOS API call is made, and no credentials are returned. This provides useful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. The first sentence states the core purpose and returns, the second adds critical behavioral context. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool with one optional parameter, schema and annotations cover safety, and the description adds the source (routers.yaml) and use case discovery for other tools. No output schema but the description lists the fields returned, making it complete for an agent.

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

Parameters3/5

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

Schema coverage is 100% and the schema provides a clear description for the single optional parameter 'tags'. The description also mentions tags in the purpose but does not add significant meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool lists routers from a specific config file (routers.yaml) and enumerates the fields returned (id, host, port, TLS status, tags, ROS version, default). It distinguishes itself from sibling tools by noting it is a read-only reflection of local config, not a RouterOS API call.

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 to use it to discover valid routerId values and tags for targeting other tools, including bulk_execute. Also clarifies what it does not do (no RouterOS API call, no credentials in response). Provides clear when-to-use and when-not-to-use guidance.

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

list_routesList Static RoutesA
Read-onlyIdempotent

List static routes on a MikroTik router with optional filtering by active status and dynamic status. Supports pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
routerIdNoRouter ID; omit to use the default router.
activeOnlyNoReturn only active routes
staticOnlyNoReturn only non-dynamic routes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false. The description adds filtering and pagination behavior, which is useful but not critical given the annotations cover safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence states the primary purpose and filtering options; the second adds pagination. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with good annotations and schema coverage, the description is nearly complete. It mentions filtering and pagination. No output schema, but not necessary for a straightforward list tool.

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

Parameters3/5

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

The input schema has 100% description coverage for all 5 parameters. The tool description does not add extra meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool lists static routes on a MikroTik router, specifies optional filtering by active/dynamic status, and mentions pagination. This differentiates it from many sibling list_* tools.

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

Usage Guidelines4/5

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

The description provides clear context for using this tool (listing static routes with filtering and pagination) but does not explicitly state when not to use it or mention alternatives like list_routing_rules.

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

list_routing_rulesList Routing RulesA
Read-onlyIdempotent

List policy routing rules on a MikroTik router in evaluation order. Supports filtering by table and disabled state.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableNoFilter by routing table name
disabledNoFilter by disabled state
routerIdNoRouter ID; omit to use the default router.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds the behavioral detail that results are returned 'in evaluation order,' which is beyond what annotations provide. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The action is front-loaded and the filtering support is immediately stated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool, the description covers purpose and filtering. It lacks details about the output structure (e.g., fields of each rule), but since annotations cover safety and there is no output schema, this is a minor gap.

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

Parameters3/5

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

Schema coverage is 100%, so the description does not add new information about parameters beyond restating 'table' and 'disabled' filters. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb (list), resource (policy routing rules), scope (MikroTik router), and ordering (evaluation order). It distinguishes from sibling tools like list_routes or list_routing_tables by specifying 'policy routing rules' and 'evaluation order'.

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

Usage Guidelines3/5

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

The description implies usage for listing routing rules with optional filtering, but does not explicitly state when to use this tool versus alternatives (e.g., list_routes, list_routing_tables) or when not to use it.

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

list_routing_tablesList Routing TablesA
Read-onlyIdempotent

List custom routing tables on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds the nuance that only 'custom' routing tables are listed, which is beyond annotations but still minimal.

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 unnecessary words, efficiently conveying the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional parameter, the description is mostly complete. It lacks details about the return format but is adequate given the simplicity.

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

Parameters3/5

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

The input schema has 100% coverage with a clear description for the 'routerId' parameter. The tool description adds no additional parameter meaning beyond the 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 uses a specific verb ('List') and resource ('custom routing tables on a MikroTik router'), clearly distinguishing it from sibling tools like 'list_routes' and 'list_routing_rules'.

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 this tool vs alternatives like 'list_routes' or 'list_routing_rules', nor about the optional 'routerId' parameter or prerequisites.

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

list_scheduled_jobsList Scheduled JobsA
Read-onlyIdempotent

List RouterOS scheduler entries on a MikroTik router with next-run time, interval, and disabled state.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by job name (exact match)
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds detail about returned fields but does not disclose default router behavior, pagination, or error states. Adequate given annotation coverage.

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?

Single sentence, front-loaded with verb and resource, no wasted words.

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?

Tool is simple with optional parameters and no output schema. Description sufficiently covers purpose and output fields, though it omits mention of default router behavior from the schema.

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

Parameters3/5

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

Schema description coverage is 100% for both parameters (routerId and name). The description adds no additional meaning beyond the schema's parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb 'List', the resource 'RouterOS scheduler entries', and the specific fields returned (next-run time, interval, disabled state). It distinguishes from sibling tools like list_scripts or list_bridges.

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 explicit guidance on when to use this tool versus alternatives such as manage_scheduled_job. No mention of when not to use or prerequisites like router connection.

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

list_scriptsList ScriptsA
Read-onlyIdempotent

List RouterOS scripts on a MikroTik router. Supports optional name filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by script name (substring match)
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering safety and idempotency. The description adds the name filter behavior, which is consistent but not a major addition beyond what annotations imply.

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 a single concise sentence that is front-loaded with the key action. It is efficient but could be slightly more informative about the return format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low parameter count, zero required parameters, and strong annotations, the description is largely complete. It does not detail return values, but the absence of an output schema and the simplicity of listing mitigate this.

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

Parameters3/5

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

Schema description coverage is 100%, and both parameters have clear descriptions in the schema. The description merely restates the name filter, adding no extra meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb 'list', the resource 'RouterOS scripts', and the entity 'MikroTik router', making the tool's purpose immediately obvious. It distinguishes from sibling tools like run_script and manage_script by focusing on listing.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as run_script or manage_script. It lacks explicit context for choosing this tool over similar list_* tools.

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

list_swos_endpointsList SwOS EndpointsA
Read-onlyIdempotent

List the SwOS/SwOS Lite '.b' API endpoints supported by this server, with the decoded field names per endpoint. Read-only schema introspection โ€” no device call.

ParametersJSON Schema
NameRequiredDescriptionDefault
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds valuable context beyond these flags by specifying that it is introspection of the server's endpoint schema and that it will not perform a device call, which prevents misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, immediately front-loaded with the main purpose, no filler. Every clause adds meaningful information: the endpoint scope, the decoded field names, the read-only nature, and the absence of device calls.

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?

This is a simple introspection tool with one optional parameter, strong annotations, and a clear description. The description fully explains what the user will get and what will not happen, making the tool well-specified for an agent.

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

Parameters3/5

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

The single parameter routerId is fully described in the schema (100% coverage), including the default behavior when omitted. The description does not add parameter details, but it doesn't need to because the schema already carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb 'List' and the resource ('SwOS/SwOS Lite .b API endpoints') along with the specific output ('decoded field names per endpoint'). It explicitly positions itself as read-only schema introspection, distinguishing it from sibling tools like get_swos_endpoint and write_swos_blob.

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

Usage Guidelines4/5

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

The description conveys a clear context: use this tool to inspect supported endpoints and field names rather than making a device call. It does not explicitly name alternatives, but the 'read-only schema introspection โ€” no device call' phrasing gives enough guidance for selecting this tool over device-interaction tools.

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

list_user_groupsList User GroupsA
Read-onlyIdempotent

List local user groups on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds no behavioral details beyond stating 'list', which is consistent with annotations. No contradictions, but no added value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single succinct sentence that wastes no words and immediately conveys the tool's purpose. It is front-loaded and 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?

The tool is simple (list operation with only 2 params, no output schema). The description covers the basic purpose but does not explain the return format or any caveats. Given the lack of output schema, some additional context about the response would improve completeness, but the description is minimally adequate.

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

Parameters3/5

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

Schema description coverage is 100% for both parameters (routerId, limit). The description does not add any parameter semantics beyond what the schema provides, so baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb 'list' and the resource 'local user groups on a MikroTik router', distinguishing it from sibling tools like list_users (lists users) and manage_user_group (manages groups).

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 does not provide guidance on when to use this tool versus alternatives like list_users or manage_user_group. Usage is implied only by the name and context, lacking explicit when-to or when-not-to instructions.

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

list_usersList UsersA
Read-onlyIdempotent

List local users on a MikroTik router. Passwords are never returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNoFilter by group name (exact match)
limitNoMax results to return.
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds the important behavioral detail that passwords are never returned, which is beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first states the primary purpose, and the second delivers a key behavioral constraint. No wasted words, and the information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core purpose and a security detail. However, without an output schema, mentioning the shape of the returned list (e.g., fields like username, group) would improve 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 coverage is 100%, so the schema fully documents parameters. The description does not add additional parameter-level information; the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the action ('List') and the resource ('local users on a MikroTik router'). It also adds a critical behavioral note about password security ('Passwords are never returned'), which distinguishes it from similar tools.

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 this tool versus alternatives like manage_user or list_user_groups. Given the large number of sibling list tools, explicit context would be beneficial.

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

list_vrrp_instancesList VRRP InstancesA
Read-onlyIdempotent

List VRRP instances on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
routerIdNoRouter ID; omit to use the default router.
interfaceNoFilter by master interface name (exact match)

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no extra behavioral context beyond the name. It is adequate but does not enhance understanding of return format or edge cases.

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 a single clear sentence, concise and front-loaded. However, it could include a bit more context without becoming verbose.

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 standard list tool with complete annotations and schema, the description is sufficient. It lacks mention of pagination or default router behavior, but the schema covers limit and routerId defaults.

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

Parameters3/5

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

Schema description coverage is 100% and parameter descriptions are clear. The tool description adds no additional meaning beyond what the schema already provides, meeting the baseline but not exceeding it.

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 'List VRRP instances on a MikroTik router' clearly states the verb (List) and resource (VRRP instances), distinguishing it from other list_* tools that list different resources and from manage_vrrp_instance which handles mutations.

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?

No explicit guidance on when to use this tool versus alternatives. While the name implies read-only use, the description does not contrast with manage_vrrp_instance or other list tools, leaving context implied.

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

list_wifi_clientsList WiFi ClientsA
Read-onlyIdempotent

List currently connected WiFi clients (stations) with signal strength and transfer rates.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
routerIdNoRouter ID; omit to use the default router.
interfaceNoFilter by WiFi interface name

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds value by specifying that it lists 'currently connected' clients and includes signal strength and transfer rates, providing real-time behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the key purpose. No unnecessary words or details, achieving high efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with comprehensive annotations and schema, the description covers the essential information: what it lists and what data fields are returned. Although there is no output schema, the description sufficiently communicates the return content.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains parameters well. The description adds minor value by explaining that routerId can be omitted for default router, but this is not a significant addition beyond the 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 uses a specific verb ('List') and resource ('WiFi clients'), and adds detail about the data returned ('signal strength and transfer rates'). This clearly distinguishes it from sibling tools like list_dhcp_clients or list_connections.

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

Usage Guidelines3/5

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

The description implies usage (listing connected WiFi clients) but does not explicitly state when to use this tool over alternatives. No exclusions or alternative suggestions are provided, which would be helpful given the many sibling tools.

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

list_wifi_interfacesList WiFi InterfacesA
Read-onlyIdempotent

List WiFi/wireless interfaces on a MikroTik router. Uses /interface/wifi on ROS 7.x, /interface/wireless on older versions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
routerIdNoRouter ID; omit to use the default router.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate read-only, non-destructive, and idempotent behavior. The description adds one behavioral detail (version-dependent commands) but does not cover auth needs or rate limits, so a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two precise sentences with no wasted words. Purpose comes first, version detail second. Excellent structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with optional params and no output schema, the description covers the essential version-dependent behavior. Lacks explicit mention of return format, but the schema implies pagination. Nearly complete.

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

Parameters3/5

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

Schema coverage is 100% with well-described parameters (routerId, limit, offset). The description adds no additional parameter meaning beyond the schema, earning the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool lists WiFi/wireless interfaces on MikroTik routers, distinguishing it from sibling tools like list_interfaces (general) and list_wifi_clients (clients).

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?

While it does not explicitly list when to use or avoid this tool, the description implies it is for WiFi interfaces only and provides version-specific command differences, which guides usage context.

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

list_wireguard_interfacesList WireGuard InterfacesA
Read-onlyIdempotent

List WireGuard interfaces and their status on a MikroTik router.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnly and idempotent; description adds 'status' but little extra behavioral context.

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?

Single concise sentence with no extraneous words.

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?

Sufficient for a simple listing tool with schema, but lacks additional context like default behavior or pagination details.

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 covers all 3 parameters with descriptions; description does not add new parameter info.

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?

Clearly states it lists WireGuard interfaces with their status, distinguishing it from generic list_interfaces and list_wireguard_peers.

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?

No explicit guidance on when to use versus alternatives; context is implied but not stated.

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

list_wireguard_peersList WireGuard PeersA
Read-onlyIdempotent

List WireGuard peers with last handshake time and transfer statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return.
offsetNoPagination offset.
routerIdNoRouter ID; omit to use the default router.
interfaceNoFilter by WireGuard interface name

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent behavior. The description adds value by specifying the output includes handshake time and transfer statistics, though it doesn't detail pagination or filtering behavior beyond schema.

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?

Single sentence, 10 words, no redundancy. Front-loaded with the action and essential details.

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?

Given no output schema, the description partially explains what the tool returns but lacks detail on structure (e.g., array of objects). Also doesn't mention pagination behavior. Adequate but not fully comprehensive.

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 covers 100% of parameter descriptions, so the tool description adds no new information about parameters. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb 'List', the resource 'WireGuard peers', and includes output details ('last handshake time and transfer statistics'). This distinguishes it from sibling tools like list_wireguard_interfaces.

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?

No explicit guidance on when to use this tool versus alternatives. While it's implied for reading peer statistics, there's no mention of prerequisites or when not to use it.

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

manage_address_list_entryManage Address List EntryA
DestructiveIdempotent

Add or remove a firewall address list entry. Idempotent by list name + address. Supports dry-run mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
listYesAddress list name
actionYesAction to perform
dryRunNoPreview changes without applying.
addressYesIP address or CIDR to add/remove
commentNoOptional comment for the entry
timeoutNoExpiry timeout (e.g. 1d, 2h30m) โ€” omit for permanent
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true and idempotentHint=true. Description reinforces idempotency and adds dry-run capability, providing useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences with no redundant information. Front-loaded with the core purpose, then key extras.

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?

Covers essential aspects: operation, idempotency, dry-run. Does not explain return values (no output schema) or confirmation token logic in detail, but schema handles that. Adequate for a management tool with annotations.

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

Parameters3/5

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

Schema coverage is 100% so baseline is 3. Description mentions idempotency by list+address, which adds meaning to list and address parameters, but overall adds limited new parameter-level insight beyond 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?

Description clearly states verb (add/remove) and resource (firewall address list entry). It distinguishes from sibling list_address_list_entries and mentions key features (idempotency, dry-run).

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?

Description implies usage for adding/removing entries but does not explicitly state when to use vs alternatives or when not to use. No when-not-to or alternative tool names are provided.

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

manage_bridgeManage Bridge InterfaceA
DestructiveIdempotent

Create or remove a bridge interface on a MikroTik router. Idempotent: create returns already_exists if bridge with same name exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesBridge interface name
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment
disabledNoWhether the bridge should be disabled
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent. The description adds that create returns 'already_exists' on duplicate, which is useful. However, removal behavior (e.g., failure if bridge missing, cascading effects) is not disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence states purpose, the second adds crucial idempotency detail. Efficient and well-structured.

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?

While the tool is relatively simple, the description omits details about removal behavior and the effect of dryRun or confirmationToken. Output schema is absent, but the description could still hint at return formats. Leaves some gaps.

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

Parameters3/5

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

Schema coverage is 100%, so the description adds no new parameter-level information. The idempotency note is an overall behavior, not per-parameter. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool creates or removes a bridge interface, and distinguishes it from sibling tools like manage_bridge_port or list_bridges. The idempotency note adds precision.

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?

No explicit when-to-use or when-not-to-use guidance is provided. The tool's purpose is implied by its name, but there is no comparison with other management tools or context about prerequisites.

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

manage_bridge_portManage Bridge PortA
DestructiveIdempotent

Add or remove an interface from a bridge on a MikroTik router. Idempotent: add returns already_exists if the port assignment already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
bridgeYesBridge interface name
dryRunNoPreview changes without applying.
routerIdNoRouter ID; omit to use the default router.
interfaceYesInterface to add or remove as a bridge port
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.1/5.0
Behavior4/5

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

The description adds idempotency information beyond annotations, stating 'Idempotent: add returns already_exists if the port assignment already exists.' This is valuable. Annotations already provide destructiveHint and idempotentHint, so the description complements them without contradiction.

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 extremely concise at two sentences, front-loading the core action and adding the idempotency detail. Every word serves a purpose with no redundancy.

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?

No output schema exists, and the description does not explain return values or error conditions beyond the idempotency note. For a destructive tool (destructiveHint true), more details on confirmationToken usage or removal behavior would improve completeness. It is adequate but not comprehensive.

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

Parameters3/5

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

Schema coverage is 100%, and the description does not elaborate on parameters beyond their basic schema definitions. Parameters like dryRun and confirmationToken are described in the schema but not in the description; the description meets the baseline but adds no extra semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb and resource: 'Add or remove an interface from a bridge on a MikroTik router.' It distinguishes this tool from siblings like manage_bridge (which manages the bridge itself) and list_bridges, as it specifically deals with port membership.

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

Usage Guidelines4/5

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

The description implies usage for adding or removing bridge ports but does not explicitly state when to use this tool versus alternatives like manage_bridge or list_bridges. However, the context signals show many sibling tools, and the purpose is clear enough to infer appropriate use cases.

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

manage_certificateManage CertificateC
Destructive

Remove, trust, or untrust a certificate. Idempotent: trust/untrust return early if already in the target state.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCertificate name โ€” idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

C2.9/5.0
Behavior1/5

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

The description claims idempotent behavior for trust/untrust, but the annotations explicitly set idempotentHint to false, creating a contradiction. Additionally, it does not disclose other important behaviors like the need for a confirmation token for destructive actions or the effects of dryRun.

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 concise with two sentences covering the core purpose and a key behavioral trait. However, it could be slightly more structured or include critical information like parameter roles without becoming verbose.

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?

Given the tool has 5 parameters, is destructive, and lacks an output schema, the description is incomplete. It omits essential context such as the confirmation token flow, dry-run behavior, and effects of the remove action, leaving agents underinformed for safe invocation.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does not add any additional meaning beyond the schema; it merely restates the action enum and idempotency, which is already implicit in the parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool manages certificates by removing, trusting, or untrusting. It uses specific verbs and specifies the resource (certificate), and distinguishes it from sibling tools like list_certificates or manage_user.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., other manage_* tools). It only mentions idempotency for trust/untrust but does not specify prerequisites, exclusions, or context for use.

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

manage_containerManage ContainerA
DestructiveIdempotent

Create, start, stop, or remove a RouterOS container. create needs a pre-configured veth interface; start/stop are no-ops when already in the target state; remove throws NOT_FOUND when absent. Supports dry-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesContainer name โ€” idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment
envlistNoRouterOS environment list name for container env vars
rootDirNoRoot directory for container files
routerIdNoRouter ID; omit to use the default router.
interfaceNoveth interface name to attach the container to (required on create โ€” must be pre-configured in RouterOS)
remoteImageNoDocker image to pull (required on create, e.g. alpine:latest)
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond annotations (destructiveHint, idempotentHint), the description adds specific behaviors: start/stop idempotency details, remove error handling, and the prerequisite for create. It also mentions dry-run support, enhancing transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise: two sentences covering all actions and key constraints. Every sentence adds new information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 actions, 10 params, no output schema), the description covers the main behaviors well but does not describe return values or success indicators. It is almost complete for the agent's needs.

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

Parameters4/5

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

Schema coverage is 100%, so each parameter is already documented. The description adds value by linking parameters to actions (e.g., interface and remoteImage needed on create). This provides relational context beyond individual descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states it manages containers by creating, starting, stopping, or removing them. It distinguishes itself from sibling tools like list_containers (read-only) and manage_container_config by focusing on lifecycle actions.

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

Usage Guidelines4/5

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

The description provides usage context: create requires a pre-configured veth interface, start/stop are idempotent (no-ops in target state), remove throws NOT_FOUND if absent. It doesn't explicitly name alternatives but gives practical guidelines.

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

manage_container_configManage Container ConfigA
Idempotent

Update global container settings. Idempotent: returns no_change if nothing differs.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoPreview changes without applying.
routerIdNoRouter ID; omit to use the default router.
ramHighMbNoRAM high-water mark in MB
registryUrlNoContainer registry URL
vethInterfaceNoVeth interface name for container networking

TDQS

A3.7/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it explains that the tool is idempotent and returns 'no_change' if no modifications occur. Annotations only flagged idempotentHint, so this extends understanding of the response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no fluff. Every word serves a purpose, stating the action and a key behavior.

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?

With no output schema, the description fails to describe the return value beyond the idempotent case (e.g., success, error). Schema covers parameters well, but the overall operational context is sparse.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is already documented. The description does not add new meaning or examples for any parameter, keeping the baseline at 3.

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 uses a specific verb and resource ('Update global container settings'), clearly indicating the tool's function. It does not explicitly differentiate from siblings like 'manage_container' or 'manage_container_env', but the qualifier 'global' distinguishes it implicitly.

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 mentions idempotency and the 'no_change' response, which guides safe repeated usage. However, it does not specify when to use this tool over alternatives like 'manage_container' or any contextual boundaries.

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

manage_container_envManage Container EnvA
Idempotent

Add or remove a container environment variable. Idempotent by name+key. add returns already_exists if the entry exists with the same value; throws CONFLICT if the value differs.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesEnvironment variable name โ€” part of idempotency key
nameYesContainer name
valueNoEnvironment variable value (required for add)
actionYesAction to perform
dryRunNoPreview changes without applying.
routerIdNoRouter ID; omit to use the default router.

TDQS

A4/5.0
Behavior4/5

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

Annotations provide idempotentHint=true, and the description expands on this by detailing the exact idempotency behavior (by name+key) and conflict handling. It also clarifies the readOnlyHint=false with the 'add or remove' action. However, it does not discuss permissions or potential side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely conciseโ€”only two sentencesโ€”with no wasted words. It front-loads the core action and then adds important behavioral details, making it easy to read and understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple add/remove tool without an output schema, the description covers the essential aspects: action, idempotency, and conflict condition. It lacks return value details, but the tool's simplicity makes this acceptable. However, completeness could be improved by noting the success response.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds marginal value by confirming that 'value' is required for 'add' and that 'name' and 'key' form the idempotency key, but it does not significantly enhance understanding beyond the 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 clearly states the verb ('add or remove') and the resource ('container environment variable'), and distinguishes it from sibling tools like 'manage_container' and 'manage_container_mount'. It also explains idempotency behavior, which adds clarity.

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

Usage Guidelines3/5

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

The description implies usage for managing container environment variables but does not explicitly state when to use it over alternatives or provide conditions or exclusions. The idempotency and conflict behavior offer some context, but no direct guidance on when not to use.

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

manage_container_mountManage Container MountA
Idempotent

Add or remove a container volume mount. Idempotent by name: add returns already_exists if the mount exists with matching src/dst; throws CONFLICT if name exists with different paths.

ParametersJSON Schema
NameRequiredDescriptionDefault
dstNoContainer destination path (required for add)
srcNoHost source path (required for add)
nameYesMount name โ€” idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.2/5.0
Behavior4/5

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

Adds specific details beyond annotations: idempotent returns already_exists or CONFLICT. No contradictions with annotations. Good context on add/remove 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 focused sentences: first states purpose, second explains idempotency and error cases. No redundancy or fluff.

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?

Covers action, idempotency, and error conditions. Lacks explicit statement of return values, but behavior is described. For a mutation tool, mostly complete.

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

Parameters3/5

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

Schema coverage is 100% with adequate descriptions. Description does not add further parameter meaning beyond schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description clearly states verb ('Add or remove') and resource ('container volume mount'). Distinguishes from sibling tools like manage_container, manage_container_config, etc.

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?

Explains idempotent behavior and conflict scenarios. Could explicitly mention alternatives like list_container_mounts for listing, but the behavior is well described.

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

manage_dhcp_clientManage DHCP ClientA
DestructiveIdempotent

Add, remove, enable, or disable a DHCP client on an interface. Idempotent by interface name: add returns already_exists if a DHCP client is already configured on the same interface.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment (add only)
routerIdNoRouter ID; omit to use the default router.
interfaceYesInterface name โ€” idempotency key (e.g. ether1, ether2)
usePeerDnsNoUse DNS servers provided by DHCP server (add only)
usePeerNtpNoUse NTP servers provided by DHCP server (add only)
addDefaultRouteNoAdd default route from DHCP (add only)
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already provide destructiveHint and idempotentHint. Description adds concrete behavioral detail: 'add returns already_exists if already configured', which adds context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences covering actions and idempotency. No wasted words; every sentence adds value.

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?

Description covers main actions and idempotency but omits return value/pagination details. Given no output schema, some guidance on response would be helpful. Complex parameter interactions (e.g., usePeerDns only for add) are schema-covered but not summarized in description.

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

Parameters3/5

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

Schema coverage is 100%, so each parameter has description. Tool description does not add additional meaning beyond schema; baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Clearly states 'Add, remove, enable, or disable a DHCP client on an interface' specifying verb and resource. Idempotency detail distinguishes from siblings like manage_dhcp_lease or list_dhcp_clients.

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?

Describes primary actions but lacks explicit guidance on when to use this tool vs alternatives (e.g., list_dhcp_clients for read-only). No when-not or exclusion criteria provided.

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

manage_dhcp_leaseManage DHCP LeaseA
Idempotent

Convert a dynamic DHCP lease to static (make-static) or remove a lease. Idempotent by MAC address.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform: make-static converts a dynamic lease to static; remove deletes the lease
dryRunNoPreview changes without applying.
routerIdNoRouter ID; omit to use the default router.
macAddressYesMAC address of the lease โ€” idempotency key (case-insensitive)

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate the tool is not read-only, not destructive, and idempotent. The description adds the detail 'Idempotent by MAC address,' reinforcing the idempotent hint. However, no further behavioral context is given (e.g., what happens if the lease does not exist, whether removal 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?

The description is a single 16-word sentence that efficiently front-loads the actions and key property (idempotency). No fluff or unnecessary repetition.

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 tool with 4 parameters, no output schema, and good schema coverage, the description is mostly complete. It covers the core actions and idempotency. However, it could clarify whether 'remove' applies to all leases or only dynamic ones, and mention error scenarios.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add any meaning beyond the schema; it only restates the concept of idempotency by MAC, which is already in the schema parameter description. No extra semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool's purpose: converting a dynamic DHCP lease to static or removing a lease. It specifies the resource (DHCP lease) and actions (make-static, remove), distinguishing it from sibling tools like manage_dhcp_client and manage_dhcp_server.

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

Usage Guidelines3/5

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

The description implies usage (when you need to make a lease static or remove it) but provides no explicit guidance on when to use this tool versus alternatives such as list_dhcp_leases or other manage_ tools. No when-not-to-use or alternative tools are mentioned.

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

manage_dhcp_serverManage DHCP ServerA
DestructiveIdempotent

Add, remove, enable, or disable a DHCP server. Idempotent by name: add returns already_exists if a server with the same name, interface, and address pool already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesServer name โ€” idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment
routerIdNoRouter ID; omit to use the default router.
interfaceNoInterface to serve DHCP on (required for add)
leaseTimeNoLease duration (e.g. '1d', '12h')
addressPoolNoIP pool name (required for add)
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate idempotentHint and destructiveHint. The description adds value by specifying idempotency by name and the 'already_exists' return on duplicate add, which is beyond what annotations provide. No contradiction.

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 succinct sentences: first states the purpose precisely, second explains key behavioral nuance. No extraneous words.

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 description covers purpose and idempotency but omits return format or structure, which is relevant since there is no output schema. Other aspects like prerequisites or confirmationToken usage are not mentioned.

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?

With 100% schema coverage, baseline is 3. The description adds context for the name parameter as an idempotency key and relates it to interface and addressPool in the idempotency rule, enhancing understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool manages DHCP server lifecycle with specific verbs (add, remove, enable, disable). It distinguishes itself from siblings like manage_dhcp_lease by focusing on server-level operations.

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

Usage Guidelines3/5

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

The description implies usage for DHCP server management but does not explicitly state when to use versus alternatives. It lacks guidance on when not to use or which sibling tool to prefer for similar tasks.

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

manage_dns_entryManage DNS EntryA
DestructiveIdempotent

Add or remove a static DNS entry. Idempotent by name+type: add returns already_exists if the same record already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoTTL value (e.g. 1d, 00:05:00)
nameYesHostname for the DNS record (e.g. server.example.com)
textNoText value (required for TXT records)
typeNoDNS record typeA
cnameNoTarget hostname (required for CNAME records)
actionYesAction to perform
dryRunNoPreview changes without applying.
addressNoIP address (required for A records)
commentNoOptional comment
disabledNoWhether the entry should be disabled
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate destructiveHint and idempotentHint. The description adds that the tool is idempotent by name+type and returns 'already_exists' for duplicates. This aligns with annotations and provides extra clarity beyond the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no waste. The core purpose is front-loaded, and additional behavioral info is efficiently provided.

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 tool has 12 parameters and no output schema. The description only mentions one return case (already_exists), leaving response format and error states undocumented. More detail on return values or typical responses would improve completeness.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the idempotency constraint and the 'already_exists' return, which helps the agent understand parameter interactions beyond the 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 clearly states 'Add or remove a static DNS entry', specifying the verb and resource. It also distinguishes from siblings by noting idempotency and the 'already_exists' return for adds, making the tool's unique function clear.

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

Usage Guidelines4/5

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

The description implies the tool is for adding/removing DNS entries, contrasting with listing tools like list_dns_entries. However, it does not explicitly state when to use alternatives or provide exclusion criteria, which is a minor gap.

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

manage_dns_settingsManage DNS SettingsB
DestructiveIdempotent

Update DNS resolver settings (upstream servers, cache size, cache TTL, allow-remote-requests). Idempotent: returns no_change if nothing differs.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoPreview changes without applying.
serversNoComma-separated upstream DNS server IPs (e.g. '8.8.8.8,1.1.1.1')
routerIdNoRouter ID; omit to use the default router.
cacheSizeNoDNS cache size in KiB
cacheMaxTtlNoMaximum cache TTL (e.g. '1d', '00:30:00')
maxUdpPacketSizeNoMaximum UDP packet size in bytes
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
allowRemoteRequestsNoAllow router to answer DNS queries from the network

TDQS

B3.3/5.0
Behavior3/5

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

Annotations provide idempotentHint=true and destructiveHint=true. The description adds context by explaining idempotency ('returns no_change if nothing differs') and listing what settings are updated. However, it doesn't elaborate on authorization needs, side effects, or the destructive nature beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. First sentence clearly states purpose and scope; second adds valuable idempotency behavior. Highly concise.

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?

Given 8 parameters (all documented in schema), annotations, and no output schema, the description covers purpose and idempotency but lacks usage guidelines and behavioral details (e.g., confirmation token requirement, destructive action). Adequate but not comprehensive.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description summarizes key parameters (upstream servers, cache size, cache TTL, allow-remote-requests) but does not add meaning beyond the schema. No additional parameter semantics provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description clearly states the verb ('Update'), the resource ('DNS resolver settings'), and lists specific settings (upstream servers, cache size, cache TTL, allow-remote-requests). It distinguishes from siblings like 'get_dns_settings' by being a write operation, though not 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?

No guidance on when to use vs alternatives. Does not mention when not to use, prerequisites, or context for choosing this tool over related tools like 'manage_dns_entry' or 'get_dns_settings'.

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

manage_firewall_ruleManage Firewall RuleA
DestructiveIdempotent

Add, remove, disable, or enable a firewall rule on a MikroTik router. Uses comment as idempotency key for deduplication and identification. Supports dry-run mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainYesFirewall chain (e.g. forward, input, output, srcnat, dstnat)
tableNoFirewall table to manage: filter or natfilter
actionYesAction to perform: add, remove, disable, or enable a firewall rule
dryRunNoIf true, validate and return planned changes without applying
commentNoComment to identify the rule (used as idempotency key)
dstPortNoDestination port or range
srcPortNoSource port or range
disabledNoWhether the rule should be disabled
protocolNoProtocol to match
routerIdNoRouter ID; omit to use the default router.
dstAddressNoDestination address or network
ruleActionYesRouterOS rule action (e.g. accept, drop, reject, masquerade)
srcAddressNoSource address or network
inInterfaceNoIncoming interface
placeBeforeNoPlace the new rule before this rule ID
outInterfaceNoOutgoing interface
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already signal destructive and idempotent behavior. The description adds valuable context: explains comment as idempotency key, confirms dry-run mode, and notes RouterOS-specific actions. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences covering purpose, idempotency, and dry-run. No redundant words. Front-loaded with the core action and resource. Efficient and focused.

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?

Covers key behavioral aspects (idempotency, dry-run) but does not explain return values or error handling. With no output schema, the description could have specified what the tool returns (e.g., rule details, success status). Adequate for a simple CRUD tool, but a brief note on output would improve completeness.

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

Parameters4/5

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

Schema coverage is 100% with detailed descriptions for all 17 parameters. The description highlights two critical parameters: 'comment' (idempotency key) and 'dryRun' (dry-run mode), adding meaning beyond the schema. Other parameters rely on schema descriptions, which are adequate.

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?

Clearly states the tool manages firewall rules (add, remove, disable, enable) on MikroTik routers. Specifies key features like idempotency key via comment and dry-run support. Distinguishes from sibling tools (e.g., list_firewall_rules) by combining multiple actions in one tool.

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?

No explicit guidance on when to use this tool versus alternatives. The description implies usage for rule management but doesn't compare to similar tools like manage_mangle_rule or provide decision context. Basic usage is clear but lacks comparative or conditional advice.

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

manage_interface_listManage Interface ListA
DestructiveIdempotent

Add or remove an interface list. Idempotent by name. Removing a list that has members is blocked by RouterOS โ€” the error is surfaced as-is.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesInterface list name โ€” idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark the tool as destructive and idempotent. The description adds context beyond that: idempotency is achieved 'by name', and removing a list with members is blocked, with the error surfaced as-is. This provides helpful behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the core action, and every sentence adds unique value: the first defines the purpose, the second explains idempotency and a key constraint.

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 tool with no output schema, the description covers the essential behavior: adding/removing lists, idempotency, and the error case for removal of non-empty lists. It assumes some user knowledge (e.g., what an interface list is) but is otherwise complete for its complexity.

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?

All six parameters are described in the schema with 100% coverage. The description adds only the 'idempotent by name' note for the 'name' parameter, which is a minor addition. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool adds or removes an interface list, with a specific verb and resource. It distinguishes from siblings like 'manage_interface_list_member' which handles list members, and 'list_interface_lists' which lists 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?

The description indicates the tool is for adding or removing interface lists, which implies when to use it, but it does not explicitly state when not to use it or mention alternatives like 'manage_interface_list_member' for member management.

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

manage_interface_list_memberManage Interface List MemberA
DestructiveIdempotent

Add or remove an interface from an interface list. Idempotent by list+interface composite key. add returns already_exists if the membership exists. remove returns not_found gracefully.

ParametersJSON Schema
NameRequiredDescriptionDefault
listYesInterface list name โ€” part of composite idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment
routerIdNoRouter ID; omit to use the default router.
interfaceYesInterface name to add/remove โ€” part of composite idempotency key
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.8/5.0
Behavior4/5

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

The description adds idempotency details and specific error returns (already_exists, not_found) beyond the annotations (idempotentHint=true, destructiveHint=true). No contradictions; the description enriches behavioral understanding.

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 concise sentences: first states the action, second covers idempotency and return behaviors. No wasted words, front-loaded with key information.

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?

While basic behavior is covered, the description omits important context for parameters like dryRun, comment, routerId, and confirmationToken. Given the destructive action and lack of output schema, these missing details 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 100%, so the schema already documents parameters. The description reinforces the composite key (list+interface) but does not add new semantic details for other parameters like dryRun, comment, or confirmationToken.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool adds or removes an interface from an interface list, with specific idempotency and return behaviors. This distinguishes it from sibling tools like manage_interface_list (which likely manages the list itself) and other management tools.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-to-avoid guidance is provided. While the action is clear, no distinction is made between using this tool versus other membership management tools. Usage is implied but not detailed.

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

manage_ip_addressManage IP AddressA
DestructiveIdempotent

Add, update, or remove an IP address on a MikroTik router interface. Performs idempotency checks for add operations and supports dry-run mode for all actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform: add, update, or remove an IP address
dryRunNoIf true, validate and return planned changes without applying
addressYesIP address with optional prefix length in CIDR notation (e.g., 192.168.1.1/24). Defaults to /32 if prefix is omitted.
commentNoOptional comment for the IP address entry
networkNoNetwork address (auto-calculated from address if omitted)
disabledNoWhether the IP address should be disabled
routerIdNoRouter ID; omit to use the default router.
interfaceYesInterface to assign the IP address to
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate destructive and idempotent hints. The description adds specifics: idempotency for add operations, dry-run mode, and the need for a confirmation token for destructive actions. This goes beyond annotations by detailing the expected 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 concise sentences: first states the core purpose, second adds key behaviors (idempotency, dry-run). No redundant words; every sentence provides value. Ideals for front-loading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, no output schema, and decent annotations, the description covers idempotency, dry-run, and confirmation token. It could explain return values or side effects more, but given the annotations and schema richness, it is fairly complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the description adds no new parameter information. It does conceptually link parameters like dryRun and confirmationToken to the behavior mentioned, but does not elaborate on their meaning beyond the schema. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description clearly states the tool adds, updates, or removes an IP address on a MikroTik router interface. It specifies a concrete action and resource, and the title 'Manage IP Address' aligns perfectly. Among many manage_ siblings, this is distinct for IP address management.

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 mentions idempotency checks and dry-run mode but does not explicitly guide when to use this tool over alternatives. It implicitly contrasts with other manage_ tools by focusing on IP addresses, but lacks explicit use-case conditions or exclusions.

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

manage_ip_poolManage IP PoolA
Idempotent

Add or remove an IP address pool. Idempotent by name: add returns already_exists if a pool with the same name and ranges already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPool name โ€” idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
rangesNoIP range (e.g. '192.168.1.100-192.168.1.200'; required for add)
nextPoolNoNext pool name for overflow
routerIdNoRouter ID; omit to use the default router.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate idempotency and non-destructiveness. The description adds specific idempotency details but does not disclose other behavioral traits like authentication or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with core action, every word earns its place. No wasted text.

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?

The description covers purpose and idempotency. For a tool with 6 parameters and no output schema, it could benefit from mentioning return values or edge cases, but it remains fairly complete.

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?

All 6 parameters have schema descriptions (100% coverage). The description reinforces the idempotency key role for the name parameter but adds no new meaning beyond the 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 clearly states the verb ('Add or remove') and resource ('IP address pool'), and it distinguishes from sibling tools like list_ip_pools and other manage_ tools.

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

Usage Guidelines4/5

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

The description explains idempotent behavior ('add returns already_exists'), providing context on when to use the tool. However, it does not explicitly state when not to use or mention alternatives among the many sibling tools.

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

manage_ipsec_peerManage IPSec PeerA
DestructiveIdempotent

Add, remove, enable, or disable an IPSec peer. Idempotent by name: add returns already_exists if a peer with the same name and address already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPeer name โ€” idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
addressNoRemote gateway address (required for add)
commentNoOptional comment
profileNoIKE profile name
exchangeNoIKE exchange modeike2
routerIdNoRouter ID; omit to use the default router.
localAddressNoLocal address
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds context by explaining the idempotency behavior for add operations and the 'already_exists' response, which goes beyond annotations. However, details about other actions (remove, enable, disable) are not disclosed.

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 efficient sentences that convey essential information without waste. The description is front-loaded with actions and then idempotency detail.

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?

Given the high parameter count (10) and no output schema, the description is too terse. It lacks action-specific parameter guidance (e.g., which params are needed for add vs remove) and return value details for actions other than add.

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?

With 100% schema coverage, the baseline is 3. The description does not add meaning beyond what the schema already provides (e.g., 'Peer name โ€” idempotency key' in schema, and description repeats idempotency).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the actions (add, remove, enable, disable) and the resource (IPSec peer), distinguishing it from sibling tools like list_ipsec_peers and manage_ipsec_policy. The mention of idempotency adds specificity.

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 (e.g., other manage_* tools). The description only states what it does, not when to choose it.

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

manage_ipsec_policyManage IPSec PolicyA
DestructiveIdempotent

Add, remove, enable, or disable an IPSec policy. Idempotent by composite key (srcAddress + dstAddress + tunnel).

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoSA levelrequire
actionYesAction to perform
dryRunNoPreview changes without applying.
tunnelNoTunnel mode โ€” part of composite idempotency key
routerIdNoRouter ID; omit to use the default router.
dstAddressYesDestination CIDR โ€” part of composite idempotency key
srcAddressYesSource CIDR โ€” part of composite idempotency key
ipsecActionNoIPSec action (required for add)
saDstAddressNoSA destination IP for tunnel mode
saSourceAddressNoSA source IP for tunnel mode
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true. The description adds valuable context about the composite idempotency key (srcAddress + dstAddress + tunnel) and the range of actions (add/remove/enable/disable), which helps the agent understand safety and repeatability beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with action and resource, then idempotency detail. No wasted words; every 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?

Given the complexity (11 parameters, 3 required, no output schema), the description is brief. It covers core behavior but omits return values, error handling, or interaction with confirmationToken. For a mutation tool, additional context on expected outputs would improve 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 coverage is 100%, so all parameters have descriptions. The description adds meaning by highlighting the idempotency key (srcAddress, dstAddress, tunnel) as composite, but does not elaborate on other parameters like routerId or dryRun. This is baseline adequate given schema richness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool can add, remove, enable, or disable an IPSec policy, with a specific verb and resource. It distinguishes itself from siblings like list_ipsec_policies (read-only) and manage_ipsec_peer (different resource) by specifying the exact actions and the idempotency key.

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

Usage Guidelines3/5

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

The description implies usage for managing IPSec policies but does not explicitly state when to use this tool versus alternatives like manage_ipsec_peer or other routing tools. No exclusions or context is provided, leaving the agent to infer from the tool name and sibling list.

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

manage_ip_serviceManage IP ServiceA
DestructiveIdempotent

Enable or disable a RouterOS IP service (api, api-ssl, ssh, telnet, www, www-ssl, winbox, ftp). Port number changes are intentionally not supported to prevent accidental lockout.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesService name to manage (api, api-ssl, ssh, telnet, www, www-ssl, winbox, ftp)
actionYesAction to perform โ€” only enable/disable to prevent accidental lockout from changing ports
dryRunNoPreview changes without applying.
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond annotations (destructiveHint, idempotentHint), the description explains why port changes are omitted and references safety features like dryRun and confirmationToken, providing full behavioral context for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, immediately conveying purpose and key constraint. No unnecessary words, and critical safety information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, constraints, and safety mechanisms. While it does not explain return values (no output schema), the tool's simplicity makes this omission acceptable. It is complete enough for effective agent use.

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

Parameters3/5

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

Schema coverage is 100% and each parameter is well-described in the schema. The description does not add significant new parameter semantics beyond reinforcing the enum values and the reasoning behind them, resulting in minimal added value.

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 explicitly states 'Enable or disable a RouterOS IP service' and lists all supported services, making the action and resource clear. It also distinguishes itself from port-change operations by stating they are intentionally unsupported.

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

Usage Guidelines4/5

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

The description notes that port changes are not supported to prevent lockout, guiding agents away from misuse. It also implies when to use this tool (only enable/disable) and hints at alternative actions, though not explicitly naming sibling tools.

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

manage_log_actionManage Log ActionA
Idempotent

Add or remove a RouterOS logging action target. Idempotent by name. add throws VALIDATION if type is missing; returns already_exists if name found. remove returns not_found gracefully. Supports dry-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLog action name โ€” idempotency key
typeNoAction type: memory, disk, remote, echo, email (required on add)
actionYesAction to perform
dryRunNoPreview changes without applying.
remoteNoRemote syslog server address (for type=remote)
routerIdNoRouter ID; omit to use the default router.
remotePortNoRemote syslog server port (for type=remote)
diskFileNameNoDisk log file name without extension (for type=disk)

TDQS

A4.6/5.0
Behavior5/5

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

Discloses idempotency by name, specific error behavior (VALIDATION, already_exists, not_found), and dry-run support. Adds substantial context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, each adding distinct value: purpose, idempotency/errors, dry-run. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose and error behavior well. Lacks description of success return value, but for a manage tool that is acceptable given no output schema.

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

Parameters4/5

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

Schema has 100% coverage, baseline 3. Description adds meaning: idempotency key for 'name', validation error for missing 'type', and dry-run capability, raising above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description clearly states 'Add or remove a RouterOS logging action target' using specific verb+resource. It distinguishes from sibling tools like list_log_actions which is for listing.

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

Usage Guidelines4/5

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

Provides clear purpose for adding/removing logging actions. Does not explicitly exclude alternatives but context from siblings makes differentiation obvious.

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

manage_log_ruleManage Log RuleA
Idempotent

Add, remove, enable, or disable a RouterOS logging rule. Idempotent by topics+logAction (add โ†’ already_exists on match; remove โ†’ not_found handled gracefully; enable/disable throw NOT_FOUND when absent). Supports dry-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
dryRunNoPreview changes without applying.
prefixNoOptional prefix to prepend to log messages
topicsYesLog topics (e.g. firewall, system, info) โ€” idempotency key
routerIdNoRouter ID; omit to use the default router.
logActionYesLog action target name (RouterOS action field) โ€” idempotency key

TDQS

A4.4/5.0
Behavior5/5

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

The description provides detailed behavioral traits beyond annotations, including idempotency keys (topics+logAction), graceful handling of duplicates/not_found for add/remove, and NOT_FOUND thrown for enable/disable when absent. It also mentions dry-run support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first clearly states the tool's purpose and actions, the second adds idempotency details and dry-run. No wasted words.

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?

The description covers all actions, idempotency, error handling, and dry-run. However, it does not specify the output format (e.g., success message or rule ID) since there is no output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds the idempotency key concept for topics and logAction, but otherwise does not add significant meaning beyond the 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 'Add, remove, enable, or disable a RouterOS logging rule' with a specific verb and resource, clearly differentiating it from sibling tools like list_log_rules and manage_log_action.

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

Usage Guidelines4/5

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

The description explains idempotent behavior and graceful error handling for each action, but does not explicitly state when to use this tool versus alternatives like manage_log_action for managing actions.

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

manage_mangle_ruleManage Mangle RuleA
DestructiveIdempotent

Add, remove, enable, or disable a firewall mangle rule. Uses comment as idempotency key. Supports dry-run mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoMangle chain (required on add): prerouting, input, forward, output, postrouting
actionYesAction to perform
dryRunNoPreview changes without applying.
commentYesIdempotency key โ€” uniquely identifies this mangle rule
dstPortNoDestination port or range
srcPortNoSource port or range
protocolNoProtocol to match (e.g. tcp, udp)
routerIdNoRouter ID; omit to use the default router.
dstAddressNoDestination IP/CIDR to match
srcAddressNoSource IP/CIDR to match
inInterfaceNoIncoming interface to match
passthroughNoWhether to continue matching subsequent rules
newDscpValueNoDSCP value to set (0โ€“63)
outInterfaceNoOutgoing interface to match
dstAddressListNoDestination address list name to match
newRoutingMarkNoRouting mark to set
srcAddressListNoSource address list name to match
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
newConnectionMarkNoConnection mark to set

TDQS

A4/5.0
Behavior4/5

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

Annotations already provide destructiveHint=true and idempotentHint=true. The description adds value by mentioning the idempotency key and dry-run mode, disclosing key behaviors beyond the annotations. However, it does not elaborate on the confirmationToken or immediate effects of destructive actions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and key features. No wasted words. Efficient and clear.

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 tool with 19 parameters and no output schema, the description covers the essential behavioral aspects (actions, idempotency, dry-run). The schema covers parameter details. Completeness is adequate but could mention how match criteria parameters relate to actions.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the schema; it mentions 'comment' and 'dryRun' but these are already documented. No new parameter insights.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb ('Add, remove, enable, or disable') and resource ('firewall mangle rule'), distinguishing it from siblings like 'list_mangle_rules' or 'manage_firewall_rule'. It also mentions key features (idempotency key, dry-run mode).

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 does not explicitly guide when to use this tool versus alternatives. It mentions idempotency and dry-run but lacks comparisons with sibling tools like 'list_mangle_rules' or 'manage_firewall_rule'. Usage is implied but not clarified.

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

manage_netwatch_entryManage Netwatch EntryA
Idempotent

Add, remove, enable, or disable a Netwatch monitoring entry. Idempotent by host+port: add returns already_exists if an entry with the same host and port already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYesHost to monitor โ€” idempotency key
portNoTCP port (optional; ICMP if omitted)
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment
timeoutNoProbe timeout (e.g. '500ms')
intervalNoCheck interval (e.g. '1m'; default '1m')
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.9/5.0
Behavior4/5

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

The idempotentHint annotation is already present, but the description adds valuable context: 'add returns already_exists if an entry with the same host and port already exists.' This clarifies behavior beyond the annotation. However, it does not describe potential side effects of removal or enable/disable actions.

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 concise, with two sentences that efficiently convey the tool's purpose and key behavioral detail. No redundant or unnecessary information.

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?

While schema coverage for parameters is complete, the description omits details about the return value/output format. For a management tool with 8 parameters, knowing the response structure would enhance completeness. The annotations provide some context, but the output remains undocumented.

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?

All 8 parameters have full schema descriptions (100% coverage). The description enhances this by explaining the idempotency key behavior for host and port, adding meaning beyond the 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 clearly states the tool adds, removes, enables, or disables a Netwatch monitoring entry, with a specific verb and resource. It distinguishes from the sibling 'list_netwatch_entries' by focusing on management actions.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., when to use manage vs. other manage tools). It does not mention prerequisites or conditions that might make this tool more suitable.

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

manage_ntp_clientManage NTP ClientA
Idempotent

Update NTP client settings on a MikroTik router. Idempotent: returns already_set if no changes are needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoNTP client mode
dryRunNoPreview changes without applying.
enabledNoEnable or disable the NTP client
serversNoComma-separated NTP server addresses
routerIdNoRouter ID; omit to use the default router.
vlanInterfaceNoVLAN interface for NTP communication

TDQS

A4.2/5.0
Behavior5/5

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

Explicitly states idempotent behavior and return value 'already_set', adding value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff, front-loaded with purpose.

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?

Lacks output schema details but covers idempotency; sufficient for update tool with 6 params.

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?

100% schema coverage, description adds no extra parameter-specific information.

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?

Clear verb 'Update' and resource 'NTP client settings' on a MikroTik router. Distinguishes from sibling get_ntp_settings.

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?

Does not explicitly state when to use vs alternatives like get_ntp_settings, but idempotent hint suggests safe for repeated calls.

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

manage_ovpn_clientManage OpenVPN ClientA
DestructiveIdempotent

Add, update, or remove an OpenVPN client interface. Idempotent by name (already_exists on matching name+connectTo; CONFLICT on differing connectTo; no_change when an update differs in nothing). Password is always written when provided since RouterOS does not return it on GET.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoTunnel mode
nameYesOpenVPN client interface name โ€” idempotency key
portNoRemote port number
userNoVPN username
actionYesAction to perform
dryRunNoPreview changes without applying.
passwordNoVPN password (never logged)
protocolNoTransport protocol
routerIdNoRouter ID; omit to use the default router.
connectToNoRemote server address (required for add)
certificateNoClient certificate name
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.6/5.0
Behavior5/5

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

The description details behavioral nuances beyond annotations: idempotency by name, specific conflict responses (already_exists, CONFLICT, no_change), and password handling (always written because RouterOS doesn't return it). This adds significant context to the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (3 sentences) and front-loaded: first sentence states purpose, second explains idempotency/conflict, third covers password behavior. No wasted words.

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 tool with 12 parameters, no output schema, and important behavioral details, the description covers key aspects (idempotency, conflict, password). It could mention error responses or success indicators, but is reasonably complete.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by clarifying that 'name' serves as idempotency key and explaining password behavior, which is not fully covered in schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool's purpose: 'Add, update, or remove an OpenVPN client interface.' It also differentiates from siblings like manage_ovpn_server by specifying it's for client interfaces.

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

Usage Guidelines4/5

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

The description implicitly guides usage via the action parameter (add/update/remove) and explains idempotency behavior, but does not explicitly state when to use this tool versus alternatives like manage_ovpn_server.

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

manage_ovpn_serverManage OpenVPN ServerA
DestructiveIdempotent

Enable, disable, or configure the OpenVPN server (a per-router singleton). Throws NOT_FOUND if the OpenVPN package is not installed. The set action requires at least one configuration field.

ParametersJSON Schema
NameRequiredDescriptionDefault
authNoAuthentication algorithm (set action only)
modeNoTunnel mode (set action only)
portNoListening port (set action only)
actionYesAction to perform
cipherNoEncryption cipher (set action only)
dryRunNoPreview changes without applying.
protocolNoTransport protocol (set action only)
routerIdNoRouter ID; omit to use the default router.
certificateNoServer certificate name (set action only)
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already mark it as destructive and idempotent. The description adds value by disclosing the NOT_FOUND error condition and the singleton nature. It does not elaborate on what exactly gets destroyed or authorization needs, but with annotations, the description provides adequate additional context.

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 concise with three sentences, each earning its place: purpose, error condition, and constraint. No fluff, and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10 parameters, multiple actions, error states), the description covers the basics but lacks details like the effects of enable/disable, whether set modifies or overwrites, and what the return value is (no output schema). The dryRun and confirmationToken parameters are not mentioned, though they appear in the schema.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description mentions that the 'set' action requires at least one configuration field, but this is already implied by the schema. It does not add further semantics beyond what the schema provides, such as format constraints or dependencies between parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool enables, disables, or configures the OpenVPN server, specifying it is a per-router singleton. It distinguishes from sibling tools like get_ovpn_server (read-only) and manage_ovpn_client (client management).

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

Usage Guidelines4/5

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

The description provides clear guidance: it mentions the possible actions and that 'set' requires at least one configuration field. It also warns of a NOT_FOUND error if the package is not installed. However, it does not explicitly suggest using list_packages or get_ovpn_server first, nor does it describe when to use enable/disable versus set.

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

manage_packageManage PackageA
DestructiveIdempotent

Enable or disable a RouterOS package. Changes take effect only after a router reboot โ€” use the reboot tool to apply. Idempotent: no-op if already in the target state.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
actionYesAction to perform
dryRunNoPreview changes without applying.
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide idempotentHint=true and destructiveHint=true. The description adds valuable context: changes only take effect after rebooting, and idempotency means no-op if already in target state. This goes beyond what annotations offer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the core action, then adding critical behavior (reboot, idempotency). No wasted words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description sufficiently covers the tool's behavior (enable/disable, reboot needed, idempotent). It could mention what state the package transitions to (enabled/disabled) but the action parameter makes that clear.

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

Parameters3/5

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

Schema coverage is 100% with clear parameter descriptions. The tool description does not add additional semantics beyond the schema, meeting the baseline. No extra explanation is needed for basic fields like name and action.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool enables or disables a RouterOS package, with specific verb and resource. It also mentions the reboot requirement, distinguishing it from listing tools like list_packages.

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

Usage Guidelines4/5

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

The description explicitly indicates when to use this tool (to enable/disable a package) and the prerequisite of a reboot, pointing to the reboot tool. It lacks explicit 'when not to use' but is clear enough for an AI agent.

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

manage_pppoe_clientManage PPPoE ClientA
DestructiveIdempotent

Add, update, or remove a PPPoE client interface. Idempotent by name (already_exists on matching name+interface+user; CONFLICT on differing config; no_change when an update differs in nothing). Password is always written when provided since RouterOS does not return it on GET.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPPPoE client interface name โ€” idempotency key (e.g. pppoe-wan)
userNoPPPoE username (required for add)
actionYesAction to perform
dryRunNoPreview changes without applying.
passwordNoPPPoE password (never logged)
routerIdNoRouter ID; omit to use the default router.
interfaceNoParent interface (required for add)
serviceNameNoPPPoE service name filter (leave empty to match any)
dialOnDemandNoDial on demand instead of always-on (yes/no)
addDefaultRouteNoAdd default route via PPPoE (yes/no)
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent behavior. The description adds valuable details: idempotency by name with specific outcomes (already_exists, CONFLICT, no_change), and password handling (always written, not returned). This enriches behavioral understanding beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with purpose, and every sentence adds value. No wasted words; idempotency and password behavior are explained efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (11 parameters, no output schema), the description covers idempotency, password handling, and basic CRUD. However, it lacks details on removal behavior, error responses, or prerequisite conditions. Still, it provides sufficient context for correct invocation.

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

Parameters3/5

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

Schema coverage is 100%, so all parameters have descriptions. The description does not add per-parameter semantics beyond the password note, but it explains the password behavior globally. Baseline 3 is appropriate given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool adds, updates, or removes a PPPoE client interface, with specific verb (manage) and resource (PPPoE client). It distinguishes itself from sibling manage_* tools by naming the specific resource, and from list_pppoe_clients by indicating CRUD operations.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., when to use manage_bridge vs manage_pppoe_client, or when to use list_pppoe_clients for listing). It does not mention prerequisites or context, leaving the agent to infer usage.

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

manage_ppp_profileManage PPP ProfileA
Idempotent

Add, update, or remove a PPP profile. Idempotent by name. update returns no_change when requested values match. Built-in profiles (default, default-encryption) cannot be removed โ€” RouterOS blocks this and the error is surfaced.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProfile name โ€” idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment
routerIdNoRouter ID; omit to use the default router.
dnsServerNoDNS server IP pushed to client
rateLimitNoRate limit string (e.g. '10M/10M')
localAddressNoLocal IP assigned to router end of PPP link
remoteAddressNoIP or pool name assigned to client
sessionTimeoutNoSession timeout duration string (e.g. '1h')

TDQS

A4.4/5.0
Behavior4/5

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

Beyond annotations (idempotentHint, readOnlyHint, etc.), the description adds specific behaviors: idempotent by name, update returns no_change, and built-in profiles blocking removal. This provides valuable context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with no wasted words. Front-loaded with key purpose, then specifics. Each 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?

Given 10 parameters and no output schema, the description covers key behaviors (idempotency, update result, built-in profile restriction). Minor gaps: default router behavior and error handling beyond the noted case.

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 input schema has 100% coverage, but the description adds the concept of 'idempotency key' for the name parameter and explains the effect of update (no_change). This adds meaning beyond the bare schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the action (Add, update, or remove) and the resource (PPP profile). It also notes idempotency by name and special behavior for built-in profiles, which distinguishes it from sibling tools like `list_ppp_profiles`.

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

Usage Guidelines4/5

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

The description implies usage by listing actions and noting that built-in profiles cannot be removed, providing a when-not-to-use scenario. However, it does not explicitly contrast with alternatives or specify prerequisites.

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

manage_queueManage QueueA
Idempotent

Add, remove, enable, or disable a simple queue. Idempotent by name: add returns already_exists if a queue with the same name and target already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesQueue name โ€” idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
targetNoTarget address (required for add; e.g. '192.168.1.0/24')
commentNoOptional comment
limitAtNoGuaranteed rate (e.g. '1M/1M')
maxLimitNoMax upload/download limit (e.g. '10M/10M')
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate idempotentHint=true and non-destructive. The description adds specific behavioral detail: 'Idempotent by name: add returns already_exists if a queue with the same name and target already exists.' This clarifies the idempotency behavior beyond the annotation. However, it does not explain enable/disable behavior or the effect of removal.

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 extremely concise: two sentences, front-loaded with the core action, followed by a key behavioral note. Every word adds value; there is no redundancy or fluff.

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?

While the description covers the main purpose and idempotency, it lacks details on the return values (e.g., success/error messages for remove/enable/disable) and the dryRun parameter. Given the tool has 8 parameters and no output schema, a slightly more comprehensive description would improve completeness.

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

Parameters4/5

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

Schema coverage is 100%, so the schema documents all parameters. The description adds semantic value by linking 'name' and 'target' to the idempotency behavior, explaining that add with same name and target returns already_exists. This enriches understanding beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description clearly states the tool adds, removes, enables, or disables a queue, with a verb and resource. It distinguishes from sibling tools like list_queues (read-only) and other manage_* tools by specifying 'simple queue'. However, it doesn't explicitly contrast with similar resource managers (e.g., manage_firewall_rule).

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

Usage Guidelines3/5

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

The description implies usage for queue management but provides no explicit guidance on when to use this tool versus alternatives like manage_interface_list or manage_firewall_rule. It does not state when not to use it or how to choose among sibling tools.

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

manage_routeManage Static RouteB
DestructiveIdempotent

Add or remove a static route on a MikroTik router. Performs idempotency checks for add operations and supports dry-run mode for all actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform: add or remove a route
dryRunNoIf true, validate and return planned changes without applying
commentNoOptional comment for the route
gatewayYesGateway IP address
disabledNoWhether the route should be disabled
distanceNoRoute distance/metric (1-255)
routerIdNoRouter ID; omit to use the default router.
dstAddressYesDestination address in CIDR notation or plain IP (auto-converted to /32), e.g. 10.0.0.0/8 or 10.77.0.4
routingTableNoRouting table name (default: main). Use for policy routing with separate tables.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already include destructiveHint=true and idempotentHint=true. The description adds value by specifying that idempotency checks apply only to add operations and that dry-run mode is supported. However, it fails to mention the confirmationToken parameter's critical role for destructive actions or what happens on idempotent add (e.g., no change). The description partially complements annotations but misses key behavioral details.

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 consists of exactly two sentences: the first clearly states the core purpose, and the second highlights two important features (idempotency checks and dry-run). There is no redundant or extraneous information. Every word serves a purpose, making it highly efficient.

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?

Despite detailed parameter schema, the description lacks essential context for a tool with 10 parameters and no output schema. It does not explain the confirmationToken parameter's purpose, the return value, error conditions, or the fact that remove operations are destructive. While the schema covers individual parameters, the tool's overall behavior and workflow remain underdocumented.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters are already documented. The description does not add any new meaning beyond what the schema provides. It mentions dry-run and idempotency, which relate to parameters (dryRun and idempotent add behavior), but these are not directly tied to specific parameter usage. With full schema coverage, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool's purpose: 'Add or remove a static route on a MikroTik router.' It specifies the verb (add/remove) and resource (static route), and distinguishes from sibling tools like list_routes or manage_routing_rule by explicitly targeting static route management.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention that list_routes is for viewing existing routes, nor does it explain scenarios where manage_routing_rule or manage_routing_table might be more appropriate. There is no explicit 'when-to-use' or 'when-not-to-use' advice.

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

manage_routing_ruleManage Routing RuleA
DestructiveIdempotent

Add, remove, enable, or disable a policy routing rule. Idempotent by srcAddress+dstAddress+interface+table composite key. Supports dry-run mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesRouting table name โ€” part of the composite idempotency key; required for all actions
actionYesAction to perform
dryRunNoPreview changes without applying.
priorityNoRule priority (0โ€“4294967295)
routerIdNoRouter ID; omit to use the default router.
interfaceNoIncoming interface to match
dstAddressNoDestination CIDR to match
srcAddressNoSource CIDR to match
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.7/5.0
Behavior4/5

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

Adds meaningful context beyond annotations: specifies idempotency via composite key (srcAddress+dstAddress+interface+table) and dry-run support. Annotations already indicate idempotentHint=true and destructiveHint=true, but the description provides specifics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences cover all essential information. First sentence lists actions, second explains idempotency and dry-run. No filler, front-loaded with key purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 parameters, 100% schema coverage, and no output schema, the description adequately covers the tool's behavior. Could optionally mention the return format or side effects (e.g., immediate application unless dry-run), but overall complete.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by explaining the idempotency composite key (srcAddress+dstAddress+interface+table) and dry-run mode, which are not fully captured in individual parameter descriptions.

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 explicitly states the actions (add, remove, enable, disable) and the resource (policy routing rule). It also mentions idempotency and dry-run, but does not explicitly differentiate from sibling tools like manage_route, though the focus on routing rules is clear.

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 this tool versus alternatives like manage_route or manage_firewall_rule. The description lacks explicit when-to-use or when-not-to-use context, which is important given the large number of sibling tools.

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

manage_routing_tableManage Routing TableA
DestructiveIdempotent

Create or remove a custom routing table. Idempotent by table name. Supports dry-run mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
fibNoWhether to sync this table with the FIB
nameYesRouting table name (idempotency key)
actionYesAction to perform
dryRunNoPreview changes without applying.
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate idempotent and destructive. Description adds idempotency by table name and dry-run mode, but does not disclose that destructive actions may require a confirmation token (though the schema's confirmationToken description covers this).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with core action and key characteristics. No unnecessary words.

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 create/remove tool with well-documented schema, the description is mostly complete. It lacks mention of confirmation flow for destructive actions, but that is covered by the schema parameter. No output schema, but return is straightforward.

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 descriptions cover all 6 parameters (100% coverage). The description adds context that name is an idempotency key and dryRun enables preview, but the schema already provides adequate meanings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states it creates or removes a custom routing table, with idempotency and dry-run support. This distinguishes it from sibling tools like list_routing_tables.

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

Usage Guidelines4/5

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

The description implies usage for creating or removing routing tables, but does not explicitly state when to use add vs remove or provide alternatives. However, the sibling list makes it clear when to use list_routing_tables instead.

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

manage_scheduled_jobManage Scheduled JobA
Idempotent

Add, update, remove, enable, or disable a RouterOS scheduler entry. Idempotent by name. add throws CONFLICT if name exists; update throws NOT_FOUND if it does not. Supports dry-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesJob name โ€” idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment
onEventNoScript name or inline command to run (required on add)
intervalNoRun interval (e.g. 00:05:00 for every 5 minutes)
routerIdNoRouter ID; omit to use the default router.
startDateNoStart date (e.g. jan/01/2000)
startTimeNoStart time (e.g. 00:00:00)

TDQS

A3.8/5.0
Behavior1/5

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

The description states the tool can 'remove' a scheduler entry, which is a destructive action, but the annotations set destructiveHint to false. This contradiction undermines the reliability of the description and annotations for safe agent invocation.

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 concise at three sentences, front-loading the purpose and key behaviors. No extraneous information.

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?

The description covers essential behavioral aspects (idempotency, error cases, dry-run) despite lacking an output schema. It could be improved by noting what happens on update (e.g., partial vs full replacement) but is sufficient for a manage 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 description adds meaning beyond the schema by explaining the idempotent role of 'name' and the behavior of actions (add throws CONFLICT, update throws NOT_FOUND). With 100% schema coverage, this still adds valuable context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool's purpose: 'Add, update, remove, enable, or disable a RouterOS scheduler entry.' It uses specific verbs and identifies the resource (scheduler entry), differentiating it from sibling tools like list_scheduled_jobs.

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

Usage Guidelines4/5

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

The description provides guidance on idempotency (by name), error conditions (CONFLICT for add, NOT_FOUND for update), and dry-run support. While it does not explicitly state when to use this tool vs alternatives, the context of managing scheduler entries is clear among many manage_ siblings.

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

manage_scriptManage ScriptA
DestructiveIdempotent

Add, update, or remove a RouterOS script. Idempotent by name. add throws CONFLICT if the name already exists; update throws NOT_FOUND if it does not. Supports dry-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesScript name โ€” idempotency key
actionYesAction to perform
dryRunNoPreview changes without applying.
sourceNoScript body (required for add and update)
commentNoOptional comment
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dontRequirePermissionsNoAllow script to run without elevated permissions

TDQS

A4.6/5.0
Behavior5/5

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

Discloses idempotency (matches idempotentHint), dry-run capability, and error throwing (CONFLICT, NOT_FOUND). ConfirmationToken description highlights destructive nature (matches destructiveHint). Adds nuance beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus compact points. No wasted words. Information front-loaded and easy to parse.

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?

Covers core operations, error handling, idempotency, dry-run, and destructive confirmation. With 8 parameters and no output schema, explanation is sufficient for an agent to use correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline 3. Description adds meaning by linking name parameter to idempotency and dryRun to preview, but does not explain all parameters. Still adds value.

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?

Clearly states the tool adds, updates, or removes RouterOS scripts. Distinct from siblings like run_script or list_scripts. Specific verb+resource with error cases.

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?

Describes idempotency by name and error behavior for add/update. Supports dry-run for preview. Could mention when to use alternatives like run_script, but the scope is clear enough.

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

manage_upgradeManage UpgradeA
Destructive

Trigger a RouterOS package update check or install. 'check' queries the update server for new packages. 'install' downloads and applies the update โ€” the router will reboot automatically. Supports dry-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYescheck โ€” trigger a check for available updates; install โ€” download and install the latest update (triggers reboot)
dryRunNoPreview the action without executing
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations indicate destructiveHint=true, and the description adds critical behavior: 'the router will reboot automatically' and 'Supports dry-run.' This goes beyond annotations to clarify real-world effects.

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 three concise sentences, front-loaded with purpose, then action details, then dry-run. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with reboot, the description covers all behavioral aspects (check vs install, reboot, dry-run). No output schema is needed; description is sufficient for safe invocation.

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

Parameters3/5

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

Schema coverage is 100% with clear parameter descriptions. The description adds minimal extra: it mentions dry-run support, but the schema already defines dryRun. No significant additional semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states 'Trigger a RouterOS package update check or install.' It specifies two distinct actions (check and install) and notes the reboot consequence for install. This differentiates it from siblings like get_upgrade_status (status query) and manage_package (package management).

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

Usage Guidelines4/5

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

The description explains the tool's actions but does not explicitly compare to alternatives. It implies usage context via action descriptions, but lacks explicit 'when to use vs get_upgrade_status' guidance.

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

manage_userManage UserA
DestructiveIdempotent

Add, remove, enable, disable, or set the password for a local RouterOS user. Idempotent by name: add returns already_exists if a user with the same name and group already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesUsername โ€” idempotency key
groupNoGroup name (required for add; e.g. 'read', 'write', 'full')
actionYesAction to perform
dryRunNoPreview changes without applying.
addressNoAllowed source address or range
commentNoOptional comment
passwordNoPassword (required for add and set-password)
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate mutability and destructiveness. The description adds valuable context about idempotency (by name) and the specific return behavior for add ('already_exists'). This goes beyond what annotations provide, though it could mention behavior for other actions (e.g., enabling an already enabled user).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no extraneous information. Front-loaded with the list of actions and idempotency behavior. 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 mutation tool with 9 parameters and no output schema, the description covers the core functionality and key behavioral trait (idempotency). However, it lacks explanation of return values for other actions and error scenarios, which would be helpful given the tool's complexity and destructive hint.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds the idempotency key concept for the 'name' parameter, but otherwise adds little meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the actions (add, remove, enable, disable, set-password) on a specific resource (local RouterOS user). It distinguishes from siblings like list_users and manage_user_group by focusing on CRUD-like management of individual users.

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 does not explicitly mention when to use this tool versus alternatives (e.g., list_users for listing, manage_user_group for group changes). Usage is implied by the action parameter but lacks explicit when-to-use or when-not guidance.

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

manage_user_groupManage User GroupA
DestructiveIdempotent

Add, update, or remove a local RouterOS user group. Idempotent by name: add returns already_exists if a group with the same name and policy already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesGroup name โ€” idempotency key
skinNoOptional skin name for the group
actionYesAction to perform
dryRunNoPreview changes without applying.
policyNoComma-separated policy list (e.g. 'read,write,ftp')
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate idempotency and destructiveness. The description adds the idempotency detail (already_exists response) but doesn't disclose prerequisites for removal or the need for confirmation tokens, which are implied by the schema but not explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences cover purpose and key behavioral trait. No redundant information. Front-loaded with the main action.

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 description covers CRUD and idempotency but omits details about the confirmationToken parameter and explicit side effects of removal. With an output schema absent, the return behavior for actions other than add is unclear.

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

Parameters3/5

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

Schema coverage is 100%, so the schema documents all parameters. The description reinforces idempotency by name but adds minimal extra meaning beyond parameter names and types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb (add/update/remove) and resource (local RouterOS user group), and distinguishes from siblings like list_user_groups by specifying CRUD operations and idempotency behavior.

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

Usage Guidelines4/5

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

The description implies usage for managing user groups, and the sibling list_user_groups provides an alternative for listing. However, it doesn't explicitly state when not to use or compare to other manage tools.

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

manage_vlanManage VLAN InterfaceA
DestructiveIdempotent

Add, remove, enable, or disable a VLAN interface. Idempotent by name: add returns already_exists when a VLAN with matching name, vlan-id, and parent interface exists. Supports dry-run mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
mtuNoMTU size (add only)
nameYesVLAN interface name โ€” idempotency key (alphanumeric, hyphens, underscores, max 15 chars)
actionYesAction to perform
dryRunNoPreview changes without applying.
vlanIdNoVLAN ID (1-4094; required for add)
commentNoOptional comment (add only)
disabledNoWhether to create the VLAN disabled (add only)
routerIdNoRouter ID; omit to use the default router.
parentInterfaceNoParent interface name (e.g., ether1, bridge1; required for add)
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the annotations (destructiveHint, idempotentHint), the description explains idempotency behavior on add and supports dry-run. It does not detail the exact effects of destructive actions like remove, but the annotations already signal destructiveness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences (30 words) with no wasted text. The first sentence immediately states the tool's purpose, and the second adds key behavioral details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema covering all parameters and the annotations, the description adds sufficient behavioral context (idempotency, dry-run) for an agent to use the tool correctly. No output schema is present, but return values are not expected to be described.

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 input schema already has 100% coverage with descriptions for all 10 parameters. The description adds value by explaining that idempotency is keyed on name, vlanId, and parentInterface, and mentions dry-run mode, reinforcing schema details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool adds, removes, enables, or disables a VLAN interface. It uses a specific verb and resource, distinguishing it from many sibling tools that manage other resources like bridges or DHCP leases.

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

Usage Guidelines4/5

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

The description provides clear context for VLAN interface management and mentions idempotency and dry-run mode. However, it does not explicitly state when to use this tool over alternatives, nor does it provide when-not-to-use guidance.

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

manage_vrrp_instanceManage VRRP InstanceA
DestructiveIdempotent

Add, remove, enable, or disable a VRRP instance. Idempotent by name: add returns already_exists if an instance with the same name, interface, and VRID already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesVRRP interface name โ€” idempotency key
vridNoVirtual router ID (required for add)
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment
versionNoVRRP protocol version3
intervalNoAdvertisement interval in seconds
priorityNoRouter priority (1โ€“254)
routerIdNoRouter ID; omit to use the default router.
interfaceNoMaster interface (required for add)
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already convey destructiveHint and idempotentHint. The description adds value by explaining the idempotency behavior for 'add' (returns already_exists). However, it does not disclose other behavioral traits such as how enable/disable work, whether they are idempotent, or side effects beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences: the first lists all actions, the second explains idempotency behavior. It is front-loaded and contains no superfluous information.

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?

Given the tool has 11 parameters, destructive behavior, and no output schema, the description is incomplete. It does not cover expected return values, error scenarios (e.g., what happens if remove is called on a non-existent instance), or when the confirmationToken is needed. The agent lacks enough context to use the tool correctly in all scenarios.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add additional semantic meaning to parameters beyond what is in the schema. It mentions 'name' as idempotency key but that is already in the 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 clearly states the tool handles four specific actions (add, remove, enable, disable) on a VRRP instance and distinguishes it from siblings like list_vrrp_instances. The idempotency behavior for 'add' is explicitly described.

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 hints at usage by listing actions but does not explicitly guide the agent on when to use this tool versus alternatives. For example, it does not mention that 'list_vrrp_instances' should be used for listing. The idempotency note provides some context but no overall usage guidance.

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

manage_wifi_interfaceManage WiFi InterfaceA
DestructiveIdempotent

Enable, disable, or update SSID settings on a WiFi interface. At least one of disabled or ssid must be provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesWiFi interface name (e.g. wifi1, wlan1)
ssidNoNew SSID to set
dryRunNoPreview changes without applying.
disabledNoSet to true to disable, false to enable
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. Description adds 'Enable, disable, or update' which aligns but doesn't elaborate on side effects or consequences. Acceptable given annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with action, no wasted words. Constraint stated concisely.

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?

Given 6 parameters and destructive+idempotent annotations, description covers core actions and constraint but lacks details on return values or errors. Adequate but not rich.

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

Parameters4/5

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

Schema descriptions cover all parameters, but the tool description adds the valuable constraint that at least one of disabled or ssid is required, which is not in the schema itself. This compensates for baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description clearly states it enables, disables, or updates SSID on a WiFi interface, distinguishing it from read-only list tools like list_wifi_interfaces. The resource and actions are specific.

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

Usage Guidelines4/5

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

Provides a clear constraint ('at least one of disabled or ssid must be provided') implying when to use (modify settings). Does not explicitly mention when not to use or compare to siblings, but context with sibling list_wifi_interfaces is clear.

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

manage_wireguard_interfaceManage WireGuard InterfaceA
DestructiveIdempotent

Add, remove, enable, or disable a WireGuard interface. Idempotent by name. RouterOS generates the private key on create โ€” it is never passed in. The public key is returned after creation.

ParametersJSON Schema
NameRequiredDescriptionDefault
mtuNoMTU (default 1420)
nameYesInterface name โ€” idempotency key (e.g. wg0)
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment
routerIdNoRouter ID; omit to use the default router.
listenPortNoUDP listen port (RouterOS picks one if omitted)
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already provide idempotentHint=true and destructiveHint=true. The description adds useful context: idempotency by name, private key generation on create (never passed in), and public key return after creation. However, it does not elaborate on the consequences of destructive actions (remove/disable) beyond the annotation hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with the primary action, followed by idempotency and key behavior. Every sentence adds value without 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?

The description covers idempotency and key generation adequately, but for a destructive tool with no output schema, it lacks details on return format for actions other than create and does not provide cautionary notes about destructive operations.

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

Parameters3/5

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

The input schema has 100% coverage with clear descriptions for all 8 parameters. The description does not add extra meaning beyond the schema, so it meets the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool performs add, remove, enable, or disable actions on a WireGuard interface. It distinguishes from sibling tools like list_wireguard_interfaces (listing) and manage_wireguard_peer (peer management) by specifying the resource and verbs.

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 explicit guidance on when to use this tool vs alternatives. The description does not mention prerequisites, fallback tools, or scenarios where this tool should not be used. It only states the actions, leaving the agent to infer usage from the name.

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

manage_wireguard_peerManage WireGuard PeerA
DestructiveIdempotent

Add or remove a WireGuard peer. Idempotent by public key: add returns already_exists if a peer with the same public key already exists on the interface.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
dryRunNoPreview changes without applying.
commentNoOptional comment
endpointNoPeer endpoint as IP:port (e.g. 1.2.3.4:51820)
routerIdNoRouter ID; omit to use the default router.
interfaceYesWireGuard interface name (e.g. wg0)
publicKeyYesPeer public key in base64 format (44 characters)
allowedAddressNoAllowed IP address/CIDR for this peer (e.g. 10.0.0.2/32)
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations provide destructiveHint and idempotentHint. The description adds value by detailing the idempotent behavior: 'add returns already_exists if a peer with the same public key already exists.' This goes beyond annotations, though it omits specifics about what 'remove' returns or the role of dryRun/confirmationToken.

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 concise sentences, front-loaded with the core purpose, immediately followed by a key behavioral detail. No extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 params, no output schema), the description covers the essential purpose and idempotence. It does not explain the confirmation flow for destructive actions (dryRun, confirmationToken), but annotations partially compensate. Still, a bit more context on return values for 'remove' or error cases would improve 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 100%, so the schema already documents all parameters. The description does not add any parameter-specific semantics beyond what the schema provides, achieving baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states 'Add or remove a WireGuard peer,' specifying the verb and resource. It also explains idempotent behavior, distinguishing it from potentially similar peer management tools by focusing on WireGuard peers.

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 (e.g., other manage_* tools for different resources). The description does not mention prerequisites, scenarios for add vs remove, or when to avoid using this tool.

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

pingPingA
Read-onlyIdempotent

Send ICMP echo requests from the router to a target address. Returns per-packet RTT and summary statistics. 100% packet loss is a valid result, not an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoPacket size in bytes (14โ€“65535)
countNoNumber of ICMP echo requests (1โ€“20)
addressYesTarget IP address or hostname to ping
routerIdNoRouter ID; omit to use the default router.
routingTableNoRouting table to use for the ping

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, destructiveHint, idempotentHint. The description adds that the tool returns per-packet RTT and summary statistics, and clarifies that 100% packet loss is not an error. This goes beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no superfluous words. It front-loads the action and resource, then describes output, then a special case. Excellent conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains return values (RTT, summary stats) and a key edge case (100% loss valid). It covers the core purpose and behavior adequately, but could mention default router behavior more explicitly.

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

Parameters3/5

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

Schema coverage is 100% with each parameter described. The description does not add additional meaning beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool sends ICMP echo requests from a router to a target address and returns per-packet RTT and summary statistics. It distinguishes well from sibling tools like bandwidth_test and traceroute.

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

Usage Guidelines4/5

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

The description mentions that 100% packet loss is a valid result, which guides proper interpretation. However, it does not explicitly list when to use ping versus alternatives, nor does it provide contraindications.

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

plan_changesPlan ChangesA
Idempotent

Preview a sequence of write operations: each step runs with dryRun=true against live state, returning affected paths and the predicted action per step. Use apply_plan to execute the same steps for real.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesOrdered list of write operations to preview (up to 10)
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.4/5.0
Behavior5/5

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

The description goes beyond annotations by revealing that each step runs with dryRun=true against live state, returning affected paths and predicted actions. This complements the idempotentHint and clarifies the non-destructive nature, adding significant value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the core purpose. Every sentence adds value: the first defines the action, the second links to the sibling tool. No unnecessary words.

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?

The description explains the dry-run behavior and what is returned (affected paths, predicted action), which is sufficient given no output schema. However, it does not detail the exact return format, leaving a minor gap for agent 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 coverage is 100%, so baseline is 3. The description does not add extra meaning to parameters beyond what the schema provides; it only mentions 'dryRun is injected automatically', which is helpful but not about parameter semantics per se.

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 uses a specific verb 'Preview' and clearly identifies the resource as 'a sequence of write operations'. It distinguishes itself from the sibling tool 'apply_plan' by mentioning that the latter executes the same steps for real, making the 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 Guidelines4/5

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

The description explicitly states when to use this tool (to preview) and points to the sibling tool 'apply_plan' for execution. However, it does not explicitly state when not to use it, though the context is clear enough for an agent to infer.

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

rebootRebootA
Destructive

Trigger a controlled router reboot with an optional delay. Supports dry-run. Use this tool instead of run_command for reboots โ€” run_command's deny list blocks /system reboot*.

ParametersJSON Schema
NameRequiredDescriptionDefault
delayNoSeconds before rebooting (0โ€“3600)
dryRunNoPreview the reboot without executing
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description's burden is lower. It adds meaningful behavioral context: controlled reboot with optional delay and dry-run capability. No contradictions with annotations. Slightly higher than baseline due to added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, no wasted words, and the most critical information (purpose and sibling differentiation) is front-loaded. 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 simple action tool with no output schema and well-handled parameters, the description covers the key behavioral aspects (delay, dry-run, confirmation token via schema). Annotations signal destruction. Could mention network interruption but still adequate.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents parameters well. The description mentions delay and dry-run but does not add significant semantics beyond what the schema provides. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states 'Trigger a controlled router reboot with an optional delay' and distinguishes from sibling tools by explicitly recommending this over run_command due to the deny list. This meets the 'specific verb+resource, distinguishes from siblings' criterion.

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

Usage Guidelines5/5

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

The description explicitly provides when-to-use and when-not-to-use guidance: 'Use this tool instead of run_command for reboots โ€” run_command's deny list blocks /system reboot*'. It also mentions dry-run support, which clarifies safe testing usage.

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

rollback_changeRollback ChangeA
Destructive

Restore device state to before a write, identified by its journal ID. RouterOS: reads the before-snapshot, diffs against live state, and applies the reverse. SwOS: re-POSTs the exact pre-write '.b' blob. Use dryRun=true to preview. Requires MIKROMCP_DATA_DIR (defaults to data/).

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoPreview the restore plan without applying changes
routerIdNoRouter ID; omit to use the default router.
journalIdYesJournal entry ID from write-journal.ndjson to roll back
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and idempotentHint=false, and the description adds specifics: the exact rollback mechanisms for RouterOS (diff and reverse apply) and SwOS (re-POST the '.b' blob). It also mentions dryRun=true for preview and the data directory requirement, which goes beyond annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with the core action in the first and key usage hints (dryRun, requirement) in the second. Every sentence adds value, no redundancy, and the structure is front-loaded with the primary purpose.

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 destructive rollback tool with no output schema, the description covers the essential behaviors: how the rollback works on both platforms, the dryRun preview option, and the environment requirement. It doesn't mention potential failure modes (e.g., missing journal ID) but these are not required. Overall, it's sufficiently complete for the tool's complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter (journalId, dryRun, routerId, confirmationToken) is already documented in the schema. The description adds context for journalId (from write-journal.ndjson) and mentions dryRun preview, but it doesn't explain routerId or confirmationToken beyond the schema. Since the schema covers basics, baseline is 3; the description adds marginal value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the action: 'Restore device state to before a write, identified by its journal ID.' It specifies the resource (device state), the identifier (journal ID), and distinguishes from sibling tools like write_swos_blob and apply_plan by focusing on rollback. The RouterOS/SwOS mechanism descriptions further clarify scope.

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

Usage Guidelines4/5

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

The description advises using dryRun=true to preview, which is a clear usage guideline for safe verification. It also mentions a prerequisite (MIKROMCP_DATA_DIR) and implies that this tool is for undoing writes, which distinguishes it from alternatives. However, it doesn't explicitly name alternative tools for rollback or when not to use it, so a 4 is appropriate.

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

run_commandRun CommandA
Destructive

Execute an arbitrary RouterOS console command via SSH. Guarded by an allow/deny policy (built-in deny list blocks destructive commands; tighten via cmdAllow in routers.yaml or MIKROMCP_CMD_ALLOW). Prefer dedicated tools (reboot, etc.) where available. Output capped at 4000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoPreview the command without executing (validates allow/deny policy only)
commandYesRouterOS console command to execute
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds valuable behavioral context: it is guarded by an allow/deny policy, output is capped at 4000 characters, and there is a confirmation token mechanism for destructive actions. This goes beyond annotations but could disclose more about error handling or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences. The first sentence front-loads the core purpose. Every sentence adds value: purpose, security policy, and output limit. No extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (arbitrary command execution with security implications), the description covers key aspects: what it does, security guardrails, preference for alternatives, and output size limit. It could mention failure modes or the effect of dryRun, but the parameter schema covers dryRun. Overall, it is sufficiently complete for an agent to understand the tool's role and constraints.

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

Parameters3/5

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

Schema coverage is 100% and each parameter has a clear description. The description does not add significant new meaning to individual parameters beyond the schema, so a baseline score of 3 is appropriate. It does provide general context about the command execution policy, which indirectly relates to parameters like command and dryRun.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states it executes arbitrary RouterOS console commands via SSH, distinguishing it from dedicated tools. It explicitly mentions 'arbitrary' and 'via SSH', and advises preferring dedicated tools where available, which clarifies its scope relative to siblings.

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

Usage Guidelines5/5

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

The description provides explicit guidance: use when you need to run a command not covered by dedicated tools, and prefer dedicated tools like reboot when possible. It also explains the allow/deny policy and dryRun parameter for validation, offering clear context on when to use this tool vs alternatives.

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

run_scriptRun ScriptA
Destructive

Execute a named RouterOS script. Fire-and-forget โ€” the script runs asynchronously and its output is written to the router system log. Use get_log after calling this tool to see results.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the script to execute
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.3/5.0
Behavior4/5

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

Discloses that the script runs asynchronously and output goes to system log, adding value beyond annotations which only indicate destructive hint.

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 concise sentences with essential information. No redundant words, front-loaded with action.

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?

Describes the async behavior, output location, and how to retrieve results (get_log). No output schema, but this is sufficient for a simple execution tool.

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 already covers all parameters with descriptions (100% coverage). Description does not add extra parameter details beyond what is in 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?

Clearly states it executes a named RouterOS script. The verb 'execute' and resource 'named RouterOS script' are specific. Distinguishes from sibling tools like run_command and manage_script.

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

Usage Guidelines4/5

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

Explicitly says it's fire-and-forget and asynchronous, and directs the agent to use get_log to see results. No explicit exclusions or alternatives, but context is clear enough.

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

set_system_clockSet System ClockA
Idempotent

Set the system date, time, and/or timezone on a MikroTik router. Idempotent: returns already_set if the values already match. Supports dry-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in RouterOS format: mon/dd/yyyy (e.g. jan/02/2006)
timeNoTime in RouterOS format: hh:mm:ss (e.g. 15:04:05)
dryRunNoPreview changes without applying.
routerIdNoRouter ID; omit to use the default router.
timeZoneNameNoIANA timezone name (e.g. Europe/London, UTC)

TDQS

A3.8/5.0
Behavior4/5

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

Beyond annotations, the description explains idempotent behavior (returns already_set if values match) and supports dry-run, adding valuable context. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise, front-loaded sentences with no unnecessary information. Every sentence adds value.

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?

Description provides enough context for a setter tool with idempotent and dry-run features. It mentions the return value already_set, but lacks details on dependencies between parameters (e.g., if timezone changes affect stored values). Overall adequate.

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

Parameters3/5

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

Schema coverage is 100% so baseline is 3. Description reemphasizes the parameters (date, time, timezone) but does not add new meaning beyond the schema descriptions.

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?

Description clearly states it sets the system date, time, and/or timezone on a MikroTik router, using a specific verb and resource. It does not explicitly distinguish from sibling get_system_clock, but the action is unambiguous.

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

Usage Guidelines3/5

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

The description implies usage for setting clock values and mentions idempotency and dry-run, but does not provide explicit guidance on when to use this tool versus alternatives like get_system_clock for reading.

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

torchTorchA
Read-onlyIdempotent

Capture a real-time traffic snapshot on a router interface. The tool call blocks for the duration (seconds) and returns top flows by bytes. readOnlyHint true โ€” auto-retry enabled.

ParametersJSON Schema
NameRequiredDescriptionDefault
durationNoCapture duration in seconds (1โ€“30)
routerIdNoRouter ID; omit to use the default router.
interfaceYesInterface name to monitor (e.g. ether1, bridge1)
dstAddressNoFilter by destination IP address
srcAddressNoFilter by source IP address

TDQS

A4.4/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds critical behavioral traits: blocks for the duration, auto-retry enabled, and returns top flows by bytes. This adds significant value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no extraneous information. Front-loaded with the primary action, followed by key behavioral details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters with full schema coverage, rich annotations, and no output schema, the description covers blocking behavior, auto-retry, and return type. Minor omission: no mention of result count or pagination, but generally complete.

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

Parameters3/5

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

Schema coverage is 100%, so the description does not need to restate parameter details. The description adds no new meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states 'Capture a real-time traffic snapshot on a router interface' which is a specific verb and resource. It distinguishes from sibling tools like bandwidth_test and ping by focusing on traffic snapshot and top flows.

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

Usage Guidelines4/5

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

The description implies usage for capturing traffic snapshots and notes blocking behavior and auto-retry. While it doesn't explicitly state when not to use or name alternatives, the purpose is distinct enough for context.

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

tracerouteTracerouteA
Read-onlyIdempotent

Trace the network path from the router to a target address. Returns an ordered hop list with RTT per hop. Timeouts and partial results are valid responses.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoProbes per hop (1โ€“5)
addressYesTarget IP address or hostname to trace
maxHopsNoMaximum number of hops (1โ€“30)
routerIdNoRouter ID; omit to use the default router.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations (readOnlyHint=true, destructiveHint=false, idempotentHint=true) already declare safety. Description adds that timeouts/partial results are valid, which is useful but not extensive. No contradictions.

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 concise sentences with no fluff. Essential information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description explains return (ordered hop list with RTT). Parameters well-covered by schema. Lacks detail on hop fields but sufficient for typical use.

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 covers all 4 parameters with descriptions (100% coverage). Description does not add significant meaning beyond schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description clearly states the tool traces network path from router to target address, returning hop list with RTT. Distinguishes from sibling tools like ping (reachability) and bandwidth_test (throughput).

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?

Implied usage for path discovery, but no explicit guidance on when to use traceroute over siblings like ping or torch. Mentions timeouts and partial results are valid, but does not give alternatives or exclusions.

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

upload_fileUpload FileA
Idempotent

Upload a text file to a router, overwriting any existing file of the same name. Prefers SFTP (encrypted, over SSH) and falls back to plaintext FTP if SFTP is unavailable. Requires SSH (or FTP) access for the router user. Dry-run tests connectivity only.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTarget filename on the router (e.g. flash/my-script.rsc)
dryRunNoValidate FTP connectivity without writing the file
contentYesFile content to upload (text)
routerIdNoRouter ID; omit to use the default router.

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses key behavioral traits beyond annotations: protocol fallback (SFTP -> FTP), connectivity requirements, and dry-run behavior. Annotations already indicate idempotentHint=true and destructiveHint=false, and the description's overwriting statement aligns. The added details about protocol preferences and dry-run provide valuable transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. The first sentence states the core action, the second adds protocol and requirement details, and the third notes dry-run behavior. Every sentence serves a purpose, and the description is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is straightforward (upload a file) and there is no output schema, the description covers access requirements, protocol preferences, and overwrite behavior. It is sufficient for an agent to correctly invoke the tool. The existence of sibling tools like delete_file and get_file_content provides context that this is the write/update operation.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter already has a description in the schema. The tool description does not add significant new meaning beyond stating that files are overwritten, which is related to the 'name' parameter. With high schema coverage, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states 'Upload a text file to a router, overwriting any existing file of the same name.' It specifies the verb 'upload' and the resource 'text file to a router', distinguishing it from siblings like list_files, get_file_content, and delete_file which handle file listing, retrieval, and deletion respectively.

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

Usage Guidelines4/5

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

The description provides context on when to use: it mentions protocol preferences (SFTP fallback to FTP), access requirements (SSH or FTP access), and dry-run behavior. Although it doesn't explicitly list alternatives among siblings, the tool's purpose is clear enough so that an agent can infer when to use it over other file-related tools.

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

write_swos_blobWrite SwOS BlobA
DestructiveIdempotent

Mutate a SwOS '.b' endpoint on a MikroTik switch. The full endpoint blob is read, the given fields are merged in, and the entire blob is written back (the firmware only accepts whole-blob writes); untouched fields are re-sent byte-for-byte, and a field this firmware does not expose is refused rather than injected. dryRun defaults to true โ€” preview first. Every result reports whether the schema has been verified against the switch's firmware. The pre-write blob is snapshotted, so the change can be undone with rollback_change. Returns no_change when the values already match.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoPreview the resulting blob without writing to the switch.
fieldsYesValues to set, keyed by decoded field name (from list_swos_endpoints) or by a raw wire key already present in the blob โ€” anything else is rejected. Option fields take the enum name (e.g. 'auto'); text becomes a UTF-8 hex string; numbers and '0x...' strings are written as hex, padded to the width of the value they replace. A per-port field given a single value applies it to EVERY port.
endpointYes'.b' endpoint to write
routerIdNoRouter ID; omit to use the default router.
confirmationTokenNoToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations indicate destructiveHint=true, and the description goes far beyond that: it discloses the read-merge-write pattern, rejection of unexposed fields, snapshotting for rollback, dryRun default, and schema verification. It also specifies the no_change result. This enriches the behavioral model significantly and matches the annotations without contradiction.

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 dense but every sentence earns its place. It opens with a clear purpose, then explains the write mechanism, safety features (dryRun, snapshot), and edge cases (no_change). It is well-structured and front-loaded, with no filler or redundant statements.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, nested object, destructive action, rollback integration), the description covers all necessary aspects: usage, safety, field value encoding, and result semantics. Although there is no output schema, the description explicitly mentions return states (no_change) and schema verification. The description is fully self-sufficient for an agent to use the tool correctly.

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?

Although schema coverage is 100%, the description adds crucial semantics for the 'fields' parameter: how enum options are encoded, hex padding, per-port default application, and the rule for unrecognized keys. It also clarifies the dryRun default and the confirmationToken flow. These details are not present in the schema and are essential for correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('Mutate') and resource ('SwOS '.b' endpoint'), and it distinguishes itself from read-only siblings like get_swos_endpoint and list_swos_endpoints by emphasizing the write-back behavior. It also explains the whole-blob write mechanism, which is unique to this tool.

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

Usage Guidelines4/5

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

The description provides clear context: it previews by default (dryRun), snapshots for rollback, and returns no_change. It implies when to use it (for mutations) and mentions related tools (rollback_change), but it does not explicitly state exclusions or contrast with alternative tools like get_swos_endpoint for reading. The guidance is evident but could be more explicit.

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. Dates show when Glama detected each change.

  1. 4 tool updatesv1.9.0
    • Addedget_swos_endpoint
    • Addedget_swos_status
    • Addedlist_swos_endpoints
    • Addedwrite_swos_blob
  2. 19 tool updatesv1.8.0
    • Changedbandwidth_test2 fields changed
      • changedInput schema / properties / duration / description
        Previous value: -"Test duration in seconds (max 30)"New value: +"Test duration in seconds (max 20)"
      • changedInput schema / properties / duration / maximum
        Previous value: -30New value: +20
    • Changedmanage_address_list_entry1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_container1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_dhcp_server1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_dns_settings1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_interface_list1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_interface_list_member1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_ipsec_policy1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_mangle_rule1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_package1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_routing_rule1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_routing_table1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_script1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_user1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_user_group1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_vrrp_instance1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_wifi_interface1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedmanage_wireguard_interface1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
    • Changedrun_script1 field changed
      • addedInput schema / properties / confirmationToken
        Added value: +{
        +  "description": "Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.",
        +  "type": "string"
        +}
  3. 1 tool updatev1.7.0
    • Addedlist_routers
  4. 1 tool updatev1.6.1
    • Changedget_log1 field changed
      • changedInput schema / properties / sinceMinutes / description
        Previous value: -"Only return entries from the last N minutes (1โ€“1440)"New value: +"Only return entries from the last N minutes (1โ€“1440), measured against the router's clock"
  5. 116 tool updatesv1.6.0
    • Changedapply_plan2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "steps"
        -]New value: +[
        +  "steps"
        +]
    • Changedbandwidth_test2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "address"
        -]New value: +[
        +  "address"
        +]
    • Changedcheck_router_health2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router to health-check"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedcreate_backup2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changeddelete_file2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "name"
        -]New value: +[
        +  "name"
        +]
    • Changedexport_config2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedfetch_url2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "url"
        -]New value: +[
        +  "url"
        +]
    • Changedget_container_config2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedget_dns_settings2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedget_file_content2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "name"
        -]New value: +[
        +  "name"
        +]
    • Changedget_log4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum entries to return (1โ€“500)"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Pagination offset"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedget_ntp_settings2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedget_ovpn_server2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedget_snmp_settings2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedget_system_clock2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedget_system_status2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedget_upgrade_status2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_address_list_entries2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_arp_entries3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of ARP entries to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_bgp_peers2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_bridges4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of bridges to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_certificates3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of certificates to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_connections3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum connections to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_container_envs3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum entries to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_container_mounts3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum entries to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_containers2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_dhcp_clients4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of clients to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_dhcp_leases4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of leases to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_dhcp_servers4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of DHCP servers to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_dns_entries4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of entries to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_files2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_firewall_rules4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of rules to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_interface_lists3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum lists to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_interfaces4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of interfaces to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_ip_pools4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of pools to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_ip_services2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_ipsec_peers3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of peers to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_ipsec_policies3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of policies to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_log_actions3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of actions to return (1-500, default 100)"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_log_rules3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of rules to return (1-500, default 100)"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_mangle_rules2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_neighbors3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of neighbors to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_netwatch_entries3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of entries to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_ospf_neighbors2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_ovpn_clients4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of clients to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_packages2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_ppp_profiles3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum profiles to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_pppoe_clients4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of clients to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_queues3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of queues to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_routes4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of routes to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_routing_rules2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_routing_tables2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_scheduled_jobs2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_scripts2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_user_groups3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of groups to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_users3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of users to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_vrrp_instances3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of instances to return"New value: +"Max results to return."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_wifi_clients4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of clients to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_wifi_interfaces4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of interfaces to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_wireguard_interfaces4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of interfaces to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedlist_wireguard_peers4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of peers to return"New value: +"Max results to return."
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination"New value: +"Pagination offset."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedmanage_address_list_entry3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "list",
        -  "address"
        -]New value: +[
        +  "action",
        +  "list",
        +  "address"
        +]
    • Changedmanage_bridge3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_bridge_port3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "bridge",
        -  "interface"
        -]New value: +[
        +  "action",
        +  "bridge",
        +  "interface"
        +]
    • Changedmanage_certificate3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_container3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_container_config3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedmanage_container_env3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name",
        -  "key"
        -]New value: +[
        +  "action",
        +  "name",
        +  "key"
        +]
    • Changedmanage_container_mount3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_dhcp_client3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "interface"
        -]New value: +[
        +  "action",
        +  "interface"
        +]
    • Changedmanage_dhcp_lease3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "macAddress"
        -]New value: +[
        +  "action",
        +  "macAddress"
        +]
    • Changedmanage_dhcp_server3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_dns_entry3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_dns_settings3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedmanage_firewall_rule2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "chain",
        -  "ruleAction"
        -]New value: +[
        +  "action",
        +  "chain",
        +  "ruleAction"
        +]
    • Changedmanage_interface_list3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_interface_list_member3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "list",
        -  "interface"
        -]New value: +[
        +  "action",
        +  "list",
        +  "interface"
        +]
    • Changedmanage_ip_address2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "address",
        -  "interface"
        -]New value: +[
        +  "action",
        +  "address",
        +  "interface"
        +]
    • Changedmanage_ip_pool3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_ip_service3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_ipsec_peer3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_ipsec_policy3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "srcAddress",
        -  "dstAddress"
        -]New value: +[
        +  "action",
        +  "srcAddress",
        +  "dstAddress"
        +]
    • Changedmanage_log_action3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_log_rule3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "topics",
        -  "logAction"
        -]New value: +[
        +  "action",
        +  "topics",
        +  "logAction"
        +]
    • Changedmanage_mangle_rule3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "comment"
        -]New value: +[
        +  "action",
        +  "comment"
        +]
    • Changedmanage_netwatch_entry3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "host"
        -]New value: +[
        +  "action",
        +  "host"
        +]
    • Changedmanage_ntp_client3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedmanage_ovpn_client3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_ovpn_server3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action"
        -]New value: +[
        +  "action"
        +]
    • Changedmanage_package3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_ppp_profile3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_pppoe_client3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_queue3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_route2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "dstAddress",
        -  "gateway"
        -]New value: +[
        +  "action",
        +  "dstAddress",
        +  "gateway"
        +]
    • Changedmanage_routing_rule3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "table"
        -]New value: +[
        +  "action",
        +  "table"
        +]
    • Changedmanage_routing_table3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_scheduled_job3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_script3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_upgrade2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action"
        -]New value: +[
        +  "action"
        +]
    • Changedmanage_user3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_user_group3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_vlan3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_vrrp_instance3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_wifi_interface3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "name"
        -]New value: +[
        +  "name"
        +]
    • Changedmanage_wireguard_interface3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "name"
        -]New value: +[
        +  "action",
        +  "name"
        +]
    • Changedmanage_wireguard_peer3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "action",
        -  "interface",
        -  "publicKey"
        -]New value: +[
        +  "action",
        +  "interface",
        +  "publicKey"
        +]
    • Changedping2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "address"
        -]New value: +[
        +  "address"
        +]
    • Changedplan_changes2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "steps"
        -]New value: +[
        +  "steps"
        +]
    • Changedreboot2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedrollback_change2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "journalId"
        -]New value: +[
        +  "journalId"
        +]
    • Changedrun_command2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "command"
        -]New value: +[
        +  "command"
        +]
    • Changedrun_script2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "name"
        -]New value: +[
        +  "name"
        +]
    • Changedset_system_clock3 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview changes without applying"New value: +"Preview changes without applying."
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • removedInput schema / required
        Removed value: -[
        -  "routerId"
        -]
    • Changedtorch2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "interface"
        -]New value: +[
        +  "interface"
        +]
    • Changedtraceroute2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "address"
        -]New value: +[
        +  "address"
        +]
    • Changedupload_file2 fields changed
      • changedInput schema / properties / routerId / description
        Previous value: -"Target router identifier from the router registry"New value: +"Router ID; omit to use the default router."
      • changedInput schema / required
        Previous value: -[
        -  "routerId",
        -  "name",
        -  "content"
        -]New value: +[
        +  "name",
        +  "content"
        +]
  6. 117 tool updatesv1.5.0
    • Addedapply_plan
    • Addedbandwidth_test
    • Addedbulk_execute
    • Addedcheck_router_health
    • Addedcreate_backup
    • Addeddelete_file
    • Addedexport_config
    • Addedfetch_url
    • Addedget_container_config
    • Addedget_dns_settings
    • Addedget_file_content
    • Addedget_log
    • Addedget_ntp_settings
    • Addedget_ovpn_server
    • Addedget_snmp_settings
    • Addedget_system_clock
    • Addedget_system_status
    • Addedget_upgrade_status
    • Addedlist_address_list_entries
    • Addedlist_arp_entries
    • Addedlist_bgp_peers
    • Addedlist_bridges
    • Addedlist_certificates
    • Addedlist_connections
    • Addedlist_container_envs
    • Addedlist_container_mounts
    • Addedlist_containers
    • Addedlist_dhcp_clients
    • Addedlist_dhcp_leases
    • Addedlist_dhcp_servers
    • Addedlist_dns_entries
    • Addedlist_files
    • Addedlist_firewall_rules
    • Addedlist_interface_lists
    • Addedlist_interfaces
    • Addedlist_ip_pools
    • Addedlist_ip_services
    • Addedlist_ipsec_peers
    • Addedlist_ipsec_policies
    • Addedlist_log_actions
    • Addedlist_log_rules
    • Addedlist_mangle_rules
    • Addedlist_neighbors
    • Addedlist_netwatch_entries
    • Addedlist_ospf_neighbors
    • Addedlist_ovpn_clients
    • Addedlist_packages
    • Addedlist_ppp_profiles
    • Addedlist_pppoe_clients
    • Addedlist_queues
    • Addedlist_routes
    • Addedlist_routing_rules
    • Addedlist_routing_tables
    • Addedlist_scheduled_jobs
    • Addedlist_scripts
    • Addedlist_user_groups
    • Addedlist_users
    • Addedlist_vrrp_instances
    • Addedlist_wifi_clients
    • Addedlist_wifi_interfaces
    • Addedlist_wireguard_interfaces
    • Addedlist_wireguard_peers
    • Addedmanage_address_list_entry
    • Addedmanage_bridge
    • Addedmanage_bridge_port
    • Addedmanage_certificate
    • Addedmanage_container
    • Addedmanage_container_config
    • Addedmanage_container_env
    • Addedmanage_container_mount
    • Addedmanage_dhcp_client
    • Addedmanage_dhcp_lease
    • Addedmanage_dhcp_server
    • Addedmanage_dns_entry
    • Addedmanage_dns_settings
    • Addedmanage_firewall_rule
    • Addedmanage_interface_list
    • Addedmanage_interface_list_member
    • Addedmanage_ip_address
    • Addedmanage_ip_pool
    • Addedmanage_ip_service
    • Addedmanage_ipsec_peer
    • Addedmanage_ipsec_policy
    • Addedmanage_log_action
    • Addedmanage_log_rule
    • Addedmanage_mangle_rule
    • Addedmanage_netwatch_entry
    • Addedmanage_ntp_client
    • Addedmanage_ovpn_client
    • Addedmanage_ovpn_server
    • Addedmanage_package
    • Addedmanage_ppp_profile
    • Addedmanage_pppoe_client
    • Addedmanage_queue
    • Addedmanage_route
    • Addedmanage_routing_rule
    • Addedmanage_routing_table
    • Addedmanage_scheduled_job
    • Addedmanage_script
    • Addedmanage_upgrade
    • Addedmanage_user
    • Addedmanage_user_group
    • Addedmanage_vlan
    • Addedmanage_vrrp_instance
    • Addedmanage_wifi_interface
    • Addedmanage_wireguard_interface
    • Addedmanage_wireguard_peer
    • Addedping
    • Addedplan_changes
    • Addedreboot
    • Addedrollback_change
    • Addedrun_command
    • Addedrun_script
    • Addedset_system_clock
    • Addedtorch
    • Addedtraceroute
    • Addedupload_file
  7. 77 tool updatesv1.1.0
    • Removedapply_plan
    • Removedbulk_execute
    • Removedcheck_router_health
    • Removedcreate_vlan
    • Removedget_dns_settings
    • Removedget_file_content
    • Removedget_log
    • Removedget_ntp_settings
    • Removedget_snmp_settings
    • Removedget_system_clock
    • Removedget_system_status
    • Removedlist_address_list_entries
    • Removedlist_arp_entries
    • Removedlist_bgp_peers
    • Removedlist_bridges
    • Removedlist_certificates
    • Removedlist_containers
    • Removedlist_dhcp_leases
    • Removedlist_dhcp_pools
    • Removedlist_dhcp_servers
    • Removedlist_dns_entries
    • Removedlist_files
    • Removedlist_firewall_rules
    • Removedlist_interfaces
    • Removedlist_ipsec_peers
    • Removedlist_ipsec_policies
    • Removedlist_mangle_rules
    • Removedlist_neighbors
    • Removedlist_netwatch_entries
    • Removedlist_ospf_neighbors
    • Removedlist_packages
    • Removedlist_queues
    • Removedlist_routes
    • Removedlist_routing_rules
    • Removedlist_routing_tables
    • Removedlist_scheduled_jobs
    • Removedlist_scripts
    • Removedlist_users
    • Removedlist_vrrp_instances
    • Removedlist_wifi_clients
    • Removedlist_wifi_interfaces
    • Removedlist_wireguard_interfaces
    • Removedlist_wireguard_peers
    • Removedmanage_address_list_entry
    • Removedmanage_bridge
    • Removedmanage_bridge_port
    • Removedmanage_certificate
    • Removedmanage_container
    • Removedmanage_dhcp_pool
    • Removedmanage_dhcp_server
    • Removedmanage_dns_entry
    • Removedmanage_firewall_rule
    • Removedmanage_ip_address
    • Removedmanage_ipsec_peer
    • Removedmanage_mangle_rule
    • Removedmanage_netwatch_entry
    • Removedmanage_package
    • Removedmanage_queue
    • Removedmanage_route
    • Removedmanage_routing_rule
    • Removedmanage_routing_table
    • Removedmanage_scheduled_job
    • Removedmanage_script
    • Removedmanage_user
    • Removedmanage_vrrp_instance
    • Removedmanage_wifi_interface
    • Removedmanage_wireguard_peer
    • Removedping
    • Removedplan_changes
    • Removedreboot
    • Removedrollback_change
    • Removedrun_command
    • Removedrun_script
    • Removedset_system_clock
    • Removedtorch
    • Removedtraceroute
    • Removedupload_file
  8. 77 tool updatesv0.1.0
    • First observedapply_plan
    • First observedbulk_execute
    • First observedcheck_router_health
    • First observedcreate_vlan
    • First observedget_dns_settings
    • First observedget_file_content
    • First observedget_log
    • First observedget_ntp_settings
    • First observedget_snmp_settings
    • First observedget_system_clock
    • First observedget_system_status
    • First observedlist_address_list_entries
    • First observedlist_arp_entries
    • First observedlist_bgp_peers
    • First observedlist_bridges
    • First observedlist_certificates
    • First observedlist_containers
    • First observedlist_dhcp_leases
    • First observedlist_dhcp_pools
    • First observedlist_dhcp_servers
    • First observedlist_dns_entries
    • First observedlist_files
    • First observedlist_firewall_rules
    • First observedlist_interfaces
    • First observedlist_ipsec_peers
    • First observedlist_ipsec_policies
    • First observedlist_mangle_rules
    • First observedlist_neighbors
    • First observedlist_netwatch_entries
    • First observedlist_ospf_neighbors
    • First observedlist_packages
    • First observedlist_queues
    • First observedlist_routes
    • First observedlist_routing_rules
    • First observedlist_routing_tables
    • First observedlist_scheduled_jobs
    • First observedlist_scripts
    • First observedlist_users
    • First observedlist_vrrp_instances
    • First observedlist_wifi_clients
    • First observedlist_wifi_interfaces
    • First observedlist_wireguard_interfaces
    • First observedlist_wireguard_peers
    • First observedmanage_address_list_entry
    • First observedmanage_bridge
    • First observedmanage_bridge_port
    • First observedmanage_certificate
    • First observedmanage_container
    • First observedmanage_dhcp_pool
    • First observedmanage_dhcp_server
    • First observedmanage_dns_entry
    • First observedmanage_firewall_rule
    • First observedmanage_ip_address
    • First observedmanage_ipsec_peer
    • First observedmanage_mangle_rule
    • First observedmanage_netwatch_entry
    • First observedmanage_package
    • First observedmanage_queue
    • First observedmanage_route
    • First observedmanage_routing_rule
    • First observedmanage_routing_table
    • First observedmanage_scheduled_job
    • First observedmanage_script
    • First observedmanage_user
    • First observedmanage_vrrp_instance
    • First observedmanage_wifi_interface
    • First observedmanage_wireguard_peer
    • First observedping
    • First observedplan_changes
    • First observedreboot
    • First observedrollback_change
    • First observedrun_command
    • First observedrun_script
    • First observedset_system_clock
    • First observedtorch
    • First observedtraceroute
    • First observedupload_file

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clear, distinct purpose targeting a specific resource or action. While there are many tools, they are well-organized by resource type (e.g., list_routes vs manage_route) and no two tools appear to do the same thing.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern throughout (e.g., list_routing_tables, manage_ip_address, get_system_status). Minor variations like check_router_health still adhere to the pattern. No mixing of conventions.

Tool Count1/5

With 118 tools, the server far exceeds the typical well-scoped range of 3-15. Even for a broad domain like MikroTik management, this count is extreme and makes the tool surface unwieldy.

Completeness4/5

The tool set covers an extensive range of MikroTik features including routing, firewall, DHCP, DNS, interfaces, VPN, containers, and more. Some minor gaps exist, such as limited update capabilities for certain resources (e.g., firewall rules, DHCP leases), but overall the coverage is comprehensive.

Maintenance

ActivityActive
ResponsivenessWithin a week

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A bridge between AI assistants and MikroTik RouterOS devices, allowing natural language interaction to manage network configurations including VLANs, firewalls, DNS settings, and more.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with MikroTik RouterOS devices through API and SSH connections, supporting network monitoring, configuration management, and diagnostics across multiple routers with automatic connection fallback.
    3
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A comprehensive MCP server for network device management via SSH/Telnet. Supports multiple vendors such as Cisco IOS and BDCOM, enabling AI assistants to execute commands and manage routers, switches, and firewalls.
    4
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AliKarami/MikroMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server