@usex/mikrotik-mcp 5.5.0 → 5.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.
- package/README.md +39 -20
- package/dist/cli.js +48117 -616
- package/dist/index.d.ts +10 -3
- package/dist/index.js +55 -55
- package/dist/shared/cli-569n3azr.js +13 -0
- package/dist/shared/library-3602qc6e.js +11 -0
- package/dist/shared/{cli-cvq8pxvn.js → library-v0tysa18.js} +24160 -23632
- package/dist/ui/aaa.html +39 -54
- package/dist/ui/connected-devices.html +39 -54
- package/dist/ui/dashboard.html +39 -54
- package/dist/ui/firewall-audit.html +39 -54
- package/dist/ui/firewall.html +40 -55
- package/dist/ui/interfaces.html +39 -54
- package/dist/ui/observability.html +62 -62
- package/dist/ui/records.html +40 -55
- package/package.json +19 -18
- package/schemas/README.md +1 -1
- package/schemas/config.schema.json +79 -0
- package/schemas/tool-catalog.json +523 -7
- package/schemas/tools/add_ospf_interface_template.json +9 -1
- package/schemas/tools/audit_service_contracts.json +7 -0
- package/schemas/tools/create_investigation.json +42 -0
- package/schemas/tools/create_service_contract.json +53 -0
- package/schemas/tools/get_investigation.json +14 -0
- package/schemas/tools/inspect_flow_path.json +50 -0
- package/schemas/tools/list_client_flow_candidates.json +14 -0
- package/schemas/tools/list_investigations.json +7 -0
- package/schemas/tools/list_service_contracts.json +7 -0
- package/schemas/tools/list_service_probe_targets.json +7 -0
- package/schemas/tools/run_service_contract.json +14 -0
- package/schemas/tools/service_contract_history.json +14 -0
- package/schemas/tools/start_rollout.json +21 -0
- package/schemas/tools/trace_round_trip.json +129 -0
- package/schemas/tools/update_wireguard_peer.json +4 -0
- package/dist/shared/cli-qqwjbjnv.js +0 -13
- package/dist/shared/library-241wsfpw.js +0 -13
- package/dist/shared/library-5p5mk963.js +0 -45394
|
@@ -1,9 +1,492 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.7.0",
|
|
4
4
|
"generated": "by scripts/gen-schemas.ts — do not edit by hand",
|
|
5
|
-
"toolCount":
|
|
5
|
+
"toolCount": 903,
|
|
6
6
|
"tools": [
|
|
7
|
+
{
|
|
8
|
+
"name": "trace_round_trip",
|
|
9
|
+
"title": "Model a Multi-Router Round Trip",
|
|
10
|
+
"risk": "read",
|
|
11
|
+
"annotations": {
|
|
12
|
+
"readOnlyHint": true,
|
|
13
|
+
"idempotentHint": true,
|
|
14
|
+
"openWorldHint": false
|
|
15
|
+
},
|
|
16
|
+
"description": "Trace an explicit IPv4 forward and reverse transit path across up to eight routers using exact saved snapshot IDs. Shows per-hop firewall/routing evidence, declared asymmetry and snapshot provenance. All devices are authorized before snapshot lookup. Static no-NAT scope: NAT, dynamic routing, incomplete evidence and unmodelled constructs stop with UNKNOWN. Freshness/skew checks are enforced. No network requests or router writes. MODELLED never means live connectivity; the return leg assumes established conntrack and a replying host.",
|
|
17
|
+
"inputSchema": {
|
|
18
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
19
|
+
"type": "object",
|
|
20
|
+
"properties": {
|
|
21
|
+
"snapshots": {
|
|
22
|
+
"minItems": 1,
|
|
23
|
+
"maxItems": 8,
|
|
24
|
+
"type": "array",
|
|
25
|
+
"items": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"properties": {
|
|
28
|
+
"device": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"minLength": 1,
|
|
31
|
+
"maxLength": 128
|
|
32
|
+
},
|
|
33
|
+
"id": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"minLength": 1,
|
|
36
|
+
"maxLength": 128
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"required": ["device", "id"],
|
|
40
|
+
"additionalProperties": false
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"forward": {
|
|
44
|
+
"minItems": 1,
|
|
45
|
+
"maxItems": 8,
|
|
46
|
+
"type": "array",
|
|
47
|
+
"items": {
|
|
48
|
+
"type": "object",
|
|
49
|
+
"properties": {
|
|
50
|
+
"device": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"minLength": 1,
|
|
53
|
+
"maxLength": 128
|
|
54
|
+
},
|
|
55
|
+
"ingress": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"minLength": 1,
|
|
58
|
+
"maxLength": 128
|
|
59
|
+
},
|
|
60
|
+
"egress": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"minLength": 1,
|
|
63
|
+
"maxLength": 128
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"required": ["device", "ingress", "egress"],
|
|
67
|
+
"additionalProperties": false
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"reverse": {
|
|
71
|
+
"minItems": 1,
|
|
72
|
+
"maxItems": 8,
|
|
73
|
+
"type": "array",
|
|
74
|
+
"items": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"properties": {
|
|
77
|
+
"device": {
|
|
78
|
+
"type": "string",
|
|
79
|
+
"minLength": 1,
|
|
80
|
+
"maxLength": 128
|
|
81
|
+
},
|
|
82
|
+
"ingress": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"minLength": 1,
|
|
85
|
+
"maxLength": 128
|
|
86
|
+
},
|
|
87
|
+
"egress": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"minLength": 1,
|
|
90
|
+
"maxLength": 128
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"required": ["device", "ingress", "egress"],
|
|
94
|
+
"additionalProperties": false
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"packet": {
|
|
98
|
+
"type": "object",
|
|
99
|
+
"properties": {
|
|
100
|
+
"srcAddress": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"format": "ipv4",
|
|
103
|
+
"pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
|
|
104
|
+
},
|
|
105
|
+
"dstAddress": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"format": "ipv4",
|
|
108
|
+
"pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
|
|
109
|
+
},
|
|
110
|
+
"protocol": {
|
|
111
|
+
"default": "tcp",
|
|
112
|
+
"type": "string",
|
|
113
|
+
"enum": ["tcp", "udp", "icmp"]
|
|
114
|
+
},
|
|
115
|
+
"srcPort": {
|
|
116
|
+
"type": "integer",
|
|
117
|
+
"minimum": 1,
|
|
118
|
+
"maximum": 65535
|
|
119
|
+
},
|
|
120
|
+
"dstPort": {
|
|
121
|
+
"type": "integer",
|
|
122
|
+
"minimum": 1,
|
|
123
|
+
"maximum": 65535
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"required": ["srcAddress", "dstAddress", "protocol"],
|
|
127
|
+
"additionalProperties": false
|
|
128
|
+
},
|
|
129
|
+
"maxAgeSeconds": {
|
|
130
|
+
"default": 900,
|
|
131
|
+
"type": "integer",
|
|
132
|
+
"minimum": 1,
|
|
133
|
+
"maximum": 86400
|
|
134
|
+
},
|
|
135
|
+
"maxSkewSeconds": {
|
|
136
|
+
"default": 120,
|
|
137
|
+
"type": "integer",
|
|
138
|
+
"minimum": 0,
|
|
139
|
+
"maximum": 3600
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"required": [
|
|
143
|
+
"snapshots",
|
|
144
|
+
"forward",
|
|
145
|
+
"reverse",
|
|
146
|
+
"packet",
|
|
147
|
+
"maxAgeSeconds",
|
|
148
|
+
"maxSkewSeconds"
|
|
149
|
+
],
|
|
150
|
+
"additionalProperties": false
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"name": "audit_service_contracts",
|
|
155
|
+
"title": "Audit Enrolled Service Contracts",
|
|
156
|
+
"risk": "read",
|
|
157
|
+
"annotations": {
|
|
158
|
+
"readOnlyHint": true,
|
|
159
|
+
"idempotentHint": true,
|
|
160
|
+
"openWorldHint": false
|
|
161
|
+
},
|
|
162
|
+
"description": "Run the administrator-enrolled service contracts for this device (serviceProbes.scheduled) and return stable failures/unknowns for scheduled-audit regression notifications. New contracts are not enrolled automatically. At most five contracts and ten network checks; no router configuration writes.",
|
|
163
|
+
"inputSchema": {
|
|
164
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
165
|
+
"type": "object",
|
|
166
|
+
"properties": {},
|
|
167
|
+
"additionalProperties": false
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"name": "list_service_probe_targets",
|
|
172
|
+
"title": "List Approved Service Probe Targets",
|
|
173
|
+
"risk": "read",
|
|
174
|
+
"annotations": {
|
|
175
|
+
"readOnlyHint": true,
|
|
176
|
+
"idempotentHint": true,
|
|
177
|
+
"openWorldHint": false
|
|
178
|
+
},
|
|
179
|
+
"description": "List the service probe aliases approved by the server administrator. Probes originate from the MCP host, not the router or client. No network request is made. Empty by default; edit serviceProbes.targets in the server config to enable explicitly bounded endpoints.",
|
|
180
|
+
"inputSchema": {
|
|
181
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
182
|
+
"type": "object",
|
|
183
|
+
"properties": {},
|
|
184
|
+
"additionalProperties": false
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "create_service_contract",
|
|
189
|
+
"title": "Create a Service Health Contract",
|
|
190
|
+
"risk": "write",
|
|
191
|
+
"annotations": {
|
|
192
|
+
"destructiveHint": false,
|
|
193
|
+
"openWorldHint": false
|
|
194
|
+
},
|
|
195
|
+
"description": "Save an immutable device-owned contract of DNS/TCP/TLS/HTTPS checks against administrator-approved aliases, latency thresholds and expected HTTPS status codes. Optionally attach a saved packet suite evaluated against a fresh device export. Definition only: no probes or router writes. To revise a contract, create a new one and select its new ID explicitly.",
|
|
196
|
+
"inputSchema": {
|
|
197
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
198
|
+
"type": "object",
|
|
199
|
+
"properties": {
|
|
200
|
+
"name": {
|
|
201
|
+
"type": "string",
|
|
202
|
+
"minLength": 1,
|
|
203
|
+
"maxLength": 120
|
|
204
|
+
},
|
|
205
|
+
"checks": {
|
|
206
|
+
"minItems": 1,
|
|
207
|
+
"maxItems": 10,
|
|
208
|
+
"type": "array",
|
|
209
|
+
"items": {
|
|
210
|
+
"type": "object",
|
|
211
|
+
"properties": {
|
|
212
|
+
"target": {
|
|
213
|
+
"type": "string",
|
|
214
|
+
"minLength": 1,
|
|
215
|
+
"maxLength": 64
|
|
216
|
+
},
|
|
217
|
+
"maxLatencyMs": {
|
|
218
|
+
"default": 2000,
|
|
219
|
+
"type": "integer",
|
|
220
|
+
"minimum": 1,
|
|
221
|
+
"maximum": 10000
|
|
222
|
+
},
|
|
223
|
+
"expectedStatus": {
|
|
224
|
+
"default": [200],
|
|
225
|
+
"minItems": 1,
|
|
226
|
+
"maxItems": 10,
|
|
227
|
+
"type": "array",
|
|
228
|
+
"items": {
|
|
229
|
+
"type": "integer",
|
|
230
|
+
"minimum": 200,
|
|
231
|
+
"maximum": 599
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
"required": ["target", "maxLatencyMs", "expectedStatus"],
|
|
236
|
+
"additionalProperties": false
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
"packetSuiteId": {
|
|
240
|
+
"type": "string",
|
|
241
|
+
"minLength": 1,
|
|
242
|
+
"maxLength": 120
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
"required": ["name", "checks"],
|
|
246
|
+
"additionalProperties": false
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"name": "list_service_contracts",
|
|
251
|
+
"title": "List Service Health Contracts",
|
|
252
|
+
"risk": "read",
|
|
253
|
+
"annotations": {
|
|
254
|
+
"readOnlyHint": true,
|
|
255
|
+
"idempotentHint": true,
|
|
256
|
+
"openWorldHint": false
|
|
257
|
+
},
|
|
258
|
+
"description": "Read up to 100 local service contract definitions owned by the selected device. No probes are run.",
|
|
259
|
+
"inputSchema": {
|
|
260
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
261
|
+
"type": "object",
|
|
262
|
+
"properties": {},
|
|
263
|
+
"additionalProperties": false
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"name": "run_service_contract",
|
|
268
|
+
"title": "Check a Service Health Contract",
|
|
269
|
+
"risk": "read",
|
|
270
|
+
"annotations": {
|
|
271
|
+
"readOnlyHint": true,
|
|
272
|
+
"idempotentHint": true,
|
|
273
|
+
"openWorldHint": false
|
|
274
|
+
},
|
|
275
|
+
"description": "Run and record bounded DNS/TCP/TLS/HTTPS checks from the MCP host against server-approved, IP-pinned targets. No redirects, request credentials or response bodies. Report PASS/FAIL/UNKNOWN per check, not blanket client health. An optional packet suite reads a fresh /export terse from its device for this run; never tests an old baseline after a change. No router configuration writes. Unknown never passes a rollout gate. For scheduled checks, explicitly enroll contracts and schedule audit_service_contracts.",
|
|
276
|
+
"inputSchema": {
|
|
277
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
278
|
+
"type": "object",
|
|
279
|
+
"properties": {
|
|
280
|
+
"id": {
|
|
281
|
+
"type": "string",
|
|
282
|
+
"format": "uuid",
|
|
283
|
+
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
"required": ["id"],
|
|
287
|
+
"additionalProperties": false
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"name": "service_contract_history",
|
|
292
|
+
"title": "Read Service Contract History",
|
|
293
|
+
"risk": "read",
|
|
294
|
+
"annotations": {
|
|
295
|
+
"readOnlyHint": true,
|
|
296
|
+
"idempotentHint": true,
|
|
297
|
+
"openWorldHint": false
|
|
298
|
+
},
|
|
299
|
+
"description": "Read the latest 100 recorded service checks for a contract owned by the selected device. A historical passing run is not a current gate result.",
|
|
300
|
+
"inputSchema": {
|
|
301
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
302
|
+
"type": "object",
|
|
303
|
+
"properties": {
|
|
304
|
+
"id": {
|
|
305
|
+
"type": "string",
|
|
306
|
+
"format": "uuid",
|
|
307
|
+
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
"required": ["id"],
|
|
311
|
+
"additionalProperties": false
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"name": "inspect_flow_path",
|
|
316
|
+
"title": "Inspect Exported Client Flow Path",
|
|
317
|
+
"risk": "read",
|
|
318
|
+
"annotations": {
|
|
319
|
+
"readOnlyHint": true,
|
|
320
|
+
"idempotentHint": true,
|
|
321
|
+
"openWorldHint": false
|
|
322
|
+
},
|
|
323
|
+
"description": "Read the last five minutes of exact IPv4 TCP/UDP five-tuple NetFlow/IPFIX evidence for the selected router. Reports exporter input/output ifIndex and resolves up to eight explicitly named interfaces with read-only OID queries. Requires a unique configured IPv4 host matching the exporter sender. Never enables capture, changes configuration or generates traffic. Unauthenticated UDP exports, current name mappings and no-match results are not proof of VPN encryption, packet loss or application delivery. NAT aliases are not inferred.",
|
|
324
|
+
"inputSchema": {
|
|
325
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
326
|
+
"type": "object",
|
|
327
|
+
"properties": {
|
|
328
|
+
"client": {
|
|
329
|
+
"type": "string",
|
|
330
|
+
"format": "ipv4",
|
|
331
|
+
"pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
|
|
332
|
+
},
|
|
333
|
+
"destination": {
|
|
334
|
+
"type": "string",
|
|
335
|
+
"format": "ipv4",
|
|
336
|
+
"pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
|
|
337
|
+
},
|
|
338
|
+
"source_port": {
|
|
339
|
+
"type": "integer",
|
|
340
|
+
"minimum": 1,
|
|
341
|
+
"maximum": 65535
|
|
342
|
+
},
|
|
343
|
+
"destination_port": {
|
|
344
|
+
"type": "integer",
|
|
345
|
+
"minimum": 1,
|
|
346
|
+
"maximum": 65535
|
|
347
|
+
},
|
|
348
|
+
"protocol": {
|
|
349
|
+
"type": "string",
|
|
350
|
+
"enum": ["tcp", "udp"]
|
|
351
|
+
},
|
|
352
|
+
"interface_names": {
|
|
353
|
+
"default": [],
|
|
354
|
+
"maxItems": 8,
|
|
355
|
+
"type": "array",
|
|
356
|
+
"items": {
|
|
357
|
+
"type": "string",
|
|
358
|
+
"minLength": 1,
|
|
359
|
+
"maxLength": 128
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
},
|
|
363
|
+
"required": [
|
|
364
|
+
"client",
|
|
365
|
+
"destination",
|
|
366
|
+
"source_port",
|
|
367
|
+
"destination_port",
|
|
368
|
+
"protocol",
|
|
369
|
+
"interface_names"
|
|
370
|
+
],
|
|
371
|
+
"additionalProperties": false
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"name": "list_client_flow_candidates",
|
|
376
|
+
"title": "List Recent Client Flow Tuples",
|
|
377
|
+
"risk": "read",
|
|
378
|
+
"annotations": {
|
|
379
|
+
"readOnlyHint": true,
|
|
380
|
+
"idempotentHint": true,
|
|
381
|
+
"openWorldHint": false
|
|
382
|
+
},
|
|
383
|
+
"description": "List up to 50 recent exported TCP/UDP tuples originating from an exact client IPv4 on the selected router, including ephemeral source ports, for inspect_flow_path. Reads local NetFlow/IPFIX storage only; does not query the client or router. Requires unambiguous exporter host binding. Missing records do not mean no traffic.",
|
|
384
|
+
"inputSchema": {
|
|
385
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
386
|
+
"type": "object",
|
|
387
|
+
"properties": {
|
|
388
|
+
"client": {
|
|
389
|
+
"type": "string",
|
|
390
|
+
"format": "ipv4",
|
|
391
|
+
"pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
"required": ["client"],
|
|
395
|
+
"additionalProperties": false
|
|
396
|
+
}
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"name": "create_investigation",
|
|
400
|
+
"title": "Investigate a Client and Service",
|
|
401
|
+
"risk": "write",
|
|
402
|
+
"annotations": {
|
|
403
|
+
"destructiveHint": false,
|
|
404
|
+
"openWorldHint": false
|
|
405
|
+
},
|
|
406
|
+
"description": "Read client DHCP/ARP/bridge evidence and VLAN/interface/DNS/route/firewall/NAT context from the selected router and up to two explicit additional routers. Run three router-originated ICMP probes and save a local case. Never changes router configuration or starts captures. WRITE reflects local persistence. Application health remains UNVERIFIED; no endpoint probe is installed. IPv4 or colon-separated MAC clients only. Returns JSON evidence with timestamps, unknowns and next tests.",
|
|
407
|
+
"inputSchema": {
|
|
408
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
409
|
+
"type": "object",
|
|
410
|
+
"properties": {
|
|
411
|
+
"client": {
|
|
412
|
+
"anyOf": [
|
|
413
|
+
{
|
|
414
|
+
"type": "string",
|
|
415
|
+
"format": "ipv4",
|
|
416
|
+
"pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
"type": "string",
|
|
420
|
+
"pattern": "^(?:[\\da-f]{2}:){5}[\\da-f]{2}$"
|
|
421
|
+
}
|
|
422
|
+
]
|
|
423
|
+
},
|
|
424
|
+
"target": {
|
|
425
|
+
"type": "string",
|
|
426
|
+
"minLength": 1,
|
|
427
|
+
"maxLength": 253,
|
|
428
|
+
"pattern": "^[a-z\\d](?:[a-z\\d.-]*[a-z\\d])?$"
|
|
429
|
+
},
|
|
430
|
+
"service": {
|
|
431
|
+
"type": "string",
|
|
432
|
+
"minLength": 1,
|
|
433
|
+
"maxLength": 120
|
|
434
|
+
},
|
|
435
|
+
"vantage_devices": {
|
|
436
|
+
"default": [],
|
|
437
|
+
"maxItems": 2,
|
|
438
|
+
"type": "array",
|
|
439
|
+
"items": {
|
|
440
|
+
"type": "string",
|
|
441
|
+
"minLength": 1
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
},
|
|
445
|
+
"required": ["client", "target", "service", "vantage_devices"],
|
|
446
|
+
"additionalProperties": false
|
|
447
|
+
}
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
"name": "list_investigations",
|
|
451
|
+
"title": "List Client Investigations",
|
|
452
|
+
"risk": "read",
|
|
453
|
+
"annotations": {
|
|
454
|
+
"readOnlyHint": true,
|
|
455
|
+
"idempotentHint": true,
|
|
456
|
+
"openWorldHint": false
|
|
457
|
+
},
|
|
458
|
+
"description": "List up to 100 saved cases for the selected primary device. Cases requiring denied device access are omitted. No router I/O.",
|
|
459
|
+
"inputSchema": {
|
|
460
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
461
|
+
"type": "object",
|
|
462
|
+
"properties": {},
|
|
463
|
+
"additionalProperties": false
|
|
464
|
+
}
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
"name": "get_investigation",
|
|
468
|
+
"title": "Read a Client Investigation",
|
|
469
|
+
"risk": "read",
|
|
470
|
+
"annotations": {
|
|
471
|
+
"readOnlyHint": true,
|
|
472
|
+
"idempotentHint": true,
|
|
473
|
+
"openWorldHint": false
|
|
474
|
+
},
|
|
475
|
+
"description": "Read a case by UUID under its primary device. Rechecks access to all evidence devices. Historical evidence is not a current health check.",
|
|
476
|
+
"inputSchema": {
|
|
477
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
478
|
+
"type": "object",
|
|
479
|
+
"properties": {
|
|
480
|
+
"id": {
|
|
481
|
+
"type": "string",
|
|
482
|
+
"format": "uuid",
|
|
483
|
+
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
|
|
484
|
+
}
|
|
485
|
+
},
|
|
486
|
+
"required": ["id"],
|
|
487
|
+
"additionalProperties": false
|
|
488
|
+
}
|
|
489
|
+
},
|
|
7
490
|
{
|
|
8
491
|
"name": "find_tools",
|
|
9
492
|
"title": "Find Tools (catalog search)",
|
|
@@ -11267,7 +11750,7 @@
|
|
|
11267
11750
|
"destructiveHint": false,
|
|
11268
11751
|
"openWorldHint": false
|
|
11269
11752
|
},
|
|
11270
|
-
"description": "Bind interfaces or network prefixes to an OSPF area (`/routing ospf interface-template add`). Match links via `interfaces` (interface or interface-list name) and/or `networks` (prefix, e.g. '10.0.0.0/24'). `type` sets the link model: broadcast (LAN), ptp (point-to-point), ptmp, ptmp-broadcast, nbma, or virtual-link. `passive=true` advertises the subnet without forming OSPF adjacencies (for stub networks). `auth`/`auth_id`/`auth_key` enable per-interface authentication; `hello_interval` e.g. '10s', `dead_interval` e.g. '40s'. Requires the area to already exist (add_ospf_area). Returns the new template id (e.g. '*2') if RouterOS echoes one; use list_ospf_interface_templates to verify.",
|
|
11753
|
+
"description": "Bind interfaces or network prefixes to an OSPF area (`/routing ospf interface-template add`). Match links via `interfaces` (interface or interface-list name) and/or `networks` (prefix, e.g. '10.0.0.0/24'). `type` sets the link model: broadcast (LAN), ptp (point-to-point), ptp-unnumbered (point-to-point over an unnumbered link), ptmp, ptmp-broadcast, nbma, or virtual-link. `passive=true` advertises the subnet without forming OSPF adjacencies (for stub networks). `auth`/`auth_id`/`auth_key` enable per-interface authentication; `hello_interval` e.g. '10s', `dead_interval` e.g. '40s'. Requires the area to already exist (add_ospf_area). Returns the new template id (e.g. '*2') if RouterOS echoes one; use list_ospf_interface_templates to verify.",
|
|
11271
11754
|
"inputSchema": {
|
|
11272
11755
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
11273
11756
|
"type": "object",
|
|
@@ -11298,7 +11781,15 @@
|
|
|
11298
11781
|
},
|
|
11299
11782
|
"type": {
|
|
11300
11783
|
"type": "string",
|
|
11301
|
-
"enum": [
|
|
11784
|
+
"enum": [
|
|
11785
|
+
"broadcast",
|
|
11786
|
+
"ptp",
|
|
11787
|
+
"ptp-unnumbered",
|
|
11788
|
+
"ptmp",
|
|
11789
|
+
"ptmp-broadcast",
|
|
11790
|
+
"nbma",
|
|
11791
|
+
"virtual-link"
|
|
11792
|
+
]
|
|
11302
11793
|
},
|
|
11303
11794
|
"passive": {
|
|
11304
11795
|
"type": "boolean"
|
|
@@ -12774,7 +13265,7 @@
|
|
|
12774
13265
|
"idempotentHint": true,
|
|
12775
13266
|
"openWorldHint": false
|
|
12776
13267
|
},
|
|
12777
|
-
"description": "Gets the full detail of one IPv4 firewall FILTER rule (`/ip firewall filter`) by id — every matcher, action, counter and flag. For IPv6 use get_ipv6_filter_rule. rule_id: preferably the `.id` from list_filter_rules e.g. \"*1F\". A bare number like \"3\" is
|
|
13268
|
+
"description": "Gets the full detail of one IPv4 firewall FILTER rule (`/ip firewall filter`) by id — every matcher, action, counter and flag. For IPv6 use get_ipv6_filter_rule. rule_id: preferably the `.id` from list_filter_rules e.g. \"*1F\". A bare number like \"3\" is read as the positional ROW INDEX and resolved to whatever `.id` currently sits there — it is never treated as `.id=*3`, since a `*N` id is hex and reassigned over time. Row positions shift whenever a rule is added, removed or moved, so prefer the `.id`.",
|
|
12778
13269
|
"inputSchema": {
|
|
12779
13270
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
12780
13271
|
"type": "object",
|
|
@@ -17656,7 +18147,7 @@
|
|
|
17656
18147
|
"idempotentHint": true,
|
|
17657
18148
|
"openWorldHint": false
|
|
17658
18149
|
},
|
|
17659
|
-
"description": "Permanently deletes a WireGuard tunnel interface (`/interface wireguard remove`) by name. Verifies existence first with count-only
|
|
18150
|
+
"description": "Permanently deletes a WireGuard tunnel interface (`/interface wireguard remove`) by name, together with every peer bound to it. Verifies existence first with count-only. For removing only a specific peer without touching the interface use remove_wireguard_peer. Reports how many peers were removed alongside the interface.",
|
|
17660
18151
|
"inputSchema": {
|
|
17661
18152
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
17662
18153
|
"type": "object",
|
|
@@ -17865,6 +18356,10 @@
|
|
|
17865
18356
|
"type": "string",
|
|
17866
18357
|
"description": "\"*N\" or \"N\" from list output e.g. \"*2\""
|
|
17867
18358
|
},
|
|
18359
|
+
"public_key": {
|
|
18360
|
+
"description": "The peer's base64 public key — re-key a peer in place instead of removing and re-adding it (which would lose the rest of its configuration).",
|
|
18361
|
+
"type": "string"
|
|
18362
|
+
},
|
|
17868
18363
|
"allowed_address": {
|
|
17869
18364
|
"type": "string"
|
|
17870
18365
|
},
|
|
@@ -30739,6 +31234,27 @@
|
|
|
30739
31234
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
30740
31235
|
"type": "object",
|
|
30741
31236
|
"properties": {
|
|
31237
|
+
"service_contracts": {
|
|
31238
|
+
"description": "Optional service contracts: must pass before any change and after every wave. Probes originate from the MCP host, not the router. Unknown blocks the gate.",
|
|
31239
|
+
"maxItems": 10,
|
|
31240
|
+
"type": "array",
|
|
31241
|
+
"items": {
|
|
31242
|
+
"type": "object",
|
|
31243
|
+
"properties": {
|
|
31244
|
+
"id": {
|
|
31245
|
+
"type": "string",
|
|
31246
|
+
"format": "uuid",
|
|
31247
|
+
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
|
|
31248
|
+
},
|
|
31249
|
+
"device": {
|
|
31250
|
+
"type": "string",
|
|
31251
|
+
"minLength": 1
|
|
31252
|
+
}
|
|
31253
|
+
},
|
|
31254
|
+
"required": ["id", "device"],
|
|
31255
|
+
"additionalProperties": false
|
|
31256
|
+
}
|
|
31257
|
+
},
|
|
30742
31258
|
"commands": {
|
|
30743
31259
|
"anyOf": [
|
|
30744
31260
|
{
|
|
@@ -30911,7 +31427,7 @@
|
|
|
30911
31427
|
"destructiveHint": false,
|
|
30912
31428
|
"openWorldHint": false
|
|
30913
31429
|
},
|
|
30914
|
-
"description": "Schedules an audit to run on its own and report only what changed since the previous run. Only READ auditors can be scheduled — this is enforced, not advisory: an unattended loop that can write to a router is a footgun, so schedule the audit and wire the alert to a human instead. Cron is the restricted 5-field form (minute hour day-of-month month day-of-week) with *, ranges, lists and step syntax.\n\nSchedulable auditors:\n run_security_hardening_audit — Device security posture — services, firewall defaults, credentials, helpers.\n run_compliance_audit — Scored pass/fail compliance checks across 10 categories.\n firewall_audit — Shadowed, unreachable, overly-broad and dead firewall rules.\n run_policy_check — Loaded policy-as-code rules against the device's live configuration.",
|
|
31430
|
+
"description": "Schedules an audit to run on its own and report only what changed since the previous run. Only READ auditors can be scheduled — this is enforced, not advisory: an unattended loop that can write to a router is a footgun, so schedule the audit and wire the alert to a human instead. Cron is the restricted 5-field form (minute hour day-of-month month day-of-week) with *, ranges, lists and step syntax.\n\nSchedulable auditors:\n audit_service_contracts — Enrolled service contracts: live MCP-host probes, optional fresh-export simulation, explicit unknowns.\n run_security_hardening_audit — Device security posture — services, firewall defaults, credentials, helpers.\n run_compliance_audit — Scored pass/fail compliance checks across 10 categories.\n firewall_audit — Shadowed, unreachable, overly-broad and dead firewall rules.\n run_policy_check — Loaded policy-as-code rules against the device's live configuration.",
|
|
30915
31431
|
"inputSchema": {
|
|
30916
31432
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
30917
31433
|
"type": "object",
|
|
@@ -29,7 +29,15 @@
|
|
|
29
29
|
},
|
|
30
30
|
"type": {
|
|
31
31
|
"type": "string",
|
|
32
|
-
"enum": [
|
|
32
|
+
"enum": [
|
|
33
|
+
"broadcast",
|
|
34
|
+
"ptp",
|
|
35
|
+
"ptp-unnumbered",
|
|
36
|
+
"ptmp",
|
|
37
|
+
"ptmp-broadcast",
|
|
38
|
+
"nbma",
|
|
39
|
+
"virtual-link"
|
|
40
|
+
]
|
|
33
41
|
},
|
|
34
42
|
"passive": {
|
|
35
43
|
"type": "boolean"
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"title": "create_investigation",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"client": {
|
|
7
|
+
"anyOf": [
|
|
8
|
+
{
|
|
9
|
+
"type": "string",
|
|
10
|
+
"format": "ipv4",
|
|
11
|
+
"pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"type": "string",
|
|
15
|
+
"pattern": "^(?:[\\da-f]{2}:){5}[\\da-f]{2}$"
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"target": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"minLength": 1,
|
|
22
|
+
"maxLength": 253,
|
|
23
|
+
"pattern": "^[a-z\\d](?:[a-z\\d.-]*[a-z\\d])?$"
|
|
24
|
+
},
|
|
25
|
+
"service": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"minLength": 1,
|
|
28
|
+
"maxLength": 120
|
|
29
|
+
},
|
|
30
|
+
"vantage_devices": {
|
|
31
|
+
"default": [],
|
|
32
|
+
"maxItems": 2,
|
|
33
|
+
"type": "array",
|
|
34
|
+
"items": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"minLength": 1
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"required": ["client", "target", "service", "vantage_devices"],
|
|
41
|
+
"additionalProperties": false
|
|
42
|
+
}
|