@usex/mikrotik-mcp 4.2.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -0
- package/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/dist/shared/{cli-10a2apr1.js → cli-k18dkv4w.js} +1 -1
- package/dist/shared/{cli-365rqpy1.js → cli-mm90zmj3.js} +3 -3
- package/dist/shared/{library-ndn9hj45.js → library-t0cfgfyj.js} +3 -3
- package/dist/shared/{library-wbht6e2m.js → library-tmmvpwjf.js} +1 -1
- package/dist/ui/observability.html +119 -54
- package/package.json +19 -6
- package/schemas/tool-catalog.json +4 -3
- package/schemas/tools/add_ospf_interface_template.json +2 -1
package/README.md
CHANGED
|
@@ -119,6 +119,34 @@ bun run start # serve from source
|
|
|
119
119
|
bun run build # bundle to dist/
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
+
### As an MCP Bundle (`.mcpb`)
|
|
123
|
+
|
|
124
|
+
A one-click install for Claude Desktop and other MCPB hosts — no Bun, Node or npm
|
|
125
|
+
needed on the machine, and the router credentials are entered in the host's UI
|
|
126
|
+
rather than a shell.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
bun run build:mcp # bundle for this machine
|
|
130
|
+
bun run build:mcp --target linux-x64 # or one specific target
|
|
131
|
+
bun run build:mcp:all # every target
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Bundles land in `dist-mcpb/` as `mikrotik-mcp-<version>-<platform>-<arch>.mcpb`.
|
|
135
|
+
Open one with your MCPB host (on Claude Desktop, drag it onto Settings →
|
|
136
|
+
Extensions) and fill in the router address and credentials it prompts for.
|
|
137
|
+
|
|
138
|
+
Because the server is Bun-native — `bun:sqlite`, `Bun.serve`, `Bun.S3Client`, and
|
|
139
|
+
`@tikoci/centrs`, which ships raw TypeScript — it cannot run on the Node runtime an
|
|
140
|
+
MCPB host provides. Each bundle therefore **vendors the Bun binary it was built
|
|
141
|
+
against** and runs `runtime/bun dist/cli.js serve`, so every subsystem (MAC-Telnet,
|
|
142
|
+
the dashboard, S3 backups) behaves exactly as it does from source. That costs about
|
|
143
|
+
60 MB per bundle and makes each one platform-specific — hence one artifact per
|
|
144
|
+
platform/arch rather than a single universal file.
|
|
145
|
+
|
|
146
|
+
The build stages the bundle, validates the manifest, and drives the staged server
|
|
147
|
+
over stdio (`initialize` + `tools/list`, asserting the tool count matches the
|
|
148
|
+
manifest) before packing. Pass `--no-smoke` to skip that last check.
|
|
149
|
+
|
|
122
150
|
## The tool catalog
|
|
123
151
|
|
|
124
152
|
**706 tools across 111 modules.** Full, always-current reference (parameters +
|
package/dist/cli.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
selectToolModules,
|
|
30
30
|
setConfig,
|
|
31
31
|
updateSummaryLine
|
|
32
|
-
} from "./shared/library-
|
|
32
|
+
} from "./shared/library-t0cfgfyj.js";
|
|
33
33
|
// src/server.ts
|
|
34
34
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
35
35
|
import { ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
@@ -8364,7 +8364,7 @@ var cache = null;
|
|
|
8364
8364
|
async function gateway() {
|
|
8365
8365
|
if (cache)
|
|
8366
8366
|
return cache;
|
|
8367
|
-
const { moduleCatalog } = await import("./cli-
|
|
8367
|
+
const { moduleCatalog } = await import("./cli-k18dkv4w.js");
|
|
8368
8368
|
const forIndex = [];
|
|
8369
8369
|
const byName = new Map;
|
|
8370
8370
|
for (const mod of moduleCatalog) {
|
|
@@ -23668,14 +23668,14 @@ ${result}`;
|
|
|
23668
23668
|
name: "add_ospf_interface_template",
|
|
23669
23669
|
title: "Add OSPF Interface Template",
|
|
23670
23670
|
annotations: WRITE,
|
|
23671
|
-
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), " + "
|
|
23671
|
+
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.",
|
|
23672
23672
|
inputSchema: {
|
|
23673
23673
|
area: z96.string().describe("OSPF area name to attach matched interfaces to"),
|
|
23674
23674
|
interfaces: z96.string().optional().describe("Interface or interface-list name"),
|
|
23675
23675
|
networks: z96.string().optional().describe('Network prefix(es) to enable OSPF on, e.g. "10.0.0.0/24"'),
|
|
23676
23676
|
cost: z96.number().int().optional().describe("Output cost / metric"),
|
|
23677
23677
|
priority: z96.number().int().optional().describe("DR election priority (0 = never DR)"),
|
|
23678
|
-
type: z96.enum(["broadcast", "ptp", "
|
|
23678
|
+
type: z96.enum(["broadcast", "ptp", "ptmp", "ptmp-broadcast", "nbma", "virtual-link"]).optional(),
|
|
23679
23679
|
passive: z96.boolean().optional(),
|
|
23680
23680
|
hello_interval: z96.string().optional().describe('e.g. "10s"'),
|
|
23681
23681
|
dead_interval: z96.string().optional().describe('e.g. "40s"'),
|
|
@@ -8294,7 +8294,7 @@ var cache = null;
|
|
|
8294
8294
|
async function gateway() {
|
|
8295
8295
|
if (cache)
|
|
8296
8296
|
return cache;
|
|
8297
|
-
const { moduleCatalog } = await import("./library-
|
|
8297
|
+
const { moduleCatalog } = await import("./library-tmmvpwjf.js");
|
|
8298
8298
|
const forIndex = [];
|
|
8299
8299
|
const byName = new Map;
|
|
8300
8300
|
for (const mod of moduleCatalog) {
|
|
@@ -23598,14 +23598,14 @@ ${result}`;
|
|
|
23598
23598
|
name: "add_ospf_interface_template",
|
|
23599
23599
|
title: "Add OSPF Interface Template",
|
|
23600
23600
|
annotations: WRITE,
|
|
23601
|
-
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), " + "
|
|
23601
|
+
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.",
|
|
23602
23602
|
inputSchema: {
|
|
23603
23603
|
area: z96.string().describe("OSPF area name to attach matched interfaces to"),
|
|
23604
23604
|
interfaces: z96.string().optional().describe("Interface or interface-list name"),
|
|
23605
23605
|
networks: z96.string().optional().describe('Network prefix(es) to enable OSPF on, e.g. "10.0.0.0/24"'),
|
|
23606
23606
|
cost: z96.number().int().optional().describe("Output cost / metric"),
|
|
23607
23607
|
priority: z96.number().int().optional().describe("DR election priority (0 = never DR)"),
|
|
23608
|
-
type: z96.enum(["broadcast", "ptp", "
|
|
23608
|
+
type: z96.enum(["broadcast", "ptp", "ptmp", "ptmp-broadcast", "nbma", "virtual-link"]).optional(),
|
|
23609
23609
|
passive: z96.boolean().optional(),
|
|
23610
23610
|
hello_interval: z96.string().optional().describe('e.g. "10s"'),
|
|
23611
23611
|
dead_interval: z96.string().optional().describe('e.g. "40s"'),
|