@nwire/mcp 0.9.1 → 0.10.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 +52 -61
- package/dist/index.d.ts +2 -2
- package/dist/index.js +12 -2
- package/dist/inspect.d.ts +0 -1
- package/dist/inspect.js +0 -1
- package/dist/internal/command-router.d.ts +39 -0
- package/dist/internal/command-router.js +112 -0
- package/dist/internal/event-bus.d.ts +72 -0
- package/dist/internal/event-bus.js +34 -0
- package/dist/internal/index.d.ts +10 -0
- package/dist/internal/index.js +10 -0
- package/dist/internal/kernel.d.ts +24 -0
- package/dist/internal/kernel.js +53 -0
- package/dist/mcp-adapter.d.ts +35 -0
- package/dist/mcp-adapter.js +89 -0
- package/dist/write-tools.d.ts +8 -2
- package/dist/write-tools.js +12 -4
- package/package.json +7 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/inspect.d.ts.map +0 -1
- package/dist/inspect.js.map +0 -1
- package/dist/write-tools.d.ts.map +0 -1
- package/dist/write-tools.js.map +0 -1
- package/src/__tests__/inspect-tools.test.ts +0 -341
- package/src/__tests__/mcp-io.test.ts +0 -182
- package/src/__tests__/mcp.test.ts +0 -48
- package/src/__tests__/write-tools.test.ts +0 -354
- package/src/index.ts +0 -339
- package/src/inspect.ts +0 -329
- package/src/write-tools.ts +0 -237
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@nwire/mcp` — Adapter shape for 0.10.
|
|
3
|
+
*
|
|
4
|
+
* import { mcpAdapter } from "@nwire/mcp";
|
|
5
|
+
*
|
|
6
|
+
* const mcp = mcpAdapter();
|
|
7
|
+
* await endpoint("svc", { port: 3000 })
|
|
8
|
+
* .use(httpKoa({ prefix: "/api" }))
|
|
9
|
+
* .use(mcp)
|
|
10
|
+
* .mount(app)
|
|
11
|
+
* .run();
|
|
12
|
+
*
|
|
13
|
+
* const tools = mcp.list(); // [{ name, description, input }]
|
|
14
|
+
* const result = await mcp.call("create-task", { title: "x" });
|
|
15
|
+
*
|
|
16
|
+
* Consumes wires whose `binding.$adapter === "mcp"` + `binding.kind === "tool"`.
|
|
17
|
+
* In-process introspection (`list`, `call`) makes the adapter testable without
|
|
18
|
+
* spinning up an MCP stdio server. The legacy `serveMcp(...)` stdio entry
|
|
19
|
+
* stays available via the package's main export.
|
|
20
|
+
*/
|
|
21
|
+
import { dummyContainer } from "@nwire/container";
|
|
22
|
+
import { ConsoleLogger } from "@nwire/logger";
|
|
23
|
+
function isToolBinding(b) {
|
|
24
|
+
return (typeof b === "object" &&
|
|
25
|
+
b !== null &&
|
|
26
|
+
b.$adapter === "mcp" &&
|
|
27
|
+
b.kind === "tool" &&
|
|
28
|
+
typeof b.tool === "string");
|
|
29
|
+
}
|
|
30
|
+
export function mcpAdapter(config = {}) {
|
|
31
|
+
const logger = config.logger ?? new ConsoleLogger();
|
|
32
|
+
let tools = new Map();
|
|
33
|
+
let bootCtx;
|
|
34
|
+
return {
|
|
35
|
+
$kind: "adapter",
|
|
36
|
+
kind: "mcp",
|
|
37
|
+
list() {
|
|
38
|
+
return [...tools.values()].map(({ binding }) => ({
|
|
39
|
+
name: binding.tool,
|
|
40
|
+
description: binding.description,
|
|
41
|
+
inputSchema: binding.input,
|
|
42
|
+
}));
|
|
43
|
+
},
|
|
44
|
+
async call(toolName, input) {
|
|
45
|
+
const entry = tools.get(toolName);
|
|
46
|
+
if (!entry)
|
|
47
|
+
throw new Error(`unknown MCP tool: ${toolName}`);
|
|
48
|
+
if (!bootCtx)
|
|
49
|
+
throw new Error("mcpAdapter not booted");
|
|
50
|
+
const { wire, binding } = entry;
|
|
51
|
+
let parsedInput = input;
|
|
52
|
+
if (binding.input) {
|
|
53
|
+
parsedInput = binding.input.parse(input);
|
|
54
|
+
}
|
|
55
|
+
const parentContainer = bootCtx.containerOf(wire) ?? dummyContainer();
|
|
56
|
+
const reqContainer = parentContainer.createScope();
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
58
|
+
const wireApp = wire.app;
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
60
|
+
const runtimeExecute = wireApp?.runtime?.execute;
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
62
|
+
const hasRunMethod = typeof wire.handler?.run === "function";
|
|
63
|
+
if (runtimeExecute && hasRunMethod) {
|
|
64
|
+
return await runtimeExecute.call(wireApp.runtime, wire.handler, parsedInput, {});
|
|
65
|
+
}
|
|
66
|
+
const handlerCtx = {
|
|
67
|
+
resolve: (name) => reqContainer.resolve(name),
|
|
68
|
+
logger,
|
|
69
|
+
};
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
71
|
+
const fn = wire.handler.run ?? wire.handler;
|
|
72
|
+
return await fn(parsedInput, handlerCtx);
|
|
73
|
+
},
|
|
74
|
+
async boot(ctx) {
|
|
75
|
+
bootCtx = ctx;
|
|
76
|
+
tools = new Map();
|
|
77
|
+
for (const wire of ctx.wires) {
|
|
78
|
+
if (!isToolBinding(wire.binding))
|
|
79
|
+
continue;
|
|
80
|
+
tools.set(wire.binding.tool, { wire, binding: wire.binding });
|
|
81
|
+
}
|
|
82
|
+
ctx.addCheck({ name: "mcp", check: () => undefined });
|
|
83
|
+
},
|
|
84
|
+
async shutdown() {
|
|
85
|
+
tools = new Map();
|
|
86
|
+
bootCtx = undefined;
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
package/dist/write-tools.d.ts
CHANGED
|
@@ -15,13 +15,19 @@
|
|
|
15
15
|
* `tools/list`, but the call returns `isError: true` with an explicit
|
|
16
16
|
* "endpoint not implemented on wire side" message rather than
|
|
17
17
|
* synthesizing a fake response. The companion follow-up in
|
|
18
|
-
* `@nwire/
|
|
18
|
+
* `@nwire/koa` will mount the missing routes.
|
|
19
19
|
*
|
|
20
20
|
* These tools register alongside `inspectTools` and reuse the same URL
|
|
21
21
|
* discovery cache (`discoverInspectUrl`). They do NOT modify the
|
|
22
22
|
* existing read-only surface.
|
|
23
23
|
*/
|
|
24
24
|
import { type InspectToolDef } from "./inspect.js";
|
|
25
|
+
/**
|
|
26
|
+
* Tools advertised in `tools/list`. We expose only the tools whose
|
|
27
|
+
* wire-side endpoints are mounted today. `run_command` and
|
|
28
|
+
* `replay_trace` keep their handler definitions above so they're easy
|
|
29
|
+
* to revive when `/_nwire/command` and `/_nwire/replay` land; they
|
|
30
|
+
* just don't appear in the advertised list until then.
|
|
31
|
+
*/
|
|
25
32
|
export declare const writeTools: readonly InspectToolDef[];
|
|
26
33
|
export declare function findWriteTool(name: string): InspectToolDef | undefined;
|
|
27
|
-
//# sourceMappingURL=write-tools.d.ts.map
|
package/dist/write-tools.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* `tools/list`, but the call returns `isError: true` with an explicit
|
|
16
16
|
* "endpoint not implemented on wire side" message rather than
|
|
17
17
|
* synthesizing a fake response. The companion follow-up in
|
|
18
|
-
* `@nwire/
|
|
18
|
+
* `@nwire/koa` will mount the missing routes.
|
|
19
19
|
*
|
|
20
20
|
* These tools register alongside `inspectTools` and reuse the same URL
|
|
21
21
|
* discovery cache (`discoverInspectUrl`). They do NOT modify the
|
|
@@ -203,8 +203,16 @@ const replayTrace = {
|
|
|
203
203
|
return body;
|
|
204
204
|
},
|
|
205
205
|
};
|
|
206
|
-
|
|
206
|
+
/**
|
|
207
|
+
* Tools advertised in `tools/list`. We expose only the tools whose
|
|
208
|
+
* wire-side endpoints are mounted today. `run_command` and
|
|
209
|
+
* `replay_trace` keep their handler definitions above so they're easy
|
|
210
|
+
* to revive when `/_nwire/command` and `/_nwire/replay` land; they
|
|
211
|
+
* just don't appear in the advertised list until then.
|
|
212
|
+
*/
|
|
213
|
+
export const writeTools = [dispatchAction];
|
|
214
|
+
/** All write tools (advertised + gap-flagged) — used by `findWriteTool`. */
|
|
215
|
+
const allWriteTools = [dispatchAction, runCommand, replayTrace];
|
|
207
216
|
export function findWriteTool(name) {
|
|
208
|
-
return
|
|
217
|
+
return allWriteTools.find((t) => t.name === name);
|
|
209
218
|
}
|
|
210
|
-
//# sourceMappingURL=write-tools.js.map
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nwire/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Nwire MCP (Model Context Protocol) server — exposes the kernel's CommandRouter as MCP tools over stdio. AI clients (Claude, Cursor, …) drive nwire commands the same way the CLI and Studio do.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"files": [
|
|
8
8
|
"dist",
|
|
9
|
-
"
|
|
9
|
+
"README.md",
|
|
10
10
|
"LICENSE"
|
|
11
11
|
],
|
|
12
12
|
"type": "module",
|
|
@@ -22,7 +22,11 @@
|
|
|
22
22
|
"access": "public"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@nwire/
|
|
25
|
+
"@nwire/container": "0.10.0",
|
|
26
|
+
"@nwire/logger": "0.10.0",
|
|
27
|
+
"@nwire/endpoint": "0.10.0",
|
|
28
|
+
"@nwire/wires": "0.10.0",
|
|
29
|
+
"@nwire/supervisor": "0.10.0"
|
|
26
30
|
},
|
|
27
31
|
"devDependencies": {
|
|
28
32
|
"@types/node": "^22.19.9",
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAoC,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAM9E,UAAU,cAAc;IACtB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,UAAU,eAAe;IACvB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACpE;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AASD,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CACzC;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC3E;AAoND,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AACzF,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/inspect.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAwBH,kEAAkE;AAClE,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAetE;AAoGD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACnE;AA8BD,eAAO,MAAM,YAAY,EAAE,SAAS,cAAc,EAsHjD,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAExE"}
|
package/dist/inspect.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"write-tools.d.ts","sourceRoot":"","sources":["../src/write-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AA+MvE,eAAO,MAAM,UAAU,EAAE,SAAS,cAAc,EAA8C,CAAC;AAE/F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEtE"}
|
package/dist/write-tools.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"write-tools.js","sourceRoot":"","sources":["../src/write-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Inspect-tools tests — exercise the read-only MCP tools that proxy
|
|
3
|
-
* `/_nwire/*` (or fall back to the on-disk `.nwire/` cache). We stand
|
|
4
|
-
* up a tiny stub HTTP server on a free port, point the discovery layer
|
|
5
|
-
* at it via `NWIRE_INSPECT_URL`, and drive the tools through the same
|
|
6
|
-
* stdio harness the existing `mcp-io.test.ts` uses.
|
|
7
|
-
*
|
|
8
|
-
* For disk-fallback tools (`list_hooks`, `list_plugins` happy paths),
|
|
9
|
-
* we mkdtemp a directory, write fixture JSON into `<tmp>/.nwire/`, and
|
|
10
|
-
* chdir into it. The kernel and `serveMcp` see nothing different —
|
|
11
|
-
* the inspect module reads `process.cwd()`.
|
|
12
|
-
*/
|
|
13
|
-
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
14
|
-
import { PassThrough } from "node:stream";
|
|
15
|
-
import { createServer, type Server } from "node:http";
|
|
16
|
-
import { AddressInfo } from "node:net";
|
|
17
|
-
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
18
|
-
import { tmpdir } from "node:os";
|
|
19
|
-
import { join } from "node:path";
|
|
20
|
-
import { createKernel, type Kernel } from "@nwire/kernel";
|
|
21
|
-
import { serveMcp } from "../index";
|
|
22
|
-
import { resetInspectDiscoveryCache } from "../inspect";
|
|
23
|
-
|
|
24
|
-
interface PendingResponse {
|
|
25
|
-
resolve: (value: any) => void;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
class StdioHarness {
|
|
29
|
-
readonly stdin = new PassThrough();
|
|
30
|
-
readonly stdout = new PassThrough();
|
|
31
|
-
private buffer = "";
|
|
32
|
-
private pending = new Map<string | number, PendingResponse>();
|
|
33
|
-
readonly notifications: Array<{ method: string; params?: any }> = [];
|
|
34
|
-
readonly served: Promise<void>;
|
|
35
|
-
private id = 0;
|
|
36
|
-
|
|
37
|
-
constructor(kernel: Kernel) {
|
|
38
|
-
this.served = serveMcp({
|
|
39
|
-
kernel,
|
|
40
|
-
stdin: this.stdin,
|
|
41
|
-
stdout: this.stdout,
|
|
42
|
-
serverName: "nwire-test",
|
|
43
|
-
serverVersion: "0.0.0-test",
|
|
44
|
-
});
|
|
45
|
-
this.stdout.setEncoding("utf8");
|
|
46
|
-
this.stdout.on("data", (chunk: string) => {
|
|
47
|
-
this.buffer += chunk;
|
|
48
|
-
const lines = this.buffer.split("\n");
|
|
49
|
-
this.buffer = lines.pop() ?? "";
|
|
50
|
-
for (const line of lines) {
|
|
51
|
-
if (!line.trim()) continue;
|
|
52
|
-
const msg = JSON.parse(line) as { id?: string | number; method?: string };
|
|
53
|
-
if (msg.id != null && this.pending.has(msg.id)) {
|
|
54
|
-
this.pending.get(msg.id)!.resolve(msg);
|
|
55
|
-
this.pending.delete(msg.id);
|
|
56
|
-
} else if (msg.method) {
|
|
57
|
-
this.notifications.push(msg as any);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
request(method: string, params?: Record<string, unknown>): Promise<any> {
|
|
64
|
-
const id = ++this.id;
|
|
65
|
-
const promise = new Promise<any>((resolve) => {
|
|
66
|
-
this.pending.set(id, { resolve });
|
|
67
|
-
});
|
|
68
|
-
this.stdin.write(JSON.stringify({ jsonrpc: "2.0", id, method, params }) + "\n");
|
|
69
|
-
return promise;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
async close(): Promise<void> {
|
|
73
|
-
this.stdin.end();
|
|
74
|
-
await this.served;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
interface StubWire {
|
|
79
|
-
readonly url: string;
|
|
80
|
-
readonly server: Server;
|
|
81
|
-
manifest: Record<string, unknown>;
|
|
82
|
-
events: unknown[];
|
|
83
|
-
telemetry: unknown[];
|
|
84
|
-
requests: Array<{ method: string; url: string }>;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
async function startStubWire(): Promise<StubWire> {
|
|
88
|
-
const stub: StubWire = {
|
|
89
|
-
url: "",
|
|
90
|
-
server: null as unknown as Server,
|
|
91
|
-
manifest: {},
|
|
92
|
-
events: [],
|
|
93
|
-
telemetry: [],
|
|
94
|
-
requests: [],
|
|
95
|
-
};
|
|
96
|
-
const server = createServer((req, res) => {
|
|
97
|
-
stub.requests.push({ method: req.method ?? "?", url: req.url ?? "" });
|
|
98
|
-
const send = (body: unknown) => {
|
|
99
|
-
res.statusCode = 200;
|
|
100
|
-
res.setHeader("Content-Type", "application/json");
|
|
101
|
-
res.end(JSON.stringify(body));
|
|
102
|
-
};
|
|
103
|
-
const url = req.url ?? "";
|
|
104
|
-
if (url === "/_nwire/manifest") return send(stub.manifest);
|
|
105
|
-
if (url.startsWith("/_nwire/events/recent")) return send(stub.events);
|
|
106
|
-
if (url.startsWith("/_nwire/telemetry/recent")) return send(stub.telemetry);
|
|
107
|
-
res.statusCode = 404;
|
|
108
|
-
res.end(JSON.stringify({ error: "not found" }));
|
|
109
|
-
});
|
|
110
|
-
await new Promise<void>((r) => server.listen(0, "127.0.0.1", r));
|
|
111
|
-
const port = (server.address() as AddressInfo).port;
|
|
112
|
-
stub.server = server;
|
|
113
|
-
(stub as { url: string }).url = `http://127.0.0.1:${port}`;
|
|
114
|
-
return stub;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
async function stopStubWire(stub: StubWire): Promise<void> {
|
|
118
|
-
await new Promise<void>((r) => stub.server.close(() => r()));
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
function parseToolResult(res: any): unknown {
|
|
122
|
-
expect(res.result.content).toHaveLength(1);
|
|
123
|
-
expect(res.result.content[0].type).toBe("text");
|
|
124
|
-
return JSON.parse(res.result.content[0].text);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
describe("@nwire/mcp — inspect tools", () => {
|
|
128
|
-
let kernel: Kernel;
|
|
129
|
-
let harness: StdioHarness;
|
|
130
|
-
let stub: StubWire | undefined;
|
|
131
|
-
let tmpDir: string | undefined;
|
|
132
|
-
let prevCwd: string | undefined;
|
|
133
|
-
let prevInspectUrl: string | undefined;
|
|
134
|
-
|
|
135
|
-
beforeEach(() => {
|
|
136
|
-
kernel = createKernel();
|
|
137
|
-
prevInspectUrl = process.env.NWIRE_INSPECT_URL;
|
|
138
|
-
resetInspectDiscoveryCache();
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
afterEach(async () => {
|
|
142
|
-
if (harness) await harness.close();
|
|
143
|
-
if (stub) await stopStubWire(stub);
|
|
144
|
-
stub = undefined;
|
|
145
|
-
if (prevCwd) {
|
|
146
|
-
process.chdir(prevCwd);
|
|
147
|
-
prevCwd = undefined;
|
|
148
|
-
}
|
|
149
|
-
if (tmpDir) {
|
|
150
|
-
rmSync(tmpDir, { recursive: true, force: true });
|
|
151
|
-
tmpDir = undefined;
|
|
152
|
-
}
|
|
153
|
-
if (prevInspectUrl === undefined) delete process.env.NWIRE_INSPECT_URL;
|
|
154
|
-
else process.env.NWIRE_INSPECT_URL = prevInspectUrl;
|
|
155
|
-
resetInspectDiscoveryCache();
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
it("tools/list appends inspect tools to the kernel commands", async () => {
|
|
159
|
-
kernel.router.register("dev", async () => "ok");
|
|
160
|
-
harness = new StdioHarness(kernel);
|
|
161
|
-
|
|
162
|
-
const res = await harness.request("tools/list", {});
|
|
163
|
-
const names = (res.result.tools as Array<{ name: string }>).map((t) => t.name);
|
|
164
|
-
expect(names).toContain("dev");
|
|
165
|
-
expect(names).toContain("manifest");
|
|
166
|
-
expect(names).toContain("list_actions");
|
|
167
|
-
expect(names).toContain("list_events");
|
|
168
|
-
expect(names).toContain("list_hooks");
|
|
169
|
-
expect(names).toContain("list_plugins");
|
|
170
|
-
expect(names).toContain("recent_events");
|
|
171
|
-
expect(names).toContain("recent_telemetry");
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
it("manifest returns the live wire's manifest body", async () => {
|
|
175
|
-
stub = await startStubWire();
|
|
176
|
-
stub.manifest = {
|
|
177
|
-
actions: [{ name: "a.do", module: "alpha" }],
|
|
178
|
-
events: [],
|
|
179
|
-
generatedAt: "now",
|
|
180
|
-
};
|
|
181
|
-
process.env.NWIRE_INSPECT_URL = stub.url;
|
|
182
|
-
harness = new StdioHarness(kernel);
|
|
183
|
-
|
|
184
|
-
const res = await harness.request("tools/call", { name: "manifest", arguments: {} });
|
|
185
|
-
expect(res.result.isError).toBe(false);
|
|
186
|
-
expect(parseToolResult(res)).toEqual(stub.manifest);
|
|
187
|
-
expect(stub.requests.some((r) => r.url === "/_nwire/manifest")).toBe(true);
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
it("list_actions filters by module", async () => {
|
|
191
|
-
stub = await startStubWire();
|
|
192
|
-
stub.manifest = {
|
|
193
|
-
actions: [
|
|
194
|
-
{ name: "submit", module: "submissions" },
|
|
195
|
-
{ name: "grade", module: "submissions" },
|
|
196
|
-
{ name: "enrol", module: "roster" },
|
|
197
|
-
],
|
|
198
|
-
};
|
|
199
|
-
process.env.NWIRE_INSPECT_URL = stub.url;
|
|
200
|
-
harness = new StdioHarness(kernel);
|
|
201
|
-
|
|
202
|
-
const unfiltered = await harness.request("tools/call", {
|
|
203
|
-
name: "list_actions",
|
|
204
|
-
arguments: {},
|
|
205
|
-
});
|
|
206
|
-
expect((parseToolResult(unfiltered) as unknown[]).length).toBe(3);
|
|
207
|
-
|
|
208
|
-
const filtered = await harness.request("tools/call", {
|
|
209
|
-
name: "list_actions",
|
|
210
|
-
arguments: { module: "submissions" },
|
|
211
|
-
});
|
|
212
|
-
const actions = parseToolResult(filtered) as Array<{ name: string }>;
|
|
213
|
-
expect(actions.map((a) => a.name)).toEqual(["submit", "grade"]);
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
it("list_events filters by module", async () => {
|
|
217
|
-
stub = await startStubWire();
|
|
218
|
-
stub.manifest = {
|
|
219
|
-
events: [
|
|
220
|
-
{ name: "Submitted", module: "submissions" },
|
|
221
|
-
{ name: "Graded", module: "submissions" },
|
|
222
|
-
{ name: "Enrolled", module: "roster" },
|
|
223
|
-
],
|
|
224
|
-
};
|
|
225
|
-
process.env.NWIRE_INSPECT_URL = stub.url;
|
|
226
|
-
harness = new StdioHarness(kernel);
|
|
227
|
-
|
|
228
|
-
const res = await harness.request("tools/call", {
|
|
229
|
-
name: "list_events",
|
|
230
|
-
arguments: { module: "roster" },
|
|
231
|
-
});
|
|
232
|
-
const events = parseToolResult(res) as Array<{ name: string }>;
|
|
233
|
-
expect(events).toHaveLength(1);
|
|
234
|
-
expect(events[0]!.name).toBe("Enrolled");
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
it("list_hooks reads .nwire/hooks.json from disk", async () => {
|
|
238
|
-
tmpDir = mkdtempSync(join(tmpdir(), "nwire-mcp-hooks-"));
|
|
239
|
-
prevCwd = process.cwd();
|
|
240
|
-
mkdirSync(join(tmpDir, ".nwire"), { recursive: true });
|
|
241
|
-
const hooks = [{ name: "tracing", phase: "before" }];
|
|
242
|
-
writeFileSync(join(tmpDir, ".nwire", "hooks.json"), JSON.stringify(hooks));
|
|
243
|
-
process.chdir(tmpDir);
|
|
244
|
-
// No live wire — clear inspect URL so discovery falls through.
|
|
245
|
-
delete process.env.NWIRE_INSPECT_URL;
|
|
246
|
-
resetInspectDiscoveryCache();
|
|
247
|
-
harness = new StdioHarness(kernel);
|
|
248
|
-
|
|
249
|
-
const res = await harness.request("tools/call", { name: "list_hooks", arguments: {} });
|
|
250
|
-
expect(res.result.isError).toBe(false);
|
|
251
|
-
expect(parseToolResult(res)).toEqual(hooks);
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
it("list_plugins reads .nwire/plugins.json from disk and supports kind filter", async () => {
|
|
255
|
-
tmpDir = mkdtempSync(join(tmpdir(), "nwire-mcp-plugins-"));
|
|
256
|
-
prevCwd = process.cwd();
|
|
257
|
-
mkdirSync(join(tmpDir, ".nwire"), { recursive: true });
|
|
258
|
-
const plugins = [
|
|
259
|
-
{ name: "rbac", kind: "plugin" },
|
|
260
|
-
{ name: "identity", kind: "plugin" },
|
|
261
|
-
{ name: "submissions", kind: "module" },
|
|
262
|
-
];
|
|
263
|
-
writeFileSync(join(tmpDir, ".nwire", "plugins.json"), JSON.stringify(plugins));
|
|
264
|
-
process.chdir(tmpDir);
|
|
265
|
-
delete process.env.NWIRE_INSPECT_URL;
|
|
266
|
-
resetInspectDiscoveryCache();
|
|
267
|
-
harness = new StdioHarness(kernel);
|
|
268
|
-
|
|
269
|
-
const all = await harness.request("tools/call", {
|
|
270
|
-
name: "list_plugins",
|
|
271
|
-
arguments: {},
|
|
272
|
-
});
|
|
273
|
-
expect((parseToolResult(all) as unknown[]).length).toBe(3);
|
|
274
|
-
|
|
275
|
-
const onlyPlugins = await harness.request("tools/call", {
|
|
276
|
-
name: "list_plugins",
|
|
277
|
-
arguments: { kind: "plugin" },
|
|
278
|
-
});
|
|
279
|
-
expect((parseToolResult(onlyPlugins) as Array<{ name: string }>).map((p) => p.name)).toEqual([
|
|
280
|
-
"rbac",
|
|
281
|
-
"identity",
|
|
282
|
-
]);
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
it("recent_events passes the limit param through to the wire", async () => {
|
|
286
|
-
stub = await startStubWire();
|
|
287
|
-
stub.events = [
|
|
288
|
-
{ name: "Submitted", t: 1 },
|
|
289
|
-
{ name: "Graded", t: 2 },
|
|
290
|
-
];
|
|
291
|
-
process.env.NWIRE_INSPECT_URL = stub.url;
|
|
292
|
-
harness = new StdioHarness(kernel);
|
|
293
|
-
|
|
294
|
-
const res = await harness.request("tools/call", {
|
|
295
|
-
name: "recent_events",
|
|
296
|
-
arguments: { limit: 42 },
|
|
297
|
-
});
|
|
298
|
-
expect(res.result.isError).toBe(false);
|
|
299
|
-
expect(parseToolResult(res)).toEqual(stub.events);
|
|
300
|
-
const eventsHit = stub.requests.find((r) => r.url.startsWith("/_nwire/events/recent"));
|
|
301
|
-
expect(eventsHit?.url).toContain("limit=42");
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
it("recent_telemetry defaults to limit=100 when omitted", async () => {
|
|
305
|
-
stub = await startStubWire();
|
|
306
|
-
stub.telemetry = [{ kind: "event", at: "now" }];
|
|
307
|
-
process.env.NWIRE_INSPECT_URL = stub.url;
|
|
308
|
-
harness = new StdioHarness(kernel);
|
|
309
|
-
|
|
310
|
-
const res = await harness.request("tools/call", {
|
|
311
|
-
name: "recent_telemetry",
|
|
312
|
-
arguments: {},
|
|
313
|
-
});
|
|
314
|
-
expect(res.result.isError).toBe(false);
|
|
315
|
-
expect(parseToolResult(res)).toEqual(stub.telemetry);
|
|
316
|
-
const hit = stub.requests.find((r) => r.url.startsWith("/_nwire/telemetry/recent"));
|
|
317
|
-
expect(hit?.url).toContain("limit=100");
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
it("manifest gracefully fails when no wire and no cache are available", async () => {
|
|
321
|
-
// Point at an empty tmp dir with no .nwire/ AND no live wire URL.
|
|
322
|
-
tmpDir = mkdtempSync(join(tmpdir(), "nwire-mcp-empty-"));
|
|
323
|
-
prevCwd = process.cwd();
|
|
324
|
-
process.chdir(tmpDir);
|
|
325
|
-
// Force discovery to find nothing: set a deliberately-empty probe list
|
|
326
|
-
// AND clear the inspect URL.
|
|
327
|
-
delete process.env.NWIRE_INSPECT_URL;
|
|
328
|
-
const prevProbe = process.env.NWIRE_PROBE_PORTS;
|
|
329
|
-
process.env.NWIRE_PROBE_PORTS = "1"; // port 1 is reliably closed
|
|
330
|
-
resetInspectDiscoveryCache();
|
|
331
|
-
try {
|
|
332
|
-
harness = new StdioHarness(kernel);
|
|
333
|
-
const res = await harness.request("tools/call", { name: "manifest", arguments: {} });
|
|
334
|
-
expect(res.result.isError).toBe(true);
|
|
335
|
-
expect(res.result.content[0].text).toMatch(/no running wire/);
|
|
336
|
-
} finally {
|
|
337
|
-
if (prevProbe === undefined) delete process.env.NWIRE_PROBE_PORTS;
|
|
338
|
-
else process.env.NWIRE_PROBE_PORTS = prevProbe;
|
|
339
|
-
}
|
|
340
|
-
});
|
|
341
|
-
});
|