MikroMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MIKROMCP_PORT | No | HTTP transport port | 3000 |
| MIKROMCP_CMD_DENY | No | Global denylist patterns for run_command | |
| MIKROMCP_DATA_DIR | No | Snapshots and write-journal directory | ~/.mikromcp/data |
| MIKROMCP_BIND_HOST | No | HTTP bind address | 127.0.0.1 |
| MIKROMCP_CMD_ALLOW | No | Global allowlist patterns for run_command | |
| MIKROMCP_TRANSPORT | No | Transport mode: stdio or http | stdio |
| MIKROMCP_CONFIG_PATH | No | Path to router registry YAML | ~/.mikromcp/routers.yaml |
| MIKROMCP_AUDIT_LOG_PATH | No | Optional NDJSON audit log file path | |
| MIKROMCP_STDIO_IDENTITY | No | Named identity for stdio mode | built-in superadmin |
| MIKROMCP_IDENTITIES_PATH | No | Path to identities and bearer-token registry | ~/.mikromcp/identities.yaml |
| MIKROMCP_CONFIRMATION_SECRET | No | HMAC secret for destructive-action confirmation tokens | |
| MIKROMCP_HTTP_MAX_BODY_BYTES | No | HTTP request body cap (bytes) | 1048576 |
| MIKROMCP_HTTP_RATE_LIMIT_RPM | No | Requests per minute per IP; 0 disables | 60 |
| MIKROMCP_SSH_MAX_OUTPUT_BYTES | No | SSH output cap in bytes | 524288 |
| MIKROMCP_SSH_COMMAND_TIMEOUT_MS | No | SSH command timeout in milliseconds | 30000 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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. |
| create_vlanA | Create a new VLAN interface on a MikroTik router. Performs idempotency checks: if a VLAN with the same name already exists with matching configuration, returns success without changes. Supports dry-run mode. |
| 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, and MAC address. Supports pagination. |
| list_routesA | List static routes on a MikroTik router with optional filtering by active status and dynamic status. Supports pagination. |
| manage_routeA | 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. Uses comment as idempotency key for deduplication and identification. 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. |
| torchA | 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. |
| 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). 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. Protected by a configurable allow/deny policy — built-in deny list blocks destructive commands; optionally restrict further with an explicit allow list (cmdAllow in routers.yaml or MIKROMCP_CMD_ALLOW). Use dedicated tools (reboot, etc.) for controlled operations. Output capped at 4000 characters. |
| 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_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. Idempotent by public key: add returns already_exists if a peer with the same public key already exists on the interface. |
| list_dns_entriesB | 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. Idempotent by name+type: add returns already_exists if the same record already exists. |
| get_dns_settingsA | Read DNS resolver configuration: upstream servers, cache size, cache TTL, and whether remote DNS requests are allowed. |
| 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. Uses comment as idempotency key. 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. Supports dry-run mode. |
| list_routing_tablesB | 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. 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 MikroTik router via FTP using the router's credentials. Overwrites any existing file with the same name. Requires FTP permission on the router user — see config/routers.example.yaml for setup instructions. Supports dry-run (tests FTP connectivity only). |
| list_containersA | List RouterOS container instances with status, image, and network information. |
| manage_containerA | Create, start, stop, or remove a RouterOS container. create requires a pre-configured veth interface. start/stop are no-ops if the container is already in the target state. remove throws NOT_FOUND if the container does not exist. Supports dry-run. |
| list_ipsec_peersA | List IPSec peers on a MikroTik router. |
| list_ipsec_policiesA | 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. |
| list_certificatesA | List certificates on a MikroTik router. |
| manage_certificateB | 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_dhcp_serversB | 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_dhcp_poolsA | List IP pools on a MikroTik router. |
| manage_dhcp_poolA | Add or remove an IP 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_settingsB | 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. |
| plan_changesA | Preview a sequence of write operations without applying them. Each step is run with dryRun=true against the live router state. Returns the current state of affected RouterOS paths plus the predicted action for each step. Use apply_plan to execute the same steps for real. |
| apply_planA | Execute a sequence of write operations in order. Stops on the first failure. Each step is snapshotted and journaled individually. Requires a confirmationToken for non-admin identities (same two-step flow as other destructive tools). Use rollback_change with any resulting journal IDs to undo individual steps. |
| rollback_changeA | Restore the RouterOS state to what it was before a write, identified by its journal ID. Reads the before-snapshot from disk, computes the diff against live state, and applies the reverse diff. Use dryRun=true to preview the restore plan without applying. Requires MIKROMCP_DATA_DIR (or defaults to data/) to be configured. |
| check_router_healthA | Probe a router by fetching system/resource. Returns health status, ROS version, uptime, CPU load, and memory info. Unlike other tools, this never throws — unreachable routers are reported as healthy=false. |
| bulk_executeA | Fan out a single-router tool to multiple routers in parallel (up to |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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