MCP server for MikroTik RouterOS management via REST API and SSH
Strong foundation with 22 well-named tools, complete input schemas, and clear descriptions. Tool names follow verb_noun convention (identity, version, health, interfaces, etc.). All tools have descriptions (avg ~80 chars, within baseline 34-392). Input schemas are properly typed with descriptions. However, output schemas are not documented, LLMs cannot predict return structure. Error handling is minimal; no recovery guidance or actionable error messages. Missing parameter constraints (enums for interface_type, chain, method). No pagination support despite tools returning lists. Security annotations (read_tool, write_tool, destructive_tool) are present but not formally declared in schema.
List all IP addresses on the device.
Make a custom REST API request (GET, POST, PUT, PATCH; no DELETE).
Make a destructive REST API request (DELETE only).
Make a read-only REST API request (GET only).
List ARP table entries, optionally filtered by interface.
List DHCP leases, optionally filtered by DHCP server name.
List firewall filter rules, optionally filtered by chain.
Output schemas not documented. LLMs cannot predict return structure (dict vs list, field names, types). Tools return raw API responses without documented shape.
No pagination support. Tools returning lists (interfaces, addresses, arp, dhcp_leases, routes, neighbors, firewall, nat, users, ssh_keys, services) lack limit/offset/page parameters and total count in response. Large result sets will exhaust context.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | <=2025-11-25 | v2 |
Get device health sensors (voltage, temperature, fan speed).
Get device identity (hostname).
List interfaces, optionally filtered by type.
List NAT rules.
List discovered neighbors (LLDP/CDP/MNDP).
List routing table entries, optionally filtered by destination.
List IP services (SSH, www, api, winbox, etc.) with status.
Execute a RouterOS CLI command via SSH (read or write).
Execute a destructive RouterOS CLI command via SSH (remove, reset, reboot, shutdown).
Import an SSH public key for a user. Uploads the key via SFTP, imports it via CLI, and cleans up the temp file. The user must already exist on the device.
List imported SSH public keys, optionally filtered by user.
Execute a read-only RouterOS CLI command via SSH (print, get, export, etc.).
Create a new user account on the device. Safety: refuses to create a user if one with the same name already exists, and refuses names matching the currently authenticated user.
List all user accounts on the device.
Get RouterOS version, CPU, memory, and uptime.
Missing parameter constraints. interface_type, chain, method, and other enum-like parameters lack formal enum definitions. LLMs may hallucinate invalid values.
No error recovery guidance. Tools do not document what errors are retryable, user-fixable, or fatal. No actionable error messages (e.g., 'Invalid chain: must be input|forward|output').
Destructive operations (ssh_destructive, api_destructive, user_add) lack confirmation/dry-run support. No protection against accidental data loss.