mikrotik-api

Manages MikroTik routers via the RouterOS API (port 8728/8729). Use when the user wants to configure, monitor, or troubleshoot a MikroTik router — including interfaces, firewall, DHCP, DNS, routing, queues, VPN, and system management.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "mikrotik-api" with this command: npx skills add mikrotik-api

MikroTik API Management

Communicate with MikroTik RouterOS devices using the Python routeros-api library over the API port (8728 plain, 8729 SSL).

Prerequisites

Install the library if not present:

pip3 install --break-system-packages routeros-api

Connection

It is highly recommended to use environment variables for credentials to avoid hardcoding.

Environment Variables

Set these in your environment or .env file:

  • MIKROTIK_HOST: Router IP or hostname
  • MIKROTIK_USERNAME: Router username
  • MIKROTIK_PASSWORD: Router password

Python Connection Pattern

import routeros_api
import os

# Get credentials from environment variables
host = os.getenv('MIKROTIK_HOST')
username = os.getenv('MIKROTIK_USERNAME')
password = os.getenv('MIKROTIK_PASSWORD')

# Fallback to manual input if env vars are missing
if not all([host, username, password]):
    print("Environment variables MIKROTIK_HOST, MIKROTIK_USERNAME, or MIKROTIK_PASSWORD are not set.")
    # host = input("Enter Host: ") ...

conn = routeros_api.RouterOsApiPool(
    host=host,
    username=username,
    password=password,
    plaintext_login=True,   # Required for RouterOS 6.43+
    port=8728               # Use 8729 for SSL
)
api = conn.get_api()
# ... do work ...
conn.disconnect()

Connection Rules

  • Prefer Environment Variables: Instruct the user to set MIKROTIK_HOST, MIKROTIK_USERNAME, and MIKROTIK_PASSWORD.
  • Ask the user for these details only if not found in the environment.
  • Default API port is 8728 (plain) or 8729 (SSL).
  • Always call conn.disconnect() when done.
  • Use plaintext_login=True for RouterOS v6.43+ and v7.x.

SSL Connection

conn = routeros_api.RouterOsApiPool(
    host=host,
    username=username,
    password=password,
    plaintext_login=True,
    use_ssl=True,
    ssl_verify=False,       # Set True with proper certs
    ssl_verify_hostname=False,
    port=8729
)

Core API Operations

Reading resources (GET / print)

resource = api.get_resource('/ip/address')
items = resource.get()                          # Get all
items = resource.get(interface='ether1')         # Filter by param
items = resource.get(disabled='false')           # Filter by status

Adding entries (ADD)

resource = api.get_resource('/ip/address')
resource.add(address='192.168.1.1/24', interface='ether1')
# With comment
resource.add(address='192.168.1.1/24', interface='ether1', comment='Management')

Updating entries (SET)

resource = api.get_resource('/ip/address')
resource.set(id='*1', address='192.168.2.1/24')
resource.set(id='*1', comment='Updated via API')
resource.set(id='*1', disabled='yes')           # Disable entry
resource.set(id='*1', disabled='no')            # Enable entry

Removing entries (REMOVE)

resource.remove(id='*1')

Calling commands (CALL)

resource = api.get_resource('/system')
resource.call('reboot')

# Call with parameters
resource = api.get_resource('/ip/firewall/filter')
resource.call('move', {'numbers': '*1', 'destination': '*5'})

Enabling / Disabling entries

resource = api.get_resource('/interface')
resource.set(id='*1', disabled='yes')   # Disable
resource.set(id='*1', disabled='no')    # Enable

Complete Resource Path Reference

System

TaskResource Path
System info (CPU, RAM, uptime)/system/resource
Router identity/system/identity
System clock/system/clock
NTP client/system/ntp/client
NTP server/system/ntp/server
Scheduler/system/scheduler
Scripts/system/script
Logging rules/system/logging
Log entries/log
Packages/system/package
Package update/system/package/update
Router board info/system/routerboard
License/system/license
Health (voltage, temp)/system/health
History/system/history
Users/user
User groups/user/group
Active users/user/active
SSH keys/user/ssh-keys
Files/file
Backup/system/backup
SNMP/snmp
SNMP community/snmp/community
Certificates/certificate
Console/system/console
LEDs/system/leds

Interfaces

TaskResource Path
All interfaces/interface
Ethernet/interface/ethernet
Bridge/interface/bridge
Bridge ports/interface/bridge/port
Bridge VLANs/interface/bridge/vlan
Bridge hosts (MAC table)/interface/bridge/host
Bridge MSTi/interface/bridge/msti
Bridge settings/interface/bridge/settings
VLAN/interface/vlan
Bonding (LACP/bonding)/interface/bonding
EoIP tunnel/interface/eoip
GRE tunnel/interface/gre
IPIP tunnel/interface/ipip
VXLAN/interface/vxlan
VXLAN VTEP/interface/vxlan/vtep
WireGuard/interface/wireguard
WireGuard peers/interface/wireguard/peers
L2TP client/interface/l2tp-client
L2TP server/interface/l2tp-server/server
SSTP client/interface/sstp-client
SSTP server/interface/sstp-server/server
OVPN client/interface/ovpn-client
OVPN server/interface/ovpn-server/server
PPPoE client/interface/pppoe-client
PPPoE server/interface/pppoe-server/server
PPTP client/interface/pptp-client
PPTP server/interface/pptp-server/server
LTE/interface/lte
LTE APN/interface/lte/apn
Wireless (WiFi legacy)/interface/wireless
WiFi (new, ROS 7)/interface/wifi
WiFi channels/interface/wifi/channel
WiFi datapath/interface/wifi/datapath
WiFi security/interface/wifi/security
WiFi configuration/interface/wifi/configuration
WiFi provisioning/interface/wifi/provisioning
WiFi registration table/interface/wifi/registration-table
WiFi access list/interface/wifi/access-list
WiFi interworking/interface/wifi/interworking
Interface lists/interface/list
Interface list members/interface/list/member
Ethernet switch/interface/ethernet/switch
Ethernet switch port/interface/ethernet/switch/port
Traffic monitor/interface/monitor-traffic

IP

TaskResource Path
IP addresses/ip/address
ARP table/ip/arp
Routes/ip/route
Route rules/ip/route/rule
DNS settings/ip/dns
DNS static entries/ip/dns/static
DNS cache/ip/dns/cache
DHCP client/ip/dhcp-client
DHCP server/ip/dhcp-server
DHCP server network/ip/dhcp-server/network
DHCP server leases/ip/dhcp-server/lease
DHCP server option/ip/dhcp-server/option
DHCP server option sets/ip/dhcp-server/option/sets
DHCP relay/ip/dhcp-relay
IP pool/ip/pool
IP neighbors/ip/neighbor
IP neighbor discovery/ip/neighbor/discovery-settings
IP services/ip/service
IP settings (forwarding)/ip/settings
IP proxy/ip/proxy
IP proxy access list/ip/proxy/access
IP SOCKS/ip/socks
IP SSH/ip/ssh
IP cloud/ip/cloud
IP UPnP/ip/upnp
IP UPnP interfaces/ip/upnp/interfaces
IP SMB/ip/smb
IP traffic flow/ip/traffic-flow
IP traffic flow target/ip/traffic-flow/target
IP accounting/ip/accounting
IP Kid Control/ip/kid-control
IP Kid Control devices/ip/kid-control/device
IP Hotspot/ip/hotspot
IP Hotspot profile/ip/hotspot/profile
IP Hotspot user/ip/hotspot/user
IP Hotspot user profile/ip/hotspot/user/profile
IP Hotspot active/ip/hotspot/active
IP Hotspot host/ip/hotspot/host
IP Hotspot cookie/ip/hotspot/cookie
IP Hotspot IP binding/ip/hotspot/ip-binding
IP Hotspot walled garden/ip/hotspot/walled-garden
IP Hotspot walled garden IP/ip/hotspot/walled-garden/ip

Firewall

TaskResource Path
Filter rules/ip/firewall/filter
NAT rules/ip/firewall/nat
Mangle rules/ip/firewall/mangle
RAW rules/ip/firewall/raw
Address lists/ip/firewall/address-list
Connections (conntrack)/ip/firewall/connection
Connection tracking/ip/firewall/connection/tracking
Service ports (ALGs)/ip/firewall/service-port
Layer 7 protocols/ip/firewall/layer7-protocol

IPv6

TaskResource Path
IPv6 addresses/ipv6/address
IPv6 routes/ipv6/route
IPv6 firewall filter/ipv6/firewall/filter
IPv6 firewall mangle/ipv6/firewall/mangle
IPv6 firewall RAW/ipv6/firewall/raw
IPv6 firewall address list/ipv6/firewall/address-list
IPv6 ND (Neighbor Disc.)/ipv6/nd
IPv6 ND prefix/ipv6/nd/prefix
IPv6 DHCP client/ipv6/dhcp-client
IPv6 DHCP server/ipv6/dhcp-server
IPv6 pool/ipv6/pool
IPv6 settings/ipv6/settings

Routing (RouterOS 7)

TaskResource Path
Routing tables/routing/table
Routing rules/routing/rule
OSPF instance/routing/ospf/instance
OSPF area/routing/ospf/area
OSPF interface template/routing/ospf/interface-template
OSPF neighbors/routing/ospf/neighbor
OSPF LSA/routing/ospf/lsa
BGP connection/routing/bgp/connection
BGP template/routing/bgp/template
BGP session/routing/bgp/session
BGP advertisements/routing/bgp/advertisements
BGP networks/routing/bgp/network
RIP instance/routing/rip/instance
RIP interface template/routing/rip/interface-template
Route filter rules/routing/filter/rule
Route filter select rules/routing/filter/select-rule
Prefix lists/routing/filter/community-list
BFD session/routing/bfd/session
BFD configuration/routing/bfd/configuration
Routing ID/routing/id
RPKI/routing/rpki
IGMP Proxy/routing/igmp-proxy
PIM/routing/pimsm

PPP

TaskResource Path
PPP secrets/ppp/secret
PPP profiles/ppp/profile
PPP active connections/ppp/active
PPP AAA settings/ppp/aaa
PPP L2TP secret/ppp/l2tp-secret

Queues (QoS)

TaskResource Path
Simple queues/queue/simple
Queue tree/queue/tree
Queue types/queue/type
Interface queues/queue/interface

CAPsMAN / WiFi Controller (ROS 7)

TaskResource Path
CAPsMAN manager/caps-man/manager
CAPsMAN configuration/caps-man/configuration
CAPsMAN channel/caps-man/channel
CAPsMAN datapath/caps-man/datapath
CAPsMAN security/caps-man/security
CAPsMAN provisioning/caps-man/provisioning
CAPsMAN interface/caps-man/interface
CAPsMAN registration table/caps-man/registration-table
CAPsMAN access list/caps-man/access-list
CAPsMAN remote-cap/caps-man/remote-cap

MPLS

TaskResource Path
MPLS settings/mpls
MPLS interface/mpls/interface
MPLS forwarding table/mpls/forwarding-table
MPLS LDP/mpls/ldp
MPLS LDP interface/mpls/ldp/interface
MPLS LDP neighbor/mpls/ldp/neighbor
VPLS/interface/vpls
Traffic engineering/mpls/traffic-eng

Tools

TaskResource Path
Ping/tool/ping (use call)
Traceroute/tool/traceroute (use call)
Bandwidth test/tool/bandwidth-test (use call)
Torch (traffic by IP)/tool/torch (use call)
Profile (CPU profile)/tool/profile
Netwatch/tool/netwatch
E-mail settings/tool/e-mail
Fetch (HTTP client)/tool/fetch
Graphing interface/tool/graphing/interface
Graphing resource/tool/graphing/resource
Graphing queue/tool/graphing/queue
Sniffer/tool/sniffer
SNMP/snmp
MAC server/tool/mac-server
MAC Winbox/tool/mac-server/mac-winbox
MAC Ping/tool/mac-server/ping
Bandwidth server/tool/bandwidth-server
IP Scan/tool/ip-scan
SMS/tool/sms
Romon/tool/romon

Container (ROS 7.4+)

TaskResource Path
Container config/container/config
Containers/container
Container mounts/container/mounts
Container envs/container/envs

IoT

TaskResource Path
IoT Bluetooth/iot/bluetooth
IoT Bluetooth scanners/iot/bluetooth/scanners
IoT GPIO/iot/gpio
IoT MQTT broker/iot/mqtt/brokers

ZeroTier

TaskResource Path
ZeroTier/zerotier
ZeroTier interface/zerotier/interface

Advanced Operations

Filtering with multiple parameters

resource = api.get_resource('/ip/firewall/filter')
rules = resource.get(chain='forward', action='drop')

Ordering firewall rules (place-before)

resource = api.get_resource('/ip/firewall/filter')
resource.add(
    chain='forward',
    action='accept',
    src_address='10.0.0.0/8',
    place_before='*5'       # Insert before rule *5
)

Note: Use underscores in Python for hyphenated attributes (e.g., src-addresssrc_address, place-beforeplace_before).

Moving firewall rules

resource = api.get_resource('/ip/firewall/filter')
resource.call('move', {'numbers': '*A', 'destination': '*1'})

Batch operations

resource = api.get_resource('/ip/firewall/address-list')
ips = ['1.2.3.4', '5.6.7.8', '9.10.11.12']
for ip in ips:
    resource.add(list='blocklist', address=ip, comment='Blocked via API')

Enable/disable by name

resource = api.get_resource('/interface')
ifaces = resource.get(name='ether5')
if ifaces:
    resource.set(id=ifaces[0]['id'], disabled='yes')

Get specific properties only

# The library always returns all properties; filter in Python:
resource = api.get_resource('/interface')
for iface in resource.get():
    print(iface.get('name'), iface.get('type'), iface.get('running'))

Run system tools (ping, traceroute)

# Tools that produce output need call() with parameters
resource = api.get_resource('/tool')
# Note: Some tools (ping, traceroute) run indefinitely.
# Use count parameter to limit.
result = resource.call('ping', {'address': '8.8.8.8', 'count': '4'})
for r in result:
    print(r)

Backup & Export

# Create a backup file
resource = api.get_resource('/system/backup')
resource.call('save', {'name': 'api-backup'})

# Export config to file
resource = api.get_resource('/')
resource.call('export', {'file': 'api-export'})

System reboot / shutdown

resource = api.get_resource('/system')
resource.call('reboot')
# resource.call('shutdown')

Firmware / Package update

resource = api.get_resource('/system/package/update')
resource.call('check-for-updates')
result = resource.get()
print(result)
# resource.call('install')   # Install and reboot

REST API (RouterOS 7.1+)

RouterOS 7.1+ also supports a REST API over HTTP/HTTPS. Use when the Python library is unavailable.

REST via curl

# GET - Read resources
curl -k -u user:pass https://<IP>/rest/ip/address

# PUT - Create new entry
curl -k -u user:pass -X PUT https://<IP>/rest/ip/address \
  --data '{"address":"192.168.1.1/24","interface":"ether1"}' \
  -H "content-type: application/json"

# PATCH - Update entry
curl -k -u user:pass -X PATCH https://<IP>/rest/ip/address/*1 \
  --data '{"comment":"updated"}' -H "content-type: application/json"

# DELETE - Remove entry
curl -k -u user:pass -X DELETE https://<IP>/rest/ip/address/*1

# POST - Run any command
curl -k -u user:pass -X POST https://<IP>/rest/ip/address/print \
  --data '{"_proplist":["address","interface"]}' \
  -H "content-type: application/json"

REST with query filters

curl -k -u user:pass -X POST https://<IP>/rest/interface/print \
  --data '{".query":["type=ether"],"_proplist":["name","type","running"]}' \
  -H "content-type: application/json"

REST via Python requests

import requests
from requests.auth import HTTPBasicAuth

base = 'https://<IP>/rest'
auth = HTTPBasicAuth('<USER>', '<PASS>')

# GET all interfaces
r = requests.get(f'{base}/interface', auth=auth, verify=False)
print(r.json())

# POST (run commands with parameters)
r = requests.post(f'{base}/ip/address/print',
    auth=auth, verify=False,
    json={'_proplist': ['address', 'interface']})
print(r.json())

Error Handling

import routeros_api
from routeros_api.exceptions import RouterOsApiCommunicationError

try:
    conn = routeros_api.RouterOsApiPool(host, username=user, password=pw, plaintext_login=True)
    api = conn.get_api()
    resource = api.get_resource('/ip/address')
    resource.add(address='invalid', interface='nonexistent')
except RouterOsApiCommunicationError as e:
    print(f"API Error: {e}")
except ConnectionError:
    print("Cannot reach router")
finally:
    try:
        conn.disconnect()
    except:
        pass

API Error Categories

CodeMeaning
0Missing item or command
1Argument value failure
2Command interrupted
3Scripting related failure
4General failure
5API related failure
6TTY related failure
7Value from :return command

Workflow

  1. Connect to the router using credentials from environment variables or the user.
  2. Read first — always fetch current state before making changes.
  3. Confirm destructive operations (delete, disable, reboot, firewall changes) with the user.
  4. Apply changes using add/set/remove.
  5. Verify by reading back the resource after changes.
  6. Disconnect when done.

Important Notes

  • The id field in responses (e.g., *1, *A) is the internal MikroTik ID used for set/remove.
  • Use underscore in Python kwargs for hyphenated RouterOS attributes: src-addresssrc_address.
  • Filter and NAT rules are order-sensitive — use place_before when adding to control position.
  • Always show the user what currently exists before modifying firewall rules.
  • For bulk operations, iterate over results and apply changes one by one.
  • RouterOS 7.x uses different paths for routing (e.g., /routing/ospf/instance not /routing/ospf).
  • If the API port is closed, advise the user to enable it: /ip/service enable api.
  • Tools like ping/traceroute run indefinitely — always pass count or duration parameter.
  • REST API requires www or www-ssl service enabled on the router.
  • REST API has a 60-second timeout for commands; use limiting params (count, duration, once).

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Huo15 Openclaw Enhance

火一五·克劳德·龙虾增强插件 v5.7.8 — 全面适配 openclaw 2026.4.24:peerDep ^4.24 + build/compat 同步到 4.24 + 14 处 api.on 全部去掉 as any 改成 typed hook(hookName 联合类型 + handler 自动推断 Pl...

Registry SourceRecently Updated
General

Content Trend Analyzer

Aggregates and analyzes content trends across platforms to identify hot topics, user intent, content gaps, and generates data-driven article outlines.

Registry SourceRecently Updated
General

Prompt Debugger

Debug prompts that produce unexpected AI outputs — diagnose failure modes, identify ambiguity and conflicting instructions, test variations, compare model re...

Registry SourceRecently Updated
General

Indie Maker News

独行者 Daily - 变现雷达。读对一条新闻,少走一年弯路。每天5分钟,给创业者装上商业雷达。聚焦一人公司、副业、创业变现资讯,智能分类,行动导向。用户下载即能用,无需本地部署!

Registry SourceRecently Updated