@usex/mikrotik-mcp 3.5.0 → 3.7.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.
Files changed (42) hide show
  1. package/dist/cli.js +4027 -2098
  2. package/dist/index.js +4023 -2094
  3. package/dist/ui/observability.html +2 -2
  4. package/package.json +1 -1
  5. package/schemas/README.md +1 -1
  6. package/schemas/tool-catalog.json +1539 -159
  7. package/schemas/tools/add_dhcp_client.json +33 -0
  8. package/schemas/tools/apply_traffic_shaping.json +48 -0
  9. package/schemas/tools/audit_certificate_expiry.json +16 -0
  10. package/schemas/tools/audit_firewall_hardening.json +7 -0
  11. package/schemas/tools/build_guest_hotspot.json +48 -0
  12. package/schemas/tools/build_wireguard_mesh.json +79 -0
  13. package/schemas/tools/design_network_segment.json +65 -0
  14. package/schemas/tools/force_cloud_update.json +7 -0
  15. package/schemas/tools/forecast_link_saturation.json +23 -0
  16. package/schemas/tools/forward_port.json +45 -0
  17. package/schemas/tools/generate_hotspot_vouchers.json +33 -0
  18. package/schemas/tools/get_dhcp_client.json +13 -0
  19. package/schemas/tools/get_ip_cloud.json +7 -0
  20. package/schemas/tools/harden_firewall.json +104 -0
  21. package/schemas/tools/list_dhcp_clients.json +12 -0
  22. package/schemas/tools/onboard_wireguard_user.json +39 -0
  23. package/schemas/tools/remove_dhcp_client.json +12 -0
  24. package/schemas/tools/remove_firewall_hardening.json +7 -0
  25. package/schemas/tools/remove_threat_feed.json +13 -0
  26. package/schemas/tools/remove_time_policy.json +13 -0
  27. package/schemas/tools/renew_dhcp_client.json +17 -0
  28. package/schemas/tools/request_letsencrypt_certificate.json +13 -0
  29. package/schemas/tools/revoke_wireguard_user.json +13 -0
  30. package/schemas/tools/run_failover_drill.json +33 -0
  31. package/schemas/tools/set_dhcp_client.json +24 -0
  32. package/schemas/tools/set_ip_cloud.json +16 -0
  33. package/schemas/tools/set_ip_cloud_advanced.json +13 -0
  34. package/schemas/tools/set_time_policy.json +47 -0
  35. package/schemas/tools/setup_port_knock.json +39 -0
  36. package/schemas/tools/setup_wan_failover.json +36 -0
  37. package/schemas/tools/setup_wan_loadbalance.json +32 -0
  38. package/schemas/tools/subscribe_threat_feed.json +37 -0
  39. package/schemas/tools/test_ssh_from_device.json +28 -0
  40. package/schemas/tools/test_ssh_to_device.json +7 -0
  41. package/schemas/tools/test_ssh_to_host.json +38 -0
  42. package/schemas/tools/tune_wifi_channel.json +23 -0
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "add_dhcp_client",
4
+ "type": "object",
5
+ "properties": {
6
+ "interface": {
7
+ "type": "string",
8
+ "description": "Interface to run the DHCP client on, e.g. 'ether1'"
9
+ },
10
+ "add_default_route": {
11
+ "default": true,
12
+ "description": "Install the received default gateway",
13
+ "type": "boolean"
14
+ },
15
+ "use_peer_dns": {
16
+ "default": true,
17
+ "type": "boolean"
18
+ },
19
+ "use_peer_ntp": {
20
+ "default": true,
21
+ "type": "boolean"
22
+ },
23
+ "disabled": {
24
+ "default": false,
25
+ "type": "boolean"
26
+ },
27
+ "comment": {
28
+ "type": "string"
29
+ }
30
+ },
31
+ "required": ["interface", "add_default_route", "use_peer_dns", "use_peer_ntp", "disabled"],
32
+ "additionalProperties": false
33
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "apply_traffic_shaping",
4
+ "type": "object",
5
+ "properties": {
6
+ "classes": {
7
+ "minItems": 1,
8
+ "type": "array",
9
+ "items": {
10
+ "type": "object",
11
+ "properties": {
12
+ "name": {
13
+ "type": "string",
14
+ "description": "Queue name, e.g. 'voip' or 'guest-cap'"
15
+ },
16
+ "target": {
17
+ "type": "string",
18
+ "description": "Target address/subnet this class applies to, e.g. '192.168.20.0/24'"
19
+ },
20
+ "max_limit": {
21
+ "type": "string",
22
+ "description": "RouterOS max-limit as 'upload/download', e.g. '10M/10M' (or a single value)"
23
+ },
24
+ "priority": {
25
+ "default": 8,
26
+ "description": "1 (highest) … 8 (lowest); lower number wins under contention",
27
+ "type": "integer",
28
+ "minimum": 1,
29
+ "maximum": 8
30
+ },
31
+ "comment": {
32
+ "type": "string"
33
+ }
34
+ },
35
+ "required": ["name", "target", "max_limit", "priority"],
36
+ "additionalProperties": false
37
+ },
38
+ "description": "Shaping classes to create, in priority order"
39
+ },
40
+ "apply": {
41
+ "default": false,
42
+ "description": "false = preview the commands only (default); true = create the queues",
43
+ "type": "boolean"
44
+ }
45
+ },
46
+ "required": ["classes", "apply"],
47
+ "additionalProperties": false
48
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "audit_certificate_expiry",
4
+ "type": "object",
5
+ "properties": {
6
+ "warn_within_days": {
7
+ "default": 30,
8
+ "description": "Flag certificates expiring within this many days as 'expiring soon'",
9
+ "type": "integer",
10
+ "minimum": -9007199254740991,
11
+ "maximum": 9007199254740991
12
+ }
13
+ },
14
+ "required": ["warn_within_days"],
15
+ "additionalProperties": false
16
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "audit_firewall_hardening",
4
+ "type": "object",
5
+ "properties": {},
6
+ "additionalProperties": false
7
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "build_guest_hotspot",
4
+ "type": "object",
5
+ "properties": {
6
+ "interface": {
7
+ "type": "string",
8
+ "description": "Interface/bridge the hotspot runs on, e.g. 'guest-bridge'"
9
+ },
10
+ "subnet": {
11
+ "default": "10.5.50.0/24",
12
+ "description": "Hotspot subnet",
13
+ "type": "string"
14
+ },
15
+ "gateway": {
16
+ "default": "10.5.50.1",
17
+ "description": "Router address in the hotspot subnet",
18
+ "type": "string"
19
+ },
20
+ "pool_range": {
21
+ "description": "DHCP/hotspot pool; defaults to .10–.254",
22
+ "type": "string"
23
+ },
24
+ "dns_name": {
25
+ "description": "Captive-portal hostname, e.g. 'guest.wifi'",
26
+ "type": "string"
27
+ },
28
+ "rate_limit": {
29
+ "default": "5M/5M",
30
+ "description": "Per-guest max-limit (rx/tx)",
31
+ "type": "string"
32
+ },
33
+ "walled_garden": {
34
+ "description": "Domains reachable before sign-in, e.g. ['*.stripe.com']",
35
+ "type": "array",
36
+ "items": {
37
+ "type": "string"
38
+ }
39
+ },
40
+ "apply": {
41
+ "default": false,
42
+ "description": "false = preview (default); true = build",
43
+ "type": "boolean"
44
+ }
45
+ },
46
+ "required": ["interface", "subnet", "gateway", "rate_limit", "apply"],
47
+ "additionalProperties": false
48
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "build_wireguard_mesh",
4
+ "type": "object",
5
+ "properties": {
6
+ "devices": {
7
+ "minItems": 2,
8
+ "type": "array",
9
+ "items": {
10
+ "type": "string"
11
+ },
12
+ "description": "Configured device names to include in the mesh (2+)"
13
+ },
14
+ "address_prefix": {
15
+ "default": "10.20.0.0/24",
16
+ "description": "Mesh subnet; each device gets <prefix>.<index+1> on its WireGuard interface",
17
+ "type": "string"
18
+ },
19
+ "interface": {
20
+ "default": "wg-mesh",
21
+ "description": "WireGuard interface name to create/use",
22
+ "type": "string"
23
+ },
24
+ "listen_port": {
25
+ "default": 13231,
26
+ "type": "integer",
27
+ "minimum": -9007199254740991,
28
+ "maximum": 9007199254740991
29
+ },
30
+ "topology": {
31
+ "default": "full-mesh",
32
+ "type": "string",
33
+ "enum": ["full-mesh", "hub-spoke"]
34
+ },
35
+ "hub": {
36
+ "description": "Hub device name (required when topology=hub-spoke)",
37
+ "type": "string"
38
+ },
39
+ "endpoints": {
40
+ "description": "Per-device public endpoint host override, e.g. {\"site-a\":\"a.example.com\"}",
41
+ "type": "object",
42
+ "propertyNames": {
43
+ "type": "string"
44
+ },
45
+ "additionalProperties": {
46
+ "type": "string"
47
+ }
48
+ },
49
+ "allowed_lans": {
50
+ "description": "Per-device LAN subnet to route through the tunnel, e.g. {\"site-a\":\"192.168.10.0/24\"}",
51
+ "type": "object",
52
+ "propertyNames": {
53
+ "type": "string"
54
+ },
55
+ "additionalProperties": {
56
+ "type": "string"
57
+ }
58
+ },
59
+ "persistent_keepalive": {
60
+ "default": "25s",
61
+ "type": "string"
62
+ },
63
+ "apply": {
64
+ "default": false,
65
+ "description": "false = preview the plan (default); true = build",
66
+ "type": "boolean"
67
+ }
68
+ },
69
+ "required": [
70
+ "devices",
71
+ "address_prefix",
72
+ "interface",
73
+ "listen_port",
74
+ "topology",
75
+ "persistent_keepalive",
76
+ "apply"
77
+ ],
78
+ "additionalProperties": false
79
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "design_network_segment",
4
+ "type": "object",
5
+ "properties": {
6
+ "vlan_id": {
7
+ "type": "integer",
8
+ "minimum": 1,
9
+ "maximum": 4094
10
+ },
11
+ "name": {
12
+ "type": "string",
13
+ "description": "Name for the VLAN interface, e.g. 'guest'"
14
+ },
15
+ "subnet": {
16
+ "type": "string",
17
+ "description": "CIDR for the segment, e.g. '192.168.30.0/24'"
18
+ },
19
+ "gateway": {
20
+ "type": "string",
21
+ "description": "Router's address in the segment, e.g. '192.168.30.1'"
22
+ },
23
+ "bridge": {
24
+ "default": "bridge",
25
+ "description": "Bridge to put the VLAN on",
26
+ "type": "string"
27
+ },
28
+ "tagged_ports": {
29
+ "description": "Comma-separated trunk/tagged ports (+ the bridge)",
30
+ "type": "string"
31
+ },
32
+ "untagged_ports": {
33
+ "description": "Comma-separated access/untagged ports",
34
+ "type": "string"
35
+ },
36
+ "dhcp": {
37
+ "default": true,
38
+ "description": "Create a DHCP server + pool for the segment",
39
+ "type": "boolean"
40
+ },
41
+ "dhcp_range": {
42
+ "description": "Pool range; defaults to .10–.254 of the subnet",
43
+ "type": "string"
44
+ },
45
+ "internet": {
46
+ "default": true,
47
+ "description": "Allow internet access via srcnat masquerade",
48
+ "type": "boolean"
49
+ },
50
+ "isolate_from": {
51
+ "description": "Subnets this segment must NOT reach, e.g. ['192.168.1.0/24']",
52
+ "type": "array",
53
+ "items": {
54
+ "type": "string"
55
+ }
56
+ },
57
+ "apply": {
58
+ "default": false,
59
+ "description": "false = preview (default); true = build",
60
+ "type": "boolean"
61
+ }
62
+ },
63
+ "required": ["vlan_id", "name", "subnet", "gateway", "bridge", "dhcp", "internet", "apply"],
64
+ "additionalProperties": false
65
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "force_cloud_update",
4
+ "type": "object",
5
+ "properties": {},
6
+ "additionalProperties": false
7
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "forecast_link_saturation",
4
+ "type": "object",
5
+ "properties": {
6
+ "interface": {
7
+ "type": "string",
8
+ "description": "Interface to sample, e.g. 'ether1-wan'"
9
+ },
10
+ "capacity_mbps": {
11
+ "default": 1000,
12
+ "description": "Link rated speed in Mbit/s (e.g. 1000 for gig)",
13
+ "type": "number"
14
+ },
15
+ "monthly_growth_pct": {
16
+ "default": 10,
17
+ "description": "Assumed month-over-month traffic growth %",
18
+ "type": "number"
19
+ }
20
+ },
21
+ "required": ["interface", "capacity_mbps", "monthly_growth_pct"],
22
+ "additionalProperties": false
23
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "forward_port",
4
+ "type": "object",
5
+ "properties": {
6
+ "protocol": {
7
+ "default": "tcp",
8
+ "type": "string",
9
+ "enum": ["tcp", "udp"]
10
+ },
11
+ "external_port": {
12
+ "type": "integer",
13
+ "minimum": 1,
14
+ "maximum": 65535
15
+ },
16
+ "internal_host": {
17
+ "type": "string",
18
+ "description": "LAN IP of the service, e.g. '192.168.1.10'"
19
+ },
20
+ "internal_port": {
21
+ "description": "Defaults to external_port",
22
+ "type": "integer",
23
+ "minimum": 1,
24
+ "maximum": 65535
25
+ },
26
+ "wan_interface": {
27
+ "description": "Restrict the forward to this WAN interface",
28
+ "type": "string"
29
+ },
30
+ "lan_subnet": {
31
+ "description": "LAN subnet for hairpin NAT, e.g. '192.168.1.0/24'",
32
+ "type": "string"
33
+ },
34
+ "comment": {
35
+ "type": "string"
36
+ },
37
+ "apply": {
38
+ "default": false,
39
+ "description": "false = preview (default); true = create",
40
+ "type": "boolean"
41
+ }
42
+ },
43
+ "required": ["protocol", "external_port", "internal_host", "apply"],
44
+ "additionalProperties": false
45
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "generate_hotspot_vouchers",
4
+ "type": "object",
5
+ "properties": {
6
+ "count": {
7
+ "default": 10,
8
+ "type": "integer",
9
+ "minimum": 1,
10
+ "maximum": 200
11
+ },
12
+ "uptime_limit": {
13
+ "description": "Per-voucher uptime, e.g. '1h', '1d'",
14
+ "type": "string"
15
+ },
16
+ "profile": {
17
+ "description": "Hotspot user profile to assign",
18
+ "type": "string"
19
+ },
20
+ "code_prefix": {
21
+ "default": "g",
22
+ "description": "Prefix for the generated codes",
23
+ "type": "string"
24
+ },
25
+ "apply": {
26
+ "default": false,
27
+ "description": "false = preview codes (default); true = create",
28
+ "type": "boolean"
29
+ }
30
+ },
31
+ "required": ["count", "code_prefix", "apply"],
32
+ "additionalProperties": false
33
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "get_dhcp_client",
4
+ "type": "object",
5
+ "properties": {
6
+ "interface": {
7
+ "type": "string",
8
+ "description": "Interface name, e.g. 'ether1'"
9
+ }
10
+ },
11
+ "required": ["interface"],
12
+ "additionalProperties": false
13
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "get_ip_cloud",
4
+ "type": "object",
5
+ "properties": {},
6
+ "additionalProperties": false
7
+ }
@@ -0,0 +1,104 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "harden_firewall",
4
+ "type": "object",
5
+ "properties": {
6
+ "preset": {
7
+ "default": "standard",
8
+ "description": "Bundle to apply; 'custom' uses only the `protections` toggles",
9
+ "type": "string",
10
+ "enum": ["basic", "standard", "paranoid", "custom"]
11
+ },
12
+ "protections": {
13
+ "description": "Per-protection on/off, overriding/extending the preset",
14
+ "type": "object",
15
+ "propertyNames": {
16
+ "type": "string",
17
+ "enum": [
18
+ "state_hygiene",
19
+ "ssh_bruteforce",
20
+ "ddos_conn_limit",
21
+ "syn_flood",
22
+ "icmp_limit",
23
+ "port_scan",
24
+ "anti_spoof",
25
+ "raw_drops",
26
+ "mgmt_lockdown"
27
+ ]
28
+ },
29
+ "additionalProperties": {
30
+ "type": "boolean"
31
+ },
32
+ "required": [
33
+ "state_hygiene",
34
+ "ssh_bruteforce",
35
+ "ddos_conn_limit",
36
+ "syn_flood",
37
+ "icmp_limit",
38
+ "port_scan",
39
+ "anti_spoof",
40
+ "raw_drops",
41
+ "mgmt_lockdown"
42
+ ]
43
+ },
44
+ "trusted_sources": {
45
+ "description": "Address or address-list name always accepted first (anti-lockout)",
46
+ "type": "string"
47
+ },
48
+ "wan_interface": {
49
+ "description": "WAN interface (required for anti_spoof)",
50
+ "type": "string"
51
+ },
52
+ "mgmt_ports": {
53
+ "default": "22,8291,8728",
54
+ "description": "Management TCP ports",
55
+ "type": "string"
56
+ },
57
+ "ssh_ports": {
58
+ "default": "22",
59
+ "description": "Ports watched by the brute-force ladder",
60
+ "type": "string"
61
+ },
62
+ "conn_limit": {
63
+ "default": 100,
64
+ "description": "Per-source TCP connection cap",
65
+ "type": "integer",
66
+ "minimum": -9007199254740991,
67
+ "maximum": 9007199254740991
68
+ },
69
+ "syn_rate": {
70
+ "default": "200,50:packet",
71
+ "type": "string"
72
+ },
73
+ "icmp_rate": {
74
+ "default": "50,10:packet",
75
+ "type": "string"
76
+ },
77
+ "apply": {
78
+ "default": false,
79
+ "description": "false = preview only (default); true = apply",
80
+ "type": "boolean"
81
+ },
82
+ "safe_mode": {
83
+ "default": true,
84
+ "description": "Apply through Safe Mode (auto-revert on lockout)",
85
+ "type": "boolean"
86
+ },
87
+ "i_accept_lockout_risk": {
88
+ "default": false,
89
+ "type": "boolean"
90
+ }
91
+ },
92
+ "required": [
93
+ "preset",
94
+ "mgmt_ports",
95
+ "ssh_ports",
96
+ "conn_limit",
97
+ "syn_rate",
98
+ "icmp_rate",
99
+ "apply",
100
+ "safe_mode",
101
+ "i_accept_lockout_risk"
102
+ ],
103
+ "additionalProperties": false
104
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "list_dhcp_clients",
4
+ "type": "object",
5
+ "properties": {
6
+ "interface_filter": {
7
+ "description": "Substring match on interface",
8
+ "type": "string"
9
+ }
10
+ },
11
+ "additionalProperties": false
12
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "onboard_wireguard_user",
4
+ "type": "object",
5
+ "properties": {
6
+ "interface": {
7
+ "type": "string",
8
+ "description": "Existing WireGuard SERVER interface, e.g. 'wg-server'"
9
+ },
10
+ "user": {
11
+ "type": "string",
12
+ "description": "User/device label, e.g. 'alice-laptop'"
13
+ },
14
+ "address": {
15
+ "type": "string",
16
+ "description": "Tunnel IP to assign the client, e.g. '10.20.0.50'"
17
+ },
18
+ "endpoint": {
19
+ "type": "string",
20
+ "description": "Server public endpoint host:port, e.g. 'vpn.example.com:13231'"
21
+ },
22
+ "dns": {
23
+ "description": "DNS for the client, e.g. '10.20.0.1'",
24
+ "type": "string"
25
+ },
26
+ "allowed_ips": {
27
+ "default": "0.0.0.0/0",
28
+ "description": "Client AllowedIPs: '0.0.0.0/0' full-tunnel, or a LAN subnet for split-tunnel",
29
+ "type": "string"
30
+ },
31
+ "keepalive": {
32
+ "default": "25",
33
+ "description": "PersistentKeepalive seconds",
34
+ "type": "string"
35
+ }
36
+ },
37
+ "required": ["interface", "user", "address", "endpoint", "allowed_ips", "keepalive"],
38
+ "additionalProperties": false
39
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "remove_dhcp_client",
4
+ "type": "object",
5
+ "properties": {
6
+ "interface": {
7
+ "type": "string"
8
+ }
9
+ },
10
+ "required": ["interface"],
11
+ "additionalProperties": false
12
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "remove_firewall_hardening",
4
+ "type": "object",
5
+ "properties": {},
6
+ "additionalProperties": false
7
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "remove_threat_feed",
4
+ "type": "object",
5
+ "properties": {
6
+ "name": {
7
+ "type": "string",
8
+ "description": "The feed id used when subscribing"
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": "remove_time_policy",
4
+ "type": "object",
5
+ "properties": {
6
+ "name": {
7
+ "type": "string",
8
+ "description": "The policy id used when installing"
9
+ }
10
+ },
11
+ "required": ["name"],
12
+ "additionalProperties": false
13
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "renew_dhcp_client",
4
+ "type": "object",
5
+ "properties": {
6
+ "interface": {
7
+ "type": "string"
8
+ },
9
+ "release": {
10
+ "default": false,
11
+ "description": "true = release the lease; false = renew",
12
+ "type": "boolean"
13
+ }
14
+ },
15
+ "required": ["interface", "release"],
16
+ "additionalProperties": false
17
+ }