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) 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. |
| 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_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. 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_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 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. |
| 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_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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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