@branch42-labs/netraptor-mcp 0.4.0 → 0.5.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 CHANGED
@@ -43,16 +43,22 @@ Codex, Claude Code, Cursor, and concurrent agent sessions share one authenticate
43
43
 
44
44
  ## Query and follow live API traffic
45
45
 
46
+ Match the **Tab ID** and **Session #ID** shown in Netraptor's popup or panel. Before reading traffic, the agent must show them with the name, origin and capture state and ask you to confirm. If you already supplied an explicit ID, that counts as confirmation. If two or more live sessions are available, the agent must ask which one to use. Content tools require a `tabId` or `sessionId`; they never silently choose the newest capture. Prefer `tabId` for live recordings: it keeps following that tab when Stop/Start gives it a new Session #ID. Confirm again before switching.
47
+
48
+ With extension **0.5.0 or newer**, `list_sessions` reports `captureState`, `isLive`, `lastRequestAt` and `lastRequestId`. Live means an open tab has history enabled and its capture channel is responding; the old `status: running` flag alone does not prove this. Paused, inactive, history-off, disconnected and unverified channels are distinguished. Older extensions report unknown live state. An empty watch batch is an idle interval, not evidence that history is off. Compare the request cursor and last-call time after generating a known API call to verify traffic is arriving.
49
+
50
+ The **DevTools-only feed** includes all network resource types and is separate from saved API traffic. It has no MCP session ID. Use the saved Session #ID, rather than comparing its API-call count to the DevTools feed's total request count.
51
+
46
52
  Turn on **Keep history for this site** in the extension and use your app normally. New fetch/XHR calls are saved continuously, even with DevTools closed, and MCP queries read those current records. The temporary DevTools live table is a separate capture source and is not exposed through MCP.
47
53
 
48
54
  The live feed requires Chrome extension **0.4.0 or newer**. The other five tools continue to work with earlier extension versions while the update rolls out.
49
55
 
50
- 1. `list_sessions` discovers saved sessions, their origins, status, and IDs. Select the running session for your app.
51
- 2. `list_endpoints` lists its API endpoints; pass `sessionId` to keep the query scoped to the right app.
52
- 3. `search` finds endpoints by URL, template, or GraphQL operation. Pass `sessionId` to search one app.
53
- 4. `get_endpoint` returns schema and examples. Prefer its stable `key`, and pass `sessionId`.
54
- 5. `get_request` reads headers and bodies for an example's request ID.
55
- 6. `watch_requests` follows newly captured requests: start with `{ "sessionId": 1, "afterId": 0 }`, then use each response's `nextCursor` as the next `afterId`. Drain `hasMore` pages before adding `waitMs: 5000` to wait for new calls. Empty batches are normal. Results contain request IDs and compact metadata; use `get_request` for bodies.
56
+ 1. `list_sessions` discovers saved sessions, their origins, checked capture state, last activity and IDs. Ask the user to confirm the correct Session #ID.
57
+ 2. `list_endpoints` lists its API endpoints; pass `tabId` or `sessionId` to keep the query scoped to the right app.
58
+ 3. `search` finds endpoints by URL, template, or GraphQL operation within the confirmed `tabId` or `sessionId`.
59
+ 4. `get_endpoint` returns schema and examples. Prefer its stable `key`, and pass `tabId` or `sessionId`.
60
+ 5. `get_request` reads headers and bodies for an example's request ID. Pass the confirmed `sessionId` too; a request from another session is rejected.
61
+ 6. `watch_requests` follows newly captured requests: start with `{ "tabId": 123, "afterId": 0 }`, then use each response's `nextCursor` as the next `afterId`. Drain `hasMore` pages before adding `waitMs: 5000` to wait for new calls. Empty batches are normal. Results contain request IDs and compact metadata; use `get_request` for bodies.
56
62
 
57
63
  This live feed uses bounded long polling. It does not push unsolicited notifications into an agent conversation. Recording must be enabled for the site, and an agent must call the tools to read traffic. Choose a new session ID if you stop recording and begin a new session.
58
64
 
@@ -62,6 +68,7 @@ This live feed uses bounded long polling. It does not push unsolicited notificat
62
68
  - **Waiting for server:** launch or reconnect Netraptor in your coding agent. The extension's switch connects to the server; it does not start an agent process.
63
69
  - **Tools missing after setup:** start a new agent session or reload its MCP configuration. In Codex, verify registration with `codex mcp list`.
64
70
  - **Empty sessions / no new calls:** enable **Keep history for this site**, then reload or exercise the app. Queries cannot recover requests made before recording was enabled.
71
+ - **A session appears stuck:** check its exact ID, `captureState` and `lastRequestAt`, rather than selecting by name or highest count. An extension update can orphan the relay in an existing page; 0.5.0 repairs that relay without wrapping fetch/XHR again. If it reports `reload_required`, reload that page. `save_failed` means requests could not reach saved history; `unverified` means generate a new API call to verify the channel. Browsing another app in the same tab starts a new session ID.
65
72
 
66
73
  ## Security model
67
74
 
@@ -10,14 +10,37 @@ function text(value) {
10
10
  }],
11
11
  };
12
12
  }
13
+ const target = {
14
+ tabId: z.number().int().positive().optional()
15
+ .describe("Browser Tab ID confirmed with the user (tabIds in list_sessions). Follows that tab's current recording."),
16
+ sessionId: z.number().int().positive().optional()
17
+ .describe("Session ID confirmed with the user; match Session #ID in Netraptor. Use for saved sessions no tab is recording."),
18
+ };
19
+ const hasTarget = ({ tabId, sessionId }) => tabId !== undefined || sessionId !== undefined;
20
+ const targetMessage = { message: "Provide the confirmed tabId or sessionId." };
13
21
  export function createMcpServer(bridge) {
14
22
  const server = new McpServer({ name: "netraptor", version }, {
15
- instructions: "Netraptor provides read-only access to API calls captured in the user's browser. Begin with list_sessions and choose the correct origin and sessionId. Use search to find an endpoint, get_endpoint with its stable key for schema/examples, and get_request with an example ID for full details. To follow live calls, repeatedly call watch_requests with that sessionId and the previous nextCursor as afterId; drain hasMore before waiting. Capture requires Keep history for this site to be enabled. No unsolicited push messages are sent, and the temporary DevTools live table is not exposed. Sensitive headers, URL fields and top-level JSON fields are redacted; other body data may remain sensitive.",
23
+ instructions: "Netraptor provides read-only access to saved API traffic. FIRST call list_sessions. Before reading session traffic, ask the user to confirm the browser tab (Tab ID from tabIds), Session #ID, name, origin and captureState exactly as shown in Netraptor. If the user already explicitly supplied that tab or session ID, treat it as confirmation. If two or more live sessions are available, ask which one to use; NEVER choose by newest timestamp or request count. For a live recording pass the confirmed tabId: it keeps following that tab when Stop/Start gives it a new Session #ID. Pass sessionId for saved sessions that no tab is recording. isLive/captureState report checked browser recording state; historical status=running alone does NOT mean live. Unknown/unverified requires checking, reload_required means reload the affected page, and an empty watch batch only means no new saved requests during the wait, not that history is disabled. list_sessions and all session responses include lastRequestAt/lastRequestId to verify activity. The DevTools-only feed is separate and unavailable through MCP. After confirmation use scoped search, get_endpoint and get_request. Follow traffic with watch_requests and nextCursor; drain hasMore then wait up to 5000ms. Reconfirm before switching tabs or sessions. Sensitive headers, URLs and top-level JSON fields are redacted; other body data may remain sensitive.",
16
24
  });
17
25
  const annotations = { readOnlyHint: true, destructiveHint: false, openWorldHint: false };
18
26
  const proxy = async (method, params) => {
19
27
  try {
20
- return text(await bridge.request(method, params));
28
+ const value = await bridge.request(method, params);
29
+ if (params.tabId !== undefined && (!value || typeof value !== "object" || !("tabId" in value) || value.tabId !== params.tabId)) {
30
+ return { ...text("Following a tab requires Netraptor Chrome extension 0.5.0 or newer. Update the extension, or pass the confirmed sessionId instead."), isError: true };
31
+ }
32
+ if (method === "get_request" && (!value || typeof value !== "object" || !("sessionId" in value) || value.sessionId !== params.sessionId)) {
33
+ return { ...text("This request does not belong to the confirmed session. Check list_sessions and select the correct sessionId before reading it."), isError: true };
34
+ }
35
+ if (method === "list_sessions" && Array.isArray(value)) {
36
+ return text(value.map((session) => session.captureState ? session : {
37
+ ...session, label: `Session #${session.id}`, source: "saved_api",
38
+ captureState: "unknown", isLive: false,
39
+ lastRequestAt: null, lastRequestId: null,
40
+ activityNotice: "This extension cannot verify live recording state. Update Netraptor to 0.5.0 or newer; do not infer live capture from status=running.",
41
+ }));
42
+ }
43
+ return text(value);
21
44
  }
22
45
  catch (error) {
23
46
  const message = error instanceof Error ? error.message : String(error);
@@ -29,29 +52,28 @@ export function createMcpServer(bridge) {
29
52
  };
30
53
  server.registerTool("list_sessions", {
31
54
  annotations,
32
- description: "Start here: discover locally captured sessions and their origins. Running sessions receive live API traffic while Keep history for this site is enabled. MCP does not read the temporary DevTools live table. Choose a sessionId before querying a specific app; an empty list means recording needs to be enabled in the browser.",
55
+ description: "Start here. Match Tab ID (tabIds), Session #ID, name and origin to the browser UI, and ask the user to confirm before reading traffic. If two or more sessions have isLive=true, ask which ID to use. Do not infer live state from status=running; check captureState and lastRequestAt. An empty list means no saved sessions exist yet, not proof that history is off.",
33
56
  inputSchema: z.object({}),
34
57
  }, () => proxy("list_sessions", {}));
35
58
  server.registerTool("watch_requests", {
36
- description: "Follow live captured API calls in one session. Enable Keep history for this site in Netraptor and use list_sessions to find its sessionId. Start afterId at 0, then pass nextCursor as afterId on each call. Drain hasMore pages before waiting. waitMs long-polls for up to 5000ms; an empty batch is normal. Requests are returned in ID order without repeats or skipped pages. Use get_request(id) for headers and bodies. This is a bounded pull feed, not unsolicited push notifications.",
59
+ description: "Follow live captured API calls in one browser tab or session. Use list_sessions, check captureState/isLive and ask the user to confirm its Tab ID and Session #ID first. Prefer tabId for live recordings so Stop/Start in that tab is followed; the response session shows which Session #ID was read. Start afterId at 0, then pass nextCursor as afterId on each call. Drain hasMore pages before waiting. waitMs long-polls for up to 5000ms; an empty batch is normal and does not prove recording is disabled. The session metadata reports recording health and last saved activity. Requests are returned in ID order without repeats or skipped pages. Use get_request with id and the confirmed sessionId for headers and bodies. This is a bounded pull feed, not unsolicited push notifications.",
37
60
  annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
38
61
  inputSchema: z.object({
39
- sessionId: z.number().int().positive().describe("Session ID from list_sessions; required to scope traffic to one app."),
62
+ ...target,
40
63
  afterId: z.number().int().min(0).max(Number.MAX_SAFE_INTEGER).default(0)
41
64
  .describe("Exclusive request cursor; use the previous nextCursor (initially 0)."),
42
65
  limit: z.number().int().min(1).max(500).default(100),
43
66
  waitMs: z.number().int().min(0).max(5_000).default(0),
44
- }),
67
+ }).refine(hasTarget, targetMessage),
45
68
  }, (params) => proxy("watch_requests", params));
46
69
  server.registerTool("list_endpoints", {
47
70
  annotations,
48
- description: "List compact endpoint summaries, including stable keys and GraphQL operation names. Defaults to the most recent session and reports total before limiting.",
71
+ description: "List compact endpoint summaries, including stable keys and GraphQL operation names. Requires the tabId or sessionId confirmed with the user and reports total before limiting.",
49
72
  inputSchema: z.object({
50
- sessionId: z.number().int().positive().optional()
51
- .describe("Captured session ID; defaults to the newest session."),
73
+ ...target,
52
74
  limit: z.number().int().min(1).max(1_000).default(200)
53
75
  .describe("Maximum endpoint summaries to return (default 200, max 1000)."),
54
- }),
76
+ }).refine(hasTarget, targetMessage),
55
77
  }, (params) => proxy("list_endpoints", params));
56
78
  server.registerTool("get_endpoint", {
57
79
  annotations,
@@ -65,29 +87,29 @@ export function createMcpServer(bridge) {
65
87
  .describe("Endpoint path template; required with method when key is omitted."),
66
88
  operationName: z.string().min(1).optional()
67
89
  .describe("GraphQL operation name used to disambiguate a shared method and path."),
68
- sessionId: z.number().int().positive().optional()
69
- .describe("Captured session ID; defaults to the newest session."),
90
+ ...target,
70
91
  maxExamples: z.number().int().min(0).max(5).default(2)
71
92
  .describe("Maximum deduplicated examples to return (default 2, max 5)."),
72
93
  maxBodyChars: z.number().int().min(100).max(20_000).default(4_000)
73
94
  .describe("Maximum characters per example request or response body (default 4000, max 20000)."),
74
- }).refine(({ key, method, template }) => Boolean(key || (method && template)), { message: "Provide key, or both method and template." }),
95
+ }).refine(({ key, method, template }) => Boolean(key || (method && template)), { message: "Provide key, or both method and template." }).refine(hasTarget, targetMessage),
75
96
  }, (params) => proxy("get_endpoint", params));
76
97
  server.registerTool("search", {
77
98
  annotations,
78
99
  description: "Search captured endpoint templates, URLs, and GraphQL operation names. Returns compact results (key, method, template, GraphQL operation, calls, statuses; no params or URLs, use get_endpoint for those) and the total before limiting.",
79
100
  inputSchema: z.object({
80
101
  query: z.string().min(1).describe("Case-insensitive endpoint search text."),
81
- sessionId: z.number().int().positive().optional().describe("Scope search to this session; omit to search all captured apps."),
102
+ ...target,
82
103
  limit: z.number().int().min(1).max(100).default(20)
83
104
  .describe("Maximum compact matches to return (default 20, max 100)."),
84
- }),
105
+ }).refine(hasTarget, targetMessage),
85
106
  }, (params) => proxy("search", params));
86
107
  server.registerTool("get_request", {
87
108
  annotations,
88
109
  description: "Get one captured request with sensitive headers, URL parameters, and top-level JSON fields redacted and bodies bounded. Netraptor records from inside the page, so requestHeaders only contains headers the site's code set (not browser-added ones like cookies or user-agent). status 0 comes with failure: network-error, aborted, timeout, opaque (no-cors), or unknown (recorded before Netraptor tracked failures). bodyTruncated is true when either the capture or maxBodyChars cut a body.",
89
110
  inputSchema: z.object({
90
111
  id: z.number().int().positive().describe("Captured request ID."),
112
+ sessionId: z.number().int().positive().describe("Confirmed session ID; rejects requests from another capture."),
91
113
  maxBodyChars: z.number().int().min(100).max(200_000).default(20_000)
92
114
  .describe("Maximum characters for each request or response body (default 20000, max 200000)."),
93
115
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@branch42-labs/netraptor-mcp",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Local read-only MCP bridge for Netraptor",
5
5
  "private": false,
6
6
  "type": "module",