Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MIKROMCP_PORTNoHTTP transport port3000
MIKROMCP_CMD_DENYNoGlobal denylist patterns for run_command
MIKROMCP_DATA_DIRNoSnapshots and write-journal directory~/.mikromcp/data
MIKROMCP_BIND_HOSTNoHTTP bind address127.0.0.1
MIKROMCP_CMD_ALLOWNoGlobal allowlist patterns for run_command
MIKROMCP_TRANSPORTNoTransport mode: stdio or httpstdio
MIKROMCP_CONFIG_PATHNoPath to router registry YAML~/.mikromcp/routers.yaml
MIKROMCP_AUDIT_LOG_PATHNoOptional NDJSON audit log file path
MIKROMCP_STDIO_IDENTITYNoNamed identity for stdio modebuilt-in superadmin
MIKROMCP_IDENTITIES_PATHNoPath to identities and bearer-token registry~/.mikromcp/identities.yaml
MIKROMCP_CONFIRMATION_SECRETNoHMAC secret for destructive-action confirmation tokens
MIKROMCP_HTTP_MAX_BODY_BYTESNoHTTP request body cap (bytes)1048576
MIKROMCP_HTTP_RATE_LIMIT_RPMNoRequests per minute per IP; 0 disables60
MIKROMCP_SSH_MAX_OUTPUT_BYTESNoSSH output cap in bytes524288
MIKROMCP_SSH_COMMAND_TIMEOUT_MSNoSSH command timeout in milliseconds30000

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_system_statusA

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

list_interfacesA

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

list_ip_addressesA

List IPv4 addresses assigned to interfaces on a MikroTik router, including dynamic ones (DHCP client, PPP). Supports filtering by interface and disabled state, with pagination.

manage_ip_addressA

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.

list_dhcp_leasesA

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

manage_dhcp_leaseA

Convert a dynamic DHCP lease to static (make-static) or remove a lease. Idempotent by MAC address.

list_routesA

List static routes on a MikroTik router with optional filtering by active status and dynamic status. Supports pagination.

manage_routeB

Add or remove a static route on a MikroTik router. Performs idempotency checks for add operations and supports dry-run mode for all actions.

list_firewall_rulesA

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

manage_firewall_ruleA

Add, remove, disable, or enable a firewall rule on a MikroTik router. Matches addresses, ports, protocol, interfaces, interface lists, and connection/NAT state; nat rules take toAddresses/toPorts (e.g. a dst-nat port forward). Uses comment as idempotency key for deduplication and identification: a repeated add returns already_exists only when the match, NAT targets, and disabled state agree, otherwise CONFLICT (use enable/disable when only the disabled state differs). Supports dry-run mode.

pingA

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.

tracerouteA

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. Not auto-retried.

torchA

Capture a real-time traffic snapshot on a router interface. RouterOS runs the capture for duration seconds; the tool returns the flows of the final update with their TX/RX rates in bits per second and packets per second. Not auto-retried.

get_logA

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.

get_system_clockA

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

set_system_clockA

Set the system date, time, and/or timezone on a MikroTik router. Idempotent: returns already_set if the values already match. Supports dry-run.

rebootA

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

run_commandA

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. Journaled for audit like every write (see list_journal), but never snapshotted: arbitrary commands touch unknown config sections, so it cannot be rolled back via rollback_change — prefer a dedicated tool when one exists, and note the manual undo command in your own records.

list_bridgesA

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

manage_bridgeA

Create or remove a bridge interface on a MikroTik router. Idempotent: create returns already_exists if bridge with same name exists.

manage_bridge_portA

Add or remove an interface from a bridge on a MikroTik router. Idempotent: add returns already_exists if the port assignment already exists.

list_bridge_portsA

List bridge port entries (interface membership, PVID, STP role and status) on a MikroTik router. Supports filtering by bridge and interface, with pagination.

list_wifi_interfacesA

List WiFi/wireless interfaces on a MikroTik router. Uses /interface/wifi on ROS 7.x, /interface/wireless on older versions.

list_wifi_clientsA

List currently connected WiFi clients (stations) with signal strength and transfer rates.

manage_wifi_interfaceA

Enable, disable, or update SSID settings on a WiFi interface. At least one of disabled or ssid must be provided.

list_wireguard_interfacesA

List WireGuard interfaces and their status on a MikroTik router.

list_wireguard_peersA

List WireGuard peers with last handshake time and transfer statistics.

manage_wireguard_peerA

Add or remove a WireGuard peer. Add returns already_exists when the public key and explicitly requested endpoint/allowed addresses match; different settings produce CONFLICT without changing the peer. Omitted settings are left unchanged.

manage_wireguard_interfaceA

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.

list_dns_entriesA

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

manage_dns_entryA

Add or remove a static DNS entry, found by name (case-insensitive) and type. add returns already_exists if such a record already has the requested value and disabled state (and ttl/comment, when given), and throws CONFLICT if it differs; add never creates a second record with the same name and type. remove deletes the one matching record; when several share the name (round-robin), pass address/cname/text to pick one.

get_dns_settingsA

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

manage_dns_settingsB

Update DNS resolver settings (upstream servers, cache size, cache TTL, allow-remote-requests). Idempotent: returns no_change if nothing differs.

list_mangle_rulesA

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

manage_mangle_ruleA

Add, remove, enable, or disable a firewall mangle rule. ruleAction sets the action; when it is omitted, a new* value implies its own (newRoutingMark → mark-routing), otherwise accept. Each new* value is accepted only under its action. Uses comment as idempotency key: a repeated add returns already_exists only when the chain, match fields, marks, DSCP, MSS, passthrough, and the given or implied action agree, otherwise CONFLICT. Supports dry-run mode.

list_address_list_entriesA

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

manage_address_list_entryA

Add or remove a firewall address list entry. Idempotent by list name + address. Supports dry-run mode.

list_routing_rulesA

List policy routing rules on a MikroTik router in evaluation order. Supports filtering by table and disabled state.

manage_routing_ruleA

Add, remove, enable, or disable a policy routing rule. Idempotent by srcAddress+dstAddress+interface+table composite key; a repeated add with an explicit, different ruleAction is a CONFLICT. Supports dry-run mode.

list_routing_tablesA

List custom routing tables on a MikroTik router.

manage_routing_tableA

Create or remove a custom routing table. Idempotent by table name. Supports dry-run mode.

list_bgp_peersA

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

list_ospf_neighborsA

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

list_scriptsA

List RouterOS scripts on a MikroTik router. Supports optional name filter.

manage_scriptA

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.

run_scriptA

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.

list_scheduled_jobsA

List RouterOS scheduler entries on a MikroTik router with next-run time, interval, and disabled state.

manage_scheduled_jobA

Add, update, remove, enable, or disable a RouterOS scheduler entry. onEvent is arbitrary RouterOS script run with the router user's policies, so this tool is destructive. Idempotent by name. add throws CONFLICT if name exists; update throws NOT_FOUND if it does not. Supports dry-run.

list_packagesA

List installed RouterOS packages with version and enabled status.

manage_packageA

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.

list_filesA

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

get_file_contentA

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

upload_fileA

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. RouterOS runs a file named *.auto.rsc as a script when it arrives over FTP. Dry-run tests connectivity only.

delete_fileA

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

list_containersA

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

manage_containerA

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.

list_ipsec_peersA

List IPSec peers on a MikroTik router.

list_ipsec_policiesB

List IPSec policies on a MikroTik router.

manage_ipsec_peerA

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.

manage_ipsec_policyA

Add, remove, enable, or disable an IPSec policy. Idempotent by composite key (srcAddress + dstAddress + tunnel).

list_certificatesB

List certificates on a MikroTik router.

manage_certificateC

Remove, trust, or untrust a certificate. Idempotent: trust/untrust return early if already in the target state.

list_usersA

List local users on a MikroTik router. Passwords are never returned.

manage_userA

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.

list_user_groupsA

List local user groups on a MikroTik router.

manage_user_groupA

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.

list_dhcp_serversA

List DHCP servers on a MikroTik router.

manage_dhcp_serverA

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.

list_ip_poolsA

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

manage_ip_poolA

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.

list_queuesA

List simple queues on a MikroTik router.

manage_queueA

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.

list_vrrp_instancesA

List VRRP instances on a MikroTik router.

manage_vrrp_instanceA

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.

get_snmp_settingsA

Retrieve SNMP settings from a MikroTik router.

get_ntp_settingsA

Retrieve NTP client settings from a MikroTik router.

list_netwatch_entriesB

List Netwatch monitoring entries on a MikroTik router.

manage_netwatch_entryA

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.

list_neighborsB

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

list_arp_entriesB

List ARP table entries on a MikroTik router.

manage_ntp_clientB

Update NTP client settings on a MikroTik router. Idempotent: returns already_set if no changes are needed.

manage_vlanA

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.

list_dhcp_clientsB

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

manage_dhcp_clientA

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.

list_ip_servicesA

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.

manage_ip_serviceA

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. MikroMCP reaches RouterOS through the REST API on www-ssl (or www for plaintext): disabling the service its connection uses cuts MikroMCP off from the router, including any later call to re-enable it.

list_pppoe_clientsA

List PPPoE client interfaces on a MikroTik router. Shows name, parent interface, ISP username, and connection status.

manage_pppoe_clientA

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.

list_ovpn_clientsA

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

manage_ovpn_clientA

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.

get_ovpn_serverA

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

manage_ovpn_serverA

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.

list_ppp_profilesA

List PPP profiles including the built-in default and default-encryption profiles.

manage_ppp_profileA

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.

get_upgrade_statusA

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

manage_upgradeA

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.

create_backupA

Create a binary configuration backup on a MikroTik router. The backup is saved as .backup on the router's filesystem. To encrypt it, prefer passwordSecret (a MIKROMCP_SECRET_ bound to the router in routers.yaml — the password never reaches the conversation) over a literal password. Dry run checks that the secret resolves.

export_configA

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.

list_log_rulesA

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

manage_log_ruleA

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.

list_log_actionsA

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

manage_log_actionA

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.

bandwidth_testA

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.

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

list_connectionsA

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

get_container_configA

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

manage_container_configB

Update global container settings. Idempotent: returns no_change if nothing differs.

list_container_envsA

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

manage_container_envA

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.

list_container_mountsA

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

manage_container_mountA

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.

list_interface_listsA

List all interface lists defined on the router.

manage_interface_listA

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.

manage_interface_list_memberA

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.

list_interface_list_membersA

List interface list memberships (which interface belongs to which list, e.g. WAN/LAN) on a MikroTik router. Supports filtering by list and interface, with pagination.

list_swos_endpointsA

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.

get_swos_statusA

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.

get_swos_endpointA

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

write_swos_blobA

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.

get_swos_configA

Export a SwOS switch's configuration as one YAML document: system settings (including management access), every port's name, enabled state and VLAN settings, the VLAN table (full SwOS) and SNMP. The SNMP community is never exported. The document is the input format of apply_swos_config, so it doubles as a backup you can read and diff.

apply_swos_configA

Apply a switch config document (the format get_swos_config exports) to a SwOS switch. Plans every change against the switch first; dryRun defaults to true. Writes only the endpoints that change: the VLAN table grows first (new VLANs and members), then the per-port settings (VLAN, isolation, storm and flood control), port names/negotiation/enabled, LAG and SNMP, then the table shrinks (removed VLANs and members), then system — so no port loses its VLAN mid-apply. Refuses management changes (address, allow-from) unless includeManagement is true, and any plan that would cut a linked port off (its untagged VLAN moved or dropped, a trunk losing tagged VLANs or becoming an access port, a forced VLAN, a port that starts filtering VLANs, the port disabled, renegotiating, isolated from another linked port or moved in or out of a LAG, every linked port dropped from allow_from_ports; only risks the plan introduces) unless acceptLockoutRisk is true. All six endpoints are snapshotted before a real apply, so rollback_change restores the previous state; the result names any endpoint whose snapshot failed, and says so when none was recorded. A document that moves management to another VLAN (allow_from_vlan) and changes a port's VLAN settings or the VLAN table's membership at the same time is refused, because that cannot be written in a safe order (sys.b goes last and cuts the session): apply the VLAN changes first, then the move. snmp.community may reference only the secrets bound to the switch (its secrets list in routers.yaml); a switch without a list may reference none.

save_swos_backupA

Download the switch's own configuration backup (backup.swb, the file the web UI's Save Backup produces) into the server's SwOS folder. The file is MikroTik's opaque format: it restores only through restore_swos_backup or the web UI, on the same model. A switch on factory defaults has nothing to save. Writes a file on the server (owner-only), so it is audited like a write.

restore_swos_backupA

Restore a backup.swb file from the server's SwOS folder onto the switch, as the web UI's Restore Backup does. The switch replaces its whole configuration and reboots, so it is unreachable for a while, and its address may change to the one in the backup. By default the current configuration is saved first. dryRun defaults to true.

upgrade_swos_firmwareA

Upgrade a SwOS switch's firmware the way the web UI's Upgrade tab does. Resolves the latest stable version for the model from MikroTik's download server (or takes version), downloads swos--.bin over HTTPS into the server's SwOS folder (or uses file), checks it, then flashes it; the switch reboots. Refuses release candidates unless allowPrerelease is true. A switch still on its preinstalled backup firmware (a version ending in 'p', which cannot save configuration) counts as needing the upgrade. dryRun defaults to true.

set_swos_passwordA

Change a SwOS switch's admin password, as the web UI's Password Change does. The new password comes from the server secret MIKROMCP_PASSWORD_, never from the conversation; the current one is the router's configured credential. Passwords are ASCII, at most 15 characters. After the change this call's client keeps working with the new password, but the server rebuilds the client from the router's configured credential ({PREFIX}_PASS) after any authentication failure or restart, so that variable must be updated right away. On SwOS Lite the switch does not answer the change; the result is confirmed by logging in with the new password. dryRun defaults to true.

plan_changesA

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.

apply_planA

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.

rollback_changeA

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

list_journalA

List recent entries from the server's write journal (write-journal.ndjson): every journaled write with its journalId, timestamp, tool, router, parameters (as redacted at write time), snapshot ids and outcome — newest first. Read-only. Use it to recover a lost journalId for rollback_change, or to audit what was written when. Only entries with rollbackable: true can be rolled back — dry runs and writes without snapshots (run_command, plan_changes) cannot.

check_router_healthA

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.

bulk_executeA

Fan out a single-router tool to many routers in parallel (up to concurrency), targeted by routerIds or tag. Write tools need two-step confirmation for every role: call without confirmationToken to get a fleet token, then re-call with it. Read-only tools fan out immediately. Writes snapshot+journal each router for rollback. Returns per-router results with succeeded/failed counts. To fan out a read-only tool, prefer bulk_read.

bulk_readA

Fan out a read-only single-router tool (list_*, get_* and others annotated read-only) to many routers in parallel (up to concurrency), targeted by routerIds or tag. Unlike bulk_execute, the server refuses every write tool and the traffic-generating diagnostics (ping, traceroute, torch, bandwidth_test) with BULK_READ_TOOL_NOT_READ_ONLY, and never needs a confirmation token, snapshot or journal — so an MCP client can allow bulk_read without allowing fleet-wide writes. Use bulk_execute for anything else. Returns per-router results with succeeded/failed counts.

list_routersA

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. rosVersion is what routers.yaml states and may lag a router upgrade — ask get_system_status for the live version. Use it to discover valid routerId values and tags for targeting other tools (including bulk_read and bulk_execute).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 133 tools

Disambiguation3/5

Most tools are distinguishable by resource and action, but the sheer number of list_/get_/manage_ pairs creates several easily confused boundaries, such as get_system_status vs get_system_clock, get_ntp_settings vs manage_ntp_client, and write_swos_blob vs apply_swos_config. The bulk_execute vs bulk_read distinction is explicitly clarified, but many high-level and low-level SwOS and container tools still require careful reading to choose correctly.

Naming Consistency4/5

The dominant pattern is consistent snake_case verb_noun, with list_*, get_*, manage_*, bulk_*, and apply_* families used predictably across most resources. There are some deviations such as reboot, ping, traceroute, torch, bandwidth_test, and fetch_url, but they are domain-specific and still readable.

Tool Count1/5

133 tools is an extreme count for a single MCP server, far beyond the 50+ threshold associated with severe mismatch. Even for a broad MikroTik management domain, this creates substantial selection and cognitive-load problems for an agent.

Completeness3/5

The surface is broad and covers many RouterOS and SwOS workflows with list/manage pairs, but notable gaps remain: BGP and OSPF are list-only, IPv6 is essentially absent, certificate management cannot import/create, and several advanced RouterOS areas such as hotspot and RADIUS are not represented. Agents can fall back to run_command for some missing operations, but that is less safe and not equivalent to proper tool coverage.

Maintenance

ActivityActive
ResponsivenessResponsive