Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

MikroMCP

NPM · MIKROMCP · SCANNED SEP 20

MCP server for MikroTik RouterOS: typed tools, dry-run, RBAC, audit logs, and rollback.

Available components

0 this week 94 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security99
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 42 of 147 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to AliKarami/MikroMCP). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 14 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability75
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 15241 tokens (~124/item across 122 items; 122 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management93
  • Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety97
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 7 of 8 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "ping" implies "send" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 123 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the MikroMCP MCP server?

MikroMCP runs locally as an npm package, launched with npx -y mikromcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · mikromcp

# add to Claude Code
claude mcp add alikarami-mikromcp -- npx -y mikromcp
// .cursor/mcp.json
{
  "mcpServers": {
    "alikarami-mikromcp": {
      "command": "npx",
      "args": [
        "-y",
        "mikromcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "alikarami-mikromcp": {
      "command": "npx",
      "args": [
        "-y",
        "mikromcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add alikarami-mikromcp -- npx -y mikromcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "alikarami-mikromcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "mikromcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add alikarami-mikromcp --command npx --arg -y --arg mikromcp
# ~/.hermes/config.yaml
mcp_servers:
  alikarami-mikromcp:
    command: "npx"
    args: ["-y", "mikromcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "alikarami-mikromcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "mikromcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add alikarami-mikromcp -t stdio -c npx -a -y mikromcp
// mcp.json
{
  "mcpServers": {
    "alikarami-mikromcp": {
      "command": "npx",
      "args": [
        "-y",
        "mikromcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1
    • Security disclosure: unverified → pass functional
  • 19 Sept 26 0
    • Security disclosure: pass → unverified functional
  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes. Other categories moved too: Supply Chain Security rose 1.

  • 16 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 15 Sept 26 +1
    • Stability: 0.97 → pass security
  • 13 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 11 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 9 Sept 26 −3
    • Stability: pass → 0.80 functional
    • Package version: 1.8.0 → 1.11.0 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/mikromcp@1.11.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo AliKarami/MikroMCP
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/AliKarami/MikroMCP/.github/workflows/release.yml@refs/tags/v1.11.0
Rekor log index 2723383711
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:c76356c9095f2707cba9c4964ff7e3de0ca3b1cc7ad92d991a8f6057c2f218d3031b4b3d614c616555078fd89b31a938a38e8a79d6173ac72cf6aa84b

Background: How many MCP packages publish verified provenance →

Dependencies 147 packages
Packages resolved 147
Stale 42
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 122 exposed · ~15,117 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
list_pppoe_clients ~99

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

NameTypeReqDescription
interfacestringFilter by parent interface name (exact match)
limitintegerMax results to return.
offsetintegerPagination offset.
routerIdstringRouter ID; omit to use the default router.
statusstringFilter by running status

No output schema declared.

No examples provided.

list_queues ~60

List simple queues on a MikroTik router.

NameTypeReqDescription
limitintegerMax results to return.
routerIdstringRouter ID; omit to use the default router.
targetstringFilter by target address (substring match)

No output schema declared.

No examples provided.

list_routers ~102

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. Use it to discover valid routerId values and tags for targeting other tools (including bulk_execute).

NameTypeReqDescription
tagsarrayOnly return routers having any of these tags (e.g. ["edge", "prod"])

No output schema declared.

No examples provided.

list_routes ~92

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

NameTypeReqDescription
activeOnlybooleanReturn only active routes
limitintegerMax results to return.
offsetintegerPagination offset.
routerIdstringRouter ID; omit to use the default router.
staticOnlybooleanReturn only non-dynamic routes

No output schema declared.

No examples provided.

list_routing_rules ~71

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

NameTypeReqDescription
disabledbooleanFilter by disabled state
routerIdstringRouter ID; omit to use the default router.
tablestringFilter by routing table name

No output schema declared.

No examples provided.

list_routing_tables ~37

List custom routing tables on a MikroTik router.

NameTypeReqDescription
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

list_scheduled_jobs ~62

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

NameTypeReqDescription
namestringFilter by job name (exact match)
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

list_scripts ~54

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

NameTypeReqDescription
namestringFilter by script name (substring match)
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

list_swos_endpoints ~64

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.

NameTypeReqDescription
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

list_user_groups ~47

List local user groups on a MikroTik router.

NameTypeReqDescription
limitintegerMax results to return.
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

list_users ~65

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

NameTypeReqDescription
groupstringFilter by group name (exact match)
limitintegerMax results to return.
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

list_vrrp_instances ~64

List VRRP instances on a MikroTik router.

NameTypeReqDescription
interfacestringFilter by master interface name (exact match)
limitintegerMax results to return.
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

list_wifi_clients ~75

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

NameTypeReqDescription
interfacestringFilter by WiFi interface name
limitintegerMax results to return.
offsetintegerPagination offset.
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

list_wifi_interfaces ~79

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

NameTypeReqDescription
limitintegerMax results to return.
offsetintegerPagination offset.
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

list_wireguard_interfaces ~60

List WireGuard interfaces and their status on a MikroTik router.

NameTypeReqDescription
limitintegerMax results to return.
offsetintegerPagination offset.
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

list_wireguard_peers ~73

List WireGuard peers with last handshake time and transfer statistics.

NameTypeReqDescription
interfacestringFilter by WireGuard interface name
limitintegerMax results to return.
offsetintegerPagination offset.
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_address_list_entry ~167

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

NameTypeReqDescription
actionstringyesAction to perform
addressstringyesIP address or CIDR to add/remove
commentstringOptional comment for the entry
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
liststringyesAddress list name
routerIdstringRouter ID; omit to use the default router.
timeoutstringExpiry timeout (e.g. 1d, 2h30m) — omit for permanent

No output schema declared.

No examples provided.

manage_bridge ~136

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

NameTypeReqDescription
actionstringyesAction to perform
commentstringOptional comment
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
disabledbooleanWhether the bridge should be disabled
dryRunbooleanPreview changes without applying.
namestringyesBridge interface name
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_bridge_port ~133

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

NameTypeReqDescription
actionstringyesAction to perform
bridgestringyesBridge interface name
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
interfacestringyesInterface to add or remove as a bridge port
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_certificate ~117

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

NameTypeReqDescription
actionstringyesAction to perform
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
namestringyesCertificate name — idempotency key
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_container ~230

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.

NameTypeReqDescription
actionstringyesAction to perform
commentstringOptional comment
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
envliststringRouterOS environment list name for container env vars
interfacestringveth interface name to attach the container to (required on create — must be pre-configured in RouterOS)
namestringyesContainer name — idempotency key
remoteImagestringDocker image to pull (required on create, e.g. alpine:latest)
rootDirstringRoot directory for container files
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_container_config ~96

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

NameTypeReqDescription
dryRunbooleanPreview changes without applying.
ramHighMbintegerRAM high-water mark in MB
registryUrlstringContainer registry URL
routerIdstringRouter ID; omit to use the default router.
vethInterfacestringVeth interface name for container networking

No output schema declared.

No examples provided.

manage_container_env ~125

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.

NameTypeReqDescription
actionstringyesAction to perform
dryRunbooleanPreview changes without applying.
keystringyesEnvironment variable name — part of idempotency key
namestringyesContainer name
routerIdstringRouter ID; omit to use the default router.
valuestringEnvironment variable value (required for add)

No output schema declared.

No examples provided.

manage_container_mount ~128

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.

NameTypeReqDescription
actionstringyesAction to perform
dryRunbooleanPreview changes without applying.
dststringContainer destination path (required for add)
namestringyesMount name — idempotency key
routerIdstringRouter ID; omit to use the default router.
srcstringHost source path (required for add)

No output schema declared.

No examples provided.

manage_dhcp_client ~209

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.

NameTypeReqDescription
actionstringyesAction to perform
addDefaultRoutebooleanAdd default route from DHCP (add only)
commentstringOptional comment (add only)
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
interfacestringyesInterface name — idempotency key (e.g. ether1, ether2)
routerIdstringRouter ID; omit to use the default router.
usePeerDnsbooleanUse DNS servers provided by DHCP server (add only)
usePeerNtpbooleanUse NTP servers provided by DHCP server (add only)

No output schema declared.

No examples provided.

manage_dhcp_lease ~109

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

NameTypeReqDescription
actionstringyesAction to perform: make-static converts a dynamic lease to static; remove deletes the lease
dryRunbooleanPreview changes without applying.
macAddressstringyesMAC address of the lease — idempotency key (case-insensitive)
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_dhcp_server ~192

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.

NameTypeReqDescription
actionstringyesAction to perform
addressPoolstringIP pool name (required for add)
commentstringOptional comment
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
interfacestringInterface to serve DHCP on (required for add)
leaseTimestringLease duration (e.g. '1d', '12h')
namestringyesServer name — idempotency key
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_dns_entry ~223

Add or remove a static DNS entry. Idempotent by name+type: add returns already_exists if the same record already exists.

NameTypeReqDescription
actionstringyesAction to perform
addressstringIP address (required for A records)
cnamestringTarget hostname (required for CNAME records)
commentstringOptional comment
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
disabledbooleanWhether the entry should be disabled
dryRunbooleanPreview changes without applying.
namestringyesHostname for the DNS record (e.g. server.example.com)
routerIdstringRouter ID; omit to use the default router.
textstringText value (required for TXT records)
ttlstringTTL value (e.g. 1d, 00:05:00)
typestringDNS record type

No output schema declared.

No examples provided.

manage_dns_settings ~210

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

NameTypeReqDescription
allowRemoteRequestsbooleanAllow router to answer DNS queries from the network
cacheMaxTtlstringMaximum cache TTL (e.g. '1d', '00:30:00')
cacheSizeintegerDNS cache size in KiB
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
maxUdpPacketSizeintegerMaximum UDP packet size in bytes
routerIdstringRouter ID; omit to use the default router.
serversstringComma-separated upstream DNS server IPs (e.g. '8.8.8.8,1.1.1.1')

No output schema declared.

No examples provided.

manage_firewall_rule ~323

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.

NameTypeReqDescription
actionstringyesAction to perform: add, remove, disable, or enable a firewall rule
chainstringyesFirewall chain (e.g. forward, input, output, srcnat, dstnat)
commentstringComment to identify the rule (used as idempotency key)
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
disabledbooleanWhether the rule should be disabled
dryRunbooleanIf true, validate and return planned changes without applying
dstAddressstringDestination address or network
dstPortstringDestination port or range
inInterfacestringIncoming interface
outInterfacestringOutgoing interface
placeBeforestringPlace the new rule before this rule ID
protocolstringProtocol to match
routerIdstringRouter ID; omit to use the default router.
ruleActionstringyesRouterOS rule action (e.g. accept, drop, reject, masquerade)
srcAddressstringSource address or network
srcPortstringSource port or range
tablestringFirewall table to manage: filter or nat

No output schema declared.

No examples provided.

manage_interface_list ~134

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.

NameTypeReqDescription
actionstringyesAction to perform
commentstringOptional comment
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
namestringyesInterface list name — idempotency key
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_interface_list_member ~161

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.

NameTypeReqDescription
actionstringyesAction to perform
commentstringOptional comment
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
interfacestringyesInterface name to add/remove — part of composite idempotency key
liststringyesInterface list name — part of composite idempotency key
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_ip_address ~226

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.

NameTypeReqDescription
actionstringyesAction to perform: add, update, or remove an IP address
addressstringyesIP address with optional prefix length in CIDR notation (e.g., 192.168.1.1/24). Defaults to /32 if prefix is omitted.
commentstringOptional comment for the IP address entry
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
disabledbooleanWhether the IP address should be disabled
dryRunbooleanIf true, validate and return planned changes without applying
interfacestringyesInterface to assign the IP address to
networkstringNetwork address (auto-calculated from address if omitted)
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_ip_pool ~138

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.

NameTypeReqDescription
actionstringyesAction to perform
dryRunbooleanPreview changes without applying.
namestringyesPool name — idempotency key
nextPoolstringNext pool name for overflow
rangesstringIP range (e.g. '192.168.1.100-192.168.1.200'; required for add)
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_ip_service ~168

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.

NameTypeReqDescription
actionstringyesAction to perform — only enable/disable to prevent accidental lockout from changing ports
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
namestringyesService name to manage (api, api-ssl, ssh, telnet, www, www-ssl, winbox, ftp)
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_ipsec_peer ~183

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.

NameTypeReqDescription
actionstringyesAction to perform
addressstringRemote gateway address (required for add)
commentstringOptional comment
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
exchangestringIKE exchange mode
localAddressstringLocal address
namestringyesPeer name — idempotency key
profilestringIKE profile name
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_ipsec_policy ~217

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

NameTypeReqDescription
actionstringyesAction to perform
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
dstAddressstringyesDestination CIDR — part of composite idempotency key
ipsecActionstringIPSec action (required for add)
levelstringSA level
routerIdstringRouter ID; omit to use the default router.
saDstAddressstringSA destination IP for tunnel mode
saSourceAddressstringSA source IP for tunnel mode
srcAddressstringyesSource CIDR — part of composite idempotency key
tunnelbooleanTunnel mode — part of composite idempotency key

No output schema declared.

No examples provided.

manage_log_action ~183

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.

NameTypeReqDescription
actionstringyesAction to perform
diskFileNamestringDisk log file name without extension (for type=disk)
dryRunbooleanPreview changes without applying.
namestringyesLog action name — idempotency key
remotestringRemote syslog server address (for type=remote)
remotePortintegerRemote syslog server port (for type=remote)
routerIdstringRouter ID; omit to use the default router.
typestringAction type: memory, disk, remote, echo, email (required on add)

No output schema declared.

No examples provided.

manage_log_rule ~159

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.

NameTypeReqDescription
actionstringyesAction to perform
dryRunbooleanPreview changes without applying.
logActionstringyesLog action target name (RouterOS action field) — idempotency key
prefixstringOptional prefix to prepend to log messages
routerIdstringRouter ID; omit to use the default router.
topicsstringyesLog topics (e.g. firewall, system, info) — idempotency key

No output schema declared.

No examples provided.

manage_mangle_rule ~336

Add, remove, enable, or disable a firewall mangle rule. Uses comment as idempotency key. Supports dry-run mode.

NameTypeReqDescription
actionstringyesAction to perform
chainstringMangle chain (required on add): prerouting, input, forward, output, postrouting
commentstringyesIdempotency key — uniquely identifies this mangle rule
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
dstAddressstringDestination IP/CIDR to match
dstAddressListstringDestination address list name to match
dstPortstringDestination port or range
inInterfacestringIncoming interface to match
newConnectionMarkstringConnection mark to set
newDscpValueintegerDSCP value to set (0–63)
newRoutingMarkstringRouting mark to set
outInterfacestringOutgoing interface to match
passthroughbooleanWhether to continue matching subsequent rules
protocolstringProtocol to match (e.g. tcp, udp)
routerIdstringRouter ID; omit to use the default router.
srcAddressstringSource IP/CIDR to match
srcAddressListstringSource address list name to match
srcPortstringSource port or range

No output schema declared.

No examples provided.

manage_netwatch_entry ~164

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.

NameTypeReqDescription
actionstringyesAction to perform
commentstringOptional comment
dryRunbooleanPreview changes without applying.
hoststringyesHost to monitor — idempotency key
intervalstringCheck interval (e.g. '1m'; default '1m')
portintegerTCP port (optional; ICMP if omitted)
routerIdstringRouter ID; omit to use the default router.
timeoutstringProbe timeout (e.g. '500ms')

No output schema declared.

No examples provided.

manage_ntp_client ~116

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

NameTypeReqDescription
dryRunbooleanPreview changes without applying.
enabledbooleanEnable or disable the NTP client
modestringNTP client mode
routerIdstringRouter ID; omit to use the default router.
serversstringComma-separated NTP server addresses
vlanInterfacestringVLAN interface for NTP communication

No output schema declared.

No examples provided.

manage_ovpn_client ~230

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.

NameTypeReqDescription
actionstringyesAction to perform
certificatestringClient certificate name
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
connectTostringRemote server address (required for add)
dryRunbooleanPreview changes without applying.
modestringTunnel mode
namestringyesOpenVPN client interface name — idempotency key
passwordstringVPN password (never logged)
portintegerRemote port number
protocolstringTransport protocol
routerIdstringRouter ID; omit to use the default router.
userstringVPN username

No output schema declared.

No examples provided.

manage_ovpn_server ~197

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.

NameTypeReqDescription
actionstringyesAction to perform
authstringAuthentication algorithm (set action only)
certificatestringServer certificate name (set action only)
cipherstringEncryption cipher (set action only)
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
modestringTunnel mode (set action only)
portintegerListening port (set action only)
protocolstringTransport protocol (set action only)
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_package ~123

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.

NameTypeReqDescription
actionstringyesAction to perform
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
namestringyesPackage name
routerIdstringRouter ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_ppp_profile ~207

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.

NameTypeReqDescription
actionstringyesAction to perform
commentstringOptional comment
dnsServerstringDNS server IP pushed to client
dryRunbooleanPreview changes without applying.
localAddressstringLocal IP assigned to router end of PPP link
namestringyesProfile name — idempotency key
rateLimitstringRate limit string (e.g. '10M/10M')
remoteAddressstringIP or pool name assigned to client
routerIdstringRouter ID; omit to use the default router.
sessionTimeoutstringSession timeout duration string (e.g. '1h')

No output schema declared.

No examples provided.

manage_pppoe_client ~267

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.

NameTypeReqDescription
actionstringyesAction to perform
addDefaultRoutebooleanAdd default route via PPPoE (yes/no)
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dialOnDemandbooleanDial on demand instead of always-on (yes/no)
dryRunbooleanPreview changes without applying.
interfacestringParent interface (required for add)
namestringyesPPPoE client interface name — idempotency key (e.g. pppoe-wan)
passwordstringPPPoE password (never logged)
routerIdstringRouter ID; omit to use the default router.
serviceNamestringPPPoE service name filter (leave empty to match any)
userstringPPPoE username (required for add)

No output schema declared.

No examples provided.

manage_queue ~173

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.

NameTypeReqDescription
actionstringyesAction to perform
commentstringOptional comment
dryRunbooleanPreview changes without applying.
limitAtstringGuaranteed rate (e.g. '1M/1M')
maxLimitstringMax upload/download limit (e.g. '10M/10M')
namestringyesQueue name — idempotency key
routerIdstringRouter ID; omit to use the default router.
targetstringTarget address (required for add; e.g. '192.168.1.0/24')

No output schema declared.

No examples provided.

manage_route ~238

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

NameTypeReqDescription
actionstringyesAction to perform: add or remove a route
commentstringOptional comment for the route
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
disabledbooleanWhether the route should be disabled
distanceintegerRoute distance/metric (1-255)
dryRunbooleanIf true, validate and return planned changes without applying
dstAddressstringyesDestination address in CIDR notation or plain IP (auto-converted to /32), e.g. 10.0.0.0/8 or 10.77.0.4
gatewaystringyesGateway IP address
routerIdstringRouter ID; omit to use the default router.
routingTablestringRouting table name (default: main). Use for policy routing with separate tables.

No output schema declared.

No examples provided.

manage_routing_rule ~190

Add, remove, enable, or disable a policy routing rule. Idempotent by srcAddress+dstAddress+interface+table composite key. Supports dry-run mode.

NameTypeReqDescription
actionstringyesAction to perform
confirmationTokenstringToken from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunbooleanPreview changes without applying.
dstAddressstringDestination CIDR to match
interfacestringIncoming interface to match
priorityintegerRule priority (0–4294967295)
routerIdstringRouter ID; omit to use the default router.
srcAddressstringSource CIDR to match
tablestringyesRouting table name — part of the composite idempotency key; required for all actions

No output schema declared.

No examples provided.

Common questions

What is the MikroMCP MCP server?

MikroMCP is an MCP server listed in the public MCP registry as io.github.AliKarami/mikromcp. MCP server for MikroTik RouterOS: typed tools, dry-run, RBAC, audit logs, and rollback. This page covers its npm package (mikromcp).

Is the MikroMCP MCP server safe to use?

MikroMCP scores 94 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the MikroMCP MCP server expose?

MikroMCP exposes 122 tools: get_system_status, list_interfaces, manage_ip_address, list_dhcp_leases, manage_dhcp_lease, and 117 more. Their descriptions and schemas cost roughly 15,117 tokens of context every time the server is loaded.

Is the MikroMCP MCP server still maintained?

MikroMCP is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the MikroMCP MCP server under?

MikroMCP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.