# io.github.Sogl/mikrotik-rest-mcp (pypi · mikrotik-rest-mcp-server)

MikroTik RouterOS 7 REST MCP: filtered reads, guarded writes, timed rollback

- Trust score: 89/100 (high trust)
- Change this week: +20
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-16

## Components

- pypi · `mikrotik-rest-mcp-server`: 89/100 (this document), [markdown](https://verifymcp.io/servers/sogl-mikrotik-rest-mcp/mikrotik-rest-mcp-server.md), [page](https://verifymcp.io/servers/sogl-mikrotik-rest-mcp/mikrotik-rest-mcp-server)

## Channel facts

- Registry: `pypi`
- Package: `mikrotik-rest-mcp-server`
- Version: `0.1.2`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-16.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 0 of 28 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to Sogl/mikrotik-rest-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 11 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 82/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 8509 tokens (~123/item across 69 items; 63 tools + 6 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 47/100
  - Stability observed for 14 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 94/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 82% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 64 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the io.github.Sogl/mikrotik-rest-mcp server?

io.github.Sogl/mikrotik-rest-mcp runs locally as a PyPI package, launched with uvx mikrotik-rest-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add sogl-mikrotik-rest-mcp -- uvx mikrotik-rest-mcp-server
```

### Cursor

```json
{
  "mcpServers": {
    "sogl-mikrotik-rest-mcp": {
      "command": "uvx",
      "args": [
        "mikrotik-rest-mcp-server"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "sogl-mikrotik-rest-mcp": {
      "command": "uvx",
      "args": [
        "mikrotik-rest-mcp-server"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add sogl-mikrotik-rest-mcp -- uvx mikrotik-rest-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sogl-mikrotik-rest-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "mikrotik-rest-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add sogl-mikrotik-rest-mcp --command uvx --arg mikrotik-rest-mcp-server
```

### Hermes

```yaml
mcp_servers:
  sogl-mikrotik-rest-mcp:
    command: "uvx"
    args: ["mikrotik-rest-mcp-server"]
```

### Netclaw

```json
{
  "McpServers": {
    "sogl-mikrotik-rest-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "mikrotik-rest-mcp-server"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add sogl-mikrotik-rest-mcp -t stdio -c uvx -a mikrotik-rest-mcp-server
```

### Other

```json
{
  "mcpServers": {
    "sogl-mikrotik-rest-mcp": {
      "command": "uvx",
      "args": [
        "mikrotik-rest-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-16 (score 89, +1)

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

### 2026-10-14 (score 88, +16)

- [security improvement] Malware scan: unverified → pass

### 2026-10-12 (score 72, +3)

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

### 2026-10-06 (score 69, +1)

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

### 2026-10-04 (score 68, +1)

- [security regression] Tool safety: pass → unverified
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Stability: unverified → 0.07
- [functional] Package version: 0.1.1 → 0.1.2

### 2026-10-02 (score 67)

First indexed and scored.

## MCP tools (63)

### `get_containers` (~222 tokens)

List RouterOS containers with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_dhcp_leases` (~223 tokens)

List DHCP leases with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_dhcp_servers` (~222 tokens)

List DHCP servers with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_files` (~223 tokens)

List RouterOS files and directories with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_firewall_connections` (~222 tokens)

List firewall connections with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_filter_rules` (~222 tokens)

List firewall filter rules with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_nat_rules` (~221 tokens)

List NAT rules with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_mangle_rules` (~223 tokens)

List mangle rules with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_routes` (~219 tokens)

List routes with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_routing_rules` (~222 tokens)

List routing rules with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_routing_tables` (~222 tokens)

List routing tables with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_interfaces` (~219 tokens)

List interfaces with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_interface_lists` (~221 tokens)

List interface lists with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_veth_interfaces` (~223 tokens)

List veth interfaces with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_wifi_interfaces` (~222 tokens)

List Wi-Fi interfaces with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_wifi_registrations` (~226 tokens)

List Wi-Fi registration table entries with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_ip_addresses` (~221 tokens)

List IP addresses with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_arp` (~222 tokens)

List ARP entries with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_neighbors` (~220 tokens)

List neighbor entries with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_dns_cache` (~222 tokens)

List DNS cache entries with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_dns_static` (~222 tokens)

List static DNS records with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_address_lists` (~223 tokens)

List firewall address-list entries with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_wireguard_interfaces` (~223 tokens)

List WireGuard interfaces with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_scripts` (~220 tokens)

List system scripts with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_schedulers` (~221 tokens)

List schedulers with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_wireguard_peers` (~224 tokens)

List WireGuard peers with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_dns` (~14 tokens)

Get RouterOS DNS configuration.

### `get_system_identity` (~15 tokens)

Get RouterOS system identity.

### `get_system_clock` (~16 tokens)

Get RouterOS system clock settings.

### `get_system_health` (~16 tokens)

Get RouterOS system health summary.

### `get_system_logging` (~224 tokens)

List RouterOS system logging rules with optional client-side filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `get_system_resource` (~16 tokens)

Get RouterOS system resource summary.

### `get_logs` (~265 tokens)

List router log entries. Supports limit, contains, fields, sort_by plus log-oriented filters.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `since` (string): Keep log entries with time >= this RouterOS timestamp string.
- `sort_by` (string): Sort by a field name after filtering.
- `topics` (array): Keep entries whose topics string contains all of these fragments.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `run_ping` (~59 tokens)

Run a bounded RouterOS ping diagnostic via POST /rest/ping.

Input parameters:

- `address` (string, required)
- `count` (integer)
- `interface` (string)
- `src_address` (string)
- `vrf` (string)

### `run_traceroute` (~81 tokens)

Run a bounded RouterOS traceroute diagnostic via POST /rest/tool/traceroute.

Input parameters:

- `address` (string, required)
- `count` (integer)
- `interface` (string)
- `max_hops` (integer)
- `src_address` (string)
- `use_dns` (boolean)
- `vrf` (string)

### `run_fetch` (~60 tokens)

Run a bounded RouterOS fetch diagnostic with as-value output and no file writes.

Input parameters:

- `address` (string)
- `host` (string)
- `http_method` (string)
- `output` (string)
- `url` (string, required)

### `run_wifi_monitor` (~38 tokens)

Run a one-shot RouterOS Wi-Fi monitor for an interface via POST /rest/interface/wifi/monitor.

Input parameters:

- `interface` (string, required)

### `read_file` (~51 tokens)

Read a RouterOS file chunk via /rest/file/read and return base64 plus text preview when possible.

Input parameters:

- `chunk_size` (integer)
- `file` (string, required)
- `offset` (integer)

### `download_file` (~67 tokens)

Download a RouterOS file to a local path on this computer using repeated /rest/file/read chunks.

Input parameters:

- `chunk_size` (integer)
- `file` (string, required)
- `local_path` (string, required)
- `overwrite` (boolean): Replace an existing local file (default: refuse).

### `create_file` (~35 tokens)

Create a small RouterOS text file via PUT /rest/file.

Input parameters:

- `contents` (string, required)
- `name` (string, required)

### `update_file` (~38 tokens)

Update contents of a small RouterOS text file via POST /rest/file/set.

Input parameters:

- `contents` (string, required)
- `name` (string, required)

### `rename_file` (~37 tokens)

Rename a RouterOS file or directory via POST /rest/file/set.

Input parameters:

- `name` (string, required)
- `new_name` (string, required)

### `delete_file` (~46 tokens)

Delete a RouterOS file or directory via POST /rest/file/remove.

Input parameters:

- `confirm` (boolean): Set true only after the user explicitly approves this deletion.
- `name` (string, required)

### `upload_file` (~42 tokens)

Upload a small local UTF-8 text file to RouterOS via PUT /rest/file.

Input parameters:

- `local_path` (string, required)
- `remote_name` (string, required)

### `save_backup` (~49 tokens)

Create a RouterOS binary backup file on the router via POST /rest/system/backup/save.

Input parameters:

- `dont_encrypt` (boolean)
- `name` (string, required)
- `password` (string)

### `save_export` (~60 tokens)

Create a RouterOS text export file on the router via POST /rest/export.

Input parameters:

- `compact` (boolean)
- `file` (string, required)
- `show_sensitive` (boolean)
- `terse` (boolean)
- `verbose` (boolean)

### `routeros_get` (~236 tokens)

GET a RouterOS REST path starting with /rest/, then optionally filter the result.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `descending` (boolean): Reverse sort order when sort_by is set.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `limit` (integer): Limit returned items after filtering and sorting.
- `path` (string, required)
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `routeros_write` (~77 tokens)

Mutate a whitelisted RouterOS REST path using POST, PUT, PATCH or DELETE.

Input parameters:

- `confirm` (boolean): Set true only after the user explicitly approves a destructive/disruptive operation.
- `data` (object|array|string|number|boolean|null)
- `method` (string, required)
- `path` (string, required)

### `patch_resource_by_id` (~66 tokens)

PATCH a whitelisted RouterOS collection item by .id.

Input parameters:

- `collection_path` (string, required)
- `confirm` (boolean): Set true only after the user explicitly approves a destructive/disruptive operation.
- `data` (object, required)
- `item_id` (string, required)

### `flush_dns_cache` (~32 tokens)

Flush MikroTik DNS cache.

Input parameters:

- `confirm` (boolean): Set true only after the user explicitly approves this operation.

### `run_script` (~47 tokens)

Run RouterOS system script by name using /rest/system/script/run.

Input parameters:

- `confirm` (boolean): Set true only after the user explicitly approves running this script.
- `name` (string, required)

### `container_shell` (~68 tokens)

Execute a shell command inside a RouterOS container by .id or name.

Input parameters:

- `cmd` (string, required)
- `container` (string, required): Container name or .id
- `timeout_seconds` (number): Override REST request timeout for long-running commands (default MIKROTIK_TIMEOUT=10s).

### `apply_safe` (~105 tokens)

Apply a whitelisted mutation with automatic timed rollback. Snapshots the target, applies the change, and auto-reverts after window_seconds unless commit_safe is called. Rollback runs via an on-router scheduler when possible, else an in-process timer.

Input parameters:

- `data` (object)
- `method` (string, required)
- `path` (string, required): Item path for PATCH/DELETE (/rest/<coll>/<.id>), collection path for PUT
- `window_seconds` (integer)

### `container_apply_safe` (~151 tokens)

Run a shell command inside a RouterOS container with snapshot + timed rollback. Copies snapshot_paths aside, runs cmd, optionally runs check_cmd (auto-rollback on non-zero), then arms an in-container watchdog that restores the snapshot after window_seconds unless container_commit_safe is called.

Input parameters:

- `check_cmd` (string): Validation command; non-zero exit triggers immediate rollback
- `cmd` (string, required): Mutation command to run
- `container` (string, required): Container name or .id
- `rollback_cmd` (string): Extra command appended to rollback (e.g. restart the service)
- `snapshot_paths` (array): Files/dirs inside the container to back up before cmd
- `window_seconds` (integer)

### `container_commit_safe` (~34 tokens)

Commit a change made via container_apply_safe, disarming its in-container rollback watchdog.

Input parameters:

- `pending_id` (string, required)

### `routeros_batch` (~47 tokens)

Run up to 16 RouterOS GETs in parallel. Each request accepts the same filters as routeros_get (where/fields/limit/compact).

Input parameters:

- `requests` (array, required)

### `describe_path` (~48 tokens)

Introspect a REST path: fetch up to N items and report their field names plus a sample. Useful before writing filters.

Input parameters:

- `path` (string, required)
- `sample` (integer)

### `interface_traffic` (~48 tokens)

Measure live rx/tx bitrate and packet rate of an interface over a short sampling window (0.5-10s).

Input parameters:

- `name` (string, required)
- `seconds` (number)

### `routeros_watch` (~285 tokens)

Sample a REST path N times with an interval; optionally report per-item deltas of numeric fields (diff=true). Useful for watching counters, traffic, registrations.

Input parameters:

- `compact` (boolean): Emit compact single-line JSON per item instead of pretty-printed output.
- `contains` (string): Case-insensitive substring search across the rendered item.
- `count` (integer)
- `descending` (boolean): Reverse sort order when sort_by is set.
- `diff` (boolean): Report field deltas between first and last sample instead of raw samples.
- `fields` (array): Client-side field projection applied after any RouterOS .proplist request.
- `interval` (number)
- `limit` (integer): Limit returned items after filtering and sorting.
- `path` (string, required)
- `proplist`: Optional RouterOS .proplist for server-side property selection on POST .../print.
- `query_words` (array): Optional RouterOS .query stack for server-side filtering on POST .../print.
- `sort_by` (string): Sort by a field name after filtering.
- `where` (object): Client-side filters applied after any RouterOS .query/.proplist request. Exact match by field, or use suffixes __contains / __in / __not / __startswith / __endswith / __gt / __gte / __lt / __lte.

### `run_script_inline` (~67 tokens)

Create a temporary RouterOS script, execute it, and remove it. Requires a policy-capable user (yolo mode); always asks for confirmation in careful mode.

Input parameters:

- `confirm` (boolean): Set true only after the user explicitly approves executing this script.
- `script` (string, required)

### `commit_safe` (~29 tokens)

Commit a change made via apply_safe, cancelling its automatic rollback.

Input parameters:

- `pending_id` (string, required)

### `catalog_search` (~55 tokens)

Search the RouterOS endpoint catalog by substring; returns callable get_<name> aliases and their /rest paths.

Input parameters:

- `query` (string, required): Substring matched against catalog names and paths (e.g. 'wireguard', 'route').

### `safe_status` (~18 tokens)

List pending apply_safe operations and their rollback state.

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/sogl-mikrotik-rest-mcp/mikrotik-rest-mcp-server#diagnostics

## Score history

- 2026-10-16: 89
- 2026-10-15: 88
- 2026-10-14: 88
- 2026-10-13: 72
- 2026-10-12: 72
- 2026-10-06: 69
- 2026-10-04: 68
- 2026-10-03: 67
- 2026-10-02: 67

## Common questions

### What is the io.github.Sogl/mikrotik-rest-mcp server?

io.github.Sogl/mikrotik-rest-mcp is listed in the public MCP registry as io.github.Sogl/mikrotik-rest-mcp. MikroTik RouterOS 7 REST MCP: filtered reads, guarded writes, timed rollback. This page covers its PyPI package (mikrotik-rest-mcp-server).

### Is the io.github.Sogl/mikrotik-rest-mcp server safe to use?

io.github.Sogl/mikrotik-rest-mcp scores 89 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 16 October 2026. 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 io.github.Sogl/mikrotik-rest-mcp server expose?

io.github.Sogl/mikrotik-rest-mcp exposes 63 tools: get_containers, get_dhcp_leases, get_dhcp_servers, get_files, get_firewall_connections, and 58 more. Their descriptions and schemas cost roughly 8,412 tokens of context every time the server is loaded.

### Is the io.github.Sogl/mikrotik-rest-mcp server still maintained?

io.github.Sogl/mikrotik-rest-mcp is still listed as active in the MCP registry. We last reached this channel on 16 October 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 io.github.Sogl/mikrotik-rest-mcp server under?

io.github.Sogl/mikrotik-rest-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/mikrotik-rest-mcp-server/
- Socket report: https://socket.dev/pypi/package/mikrotik-rest-mcp-server
- Repository: https://github.com/Sogl/mikrotik-rest-mcp
- Changelog RSS feed: https://verifymcp.io/servers/sogl-mikrotik-rest-mcp/mikrotik-rest-mcp-server.xml
- Changelog JSON feed: https://verifymcp.io/servers/sogl-mikrotik-rest-mcp/mikrotik-rest-mcp-server.json
- HTML version of this page: https://verifymcp.io/servers/sogl-mikrotik-rest-mcp/mikrotik-rest-mcp-server
