neuron-inspector 0.1.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.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import("../dist/server.js");
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,53 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { PendingCalls } from "../correlation.js";
3
+ function mockWs() {
4
+ return { send: vi.fn() };
5
+ }
6
+ describe("PendingCalls", () => {
7
+ let calls;
8
+ beforeEach(() => {
9
+ calls = new PendingCalls();
10
+ });
11
+ it("resolves when onResponse is called with matching requestId", async () => {
12
+ const ws = mockWs();
13
+ const promise = calls.call(ws, "queryDOM", { tabId: 1 }, 5000);
14
+ // Extract the requestId from the sent message
15
+ const sent = JSON.parse(ws.send.mock.calls[0][0]);
16
+ expect(sent.type).toBe("TOOL_CALL");
17
+ expect(sent.payload.name).toBe("queryDOM");
18
+ // Simulate response
19
+ calls.onResponse({ requestId: sent.requestId, payload: { tag: "body" } });
20
+ const result = await promise;
21
+ expect(result).toEqual({ tag: "body" });
22
+ });
23
+ it("rejects on timeout", async () => {
24
+ vi.useFakeTimers();
25
+ const ws = mockWs();
26
+ const promise = calls.call(ws, "slow", {}, 100);
27
+ vi.advanceTimersByTime(101);
28
+ await expect(promise).rejects.toThrow('timed out after 100ms');
29
+ expect(calls.size).toBe(0);
30
+ vi.useRealTimers();
31
+ });
32
+ it("rejects with error message from response", async () => {
33
+ const ws = mockWs();
34
+ const promise = calls.call(ws, "failing", {}, 5000);
35
+ const sent = JSON.parse(ws.send.mock.calls[0][0]);
36
+ calls.onResponse({ requestId: sent.requestId, error: "Tab not found" });
37
+ await expect(promise).rejects.toThrow("Tab not found");
38
+ });
39
+ it("ignores responses with unknown requestId", () => {
40
+ const handled = calls.onResponse({ requestId: "unknown-id", payload: {} });
41
+ expect(handled).toBe(false);
42
+ });
43
+ it("clears all pending on clear()", async () => {
44
+ const ws = mockWs();
45
+ const p1 = calls.call(ws, "a", {}, 5000);
46
+ const p2 = calls.call(ws, "b", {}, 5000);
47
+ calls.clear();
48
+ await expect(p1).rejects.toThrow("Connection closed");
49
+ await expect(p2).rejects.toThrow("Connection closed");
50
+ expect(calls.size).toBe(0);
51
+ });
52
+ });
53
+ //# sourceMappingURL=correlation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correlation.test.js","sourceRoot":"","sources":["../../src/__tests__/correlation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { WebSocket } from "ws";
2
+ export declare class PendingCalls {
3
+ private pending;
4
+ call(ws: WebSocket, name: string, args: Record<string, unknown>, timeoutMs?: number): Promise<unknown>;
5
+ onResponse(msg: {
6
+ requestId: string;
7
+ payload?: unknown;
8
+ error?: string;
9
+ }): boolean;
10
+ get size(): number;
11
+ clear(): void;
12
+ }
@@ -0,0 +1,43 @@
1
+ export class PendingCalls {
2
+ pending = new Map();
3
+ call(ws, name, args, timeoutMs = 10000) {
4
+ const id = crypto.randomUUID();
5
+ return new Promise((resolve, reject) => {
6
+ const timer = setTimeout(() => {
7
+ this.pending.delete(id);
8
+ reject(new Error(`Tool call "${name}" timed out after ${timeoutMs}ms`));
9
+ }, timeoutMs);
10
+ this.pending.set(id, { resolve, reject, timer });
11
+ ws.send(JSON.stringify({
12
+ type: "TOOL_CALL",
13
+ requestId: id,
14
+ payload: { name, args },
15
+ }));
16
+ });
17
+ }
18
+ onResponse(msg) {
19
+ const entry = this.pending.get(msg.requestId);
20
+ if (!entry)
21
+ return false;
22
+ clearTimeout(entry.timer);
23
+ this.pending.delete(msg.requestId);
24
+ if (msg.error) {
25
+ entry.reject(new Error(msg.error));
26
+ }
27
+ else {
28
+ entry.resolve(msg.payload);
29
+ }
30
+ return true;
31
+ }
32
+ get size() {
33
+ return this.pending.size;
34
+ }
35
+ clear() {
36
+ for (const [id, entry] of this.pending) {
37
+ clearTimeout(entry.timer);
38
+ entry.reject(new Error("Connection closed"));
39
+ }
40
+ this.pending.clear();
41
+ }
42
+ }
43
+ //# sourceMappingURL=correlation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correlation.js","sourceRoot":"","sources":["../src/correlation.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,YAAY;IACf,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAElD,IAAI,CACF,EAAa,EACb,IAAY,EACZ,IAA6B,EAC7B,SAAS,GAAG,KAAK;QAEjB,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,IAAI,qBAAqB,SAAS,IAAI,CAAC,CAAC,CAAC;YAC1E,CAAC,EAAE,SAAS,CAAC,CAAC;YAEd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAEjD,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrB,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,EAAE;gBACb,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;aACxB,CAAC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,GAA6D;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEnC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export {};
package/dist/server.js ADDED
@@ -0,0 +1,77 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { WebSocketServer, WebSocket } from "ws";
4
+ import { PendingCalls } from "./correlation.js";
5
+ import { TOOLS, toolToPrimitive } from "./tools.js";
6
+ const PORT = parseInt(process.env.NEURON_BRIDGE_PORT ?? "7377", 10);
7
+ // ── State ────────────────────────────────────────────────────
8
+ let extensionWs = null;
9
+ const pending = new PendingCalls();
10
+ // ── WebSocket server (extension connects here) ──────────────
11
+ const wss = new WebSocketServer({ host: "127.0.0.1", port: PORT });
12
+ wss.on("connection", (ws) => {
13
+ console.error(`[bridge] Extension connected`);
14
+ extensionWs = ws;
15
+ ws.on("message", (data) => {
16
+ try {
17
+ const msg = JSON.parse(data.toString());
18
+ // Handle tool-call responses from the extension
19
+ if (msg.type === "response" && msg.requestId) {
20
+ pending.onResponse(msg);
21
+ return;
22
+ }
23
+ // Other messages (state_snapshot, credentials_updated, flow, heartbeat)
24
+ // are push events — log and ignore for MCP purposes
25
+ }
26
+ catch {
27
+ // ignore unparseable messages
28
+ }
29
+ });
30
+ ws.on("close", () => {
31
+ console.error(`[bridge] Extension disconnected`);
32
+ if (extensionWs === ws)
33
+ extensionWs = null;
34
+ pending.clear();
35
+ });
36
+ });
37
+ console.error(`[bridge] WebSocket server listening on 127.0.0.1:${PORT}`);
38
+ // ── MCP server (Claude Code / Cursor connects via stdio) ────
39
+ const mcp = new McpServer({
40
+ name: "neuron-inspector",
41
+ version: "0.1.0",
42
+ });
43
+ // Register all tools
44
+ for (const tool of TOOLS) {
45
+ mcp.tool(tool.name, tool.description, tool.inputSchema, async (args) => {
46
+ if (!extensionWs || extensionWs.readyState !== WebSocket.OPEN) {
47
+ return {
48
+ content: [{ type: "text", text: "Extension not connected. Open Chrome with the Neuron extension and enable developer mode." }],
49
+ isError: true,
50
+ };
51
+ }
52
+ try {
53
+ const primitiveName = toolToPrimitive(tool.name);
54
+ const result = await pending.call(extensionWs, primitiveName, args);
55
+ return {
56
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
57
+ };
58
+ }
59
+ catch (err) {
60
+ return {
61
+ content: [{ type: "text", text: `Error: ${err.message}` }],
62
+ isError: true,
63
+ };
64
+ }
65
+ });
66
+ }
67
+ // ── Start ────────────────────────────────────────────────────
68
+ async function main() {
69
+ const transport = new StdioServerTransport();
70
+ await mcp.connect(transport);
71
+ console.error("[bridge] MCP server ready on stdio");
72
+ }
73
+ main().catch((err) => {
74
+ console.error("[bridge] Fatal:", err);
75
+ process.exit(1);
76
+ });
77
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface ToolDef {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: Record<string, unknown>;
5
+ }
6
+ export declare const TOOLS: ToolDef[];
7
+ /** Map MCP tool name → extension primitive name */
8
+ export declare function toolToPrimitive(toolName: string): string;
package/dist/tools.js ADDED
@@ -0,0 +1,649 @@
1
+ export const TOOLS = [
2
+ {
3
+ name: "neuron_query_dom",
4
+ description: "Capture a DOM snapshot of the active page or a targeted subtree",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ tabId: { type: "number", description: "Chrome tab ID" },
9
+ selector: { type: "string", description: "CSS selector to scope (default: body)" },
10
+ depth: { type: "number", description: "Max tree depth (default: 5)" },
11
+ },
12
+ required: ["tabId"],
13
+ },
14
+ },
15
+ {
16
+ name: "neuron_find_elements",
17
+ description: "Find elements by CSS selectors or visible text",
18
+ inputSchema: {
19
+ type: "object",
20
+ properties: {
21
+ tabId: { type: "number", description: "Chrome tab ID" },
22
+ selectors: { type: "array", items: { type: "string" }, description: "CSS selectors to try" },
23
+ texts: { type: "array", items: { type: "string" }, description: "Visible text to match" },
24
+ limit: { type: "number", description: "Max results (default: 10)" },
25
+ },
26
+ required: ["tabId"],
27
+ },
28
+ },
29
+ {
30
+ name: "neuron_evaluate_js",
31
+ description: "Run JavaScript in page context and return the result",
32
+ inputSchema: {
33
+ type: "object",
34
+ properties: {
35
+ tabId: { type: "number", description: "Chrome tab ID" },
36
+ expression: { type: "string", description: "JavaScript expression to evaluate" },
37
+ },
38
+ required: ["tabId", "expression"],
39
+ },
40
+ },
41
+ {
42
+ name: "neuron_get_requests",
43
+ description: "Query recent HTTP requests from the extension's ring buffers, filtered by tab, platform, status, method, or URL pattern",
44
+ inputSchema: {
45
+ type: "object",
46
+ properties: {
47
+ tabId: { type: "number" },
48
+ platform: { type: "string", enum: ["ig", "x", "tk", "li", "fb"] },
49
+ method: { type: "string" },
50
+ urlPattern: { type: "string", description: "Substring match on URL" },
51
+ statusMin: { type: "number" },
52
+ statusMax: { type: "number" },
53
+ limit: { type: "number", description: "Max results (default: 50)" },
54
+ },
55
+ },
56
+ },
57
+ {
58
+ name: "neuron_get_errors",
59
+ description: "Get recent failed HTTP requests (4xx/5xx) and console errors",
60
+ inputSchema: {
61
+ type: "object",
62
+ properties: {
63
+ tabId: { type: "number" },
64
+ platform: { type: "string", enum: ["ig", "x", "tk", "li", "fb"] },
65
+ limit: { type: "number", description: "Max results (default: 20)" },
66
+ },
67
+ },
68
+ },
69
+ {
70
+ name: "neuron_get_ws_frames",
71
+ description: "Query WebSocket frame history by platform",
72
+ inputSchema: {
73
+ type: "object",
74
+ properties: {
75
+ platform: { type: "string", enum: ["ig", "x", "tk", "li", "fb"] },
76
+ direction: { type: "string", enum: ["send", "recv"] },
77
+ transport: { type: "string", enum: ["ws", "sse"] },
78
+ limit: { type: "number", description: "Max results (default: 100)" },
79
+ },
80
+ },
81
+ },
82
+ {
83
+ name: "neuron_check_auth",
84
+ description: "Check whether credentials for a social platform are still valid (cookies, headers, tokens)",
85
+ inputSchema: {
86
+ type: "object",
87
+ properties: {
88
+ platform: { type: "string", enum: ["ig", "x", "tk", "li", "fb"], description: "Platform code" },
89
+ },
90
+ required: ["platform"],
91
+ },
92
+ },
93
+ {
94
+ name: "neuron_detect_blocker",
95
+ description: "Check if a tab is showing a rate limit wall, login prompt, captcha, or interstitial",
96
+ inputSchema: {
97
+ type: "object",
98
+ properties: {
99
+ tabId: { type: "number", description: "Chrome tab ID to inspect" },
100
+ },
101
+ required: ["tabId"],
102
+ },
103
+ },
104
+ {
105
+ name: "neuron_screenshot",
106
+ description: "Capture a PNG screenshot of the visible tab area",
107
+ inputSchema: {
108
+ type: "object",
109
+ properties: {
110
+ tabId: { type: "number", description: "Chrome tab ID (must be in foreground)" },
111
+ },
112
+ required: ["tabId"],
113
+ },
114
+ },
115
+ {
116
+ name: "neuron_session_diagnostics",
117
+ description: "Get the agent session health snapshot — capture rate, stall detection, auth health, buffer size",
118
+ inputSchema: { type: "object", properties: {} },
119
+ },
120
+ {
121
+ name: "neuron_diagnose",
122
+ description: "Connection health — is the extension connected? Dev mode on? What tabs are open?",
123
+ inputSchema: { type: "object", properties: {} },
124
+ },
125
+ {
126
+ name: "neuron_list_tabs",
127
+ description: "List open Chrome tabs with platform detection and capture counts",
128
+ inputSchema: { type: "object", properties: {} },
129
+ },
130
+ {
131
+ name: "neuron_get_logs",
132
+ description: "Get recent console logs filtered by tab, level, and time",
133
+ inputSchema: {
134
+ type: "object",
135
+ properties: {
136
+ tabId: { type: "number", description: "Filter by tab ID" },
137
+ levels: { type: "array", items: { type: "string" }, description: "Filter by levels: log, info, warn, error, debug" },
138
+ limit: { type: "number", description: "Max results (default: 100)" },
139
+ sinceMs: { type: "number", description: "Only logs after this timestamp" },
140
+ search: { type: "string", description: "Substring search in log messages" },
141
+ },
142
+ },
143
+ },
144
+ {
145
+ name: "neuron_export_har",
146
+ description: "Export captured network traffic as HAR 1.2 JSON",
147
+ inputSchema: {
148
+ type: "object",
149
+ properties: {
150
+ tabId: { type: "number", description: "Filter by specific tab" },
151
+ platform: { type: "string", enum: ["ig", "x", "tk", "li", "fb"], description: "Filter by platform" },
152
+ sinceMs: { type: "number", description: "Only requests after this timestamp" },
153
+ includeBody: { type: "boolean", description: "Include response bodies (default: false)" },
154
+ },
155
+ },
156
+ },
157
+ {
158
+ name: "neuron_click",
159
+ description: "Click an element by CSS selector or visible text",
160
+ inputSchema: {
161
+ type: "object",
162
+ properties: {
163
+ tabId: { type: "number", description: "Chrome tab ID" },
164
+ selectors: { type: "array", items: { type: "string" }, description: "CSS selectors to try" },
165
+ texts: { type: "array", items: { type: "string" }, description: "Visible text to match" },
166
+ },
167
+ required: ["tabId"],
168
+ },
169
+ },
170
+ {
171
+ name: "neuron_type",
172
+ description: "Type text into an input, textarea, or contenteditable element",
173
+ inputSchema: {
174
+ type: "object",
175
+ properties: {
176
+ tabId: { type: "number", description: "Chrome tab ID" },
177
+ selectors: { type: "array", items: { type: "string" }, description: "CSS selectors to try" },
178
+ value: { type: "string", description: "Text to type" },
179
+ },
180
+ required: ["tabId", "selectors", "value"],
181
+ },
182
+ },
183
+ {
184
+ name: "neuron_navigate",
185
+ description: "Navigate a tab to a URL (http/https only)",
186
+ inputSchema: {
187
+ type: "object",
188
+ properties: {
189
+ tabId: { type: "number", description: "Chrome tab ID" },
190
+ url: { type: "string", description: "URL to navigate to" },
191
+ },
192
+ required: ["tabId", "url"],
193
+ },
194
+ },
195
+ {
196
+ name: "neuron_open_tab",
197
+ description: "Open a new tab, optionally to a URL",
198
+ inputSchema: {
199
+ type: "object",
200
+ properties: {
201
+ url: { type: "string", description: "URL to open (optional)" },
202
+ },
203
+ },
204
+ },
205
+ {
206
+ name: "neuron_reload",
207
+ description: "Reload a tab",
208
+ inputSchema: {
209
+ type: "object",
210
+ properties: {
211
+ tabId: { type: "number", description: "Chrome tab ID" },
212
+ },
213
+ required: ["tabId"],
214
+ },
215
+ },
216
+ {
217
+ name: "neuron_scroll",
218
+ description: "Scroll a page by pixels (positive = down) or scroll a CSS selector into view. Returns scroll position and whether the page reached the bottom.",
219
+ inputSchema: {
220
+ type: "object",
221
+ properties: {
222
+ tabId: { type: "number", description: "Chrome tab ID" },
223
+ deltaY: { type: "number", description: "Pixels to scroll vertically (positive = down, negative = up). Default: 600" },
224
+ deltaX: { type: "number", description: "Pixels to scroll horizontally. Default: 0" },
225
+ smooth: { type: "boolean", description: "Smooth scrolling. Default: true" },
226
+ selector: { type: "string", description: "CSS selector to scroll into view (overrides deltaY/deltaX)" },
227
+ },
228
+ required: ["tabId"],
229
+ },
230
+ },
231
+ {
232
+ name: "neuron_run_sequence",
233
+ description: "Execute a sequence of browser actions (click, type, navigate, wait, evaluate)",
234
+ inputSchema: {
235
+ type: "object",
236
+ properties: {
237
+ tabId: { type: "number", description: "Chrome tab ID" },
238
+ steps: {
239
+ type: "array",
240
+ items: {
241
+ type: "object",
242
+ properties: {
243
+ action: { type: "string", enum: ["click", "type", "navigate", "wait", "evaluate"] },
244
+ selectors: { type: "array", items: { type: "string" } },
245
+ texts: { type: "array", items: { type: "string" } },
246
+ value: { type: "string" },
247
+ url: { type: "string" },
248
+ expression: { type: "string" },
249
+ waitMs: { type: "number" },
250
+ },
251
+ },
252
+ description: "Sequence steps (max 50)",
253
+ },
254
+ delayMs: { type: "number", description: "Delay between steps in ms (default: 500)" },
255
+ },
256
+ required: ["tabId", "steps"],
257
+ },
258
+ },
259
+ // ── Post trigger ──────────────────────────────────────────
260
+ {
261
+ name: "neuron_trigger_post",
262
+ description: "Trigger the IG post runner to claim and execute the next pending post task from the Neuron backend. Posts to Instagram using the logged-in session in Chrome.",
263
+ inputSchema: { type: "object", properties: {} },
264
+ },
265
+ // ── Workflow / demo recording ─────────────────────────────
266
+ {
267
+ name: "neuron_list_workflows",
268
+ description: "List all saved workflow recordings",
269
+ inputSchema: { type: "object", properties: {} },
270
+ },
271
+ {
272
+ name: "neuron_workflow_status",
273
+ description: "Get the current workflow engine status (idle, recording, replaying, demo)",
274
+ inputSchema: { type: "object", properties: {} },
275
+ },
276
+ {
277
+ name: "neuron_start_recording",
278
+ description: "Start recording user interactions (clicks, typing, navigation) on the active tab as a replayable workflow",
279
+ inputSchema: { type: "object", properties: {} },
280
+ },
281
+ {
282
+ name: "neuron_stop_recording",
283
+ description: "Stop recording and save the workflow with a name",
284
+ inputSchema: {
285
+ type: "object",
286
+ properties: {
287
+ name: { type: "string", description: "Name for the saved workflow" },
288
+ },
289
+ required: ["name"],
290
+ },
291
+ },
292
+ {
293
+ name: "neuron_start_replay",
294
+ description: "Replay a saved workflow — re-executes the recorded steps on the current tab",
295
+ inputSchema: {
296
+ type: "object",
297
+ properties: {
298
+ workflowId: { type: "string", description: "ID of the workflow to replay" },
299
+ },
300
+ required: ["workflowId"],
301
+ },
302
+ },
303
+ {
304
+ name: "neuron_stop_replay",
305
+ description: "Stop the current workflow replay or demo",
306
+ inputSchema: { type: "object", properties: {} },
307
+ },
308
+ {
309
+ name: "neuron_start_demo",
310
+ description: "Start a demo video recording of a workflow — replays the steps with cinematic overlays (chapters, captions, cursor) and captures to video",
311
+ inputSchema: {
312
+ type: "object",
313
+ properties: {
314
+ workflowId: { type: "string", description: "ID of the workflow to demo" },
315
+ config: {
316
+ type: "object",
317
+ description: "Demo config overrides",
318
+ properties: {
319
+ showChapters: { type: "boolean" },
320
+ showCaptions: { type: "boolean" },
321
+ showCursor: { type: "boolean" },
322
+ voiceover: { type: "boolean" },
323
+ format: { type: "string", enum: ["mp4", "webm"] },
324
+ },
325
+ },
326
+ },
327
+ required: ["workflowId"],
328
+ },
329
+ },
330
+ // ── Network mocking ──────────────────────────────────────
331
+ {
332
+ name: "neuron_get_mocks",
333
+ description: "List all active network mock rules",
334
+ inputSchema: { type: "object", properties: {} },
335
+ },
336
+ {
337
+ name: "neuron_set_mock",
338
+ description: "Add a network mock rule — intercept requests matching a URL pattern and return a custom response. Use to test error states, slow APIs, or custom payloads without touching the real backend.",
339
+ inputSchema: {
340
+ type: "object",
341
+ properties: {
342
+ urlPattern: { type: "string", description: "URL pattern to match (glob or regex)" },
343
+ matchType: { type: "string", enum: ["glob", "regex"], description: "Pattern type (default: glob)" },
344
+ method: { type: "string", description: "HTTP method filter (GET, POST, etc). Omit to match all." },
345
+ responseStatus: { type: "number", description: "HTTP status code to return (default: 200)" },
346
+ responseBody: { type: "string", description: "Response body to return (JSON string)" },
347
+ responseHeaders: { type: "object", description: "Custom response headers" },
348
+ delay: { type: "number", description: "Response delay in ms (simulate slow API)" },
349
+ label: { type: "string", description: "Human label for this mock rule" },
350
+ },
351
+ required: ["urlPattern", "responseBody"],
352
+ },
353
+ },
354
+ {
355
+ name: "neuron_clear_mocks",
356
+ description: "Remove all network mock rules",
357
+ inputSchema: { type: "object", properties: {} },
358
+ },
359
+ // ── Accessibility audit ──────────────────────────────────
360
+ {
361
+ name: "neuron_a11y_audit",
362
+ description: "Run a WCAG accessibility audit on a page — checks color contrast, missing alt text, form labels, heading structure, lang attribute, empty links, and tabindex misuse. Returns structured violations with severity and selectors.",
363
+ inputSchema: {
364
+ type: "object",
365
+ properties: {
366
+ tabId: { type: "number", description: "Chrome tab ID to audit" },
367
+ },
368
+ required: ["tabId"],
369
+ },
370
+ },
371
+ // ── Performance snapshot ─────────────────────────────────
372
+ {
373
+ name: "neuron_perf_snapshot",
374
+ description: "Capture a performance snapshot — Core Web Vitals (LCP, CLS), TTFB, FCP, resource breakdown by type, slow resources, blocking scripts, memory usage, and long tasks.",
375
+ inputSchema: {
376
+ type: "object",
377
+ properties: {
378
+ tabId: { type: "number", description: "Chrome tab ID to profile" },
379
+ },
380
+ required: ["tabId"],
381
+ },
382
+ },
383
+ // ── Cookie & storage management ──────────────────────────
384
+ {
385
+ name: "neuron_get_cookies",
386
+ description: "Get all cookies for a URL, including values, domain, expiry, secure, httpOnly, and sameSite flags",
387
+ inputSchema: {
388
+ type: "object",
389
+ properties: {
390
+ url: { type: "string", description: "URL to get cookies for (e.g. https://example.com)" },
391
+ },
392
+ required: ["url"],
393
+ },
394
+ },
395
+ {
396
+ name: "neuron_set_cookie",
397
+ description: "Set a cookie on a domain",
398
+ inputSchema: {
399
+ type: "object",
400
+ properties: {
401
+ url: { type: "string", description: "URL context for the cookie" },
402
+ name: { type: "string" },
403
+ value: { type: "string" },
404
+ domain: { type: "string" },
405
+ path: { type: "string", description: "Default: /" },
406
+ secure: { type: "boolean" },
407
+ httpOnly: { type: "boolean" },
408
+ sameSite: { type: "string", enum: ["no_restriction", "lax", "strict", "unspecified"] },
409
+ expirationDate: { type: "number", description: "Unix timestamp" },
410
+ },
411
+ required: ["url", "name", "value"],
412
+ },
413
+ },
414
+ {
415
+ name: "neuron_delete_cookie",
416
+ description: "Delete a specific cookie by name and URL",
417
+ inputSchema: {
418
+ type: "object",
419
+ properties: {
420
+ url: { type: "string", description: "URL context for the cookie" },
421
+ name: { type: "string", description: "Cookie name to delete" },
422
+ },
423
+ required: ["url", "name"],
424
+ },
425
+ },
426
+ {
427
+ name: "neuron_get_storage",
428
+ description: "Read all localStorage or sessionStorage entries for the current page (values truncated at 500 chars)",
429
+ inputSchema: {
430
+ type: "object",
431
+ properties: {
432
+ tabId: { type: "number", description: "Chrome tab ID" },
433
+ type: { type: "string", enum: ["localStorage", "sessionStorage"], description: "Storage type (default: localStorage)" },
434
+ },
435
+ required: ["tabId"],
436
+ },
437
+ },
438
+ {
439
+ name: "neuron_clear_storage",
440
+ description: "Clear all localStorage or sessionStorage entries for the current page",
441
+ inputSchema: {
442
+ type: "object",
443
+ properties: {
444
+ tabId: { type: "number", description: "Chrome tab ID" },
445
+ type: { type: "string", enum: ["localStorage", "sessionStorage"], description: "Storage type (default: localStorage)" },
446
+ },
447
+ required: ["tabId"],
448
+ },
449
+ },
450
+ // ── Response body search ──────────────────────────────────
451
+ {
452
+ name: "neuron_search_traffic",
453
+ description: "Search across all captured response bodies in ring buffers for a string or regex pattern. Returns matching requests with context snippets around the match.",
454
+ inputSchema: {
455
+ type: "object",
456
+ properties: {
457
+ query: { type: "string", description: "Search query (string or regex pattern)" },
458
+ regex: { type: "boolean", description: "Treat query as regex (default: false)" },
459
+ limit: { type: "number", description: "Max results to return (default: 20)" },
460
+ },
461
+ required: ["query"],
462
+ },
463
+ },
464
+ {
465
+ name: "neuron_discover_apis",
466
+ description: "Analyze captured network traffic and produce a structured API map. Groups endpoints by normalized URL (IDs replaced with {id}), shows call counts, statuses, content types, auth presence, avg duration, and sample response shapes.",
467
+ inputSchema: {
468
+ type: "object",
469
+ properties: {},
470
+ },
471
+ },
472
+ // ── Security scan ─────────────────────────────────────────
473
+ {
474
+ name: "neuron_security_scan",
475
+ description: "Comprehensive security audit of a page. Scans for leaked secrets (API keys, tokens, credentials) in inline scripts, localStorage, and response bodies. Checks security headers, CORS config, mixed content, insecure forms, exposed source maps, and password field autocomplete. Returns structured findings with severity levels.",
476
+ inputSchema: {
477
+ type: "object",
478
+ properties: {
479
+ tabId: { type: "number", description: "Chrome tab ID to scan" },
480
+ },
481
+ required: ["tabId"],
482
+ },
483
+ },
484
+ // ── Page diff ─────────────────────────────────────────────
485
+ {
486
+ name: "neuron_snapshot_state",
487
+ description: "Capture a snapshot of the current page state — DOM structure, element visibility, text content, meta tags, URL. Store it in memory with a label for later comparison. Use with neuron_diff_states to detect changes over time (useful for SPA testing, mutation tracking, or detecting dynamic content updates).",
488
+ inputSchema: {
489
+ type: "object",
490
+ properties: {
491
+ tabId: { type: "number", description: "Chrome tab ID" },
492
+ label: { type: "string", description: "Snapshot label (default: snapshot_{timestamp})" },
493
+ },
494
+ required: ["tabId"],
495
+ },
496
+ },
497
+ {
498
+ name: "neuron_diff_states",
499
+ description: "Compare two page snapshots created with neuron_snapshot_state. Returns added, removed, and changed elements, plus URL/title changes. Useful for detecting what changed on a page after an action (button click, form submit, navigation, etc).",
500
+ inputSchema: {
501
+ type: "object",
502
+ properties: {
503
+ before: { type: "string", description: "Label of the first snapshot" },
504
+ after: { type: "string", description: "Label of the second snapshot" },
505
+ },
506
+ required: ["before", "after"],
507
+ },
508
+ },
509
+ // ── Data extraction ───────────────────────────────────────
510
+ {
511
+ name: "neuron_extract_data",
512
+ description: "Extract structured data from repeating page patterns (product listings, search results, social feeds, tables). If a CSS selector is provided, extracts from those elements. Otherwise auto-detects repeating patterns (articles, cards, list items) and extracts text, links, images, data attributes. Returns up to 200 items.",
513
+ inputSchema: {
514
+ type: "object",
515
+ properties: {
516
+ tabId: { type: "number", description: "Chrome tab ID" },
517
+ selector: { type: "string", description: "CSS selector to extract from (optional — auto-detects if omitted)" },
518
+ },
519
+ required: ["tabId"],
520
+ },
521
+ },
522
+ // ── Request replay ───────────────────────────────────────
523
+ {
524
+ name: "neuron_replay_request",
525
+ description: "Re-fire an HTTP request from the extension's service worker context (with the browser's cookies/session). Modify method, headers, or body before sending. Like Postman but using the live browser session. Response bodies truncated at 50KB.",
526
+ inputSchema: {
527
+ type: "object",
528
+ properties: {
529
+ url: { type: "string", description: "Request URL" },
530
+ method: { type: "string", description: "HTTP method (default: GET)" },
531
+ headers: { type: "object", description: "Request headers" },
532
+ body: { type: "string", description: "Request body (for POST/PUT/PATCH)" },
533
+ },
534
+ required: ["url"],
535
+ },
536
+ },
537
+ // ── Network waterfall ────────────────────────────────────
538
+ {
539
+ name: "neuron_waterfall",
540
+ description: "Network waterfall timing breakdown — DNS, TCP, TLS, TTFB, download timing for each resource loaded by the page, ordered by start time. Shows the critical render-blocking path and identifies the slowest resources.",
541
+ inputSchema: {
542
+ type: "object",
543
+ properties: {
544
+ tabId: { type: "number", description: "Chrome tab ID" },
545
+ },
546
+ required: ["tabId"],
547
+ },
548
+ },
549
+ // ── SEO audit ────────────────────────────────────────────
550
+ {
551
+ name: "neuron_seo_audit",
552
+ description: "SEO audit of a page — title, meta description, Open Graph, Twitter Cards, canonical URL, heading hierarchy, image alt text, structured data (JSON-LD/microdata), word count, internal/external link ratio, viewport, lang attribute. Returns findings with severity levels.",
553
+ inputSchema: {
554
+ type: "object",
555
+ properties: {
556
+ tabId: { type: "number", description: "Chrome tab ID" },
557
+ },
558
+ required: ["tabId"],
559
+ },
560
+ },
561
+ // ── Element watcher ──────────────────────────────────────
562
+ {
563
+ name: "neuron_watch_element",
564
+ description: "Start watching a CSS selector for changes (text, visibility, attributes). Polls at a configurable interval and accumulates changes. Use neuron_get_watches to check for changes, neuron_stop_watch to stop.",
565
+ inputSchema: {
566
+ type: "object",
567
+ properties: {
568
+ tabId: { type: "number", description: "Chrome tab ID" },
569
+ selector: { type: "string", description: "CSS selector to watch" },
570
+ intervalMs: { type: "number", description: "Poll interval in ms (default: 2000)" },
571
+ },
572
+ required: ["tabId", "selector"],
573
+ },
574
+ },
575
+ {
576
+ name: "neuron_get_watches",
577
+ description: "Get all active element watches and their accumulated changes",
578
+ inputSchema: { type: "object", properties: {} },
579
+ },
580
+ {
581
+ name: "neuron_stop_watch",
582
+ description: "Stop watching an element and return the final list of accumulated changes",
583
+ inputSchema: {
584
+ type: "object",
585
+ properties: {
586
+ watchId: { type: "string", description: "Watch ID returned by neuron_watch_element" },
587
+ },
588
+ required: ["watchId"],
589
+ },
590
+ },
591
+ ];
592
+ /** Map MCP tool name → extension primitive name */
593
+ export function toolToPrimitive(toolName) {
594
+ const map = {
595
+ neuron_query_dom: "queryDOM",
596
+ neuron_find_elements: "findElements",
597
+ neuron_evaluate_js: "evaluateJS",
598
+ neuron_get_requests: "getRecentRequests",
599
+ neuron_get_errors: "getRecentErrors",
600
+ neuron_get_ws_frames: "getWsFrames",
601
+ neuron_check_auth: "checkAuth",
602
+ neuron_detect_blocker: "detectBlocker",
603
+ neuron_screenshot: "captureScreenshot",
604
+ neuron_session_diagnostics: "getSessionDiagnostics",
605
+ neuron_diagnose: "diagnose",
606
+ neuron_list_tabs: "listTabs",
607
+ neuron_get_logs: "getRecentLogs",
608
+ neuron_export_har: "exportHAR",
609
+ neuron_click: "clickElement",
610
+ neuron_type: "typeText",
611
+ neuron_navigate: "navigateTo",
612
+ neuron_open_tab: "openTab",
613
+ neuron_reload: "reloadTab",
614
+ neuron_scroll: "scrollPage",
615
+ neuron_run_sequence: "runSequence",
616
+ neuron_trigger_post: "triggerPost",
617
+ neuron_list_workflows: "listWorkflows",
618
+ neuron_workflow_status: "getWorkflowStatus",
619
+ neuron_start_recording: "startRecording",
620
+ neuron_stop_recording: "stopRecording",
621
+ neuron_start_replay: "startReplay",
622
+ neuron_stop_replay: "stopReplay",
623
+ neuron_start_demo: "startDemo",
624
+ neuron_get_mocks: "getMockRules",
625
+ neuron_set_mock: "setMockRule",
626
+ neuron_clear_mocks: "clearMocks",
627
+ neuron_a11y_audit: "a11yAudit",
628
+ neuron_perf_snapshot: "perfSnapshot",
629
+ neuron_get_cookies: "getCookies",
630
+ neuron_set_cookie: "setCookie",
631
+ neuron_delete_cookie: "deleteCookie",
632
+ neuron_get_storage: "getStorage",
633
+ neuron_clear_storage: "clearStorage",
634
+ neuron_search_traffic: "searchTraffic",
635
+ neuron_discover_apis: "discoverApis",
636
+ neuron_security_scan: "securityScan",
637
+ neuron_snapshot_state: "snapshotState",
638
+ neuron_diff_states: "diffStates",
639
+ neuron_extract_data: "extractData",
640
+ neuron_replay_request: "replayRequest",
641
+ neuron_waterfall: "waterfall",
642
+ neuron_seo_audit: "seoAudit",
643
+ neuron_watch_element: "watchElement",
644
+ neuron_get_watches: "getWatches",
645
+ neuron_stop_watch: "stopWatch",
646
+ };
647
+ return map[toolName] ?? toolName;
648
+ }
649
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "neuron-inspector",
3
+ "version": "0.1.0",
4
+ "description": "MCP server exposing Neuron extension browser state as queryable tools",
5
+ "type": "module",
6
+ "main": "dist/server.js",
7
+ "bin": {
8
+ "neuron-inspector": "./bin/neuron-inspector.js"
9
+ },
10
+ "files": [
11
+ "dist/**",
12
+ "bin/**"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "test": "vitest run",
17
+ "start": "node dist/server.js"
18
+ },
19
+ "license": "MIT",
20
+ "author": "Plazah Ltd",
21
+ "homepage": "https://neuron.ng/extension",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/conquext/neuron.git",
25
+ "directory": "packages/extension/bridge"
26
+ },
27
+ "keywords": [
28
+ "neuron",
29
+ "mcp",
30
+ "chrome-extension",
31
+ "browser-tools",
32
+ "inspector",
33
+ "devtools"
34
+ ],
35
+ "dependencies": {
36
+ "@modelcontextprotocol/sdk": "^1.0.0",
37
+ "ws": "^8.18.0"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^22.0.0",
41
+ "@types/ws": "^8.5.0",
42
+ "typescript": "^5.7.0",
43
+ "vitest": "^3.0.0"
44
+ }
45
+ }