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. |
| 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. 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. 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. |
| 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. |
| 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. 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. |
| manage_dns_settingsA | 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. 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_tablesA | List custom routing tables on a MikroTik router. |
| manage_routing_tableB | 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 router via FTP using the router's credentials, overwriting any existing file of the same name. Requires FTP permission on the router user (see config/routers.example.yaml). Dry-run tests FTP 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_userB | 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_clientA | 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_clientsA | 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. |
| 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. Supports optional encryption via password and dry-run mode. |
| 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. |
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