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

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

Available components

0 this week 89 Trust /100

Last scanned (23 hours ago)

Scores higher than 93% of npm servers

Category Cloud Infrastructure

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 Security81
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 40 of 144 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 1 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability71
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 19175 tokens (~144/item across 133 items; 133 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 Management100
  • No destabilizing schema changes in the last 30 days.Pass
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 134 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
What we tested

Checks we ran (16)

  • Malware scan
  • Known CVEs
  • Install scripts
  • Dependency health
  • Source repository
  • Provenance
  • License
  • Maintenance
  • Security disclosure
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Does not apply to this package (2)

  • Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
  • Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.

The score does not measure everything. What the score does not measure →

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.

  • 5 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 4 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
    • Package version: 1.16.0 → 1.16.1 functional
  • 2 Nov 26 +1
    • Stability: 0.97 → pass security
    • Security disclosure: unverified → pass ▲ functional
  • 1 Nov 26 −1
    • Security disclosure: pass → unverified ▼ functional
    • Stability: pass → 0.97 functional
  • 25 Oct 26 +20
    • CVE-2023-54404 affects this package: high ▼ security
    • Known CVEs: unverified → fail ▼ security
    • Malware scan: unverified → pass ▲ security
    • Dependency health: unverified → 0.89 ▲ functional
  • 24 Oct 26 −25
    • CVE-2023-54404 affects this package: high ▼ security
    • Known CVEs: pass → unverified ▼ security
    • Malware scan: pass → unverified ▼ security
    • Known CVEs: pass → fail ▼ security
    • Dependency health: 0.88 → unverified ▼ functional
    • Package version: 1.14.1 → 1.16.0 functional
    • Package version: 1.14.1 → 1.15.0 functional
  • 20 Oct 26 0
    • Stability: 0.97 → pass security
  • 19 Oct 26 +1

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

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 5 Nov 2026 · Analysed npm/mikromcp@1.16.1

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.16.1
Rekor log index 3682638700
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:0ada8df87b4de4de5ea313bd817a31423833a973797d156105195a444d11870b07d628d61c0e28c5b8d42c1c1d03715bf7ec04416cbca21d51e1cf125

Background: How many MCP packages publish verified provenance →

Vulnerabilities 1 finding
ID CVE Severity Vector Fix available
GHSA-mrhx-c7xc-m3w5 CVE-2023-54404 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 144 packages
Packages resolved 144
Stale 40
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 133 exposed · ~19,031 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
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
authstring–Authentication algorithm (set action only)
certificatestring–Server certificate name (set action only)
cipherstring–Encryption cipher (set action only)
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview changes without applying.
modestring–Tunnel mode (set action only)
portinteger–Listening port (set action only)
protocolstring–Transport protocol (set action only)
routerIdstring–Router 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
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview changes without applying.
namestringyesPackage name
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_ppp_profile ~237

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
commentstring–Optional comment
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dnsServerstring–DNS server IP pushed to client
dryRunboolean–Preview changes without applying.
localAddressstring–Local IP assigned to router end of PPP link
namestringyesProfile name — idempotency key
rateLimitstring–Rate limit string (e.g. '10M/10M')
remoteAddressstring–IP or pool name assigned to client
routerIdstring–Router ID; omit to use the default router.
sessionTimeoutstring–Session 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
addDefaultRouteboolean–Add default route via PPPoE (yes/no)
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dialOnDemandboolean–Dial on demand instead of always-on (yes/no)
dryRunboolean–Preview changes without applying.
interfacestring–Parent interface (required for add)
namestringyesPPPoE client interface name — idempotency key (e.g. pppoe-wan)
passwordstring–PPPoE password (never logged)
routerIdstring–Router ID; omit to use the default router.
serviceNamestring–PPPoE service name filter (leave empty to match any)
userstring–PPPoE username (required for add)

No output schema declared.

No examples provided.

manage_queue ~203

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
commentstring–Optional comment
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview changes without applying.
limitAtstring–Guaranteed rate (e.g. '1M/1M')
maxLimitstring–Max upload/download limit (e.g. '10M/10M')
namestringyesQueue name — idempotency key
routerIdstring–Router ID; omit to use the default router.
targetstring–Target 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
commentstring–Optional comment for the route
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
disabledboolean–Whether the route should be disabled
distanceinteger–Route distance/metric (1-255)
dryRunboolean–If 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
routerIdstring–Router ID; omit to use the default router.
routingTablestring–Routing table name (default: main). Use for policy routing with separate tables.

No output schema declared.

No examples provided.

manage_routing_rule ~259

Add, remove, enable, or disable a policy routing rule. Idempotent by srcAddress+dstAddress+interface+table composite key; a repeated add with an explicit, different ruleAction is a CONFLICT. Supports dry-run mode.

NameTypeReqDescription
actionstringyesAction to perform
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview changes without applying.
dstAddressstring–Destination CIDR to match
interfacestring–Incoming interface to match
priorityinteger–Unsupported: RouterOS 7 /routing/rule has no priority (rules apply in list order); add rejects it
routerIdstring–Router ID; omit to use the default router.
ruleActionstring–Rule action, add only: lookup (default; when the table has no route, later rules and main still apply) or lookup-only-in-table (no fallback)
srcAddressstring–Source CIDR to match
tablestringyesRouting table name — part of the composite idempotency key; required for all actions

No output schema declared.

No examples provided.

manage_routing_table ~130

Create or remove a custom routing table. Idempotent by table name. Supports dry-run mode.

NameTypeReqDescription
actionstringyesAction to perform
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview changes without applying.
fibboolean–Whether to sync this table with the FIB
namestringyesRouting table name (idempotency key)
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_scheduled_job ~248

Add, update, remove, enable, or disable a RouterOS scheduler entry. onEvent is arbitrary RouterOS script run with the router user's policies, so this tool is destructive. Idempotent by name. add throws CONFLICT if name exists; update throws NOT_FOUND if it does not. Supports dry-run.

NameTypeReqDescription
actionstringyesAction to perform
commentstring–Optional comment
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview changes without applying.
intervalstring–Run interval (e.g. 00:05:00 for every 5 minutes)
namestringyesJob name — idempotency key
onEventstring–Script name or inline command to run (required on add)
routerIdstring–Router ID; omit to use the default router.
startDatestring–Start date (e.g. jan/01/2000)
startTimestring–Start time (e.g. 00:00:00)

No output schema declared.

No examples provided.

manage_script ~171

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.

NameTypeReqDescription
actionstringyesAction to perform
commentstring–Optional comment
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dontRequirePermissionsboolean–Allow script to run without elevated permissions
dryRunboolean–Preview changes without applying.
namestringyesScript name — idempotency key
routerIdstring–Router ID; omit to use the default router.
sourcestring–Script body (required for add and update)

No output schema declared.

No examples provided.

manage_upgrade ~136

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.

NameTypeReqDescription
actionstringyescheck — trigger a check for available updates; install — download and install the latest update (triggers reboot)
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview the action without executing
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_user ~192

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.

NameTypeReqDescription
actionstringyesAction to perform
addressstring–Allowed source address or range
commentstring–Optional comment
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview changes without applying.
groupstring–Group name (required for add; e.g. 'read', 'write', 'full')
namestringyesUsername — idempotency key
passwordstring–Password (required for add and set-password)
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_user_group ~162

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.

NameTypeReqDescription
actionstringyesAction to perform
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview changes without applying.
namestringyesGroup name — idempotency key
policystring–Comma-separated policy list (e.g. 'read,write,ftp')
routerIdstring–Router ID; omit to use the default router.
skinstring–Optional skin name for the group

No output schema declared.

No examples provided.

manage_vlan ~247

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.

NameTypeReqDescription
actionstringyesAction to perform
commentstring–Optional comment (add only)
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
disabledboolean–Whether to create the VLAN disabled (add only)
dryRunboolean–Preview changes without applying.
mtuinteger–MTU size (add only)
namestringyesVLAN interface name — idempotency key, taken verbatim for remove/enable/disable; add accepts letters, digits, dot, hyphen, underscore, up to 64 chars
parentInterfacestring–Parent interface name (e.g., ether1, bridge1; required for add)
routerIdstring–Router ID; omit to use the default router.
vlanIdinteger–VLAN ID (1-4094; required for add)

No output schema declared.

No examples provided.

manage_vrrp_instance ~207

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.

NameTypeReqDescription
actionstringyesAction to perform
commentstring–Optional comment
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview changes without applying.
interfacestring–Master interface (required for add)
intervalinteger–Advertisement interval in seconds
namestringyesVRRP interface name — idempotency key
priorityinteger–Router priority (1–254)
routerIdstring–Router ID; omit to use the default router.
versionstring–VRRP protocol version
vridinteger–Virtual router ID (required for add)

No output schema declared.

No examples provided.

manage_wifi_interface ~144

Enable, disable, or update SSID settings on a WiFi interface. At least one of disabled or ssid must be provided.

NameTypeReqDescription
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
disabledboolean–Set to true to disable, false to enable
dryRunboolean–Preview changes without applying.
namestringyesWiFi interface name (e.g. wifi1, wlan1)
routerIdstring–Router ID; omit to use the default router.
ssidstring–New SSID to set

No output schema declared.

No examples provided.

manage_wireguard_interface ~182

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.

NameTypeReqDescription
actionstringyesAction to perform
commentstring–Optional comment
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview changes without applying.
listenPortinteger–UDP listen port (RouterOS picks one if omitted)
mtuinteger–MTU (default 1420)
namestringyesInterface name — idempotency key (e.g. wg0)
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

manage_wireguard_peer ~273

Add or remove a WireGuard peer. Add returns already_exists when the public key and explicitly requested endpoint/allowed addresses match; different settings produce CONFLICT without changing the peer. Omitted settings are left unchanged.

NameTypeReqDescription
actionstringyesAction to perform
allowedAddressstring–Allowed IP address/CIDR for this peer (e.g. 10.0.0.2/32)
commentstring–Optional comment
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview changes without applying.
endpointstring–Add only: IPv4:port, hostname:port or [IPv6]:port (port 1–65535); hostname labels may contain underscores. Address-only IPv4/hostname/IPv6 (bare or bracketed) leaves the RouterOS port default unchang…
interfacestringyesWireGuard interface name (e.g. wg0)
publicKeystringyesPeer public key in base64 format (44 characters)
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

ping ~120

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.

NameTypeReqDescription
addressstringyesTarget IP address or hostname to ping
countinteger–Number of ICMP echo requests (1–20)
routerIdstring–Router ID; omit to use the default router.
routingTable––Routing table to use for the ping
sizeinteger–Packet size in bytes (14–65535)

No output schema declared.

No examples provided.

plan_changes ~83

Preview a sequence of write operations: each step runs with dryRun=true against live state, returning affected paths and the predicted action per step. Use apply_plan to execute the same steps for real.

NameTypeReqDescription
routerIdstring–Router ID; omit to use the default router.
stepsarrayyesOrdered list of write operations to preview (up to 10)

No output schema declared.

No examples provided.

reboot ~156

Trigger a controlled router reboot with an optional delay. delay=0 reboots immediately; delay>0 adds a one-shot "mikromcp-reboot" scheduler entry on the router (calling again replaces it; remove it to cancel). Supports dry-run. Use this tool instead of run_command for reboots — run_command's deny list blocks /system reboot*.

NameTypeReqDescription
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
delayinteger–Seconds before rebooting (0–3600)
dryRunboolean–Preview the reboot without executing
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

restore_swos_backup ~228

Restore a backup.swb file from the server's SwOS folder onto the switch, as the web UI's Restore Backup does. The switch replaces its whole configuration and reboots, so it is unreachable for a while, and its address may change to the one in the backup. By default the current configuration is saved first. dryRun defaults to true.

NameTypeReqDescription
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Check the file and the switch without restoring.
filestringyesBackup file in the server's SwOS folder (from save_swos_backup).
forceboolean–Restore a backup that came from another switch or model, or whose origin cannot be told (no sidecar from save_swos_backup and not named by it).
routerIdstring–Router ID; omit to use the default router.
saveCurrentFirstboolean–Save the switch's current backup before restoring, so the restore can be undone.

No output schema declared.

No examples provided.

rollback_change ~160

Restore device state to before a write, identified by its journal ID. RouterOS: reads the before-snapshot, diffs against live state, and applies the reverse. SwOS: re-POSTs the exact pre-write '.b' blob. Use dryRun=true to preview. Requires MIKROMCP_DATA_DIR (defaults to data/).

NameTypeReqDescription
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview the restore plan without applying changes
journalIdstringyesJournal entry ID from write-journal.ndjson to roll back
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

run_command ~206

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. Journaled for audit like every write (see list_journal), but never snapshotted: arbitrary commands touch unknown config sections, so it cannot be rolled back via rollback_change — prefer a dedicated tool when one exists, and note the manual undo command in your own records.

NameTypeReqDescription
commandstringyesRouterOS console command to execute
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview the command without executing (validates allow/deny policy only)
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

run_script ~106

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.

NameTypeReqDescription
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
namestringyesName of the script to execute
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

save_swos_backup ~112

Download the switch's own configuration backup (backup.swb, the file the web UI's Save Backup produces) into the server's SwOS folder. The file is MikroTik's opaque format: it restores only through restore_swos_backup or the web UI, on the same model. A switch on factory defaults has nothing to save. Writes a file on the server (owner-only), so it is audited like a write.

NameTypeReqDescription
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

set_swos_password ~260

Change a SwOS switch's admin password, as the web UI's Password Change does. The new password comes from the server secret MIKROMCP_PASSWORD_<newPasswordSecret>, never from the conversation; the current one is the router's configured credential. Passwords are ASCII, at most 15 characters. After the change this call's client keeps working with the new password, but the server rebuilds the client from the router's configured credential ({PREFIX}_PASS) after any authentication failure or restart, so that variable must be updated right away. On SwOS Lite the switch does not answer the change; the result is confirmed by logging in with the new password. dryRun defaults to true.

NameTypeReqDescription
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Check the secret and the switch without changing the password.
newPasswordSecretstringyesName of the server secret holding the new password: NAME for MIKROMCP_PASSWORD_<NAME>. The password itself never passes through the conversation, and a switch config cannot reference it.
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

set_system_clock ~175

Set the system date, time, and/or timezone on a MikroTik router. Idempotent: returns already_set if the values already match. Supports dry-run.

NameTypeReqDescription
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
datestring–Date in RouterOS format: mon/dd/yyyy (e.g. jan/02/2006)
dryRunboolean–Preview changes without applying.
routerIdstring–Router ID; omit to use the default router.
timestring–Time in RouterOS format: hh:mm:ss (e.g. 15:04:05)
timeZoneNamestring–IANA timezone name (e.g. Europe/London, UTC)

No output schema declared.

No examples provided.

torch ~133

Capture a real-time traffic snapshot on a router interface. RouterOS runs the capture for `duration` seconds; the tool returns the flows of the final update with their TX/RX rates in bits per second and packets per second. Not auto-retried.

NameTypeReqDescription
dstAddress––Filter by destination IP address
durationinteger–Capture duration in seconds (1–30)
interfacestringyesInterface name to monitor (e.g. ether1, bridge1)
routerIdstring–Router ID; omit to use the default router.
srcAddress––Filter by source IP address

No output schema declared.

No examples provided.

traceroute ~108

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. Not auto-retried.

NameTypeReqDescription
addressstringyesTarget IP address or hostname to trace
countinteger–Probes per hop (1–5)
maxHopsinteger–Maximum number of hops (1–30)
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

upgrade_swos_firmware ~306

Upgrade a SwOS switch's firmware the way the web UI's Upgrade tab does. Resolves the latest stable version for the model from MikroTik's download server (or takes `version`), downloads swos-<board>-<version>.bin over HTTPS into the server's SwOS folder (or uses `file`), checks it, then flashes it; the switch reboots. Refuses release candidates unless allowPrerelease is true. A switch still on its preinstalled backup firmware (a version ending in 'p', which cannot save configuration) counts as needing the upgrade. dryRun defaults to true.

NameTypeReqDescription
allowPrereleaseboolean–Allow a release candidate or beta version.
boardstring–Firmware board name, e.g. css318g. Derived from the model when omitted.
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Resolve, download and check the firmware without flashing it.
filestring–Use this firmware file from the server's SwOS folder instead of downloading one (offline upgrade).
forceboolean–Flash a `board` that differs from the one derived from the switch's model.
routerIdstring–Router ID; omit to use the default router.
versionstring–Target version. Defaults to the latest stable release for this model.

No output schema declared.

No examples provided.

upload_file ~185

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. RouterOS runs a file named *.auto.rsc as a script when it arrives over FTP. Dry-run tests connectivity only.

NameTypeReqDescription
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
contentstringyesFile content to upload (text)
dryRunboolean–Validate SFTP or FTP connectivity without writing the target file
namestringyesTarget filename on the router (e.g. flash/my-script.rsc)
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

write_swos_blob ~342

Mutate a SwOS '.b' endpoint on a MikroTik switch. The full endpoint blob is read, the given fields are merged in, and the entire blob is written back (the firmware only accepts whole-blob writes); untouched fields are re-sent byte-for-byte, and a field this firmware does not expose is refused rather than injected. dryRun defaults to true — preview first. Every result reports whether the schema has been verified against the switch's firmware. The pre-write blob is snapshotted, so the change can be undone with rollback_change. Returns no_change when the values already match.

NameTypeReqDescription
confirmationTokenstring–Token from a prior APPROVAL_REQUIRED response. Re-submit the identical call with this token to confirm the destructive action.
dryRunboolean–Preview the resulting blob without writing to the switch.
endpointstringyes'.b' endpoint to write
fieldsobjectyesValues to set, keyed by decoded field name (from list_swos_endpoints) or by a raw wire key already present in the blob — anything else is rejected. Option fields take the enum name (e.g. 'auto'); IP…
routerIdstring–Router ID; omit to use the default router.

No output schema declared.

No examples provided.

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
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 and SwOS: 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 89 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 5 November 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 133 tools: get_system_status, list_interfaces, list_ip_addresses, manage_ip_address, list_dhcp_leases, and 128 more. Their descriptions and schemas cost roughly 19,031 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 5 November 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.

What did VerifyMCP test on the MikroMCP MCP server?

VerifyMCP ran 16 checks on MikroMCP, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.