@usex/mikrotik-mcp 3.27.0 → 3.28.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": "3.26.0",
3
+ "version": "3.27.0",
4
4
  "generated": "by scripts/gen-schemas.ts — do not edit by hand",
5
- "toolCount": 738,
5
+ "toolCount": 758,
6
6
  "tools": [
7
7
  {
8
8
  "name": "list_interfaces",
@@ -26152,11 +26152,30 @@
26152
26152
  "idempotentHint": true,
26153
26153
  "openWorldHint": false
26154
26154
  },
26155
- "description": "List all storage disks (`/disk print`) attached to the MikroTik device — USB drives, NVMe, and internal flash. Use this to discover available storage and obtain disk names before calling get_disk or format_disk. Returns each disk's name, type, size, and status. For per-disk detail use get_disk.",
26155
+ "description": "List all storage devices (`/disk print`) attached to the MikroTik — NVMe, SATA/SSD, USB drives, eMMC/internal flash, their partitions, plus any RAID/rsync/RAM virtual disks. Use this to discover storage and obtain each disk's `slot` (the identifier needed by get_disk, format_disk, set_disk, share_disk, eject_disk and remove_disk). Returns slot, type, model/serial, interface, size, free space, filesystem, label and mount point. Optionally filter by partial `slot_filter`, `type_filter` (e.g. raid, partition, rsync) or `interface_filter` (e.g. nvme, usb, sata). Set `detail=true` for the full per-disk property block. For one disk use get_disk.",
26156
26156
  "inputSchema": {
26157
26157
  "$schema": "https://json-schema.org/draft/2020-12/schema",
26158
26158
  "type": "object",
26159
- "properties": {},
26159
+ "properties": {
26160
+ "slot_filter": {
26161
+ "description": "Partial slot match, e.g. 'usb'",
26162
+ "type": "string"
26163
+ },
26164
+ "type_filter": {
26165
+ "description": "Partial type match, e.g. 'raid', 'partition'",
26166
+ "type": "string"
26167
+ },
26168
+ "interface_filter": {
26169
+ "description": "Partial interface match, e.g. 'nvme', 'usb'",
26170
+ "type": "string"
26171
+ },
26172
+ "detail": {
26173
+ "default": false,
26174
+ "description": "Show the full per-disk property block",
26175
+ "type": "boolean"
26176
+ }
26177
+ },
26178
+ "required": ["detail"],
26160
26179
  "additionalProperties": false
26161
26180
  }
26162
26181
  },
@@ -26169,17 +26188,17 @@
26169
26188
  "idempotentHint": true,
26170
26189
  "openWorldHint": false
26171
26190
  },
26172
- "description": "Get detailed information about a single disk (`/disk print detail where name=...`). Use this to inspect a specific disk's filesystem type, free space, mount status, and other properties. The `name` argument takes a disk name (e.g. `disk1`) as returned by list_disks. For all disks in one call use list_disks; to erase and reformat a disk use format_disk.",
26191
+ "description": "Get full detail for a single disk by slot (`/disk print detail where slot=...`) its type, filesystem, size and free space, label, mount point, partition layout, model/serial/firmware, RAID role, SMART status, and any SMB/NFS sharing. Use list_disks to find the slot. To erase/reformat use format_disk; to change its label or sharing use set_disk / share_disk.",
26173
26192
  "inputSchema": {
26174
26193
  "$schema": "https://json-schema.org/draft/2020-12/schema",
26175
26194
  "type": "object",
26176
26195
  "properties": {
26177
- "name": {
26196
+ "slot": {
26178
26197
  "type": "string",
26179
- "description": "Disk name, e.g. 'disk1'"
26198
+ "description": "Disk slot, e.g. 'nvme1', 'usb1'"
26180
26199
  }
26181
26200
  },
26182
- "required": ["name"],
26201
+ "required": ["slot"],
26183
26202
  "additionalProperties": false
26184
26203
  }
26185
26204
  },
@@ -26191,30 +26210,740 @@
26191
26210
  "destructiveHint": true,
26192
26211
  "openWorldHint": false
26193
26212
  },
26194
- "description": "Erase and reformat a disk (`/disk format-drive`) — PERMANENTLY DESTROYS all data on the target disk. Use this to prepare a new or blank storage device for use on the router. Requires confirm=true to proceed; without it the command is aborted. Optional file_system (ext4, fat32, exfat, ntfs) selects the filesystem; optional label sets the volume label. The `name` argument takes a disk name (e.g. `disk1`) as returned by list_disks. For read-only disk inspection use list_disks or get_disk.",
26213
+ "description": "Erase and (re)format a disk or partition (`/disk format-drive`) — PERMANENTLY DESTROYS all data on the target slot. Use to prepare new storage, change filesystem, repartition, or enable encryption. Requires confirm=true. `file_system` picks the filesystem (ext4, exfat, fat32, ntfs). `label` sets the volume label. `partition_size` (e.g. '10G') formats only part of the drive (creating a partition) instead of the whole device. `encryption` + `encryption_password` create an encrypted volume (supply the RouterOS encryption value, e.g. 'aes-cbc'). Identify the disk by `slot` from list_disks. For read-only inspection use list_disks / get_disk.",
26195
26214
  "inputSchema": {
26196
26215
  "$schema": "https://json-schema.org/draft/2020-12/schema",
26197
26216
  "type": "object",
26198
26217
  "properties": {
26199
- "name": {
26218
+ "slot": {
26200
26219
  "type": "string",
26201
- "description": "Disk name to format, e.g. 'disk1'"
26220
+ "description": "Disk slot to format, e.g. 'usb1'"
26202
26221
  },
26203
26222
  "file_system": {
26204
- "description": "File system to create",
26223
+ "description": "Filesystem to create (RouterOS can format these)",
26205
26224
  "type": "string",
26206
- "enum": ["ext4", "fat32", "exfat", "ntfs"]
26225
+ "enum": ["ext4", "exfat", "fat32", "ntfs"]
26207
26226
  },
26208
26227
  "label": {
26209
26228
  "description": "Volume label",
26210
26229
  "type": "string"
26211
26230
  },
26231
+ "partition_size": {
26232
+ "description": "Format only this much as a partition, e.g. '10G' (omit = whole drive)",
26233
+ "type": "string"
26234
+ },
26235
+ "encryption": {
26236
+ "description": "Encryption algorithm to enable, e.g. 'aes-cbc' (RouterOS value)",
26237
+ "type": "string"
26238
+ },
26239
+ "encryption_password": {
26240
+ "description": "Passphrase when encryption is set",
26241
+ "type": "string"
26242
+ },
26212
26243
  "confirm": {
26213
26244
  "type": "boolean",
26214
- "description": "Must be true to actually erase the disk"
26245
+ "description": "Must be true to actually ERASE the disk"
26215
26246
  }
26216
26247
  },
26217
- "required": ["name", "confirm"],
26248
+ "required": ["slot", "confirm"],
26249
+ "additionalProperties": false
26250
+ }
26251
+ },
26252
+ {
26253
+ "name": "set_disk",
26254
+ "title": "Set Disk Properties",
26255
+ "risk": "write-idempotent",
26256
+ "annotations": {
26257
+ "destructiveHint": false,
26258
+ "idempotentHint": true,
26259
+ "openWorldHint": false
26260
+ },
26261
+ "description": "Update a disk's non-destructive properties (`/disk set [find slot=...]`) — set its `label` or `comment`, enable/disable it, or assign it to a software RAID array via `raid_master` (the slot of the RAID disk created with add_disk) or attach it under a `parent`. Does NOT erase data (use format_disk for that) and does NOT configure sharing (use share_disk). Identify by `slot` from list_disks.",
26262
+ "inputSchema": {
26263
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26264
+ "type": "object",
26265
+ "properties": {
26266
+ "slot": {
26267
+ "type": "string",
26268
+ "description": "Disk slot to modify"
26269
+ },
26270
+ "label": {
26271
+ "description": "Volume / disk label",
26272
+ "type": "string"
26273
+ },
26274
+ "comment": {
26275
+ "type": "string"
26276
+ },
26277
+ "raid_master": {
26278
+ "description": "Slot of the RAID disk to make this a member of",
26279
+ "type": "string"
26280
+ },
26281
+ "parent": {
26282
+ "description": "Parent disk slot to attach under",
26283
+ "type": "string"
26284
+ },
26285
+ "disabled": {
26286
+ "type": "boolean"
26287
+ }
26288
+ },
26289
+ "required": ["slot"],
26290
+ "additionalProperties": false
26291
+ }
26292
+ },
26293
+ {
26294
+ "name": "share_disk",
26295
+ "title": "Share a Disk over SMB / NFS",
26296
+ "risk": "write",
26297
+ "annotations": {
26298
+ "destructiveHint": false,
26299
+ "openWorldHint": false
26300
+ },
26301
+ "description": "Expose a disk on the network by setting its sharing properties (`/disk set [find slot=...]`) — toggle `smb_sharing` (Windows/macOS file sharing) with a `smb_share_name` and allowed `smb_users`, and/or `nfs_sharing` for Unix clients. RouterOS serves the share from the disk's mount point. The SMB/NFS server must be enabled on the device. Pass smb_sharing=false / nfs_sharing=false to stop sharing. Identify the disk by `slot` from list_disks.",
26302
+ "inputSchema": {
26303
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26304
+ "type": "object",
26305
+ "properties": {
26306
+ "slot": {
26307
+ "type": "string",
26308
+ "description": "Disk slot to share"
26309
+ },
26310
+ "smb_sharing": {
26311
+ "description": "Enable/disable SMB (CIFS) sharing",
26312
+ "type": "boolean"
26313
+ },
26314
+ "smb_share_name": {
26315
+ "description": "SMB share name shown to clients",
26316
+ "type": "string"
26317
+ },
26318
+ "smb_users": {
26319
+ "description": "Comma-separated SMB users allowed to access the share",
26320
+ "type": "string"
26321
+ },
26322
+ "nfs_sharing": {
26323
+ "description": "Enable/disable NFS sharing",
26324
+ "type": "boolean"
26325
+ }
26326
+ },
26327
+ "required": ["slot"],
26328
+ "additionalProperties": false
26329
+ }
26330
+ },
26331
+ {
26332
+ "name": "add_disk",
26333
+ "title": "Add a Virtual Disk (RAID / rsync / RAM)",
26334
+ "risk": "write",
26335
+ "annotations": {
26336
+ "destructiveHint": false,
26337
+ "openWorldHint": false
26338
+ },
26339
+ "description": "Create a virtual disk (`/disk add`). Use `type` to pick the kind: `raid` (software RAID array — set `raid_type` such as raid0/raid1/raid5/raid6/raid10, then add member drives with set_disk raid_master=<new slot>), `rsync` (a network rsync backup target), or `tmpfs` (a RAM disk — set `tmpfs_max_size`, e.g. '256M'). Optionally name the new disk via `slot`. `properties` passes any additional RouterOS attribute=value pairs for the chosen type (e.g. rsync-target, nfs-server). Requires RouterOS 7.x with disk/RAID support. To delete a virtual disk use remove_disk.",
26340
+ "inputSchema": {
26341
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26342
+ "type": "object",
26343
+ "properties": {
26344
+ "type": {
26345
+ "type": "string",
26346
+ "description": "Virtual disk type: 'raid', 'rsync', 'tmpfs', 'encrypted', …"
26347
+ },
26348
+ "slot": {
26349
+ "description": "Name/slot for the new virtual disk",
26350
+ "type": "string"
26351
+ },
26352
+ "raid_type": {
26353
+ "description": "For type=raid, e.g. 'raid1', 'raid5'",
26354
+ "type": "string"
26355
+ },
26356
+ "tmpfs_max_size": {
26357
+ "description": "For type=tmpfs, e.g. '256M'",
26358
+ "type": "string"
26359
+ },
26360
+ "comment": {
26361
+ "type": "string"
26362
+ },
26363
+ "properties": {
26364
+ "description": "Extra RouterOS attribute=value pairs for this disk type",
26365
+ "type": "object",
26366
+ "propertyNames": {
26367
+ "type": "string"
26368
+ },
26369
+ "additionalProperties": {
26370
+ "type": "string"
26371
+ }
26372
+ }
26373
+ },
26374
+ "required": ["type"],
26375
+ "additionalProperties": false
26376
+ }
26377
+ },
26378
+ {
26379
+ "name": "eject_disk",
26380
+ "title": "Eject Removable Disk",
26381
+ "risk": "write",
26382
+ "annotations": {
26383
+ "destructiveHint": false,
26384
+ "openWorldHint": false
26385
+ },
26386
+ "description": "Safely eject / unmount a removable disk (`/disk eject`) so it can be physically unplugged without data loss — flushes caches and unmounts the device. Use for USB drives and other hot-pluggable media before removal. Identify by `slot` from list_disks. This does not erase data; to delete a virtual disk entry use remove_disk.",
26387
+ "inputSchema": {
26388
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26389
+ "type": "object",
26390
+ "properties": {
26391
+ "slot": {
26392
+ "type": "string",
26393
+ "description": "Disk slot to eject, e.g. 'usb1'"
26394
+ }
26395
+ },
26396
+ "required": ["slot"],
26397
+ "additionalProperties": false
26398
+ }
26399
+ },
26400
+ {
26401
+ "name": "remove_disk",
26402
+ "title": "Remove a Virtual Disk Entry",
26403
+ "risk": "destructive",
26404
+ "annotations": {
26405
+ "destructiveHint": true,
26406
+ "idempotentHint": true,
26407
+ "openWorldHint": false
26408
+ },
26409
+ "description": "Delete a virtual disk entry (`/disk remove [find slot=...]`) — for software RAID arrays, rsync targets, RAM disks and other entries created with add_disk. Verifies the disk exists first. This removes the logical disk (and, for a RAID, breaks the array); it is NOT for formatting a physical drive — use format_disk for that, or eject_disk to safely unplug removable media. Identify by `slot`.",
26410
+ "inputSchema": {
26411
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26412
+ "type": "object",
26413
+ "properties": {
26414
+ "slot": {
26415
+ "type": "string",
26416
+ "description": "Virtual disk slot to remove"
26417
+ }
26418
+ },
26419
+ "required": ["slot"],
26420
+ "additionalProperties": false
26421
+ }
26422
+ },
26423
+ {
26424
+ "name": "list_containers",
26425
+ "title": "List Containers",
26426
+ "risk": "read",
26427
+ "annotations": {
26428
+ "readOnlyHint": true,
26429
+ "idempotentHint": true,
26430
+ "openWorldHint": false
26431
+ },
26432
+ "description": "List every OCI container on the device (`/container print`) with its status, image tag, name, VETH interface and root-dir — the starting point for any container work and the way to POLL the lifecycle, which is asynchronous: status moves extracting → stopped (ready to start) → running. Use this to find the `name`/`tag` the other tools take, to confirm an add has finished extracting before start_container, and to confirm a stop has completed before remove_container. Filter by partial `name_filter`, `tag_filter`, or `status_filter` (e.g. 'running', 'stopped'); set `detail=true` for the full property block. For one container use get_container. A container's stdout/stderr is in the system log (`/log print where topics~\"container\"`) when it was created with logging=yes.",
26433
+ "inputSchema": {
26434
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26435
+ "type": "object",
26436
+ "properties": {
26437
+ "name_filter": {
26438
+ "description": "Partial container name match",
26439
+ "type": "string"
26440
+ },
26441
+ "tag_filter": {
26442
+ "description": "Partial image tag match",
26443
+ "type": "string"
26444
+ },
26445
+ "status_filter": {
26446
+ "description": "e.g. 'running', 'stopped'",
26447
+ "type": "string"
26448
+ },
26449
+ "detail": {
26450
+ "default": false,
26451
+ "description": "Show the full per-container property block",
26452
+ "type": "boolean"
26453
+ }
26454
+ },
26455
+ "required": ["detail"],
26456
+ "additionalProperties": false
26457
+ }
26458
+ },
26459
+ {
26460
+ "name": "get_container",
26461
+ "title": "Get Container Detail",
26462
+ "risk": "read",
26463
+ "annotations": {
26464
+ "readOnlyHint": true,
26465
+ "idempotentHint": true,
26466
+ "openWorldHint": false
26467
+ },
26468
+ "description": "Full detail for one container (`/container print detail`) — status, image tag, interface, root-dir, env/mounts, cmd/entrypoint, hostname/dns, logging and start-on-boot. Identify by `name` (preferred) or `tag`. Use list_containers to discover identifiers.",
26469
+ "inputSchema": {
26470
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26471
+ "type": "object",
26472
+ "properties": {
26473
+ "name": {
26474
+ "description": "Container name (set via add_container)",
26475
+ "type": "string"
26476
+ },
26477
+ "tag": {
26478
+ "description": "Image tag to match (e.g. 'pihole') if no name",
26479
+ "type": "string"
26480
+ }
26481
+ },
26482
+ "additionalProperties": false
26483
+ }
26484
+ },
26485
+ {
26486
+ "name": "add_container",
26487
+ "title": "Add Container",
26488
+ "risk": "write",
26489
+ "annotations": {
26490
+ "destructiveHint": false,
26491
+ "openWorldHint": false
26492
+ },
26493
+ "description": "Create an OCI container (`/container add`). PREREQUISITES, in order: (1) the `container` package installed + device-mode `container=yes`; (2) an external disk for storage (containers should never run on internal flash); (3) for `remote_image`, a registry URL + on-disk `tmpdir` set via set_container_config; (4) a VETH for networking — create it first with `/interface veth add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1`, then bridge it and add a srcnat masquerade rule for internet (and a dst-nat to publish a port). Then create the container: supply EITHER `remote_image` (registry pull, e.g. 'library/alpine:latest') OR `file` (a local image tar on the device — must be a SINGLE-LAYER, UNCOMPRESSED Docker-v1 tar). Set `interface` to the VETH and `root_dir` to a path on the external disk (e.g. 'disk1/myapp'). Attach config via inline `env` ('K=v,K2=v2') / `mount` ('src=disk1/data,dst=/data'), or reference named lists with `envlists`/`mountlists` (add_container_env / add_container_mount). Override `cmd`/`entrypoint`/`workdir`; set `hostname`/`dns`; enable `logging`/`start_on_boot`; cap `memory_high`/`cpu_list`. ALWAYS set `name` so the lifecycle tools can find it. The image pull/extract is ASYNCHRONOUS: this returns immediately, then poll list_containers until status becomes 'stopped' (extraction done) before calling start_container.",
26494
+ "inputSchema": {
26495
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26496
+ "type": "object",
26497
+ "properties": {
26498
+ "name": {
26499
+ "description": "Container name (recommended for management)",
26500
+ "type": "string"
26501
+ },
26502
+ "remote_image": {
26503
+ "description": "Registry image, e.g. 'library/alpine:latest'",
26504
+ "type": "string"
26505
+ },
26506
+ "file": {
26507
+ "description": "Local Docker-v1 tar on the device (alternative to remote_image)",
26508
+ "type": "string"
26509
+ },
26510
+ "interface": {
26511
+ "description": "VETH interface name",
26512
+ "type": "string"
26513
+ },
26514
+ "root_dir": {
26515
+ "description": "Filesystem root, e.g. 'disk1/myapp'",
26516
+ "type": "string"
26517
+ },
26518
+ "env": {
26519
+ "description": "Inline env vars: 'K=v,K2=v2' (7.21+)",
26520
+ "type": "string"
26521
+ },
26522
+ "envlists": {
26523
+ "description": "Named env list name(s) (add_container_env)",
26524
+ "type": "string"
26525
+ },
26526
+ "mount": {
26527
+ "description": "Inline mount: 'src=disk1/data,dst=/data' (7.21+)",
26528
+ "type": "string"
26529
+ },
26530
+ "mountlists": {
26531
+ "description": "Named mount name(s) (add_container_mount)",
26532
+ "type": "string"
26533
+ },
26534
+ "cmd": {
26535
+ "description": "Override container CMD",
26536
+ "type": "string"
26537
+ },
26538
+ "entrypoint": {
26539
+ "description": "Override container ENTRYPOINT",
26540
+ "type": "string"
26541
+ },
26542
+ "workdir": {
26543
+ "description": "Override working directory",
26544
+ "type": "string"
26545
+ },
26546
+ "hostname": {
26547
+ "type": "string"
26548
+ },
26549
+ "dns": {
26550
+ "description": "DNS server for the container",
26551
+ "type": "string"
26552
+ },
26553
+ "user": {
26554
+ "type": "string"
26555
+ },
26556
+ "stop_signal": {
26557
+ "description": "Signal used to stop the container",
26558
+ "type": "string"
26559
+ },
26560
+ "devices": {
26561
+ "description": "Pass-through physical devices (7.20+)",
26562
+ "type": "string"
26563
+ },
26564
+ "cpu_list": {
26565
+ "description": "CPU core affinity",
26566
+ "type": "string"
26567
+ },
26568
+ "memory_high": {
26569
+ "description": "RAM limit, e.g. '256M'",
26570
+ "type": "string"
26571
+ },
26572
+ "logging": {
26573
+ "description": "Send stdout/stderr to the RouterOS log",
26574
+ "type": "boolean"
26575
+ },
26576
+ "start_on_boot": {
26577
+ "description": "Auto-start on device boot",
26578
+ "type": "boolean"
26579
+ },
26580
+ "comment": {
26581
+ "type": "string"
26582
+ }
26583
+ },
26584
+ "additionalProperties": false
26585
+ }
26586
+ },
26587
+ {
26588
+ "name": "update_container",
26589
+ "title": "Update Container",
26590
+ "risk": "write-idempotent",
26591
+ "annotations": {
26592
+ "destructiveHint": false,
26593
+ "idempotentHint": true,
26594
+ "openWorldHint": false
26595
+ },
26596
+ "description": "Modify an existing container's properties in place (`/container set [find …]`) without recreating it — change `start_on_boot`, `logging`, `cmd`/`entrypoint`/`workdir`, `hostname`/`dns`, `interface`, `root_dir`, inline `env`/`mount` or `envlists`/`mountlists`, resource caps, or `comment`. Identify by `name` or `tag`. Best practice: stop the container first (stop_container) before changing runtime properties like interface, env, mounts or cmd — they take effect on the next start_container, not live. To create a new container use add_container; to change the image, remove and re-add.",
26597
+ "inputSchema": {
26598
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26599
+ "type": "object",
26600
+ "properties": {
26601
+ "name": {
26602
+ "description": "Container name (set via add_container)",
26603
+ "type": "string"
26604
+ },
26605
+ "tag": {
26606
+ "description": "Image tag to match (e.g. 'pihole') if no name",
26607
+ "type": "string"
26608
+ },
26609
+ "interface": {
26610
+ "type": "string"
26611
+ },
26612
+ "root_dir": {
26613
+ "type": "string"
26614
+ },
26615
+ "env": {
26616
+ "type": "string"
26617
+ },
26618
+ "envlists": {
26619
+ "type": "string"
26620
+ },
26621
+ "mount": {
26622
+ "type": "string"
26623
+ },
26624
+ "mountlists": {
26625
+ "type": "string"
26626
+ },
26627
+ "cmd": {
26628
+ "type": "string"
26629
+ },
26630
+ "entrypoint": {
26631
+ "type": "string"
26632
+ },
26633
+ "workdir": {
26634
+ "type": "string"
26635
+ },
26636
+ "hostname": {
26637
+ "type": "string"
26638
+ },
26639
+ "dns": {
26640
+ "type": "string"
26641
+ },
26642
+ "cpu_list": {
26643
+ "type": "string"
26644
+ },
26645
+ "memory_high": {
26646
+ "type": "string"
26647
+ },
26648
+ "logging": {
26649
+ "type": "boolean"
26650
+ },
26651
+ "start_on_boot": {
26652
+ "type": "boolean"
26653
+ },
26654
+ "comment": {
26655
+ "type": "string"
26656
+ }
26657
+ },
26658
+ "additionalProperties": false
26659
+ }
26660
+ },
26661
+ {
26662
+ "name": "start_container",
26663
+ "title": "Start Container",
26664
+ "risk": "write",
26665
+ "annotations": {
26666
+ "destructiveHint": false,
26667
+ "openWorldHint": false
26668
+ },
26669
+ "description": "Start a stopped container (`/container start [find …]`). Identify by `name` or `tag`. The container must have finished extracting (status 'stopped') first — check with list_containers. View its output in the log when logging=yes. To stop it use stop_container.",
26670
+ "inputSchema": {
26671
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26672
+ "type": "object",
26673
+ "properties": {
26674
+ "name": {
26675
+ "description": "Container name (set via add_container)",
26676
+ "type": "string"
26677
+ },
26678
+ "tag": {
26679
+ "description": "Image tag to match (e.g. 'pihole') if no name",
26680
+ "type": "string"
26681
+ }
26682
+ },
26683
+ "additionalProperties": false
26684
+ }
26685
+ },
26686
+ {
26687
+ "name": "stop_container",
26688
+ "title": "Stop Container",
26689
+ "risk": "write",
26690
+ "annotations": {
26691
+ "destructiveHint": false,
26692
+ "openWorldHint": false
26693
+ },
26694
+ "description": "Stop a running container (`/container stop [find …]`). Identify by `name` or `tag`. Stopping is asynchronous — poll list_containers until status is 'stopped' before removing it. To start it again use start_container.",
26695
+ "inputSchema": {
26696
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26697
+ "type": "object",
26698
+ "properties": {
26699
+ "name": {
26700
+ "description": "Container name (set via add_container)",
26701
+ "type": "string"
26702
+ },
26703
+ "tag": {
26704
+ "description": "Image tag to match (e.g. 'pihole') if no name",
26705
+ "type": "string"
26706
+ }
26707
+ },
26708
+ "additionalProperties": false
26709
+ }
26710
+ },
26711
+ {
26712
+ "name": "remove_container",
26713
+ "title": "Remove Container",
26714
+ "risk": "destructive",
26715
+ "annotations": {
26716
+ "destructiveHint": true,
26717
+ "idempotentHint": true,
26718
+ "openWorldHint": false
26719
+ },
26720
+ "description": "Permanently delete a container (`/container remove [find …]`). The container must be FULLY STOPPED first — RouterOS rejects removal while it is running or still stopping. If removal fails for that reason, stop it (stop_container), wait until list_containers shows status 'stopped', then retry. Identify by `name` or `tag`. This does not delete its root-dir data on disk.",
26721
+ "inputSchema": {
26722
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26723
+ "type": "object",
26724
+ "properties": {
26725
+ "name": {
26726
+ "description": "Container name (set via add_container)",
26727
+ "type": "string"
26728
+ },
26729
+ "tag": {
26730
+ "description": "Image tag to match (e.g. 'pihole') if no name",
26731
+ "type": "string"
26732
+ }
26733
+ },
26734
+ "additionalProperties": false
26735
+ }
26736
+ },
26737
+ {
26738
+ "name": "get_container_config",
26739
+ "title": "Get Container Global Config",
26740
+ "risk": "read",
26741
+ "annotations": {
26742
+ "readOnlyHint": true,
26743
+ "idempotentHint": true,
26744
+ "openWorldHint": false
26745
+ },
26746
+ "description": "Read the global container configuration (`/container config print`) — the image registry URL, the tmpdir used for pulls/extraction, the layer directory, and the RAM-high limit. Use to verify the registry/tmpdir are set before pulling images. To change them use set_container_config.",
26747
+ "inputSchema": {
26748
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26749
+ "type": "object",
26750
+ "properties": {},
26751
+ "additionalProperties": false
26752
+ }
26753
+ },
26754
+ {
26755
+ "name": "set_container_config",
26756
+ "title": "Set Container Global Config",
26757
+ "risk": "write-idempotent",
26758
+ "annotations": {
26759
+ "destructiveHint": false,
26760
+ "idempotentHint": true,
26761
+ "openWorldHint": false
26762
+ },
26763
+ "description": "Configure the global container settings (`/container config set`) — the router-wide singleton that MUST be set before pulling any `remote_image` with add_container. Set `registry_url` (Docker Hub is 'https://registry-1.docker.io') and `tmpdir` to a path on an EXTERNAL disk (e.g. 'disk1/pull') — pulls and extraction need real space and IOPS, never internal flash. Optionally set `layer_dir`, a `ram_high` cap, and `username`/`password` for a private registry (credentials are redacted from output). The router also needs working DNS + internet to reach the registry. To read the current values use get_container_config.",
26764
+ "inputSchema": {
26765
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26766
+ "type": "object",
26767
+ "properties": {
26768
+ "registry_url": {
26769
+ "description": "Image registry URL",
26770
+ "type": "string"
26771
+ },
26772
+ "tmpdir": {
26773
+ "description": "Pull/extract temp dir, e.g. 'disk1/pull'",
26774
+ "type": "string"
26775
+ },
26776
+ "layer_dir": {
26777
+ "description": "Directory for extracted image layers",
26778
+ "type": "string"
26779
+ },
26780
+ "ram_high": {
26781
+ "description": "RAM-high limit, e.g. '256M'",
26782
+ "type": "string"
26783
+ },
26784
+ "username": {
26785
+ "description": "Registry username (private registries)",
26786
+ "type": "string"
26787
+ },
26788
+ "password": {
26789
+ "description": "Registry password (private registries)",
26790
+ "type": "string"
26791
+ }
26792
+ },
26793
+ "additionalProperties": false
26794
+ }
26795
+ },
26796
+ {
26797
+ "name": "list_container_envs",
26798
+ "title": "List Container Env Variables",
26799
+ "risk": "read",
26800
+ "annotations": {
26801
+ "readOnlyHint": true,
26802
+ "idempotentHint": true,
26803
+ "openWorldHint": false
26804
+ },
26805
+ "description": "List named environment-variable entries (`/container envs print`) — each has a `list` (the group name referenced by a container's envlists), a `key` and a `value`. Optionally filter by partial `list_filter`. To add one use add_container_env; to delete use remove_container_env.",
26806
+ "inputSchema": {
26807
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26808
+ "type": "object",
26809
+ "properties": {
26810
+ "list_filter": {
26811
+ "description": "Partial env-list (group) name match",
26812
+ "type": "string"
26813
+ }
26814
+ },
26815
+ "additionalProperties": false
26816
+ }
26817
+ },
26818
+ {
26819
+ "name": "add_container_env",
26820
+ "title": "Add Container Env Variable",
26821
+ "risk": "write",
26822
+ "annotations": {
26823
+ "destructiveHint": false,
26824
+ "openWorldHint": false
26825
+ },
26826
+ "description": "Add an environment variable to a named list (`/container envs add list= key= value=`). Group related variables under the same `list` name, then point a container at the group with `envlists=<list>` (add_container or update_container) — a container that is already running must be restarted to pick up env changes. Named lists are reusable across containers; for a one-off, self-contained setup the inline `env` on add_container is simpler. The grouping `list=` property requires RouterOS 7.20+. Values may be secrets and are redacted from output.",
26827
+ "inputSchema": {
26828
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26829
+ "type": "object",
26830
+ "properties": {
26831
+ "list": {
26832
+ "type": "string",
26833
+ "description": "Env-list (group) name, e.g. 'MYAPP'"
26834
+ },
26835
+ "key": {
26836
+ "type": "string",
26837
+ "description": "Variable name, e.g. 'TZ'"
26838
+ },
26839
+ "value": {
26840
+ "type": "string",
26841
+ "description": "Variable value"
26842
+ }
26843
+ },
26844
+ "required": ["list", "key", "value"],
26845
+ "additionalProperties": false
26846
+ }
26847
+ },
26848
+ {
26849
+ "name": "remove_container_env",
26850
+ "title": "Remove Container Env Variable",
26851
+ "risk": "destructive",
26852
+ "annotations": {
26853
+ "destructiveHint": true,
26854
+ "idempotentHint": true,
26855
+ "openWorldHint": false
26856
+ },
26857
+ "description": "Delete an environment variable from a list (`/container envs remove [find list= key=]`). Supply the `list` (group) name and the `key`. Verifies it exists first. To browse entries use list_container_envs.",
26858
+ "inputSchema": {
26859
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26860
+ "type": "object",
26861
+ "properties": {
26862
+ "list": {
26863
+ "type": "string",
26864
+ "description": "Env-list (group) name"
26865
+ },
26866
+ "key": {
26867
+ "type": "string",
26868
+ "description": "Variable name to remove"
26869
+ }
26870
+ },
26871
+ "required": ["list", "key"],
26872
+ "additionalProperties": false
26873
+ }
26874
+ },
26875
+ {
26876
+ "name": "list_container_mounts",
26877
+ "title": "List Container Mounts",
26878
+ "risk": "read",
26879
+ "annotations": {
26880
+ "readOnlyHint": true,
26881
+ "idempotentHint": true,
26882
+ "openWorldHint": false
26883
+ },
26884
+ "description": "List named volume mounts (`/container mounts print`) — each has a `name` (referenced by a container's mountlists), a host source `src` (e.g. 'disk1/appdata') and a container destination `dst` (e.g. '/data'). Optionally filter by partial `name_filter`. To add one use add_container_mount; to delete use remove_container_mount.",
26885
+ "inputSchema": {
26886
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26887
+ "type": "object",
26888
+ "properties": {
26889
+ "name_filter": {
26890
+ "description": "Partial mount name match",
26891
+ "type": "string"
26892
+ }
26893
+ },
26894
+ "additionalProperties": false
26895
+ }
26896
+ },
26897
+ {
26898
+ "name": "add_container_mount",
26899
+ "title": "Add Container Mount",
26900
+ "risk": "write",
26901
+ "annotations": {
26902
+ "destructiveHint": false,
26903
+ "openWorldHint": false
26904
+ },
26905
+ "description": "Create a named volume mount (`/container mounts add name= src= dst=`) — persists container data on the host so it survives restarts/recreation. Maps a host source `src` (put it on an EXTERNAL disk, e.g. 'disk1/appdata', never internal flash) to a path `dst` inside the container (e.g. '/data'). Point a container at it with `mountlists=<name>` (add_container or update_container); a running container must be restarted to apply mount changes. For a one-off, the inline `mount` on add_container is simpler. Named mounts and `mountlists` require RouterOS 7.21+.",
26906
+ "inputSchema": {
26907
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26908
+ "type": "object",
26909
+ "properties": {
26910
+ "name": {
26911
+ "type": "string",
26912
+ "description": "Mount name, e.g. 'appdata'"
26913
+ },
26914
+ "src": {
26915
+ "type": "string",
26916
+ "description": "Host source path, e.g. 'disk1/appdata'"
26917
+ },
26918
+ "dst": {
26919
+ "type": "string",
26920
+ "description": "Container destination path, e.g. '/data'"
26921
+ }
26922
+ },
26923
+ "required": ["name", "src", "dst"],
26924
+ "additionalProperties": false
26925
+ }
26926
+ },
26927
+ {
26928
+ "name": "remove_container_mount",
26929
+ "title": "Remove Container Mount",
26930
+ "risk": "destructive",
26931
+ "annotations": {
26932
+ "destructiveHint": true,
26933
+ "idempotentHint": true,
26934
+ "openWorldHint": false
26935
+ },
26936
+ "description": "Delete a named volume mount (`/container mounts remove [find name=...]`). Verifies it exists first. Does not delete the host data at `src`. To browse mounts use list_container_mounts.",
26937
+ "inputSchema": {
26938
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
26939
+ "type": "object",
26940
+ "properties": {
26941
+ "name": {
26942
+ "type": "string",
26943
+ "description": "Mount name to remove"
26944
+ }
26945
+ },
26946
+ "required": ["name"],
26218
26947
  "additionalProperties": false
26219
26948
  }
26220
26949
  },