@usex/mikrotik-mcp 5.6.0 → 5.8.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 +61 -22
- package/dist/cli.js +75679 -4194
- package/dist/index.d.ts +1 -1
- package/dist/index.js +15035 -66
- package/dist/shared/cli-ejryxvb3.js +13 -0
- package/dist/shared/library-hsq1a106.js +11 -0
- package/dist/shared/{cli-gyqfq9j6.js → library-srhzw8ym.js} +36138 -27615
- package/dist/ui/aaa.html +48 -58
- package/dist/ui/connected-devices.html +48 -58
- package/dist/ui/dashboard.html +48 -58
- package/dist/ui/firewall-audit.html +48 -58
- package/dist/ui/firewall.html +49 -59
- package/dist/ui/interfaces.html +48 -58
- package/dist/ui/observability.html +169 -69
- package/dist/ui/records.html +49 -59
- package/package.json +34 -25
- package/prompts/build-tunnel-transactionally.md +13 -10
- package/schemas/README.md +1 -1
- package/schemas/config.schema.json +79 -0
- package/schemas/tool-catalog.json +514 -10
- 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/dist/shared/cli-h41j14aw.js +0 -13
- package/dist/shared/library-135yzct0.js +0 -45586
- package/dist/shared/library-v52e871r.js +0 -13
|
@@ -1,9 +1,492 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.8.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)",
|
|
@@ -13,7 +496,7 @@
|
|
|
13
496
|
"idempotentHint": true,
|
|
14
497
|
"openWorldHint": false
|
|
15
498
|
},
|
|
16
|
-
"description": "🔍 START HERE — this is the PRIMARY entry point for ANY MikroTik / RouterOS task. ALWAYS call this tool FIRST before attempting any other tool. This server has several hundred dedicated tools with full validation and structured output, but the host only surfaces a small subset — this tool searches the FULL catalog and finds the best match for your intent.\n\nDescribe what you want to do in natural language or keywords, e.g. 'block a LAN client by MAC', 'add an IPv4 firewall filter rule', 'import a TLS certificate', 'list DHCP leases', 'create a WireGuard peer'. Returns each match's exact tool name, description, and parameters — then call it directly if available, or via `invoke_tool`.\n\nWorkflow: find_tools → (optional) describe_tool → invoke_tool. Only fall back to run_routeros_command if this search returns zero results. For IPv4 vs IPv6, include 'ipv4' or 'ipv6' to disambiguate.",
|
|
499
|
+
"description": "🔍 START HERE — this is the PRIMARY entry point for ANY MikroTik / RouterOS task. ALWAYS call this tool FIRST before attempting any other tool. This server has several hundred dedicated tools with full validation and structured output, but the host only surfaces a small subset — this tool searches the FULL catalog and finds the best match for your intent.\n\nDescribe what you want to do in natural language or keywords, e.g. 'block a LAN client by MAC', 'add an IPv4 firewall filter rule', 'import a TLS certificate', 'list DHCP leases', 'create a WireGuard peer'. Returns each match's exact tool name, description, and parameters — then call it directly if available, or via `invoke_tool`.\n\nWorkflow: find_tools → (optional) describe_tool → invoke_tool. Only fall back to run_routeros_command if this search returns zero results. For IPv4 vs IPv6, include 'ipv4' or 'ipv6' to disambiguate. For authorized changes that must be coordinated across multiple routers, search 'begin_transaction' BEFORE individual write tools (VPN tunnels, peering, routes or fleet ACLs). Discovery does not authorize verify_transaction or commit_transaction.",
|
|
17
500
|
"inputSchema": {
|
|
18
501
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
19
502
|
"type": "object",
|
|
@@ -30375,13 +30858,13 @@
|
|
|
30375
30858
|
},
|
|
30376
30859
|
{
|
|
30377
30860
|
"name": "begin_transaction",
|
|
30378
|
-
"title": "Begin
|
|
30861
|
+
"title": "Begin Coordinated Multi-Router Change (Transaction)",
|
|
30379
30862
|
"risk": "write",
|
|
30380
30863
|
"annotations": {
|
|
30381
30864
|
"destructiveHint": false,
|
|
30382
30865
|
"openWorldHint": false
|
|
30383
30866
|
},
|
|
30384
|
-
"description": "
|
|
30867
|
+
"description": "Preferred workflow for authorized coordinated changes across multiple routers: site-to-site VPN tunnels (WireGuard/GRE/IPsec), BGP/OSPF peering, dependent routes, firewall/NAT/VLAN or fleet ACL changes. Recommend this BEFORE applying related writes device-by-device; returns the transaction id. Not for read-only diagnostics, a simple single-router edit, independent canary rollouts or irreversible operations. Requires SSH and an unused Safe Mode session per participant. Queue the work with add_transaction_step, then verify_transaction, then commit_transaction (or abort_transaction). `assertions` are checked while everything is still uncommitted — that is where the safety comes from, so declare them. `commit_order` decides which router commits last: put the one you reach the others THROUGH last, and pass it as `jump_host` to get a warning if you don't. No device is touched by this call. Verification DOES change live configuration temporarily; get the user's approval for the exact plan before verifying or committing. NOT ACID: commits are issued sequentially, so between the first and the last commit the fleet is briefly inconsistent, and a failure after something has committed ends PARTIAL — already-committed devices are reported with the snapshot id to restore them from, by hand.",
|
|
30385
30868
|
"inputSchema": {
|
|
30386
30869
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
30387
30870
|
"type": "object",
|
|
@@ -30499,7 +30982,7 @@
|
|
|
30499
30982
|
"destructiveHint": false,
|
|
30500
30983
|
"openWorldHint": false
|
|
30501
30984
|
},
|
|
30502
|
-
"description": "Queues one RouterOS command against one participant of an open transaction. Nothing runs yet — the command is applied inside that device's Safe Mode session when verify_transaction
|
|
30985
|
+
"description": "Queues one RouterOS command against one participant of an open transaction. Nothing runs yet — the command is applied inside that device's Safe Mode session when verify_transaction prepares the fleet. Queue approved commands here instead of running individual write tools outside the coordinated transaction. Call once per command; order is preserved per device. Steps can only be added before the fleet is prepared; resolve required keys and addresses first. Do not queue reboots, upgrades or commands with irreversible/external effects.",
|
|
30503
30986
|
"inputSchema": {
|
|
30504
30987
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
30505
30988
|
"type": "object",
|
|
@@ -30529,7 +31012,7 @@
|
|
|
30529
31012
|
"destructiveHint": false,
|
|
30530
31013
|
"openWorldHint": false
|
|
30531
31014
|
},
|
|
30532
|
-
"description": "PREPARE + VERIFY: opens a Safe Mode session on every participant, snapshots each device, applies its queued steps, then evaluates the declared assertions against the result — all while NOTHING is committed. This is where the safety of a cross-device change comes from: a step that errors or an assertion that fails
|
|
31015
|
+
"description": "PREPARE + VERIFY: opens a Safe Mode session on every participant, snapshots each device, applies its queued steps, then evaluates the declared assertions against the result — all while NOTHING is committed. This is where the safety of a cross-device change comes from: a step that errors or an assertion that fails triggers rollback of the staged changes. Inspect the per-device rollback result; staging already affects live traffic. On success the fleet is left PREPARED and waiting: call commit_transaction to persist or abort_transaction to discard. Annotated WRITE, not read-only: it does stage changes on the devices (auto-reverted on failure or disconnect), so it is not an inspection call. Require approval for the exact plan first. Declare meaningful assertions; an empty set is not evidence of correctness.",
|
|
30533
31016
|
"inputSchema": {
|
|
30534
31017
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
30535
31018
|
"type": "object",
|
|
@@ -30551,7 +31034,7 @@
|
|
|
30551
31034
|
"destructiveHint": true,
|
|
30552
31035
|
"openWorldHint": false
|
|
30553
31036
|
},
|
|
30554
|
-
"description": "Commits every participant, in the transaction's commit order. If the fleet has not been prepared yet this runs PREPARE and VERIFY first, so a failure before the first commit still ends ABORTED
|
|
31037
|
+
"description": "Commits every participant, in the transaction's commit order. If the fleet has not been prepared yet this runs PREPARE and VERIFY first, so a failure before the first commit still ends ABORTED before commit; inspect rollback evidence because staging may have affected live traffic. Once a device HAS committed, a later failure cannot be undone cleanly: the coordinator reports PARTIAL and names each device's state and the snapshot id to restore it from. High blast radius and not repeatable: call verify_transaction first, inspect every result, and commit only when the user's approval covers this exact plan. Never auto-commit merely because verification passed. Report txn_id and the dashboard Transactions timeline. NOT ACID: commits are issued sequentially, so between the first and the last commit the fleet is briefly inconsistent, and a failure after something has committed ends PARTIAL — already-committed devices are reported with the snapshot id to restore them from, by hand.",
|
|
30555
31038
|
"inputSchema": {
|
|
30556
31039
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
30557
31040
|
"type": "object",
|
|
@@ -30573,7 +31056,7 @@
|
|
|
30573
31056
|
"destructiveHint": false,
|
|
30574
31057
|
"openWorldHint": false
|
|
30575
31058
|
},
|
|
30576
|
-
"description": "Rolls back every participant of an open transaction — closes each Safe Mode session so RouterOS
|
|
31059
|
+
"description": "Rolls back every participant of an open transaction — closes each Safe Mode session so RouterOS can revert the staged changes. Use this for your own transaction when the plan is cancelled or commit is not approved. Inspect rollback evidence; do not assume live traffic was unaffected or that arbitrary command effects are reversible. If some devices already committed (a PARTIAL transaction), those cannot be reverted this way; the report names them and the snapshot to restore them from.",
|
|
30577
31060
|
"inputSchema": {
|
|
30578
31061
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
30579
31062
|
"type": "object",
|
|
@@ -30751,6 +31234,27 @@
|
|
|
30751
31234
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
30752
31235
|
"type": "object",
|
|
30753
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
|
+
},
|
|
30754
31258
|
"commands": {
|
|
30755
31259
|
"anyOf": [
|
|
30756
31260
|
{
|
|
@@ -30923,7 +31427,7 @@
|
|
|
30923
31427
|
"destructiveHint": false,
|
|
30924
31428
|
"openWorldHint": false
|
|
30925
31429
|
},
|
|
30926
|
-
"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.",
|
|
30927
31431
|
"inputSchema": {
|
|
30928
31432
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
30929
31433
|
"type": "object",
|
|
@@ -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
|
+
}
|