@usex/mikrotik-mcp 3.2.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "version": "2.5.0",
3
+ "version": "3.3.0",
4
4
  "generated": "by scripts/gen-schemas.ts — do not edit by hand",
5
- "toolCount": 664,
5
+ "toolCount": 670,
6
6
  "tools": [
7
7
  {
8
8
  "name": "list_interfaces",
@@ -2089,7 +2089,7 @@
2089
2089
  "destructiveHint": false,
2090
2090
  "openWorldHint": false
2091
2091
  },
2092
- "description": "Adds an IPv4 static route (`/ip route add`) to the routing table — use this to define any non-default unicast next-hop (host, subnet, or summarized prefix). For the 0.0.0.0/0 default gateway use add_default_route; for null/drop routes use add_blackhole_route; for IPv6 use add_ipv6_route. `distance` sets priority (1–255, lower wins); `routing_mark` assigns the route to a policy-routing table; `check_gateway` (\"ping\" or \"arp\") enables active gateway monitoring. Returns the created route's detail including its `.id`.",
2092
+ "description": "Adds an IPv4 static route (`/ip route add`) to the routing table — use this to define any non-default unicast next-hop (host, subnet, or summarized prefix). For the 0.0.0.0/0 default gateway use add_default_route; for null/drop routes use add_blackhole_route; for IPv6 use add_ipv6_route. `distance` sets priority (1–255, lower wins); `routing_table` assigns the route to a policy-routing table (must already exist — see add_routing_table); `check_gateway` (\"ping\" or \"arp\") enables active gateway monitoring. Returns the created route's detail including its `.id`.",
2093
2093
  "inputSchema": {
2094
2094
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2095
2095
  "type": "object",
@@ -2117,7 +2117,12 @@
2117
2117
  "minimum": -9007199254740991,
2118
2118
  "maximum": 9007199254740991
2119
2119
  },
2120
+ "routing_table": {
2121
+ "description": "Policy-routing table name, e.g. \"main\" or a custom table (RouterOS v7)",
2122
+ "type": "string"
2123
+ },
2120
2124
  "routing_mark": {
2125
+ "description": "Deprecated alias for routing_table (RouterOS v6 name)",
2121
2126
  "type": "string"
2122
2127
  },
2123
2128
  "comment": {
@@ -2151,7 +2156,7 @@
2151
2156
  "idempotentHint": true,
2152
2157
  "openWorldHint": false
2153
2158
  },
2154
- "description": "Lists IPv4 routes from `/ip route` with optional filters — the primary tool for inspecting what routes the router knows. `dst_filter` and `gateway_filter` do substring matching; `routing_mark_filter` and `distance_filter` do exact matching; `active_only`/`disabled_only`/`dynamic_only`/`static_only` are boolean flags. For a table-scoped view of active routes use get_routing_table; for counts and summary stats use get_route_statistics; for IPv6 use list_ipv6_routes. Returns all matching route entries.",
2159
+ "description": "Lists IPv4 routes from `/ip route` with optional filters — the primary tool for inspecting what routes the router knows. `dst_filter` and `gateway_filter` do substring matching; `routing_table_filter` and `distance_filter` do exact matching; `active_only`/`disabled_only`/`dynamic_only`/`static_only` are boolean flags. For a table-scoped view of active routes use get_routing_table; for counts and summary stats use get_route_statistics; for IPv6 use list_ipv6_routes. Returns all matching route entries.",
2155
2160
  "inputSchema": {
2156
2161
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2157
2162
  "type": "object",
@@ -2162,7 +2167,12 @@
2162
2167
  "gateway_filter": {
2163
2168
  "type": "string"
2164
2169
  },
2170
+ "routing_table_filter": {
2171
+ "description": "Exact policy-routing table name (RouterOS v7)",
2172
+ "type": "string"
2173
+ },
2165
2174
  "routing_mark_filter": {
2175
+ "description": "Deprecated alias for routing_table_filter",
2166
2176
  "type": "string"
2167
2177
  },
2168
2178
  "distance_filter": {
@@ -2223,7 +2233,7 @@
2223
2233
  "idempotentHint": true,
2224
2234
  "openWorldHint": false
2225
2235
  },
2226
- "description": "Modifies an existing IPv4 static route (`/ip route set`) — change its gateway, dst-address, distance, scope, routing-mark, VRF interface, preferred-source, or gateway check method. `route_id` is the `*N` `.id` from list_routes. Pass an empty string (\"\") for `routing_mark`, `vrf_interface`, or `pref_src` to clear those fields. For toggling active state without editing attributes use enable_route / disable_route. Returns the updated route detail.",
2236
+ "description": "Modifies an existing IPv4 static route (`/ip route set`) — change its gateway, dst-address, distance, scope, routing-table, VRF interface, preferred-source, or gateway check method. `route_id` is the `*N` `.id` from list_routes. Pass an empty string (\"\") for `routing_table`, `vrf_interface`, or `pref_src` to clear those fields. For toggling active state without editing attributes use enable_route / disable_route. Returns the updated route detail.",
2227
2237
  "inputSchema": {
2228
2238
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2229
2239
  "type": "object",
@@ -2255,7 +2265,12 @@
2255
2265
  "minimum": -9007199254740991,
2256
2266
  "maximum": 9007199254740991
2257
2267
  },
2268
+ "routing_table": {
2269
+ "description": "Policy-routing table name (RouterOS v7); \"\" clears it",
2270
+ "type": "string"
2271
+ },
2258
2272
  "routing_mark": {
2273
+ "description": "Deprecated alias for routing_table (RouterOS v6 name)",
2259
2274
  "type": "string"
2260
2275
  },
2261
2276
  "comment": {
@@ -12830,7 +12845,7 @@
12830
12845
  "destructiveHint": false,
12831
12846
  "openWorldHint": false
12832
12847
  },
12833
- "description": "Create an outbound SSTP client tunnel interface (`/interface sstp-client add`) so this router dials out to a remote SSTP server over TLS. Use when this device must act as a VPN client, not the VPN server — for server-side settings use `set_sstp_server`. `connect_to` is the remote host:port or IP address. For L2TP outbound tunnels use `create_l2tp_client`, for OpenVPN use `create_ovpn_client`, for PPTP use `create_pptp_client`. Credentials are accepted but redacted from return values. Returns the created interface detail (name, status, remote address); use the interface `name` with `get_sstp_client` or `remove_sstp_client`.",
12848
+ "description": "Create an outbound SSTP client tunnel interface (`/interface sstp-client add`) so this router dials out to a remote SSTP server over TLS. Use when this device must act as a VPN client, not the VPN server — for server-side settings use `set_sstp_server`. `connect_to` is the remote server address (IP or DNS name); the TCP port is separate. You may pass the port in `port` or inline as `host:port` in `connect_to` (it is split out automatically — RouterOS rejects a port embedded in connect-to). SSTP defaults to 443. For L2TP outbound tunnels use `create_l2tp_client`, for OpenVPN use `create_ovpn_client`, for PPTP use `create_pptp_client`. Credentials are accepted but redacted from return values. Returns the created interface detail (name, status, remote address); use the interface `name` with `get_sstp_client` or `remove_sstp_client`.",
12834
12849
  "inputSchema": {
12835
12850
  "$schema": "https://json-schema.org/draft/2020-12/schema",
12836
12851
  "type": "object",
@@ -12841,7 +12856,13 @@
12841
12856
  },
12842
12857
  "connect_to": {
12843
12858
  "type": "string",
12844
- "description": "Remote SSTP server address (host:port or IP)"
12859
+ "description": "Remote SSTP server address (IP or DNS name; host:port also accepted)"
12860
+ },
12861
+ "port": {
12862
+ "description": "TCP port (default 443 if omitted)",
12863
+ "type": "integer",
12864
+ "minimum": -9007199254740991,
12865
+ "maximum": 9007199254740991
12845
12866
  },
12846
12867
  "user": {
12847
12868
  "type": "string"
@@ -19814,6 +19835,150 @@
19814
19835
  "additionalProperties": false
19815
19836
  }
19816
19837
  },
19838
+ {
19839
+ "name": "create_local_backup",
19840
+ "title": "Create Local Config Backup (host vault)",
19841
+ "risk": "write",
19842
+ "annotations": {
19843
+ "destructiveHint": false,
19844
+ "openWorldHint": false
19845
+ },
19846
+ "description": "Captures the device's full configuration with `/export` and saves it as a timestamped plain-text `.rsc` file in the MCP server's LOCAL backup vault (default `~/.mikrotik-mcp/backups/`, override with the `MIKROTIK_BACKUP_DIR` env var) — NOT on the device and NOT in S3. The filename is `<device>_<date_time>.rsc` stamped in the device's local clock (24-hour; Jalali for the Tehran timezone, Gregorian otherwise). This is a host-side, human-readable, diffable copy you can restore later with restore_local_backup. Compare: create_backup makes a binary `/system backup` file ON the device; capture_config_snapshot stores an export in the local snapshot database; upload_backup_to_s3 pushes to S3. show_sensitive=true includes secrets (keys/passwords) in the export. Returns the saved filename, byte size and vault path.",
19847
+ "inputSchema": {
19848
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
19849
+ "type": "object",
19850
+ "properties": {
19851
+ "label": {
19852
+ "description": "Optional label appended to the filename, e.g. \"pre-upgrade\".",
19853
+ "type": "string"
19854
+ },
19855
+ "show_sensitive": {
19856
+ "default": false,
19857
+ "description": "Include secrets (keys/passwords) in the export. Default false.",
19858
+ "type": "boolean"
19859
+ }
19860
+ },
19861
+ "required": ["show_sensitive"],
19862
+ "additionalProperties": false
19863
+ }
19864
+ },
19865
+ {
19866
+ "name": "list_local_backups",
19867
+ "title": "List Local Config Backups (host vault)",
19868
+ "risk": "read",
19869
+ "annotations": {
19870
+ "readOnlyHint": true,
19871
+ "idempotentHint": true,
19872
+ "openWorldHint": false
19873
+ },
19874
+ "description": "Lists the `/export` config backups stored in the MCP server's LOCAL backup vault (`~/.mikrotik-mcp/backups/` or `MIKROTIK_BACKUP_DIR`) — each with its filename, source device, byte size and capture time, newest first. These are host-side text backups created by create_local_backup, distinct from list_backups (binary `.backup` files ON the device) and list_s3_backups (objects in an S3 bucket). Use a returned filename with get_local_backup, restore_local_backup, rename_local_backup or delete_local_backup.",
19875
+ "inputSchema": {
19876
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
19877
+ "type": "object",
19878
+ "properties": {},
19879
+ "additionalProperties": false
19880
+ }
19881
+ },
19882
+ {
19883
+ "name": "get_local_backup",
19884
+ "title": "Get Local Config Backup Contents (host vault)",
19885
+ "risk": "read",
19886
+ "annotations": {
19887
+ "readOnlyHint": true,
19888
+ "idempotentHint": true,
19889
+ "openWorldHint": false
19890
+ },
19891
+ "description": "Returns the full `/export` `.rsc` text of one backup in the MCP server's LOCAL vault, by filename (get the name from list_local_backups). This is the exact configuration script that restore_local_backup would replay onto a device — useful for reviewing or diffing a saved config before restoring. Returns a 'not found' message if the filename doesn't exist. `name` is the exact filename from list_local_backups.",
19892
+ "inputSchema": {
19893
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
19894
+ "type": "object",
19895
+ "properties": {
19896
+ "name": {
19897
+ "type": "string",
19898
+ "description": "Backup filename, e.g. 'edge_2026-06-25_1430.rsc'."
19899
+ }
19900
+ },
19901
+ "required": ["name"],
19902
+ "additionalProperties": false
19903
+ }
19904
+ },
19905
+ {
19906
+ "name": "rename_local_backup",
19907
+ "title": "Rename Local Config Backup (host vault)",
19908
+ "risk": "write-idempotent",
19909
+ "annotations": {
19910
+ "destructiveHint": false,
19911
+ "idempotentHint": true,
19912
+ "openWorldHint": false
19913
+ },
19914
+ "description": "Renames a backup file in the MCP server's LOCAL vault (e.g. to label it 'pre-upgrade' or 'golden'). Forces an `.rsc` extension and refuses if the target name already exists. Host-side only — it does NOT touch the device or S3. `name` is the current filename (from list_local_backups); `new_name` is the desired filename. Returns the new filename.",
19915
+ "inputSchema": {
19916
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
19917
+ "type": "object",
19918
+ "properties": {
19919
+ "name": {
19920
+ "type": "string",
19921
+ "description": "Current backup filename."
19922
+ },
19923
+ "new_name": {
19924
+ "type": "string",
19925
+ "description": "Desired filename (an `.rsc` suffix is added if missing)."
19926
+ }
19927
+ },
19928
+ "required": ["name", "new_name"],
19929
+ "additionalProperties": false
19930
+ }
19931
+ },
19932
+ {
19933
+ "name": "delete_local_backup",
19934
+ "title": "Delete Local Config Backup (host vault)",
19935
+ "risk": "destructive",
19936
+ "annotations": {
19937
+ "destructiveHint": true,
19938
+ "idempotentHint": true,
19939
+ "openWorldHint": false
19940
+ },
19941
+ "description": "Permanently deletes one backup file from the MCP server's LOCAL vault by filename. This removes only the host-side copy — it does NOT touch the device's configuration, its on-device `.backup` files, or any S3 object. Use list_local_backups to find the name; for deleting an S3 object use delete_s3_backup instead. Returns a 'not found' message if the filename doesn't exist.",
19942
+ "inputSchema": {
19943
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
19944
+ "type": "object",
19945
+ "properties": {
19946
+ "name": {
19947
+ "type": "string",
19948
+ "description": "Backup filename to delete."
19949
+ }
19950
+ },
19951
+ "required": ["name"],
19952
+ "additionalProperties": false
19953
+ }
19954
+ },
19955
+ {
19956
+ "name": "restore_local_backup",
19957
+ "title": "Restore Local Config Backup to Device (Safe Mode)",
19958
+ "risk": "dangerous",
19959
+ "annotations": {
19960
+ "destructiveHint": true,
19961
+ "openWorldHint": false
19962
+ },
19963
+ "description": "Replays a LOCAL vault backup's `/export` configuration onto a device INSIDE RouterOS Safe Mode — every command is held in memory and AUTO-REVERTS if the SSH session drops, so a change that would lock you out is undone instead of sticking. With confirm=false (default) it applies the whole config, then rolls it all back — a true dry-run that proves the restore runs cleanly. With confirm=true it commits, but ONLY after verifying the device still answers. Because a `/export` is additive, restoring onto an already-configured device LAYERS the saved config on top (duplicate rules are possible) — it is cleanest on a freshly reset device. Requires SSH (Safe Mode is not available on MAC-Telnet devices). Alternatives: import_configuration runs a `.rsc` already ON the device; restore_backup loads a binary `.backup` (and reboots). `name` is the filename from list_local_backups.",
19964
+ "inputSchema": {
19965
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
19966
+ "type": "object",
19967
+ "properties": {
19968
+ "name": {
19969
+ "type": "string",
19970
+ "description": "Backup filename to restore (from list_local_backups)."
19971
+ },
19972
+ "confirm": {
19973
+ "default": false,
19974
+ "description": "false = apply, then roll back (dry-run). true = commit if still reachable.",
19975
+ "type": "boolean"
19976
+ }
19977
+ },
19978
+ "required": ["name", "confirm"],
19979
+ "additionalProperties": false
19980
+ }
19981
+ },
19817
19982
  {
19818
19983
  "name": "list_disks",
19819
19984
  "title": "List All Attached Disks",
@@ -26,7 +26,12 @@
26
26
  "minimum": -9007199254740991,
27
27
  "maximum": 9007199254740991
28
28
  },
29
+ "routing_table": {
30
+ "description": "Policy-routing table name, e.g. \"main\" or a custom table (RouterOS v7)",
31
+ "type": "string"
32
+ },
29
33
  "routing_mark": {
34
+ "description": "Deprecated alias for routing_table (RouterOS v6 name)",
30
35
  "type": "string"
31
36
  },
32
37
  "comment": {
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "create_local_backup",
4
+ "type": "object",
5
+ "properties": {
6
+ "label": {
7
+ "description": "Optional label appended to the filename, e.g. \"pre-upgrade\".",
8
+ "type": "string"
9
+ },
10
+ "show_sensitive": {
11
+ "default": false,
12
+ "description": "Include secrets (keys/passwords) in the export. Default false.",
13
+ "type": "boolean"
14
+ }
15
+ },
16
+ "required": ["show_sensitive"],
17
+ "additionalProperties": false
18
+ }
@@ -9,7 +9,13 @@
9
9
  },
10
10
  "connect_to": {
11
11
  "type": "string",
12
- "description": "Remote SSTP server address (host:port or IP)"
12
+ "description": "Remote SSTP server address (IP or DNS name; host:port also accepted)"
13
+ },
14
+ "port": {
15
+ "description": "TCP port (default 443 if omitted)",
16
+ "type": "integer",
17
+ "minimum": -9007199254740991,
18
+ "maximum": 9007199254740991
13
19
  },
14
20
  "user": {
15
21
  "type": "string"
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "delete_local_backup",
4
+ "type": "object",
5
+ "properties": {
6
+ "name": {
7
+ "type": "string",
8
+ "description": "Backup filename to delete."
9
+ }
10
+ },
11
+ "required": ["name"],
12
+ "additionalProperties": false
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "get_local_backup",
4
+ "type": "object",
5
+ "properties": {
6
+ "name": {
7
+ "type": "string",
8
+ "description": "Backup filename, e.g. 'edge_2026-06-25_1430.rsc'."
9
+ }
10
+ },
11
+ "required": ["name"],
12
+ "additionalProperties": false
13
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "list_local_backups",
4
+ "type": "object",
5
+ "properties": {},
6
+ "additionalProperties": false
7
+ }
@@ -9,7 +9,12 @@
9
9
  "gateway_filter": {
10
10
  "type": "string"
11
11
  },
12
+ "routing_table_filter": {
13
+ "description": "Exact policy-routing table name (RouterOS v7)",
14
+ "type": "string"
15
+ },
12
16
  "routing_mark_filter": {
17
+ "description": "Deprecated alias for routing_table_filter",
13
18
  "type": "string"
14
19
  },
15
20
  "distance_filter": {
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "rename_local_backup",
4
+ "type": "object",
5
+ "properties": {
6
+ "name": {
7
+ "type": "string",
8
+ "description": "Current backup filename."
9
+ },
10
+ "new_name": {
11
+ "type": "string",
12
+ "description": "Desired filename (an `.rsc` suffix is added if missing)."
13
+ }
14
+ },
15
+ "required": ["name", "new_name"],
16
+ "additionalProperties": false
17
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "restore_local_backup",
4
+ "type": "object",
5
+ "properties": {
6
+ "name": {
7
+ "type": "string",
8
+ "description": "Backup filename to restore (from list_local_backups)."
9
+ },
10
+ "confirm": {
11
+ "default": false,
12
+ "description": "false = apply, then roll back (dry-run). true = commit if still reachable.",
13
+ "type": "boolean"
14
+ }
15
+ },
16
+ "required": ["name", "confirm"],
17
+ "additionalProperties": false
18
+ }
@@ -30,7 +30,12 @@
30
30
  "minimum": -9007199254740991,
31
31
  "maximum": 9007199254740991
32
32
  },
33
+ "routing_table": {
34
+ "description": "Policy-routing table name (RouterOS v7); \"\" clears it",
35
+ "type": "string"
36
+ },
33
37
  "routing_mark": {
38
+ "description": "Deprecated alias for routing_table (RouterOS v6 name)",
34
39
  "type": "string"
35
40
  },
36
41
  "comment": {