browser-devtools-mcp 0.0.2 → 0.0.3

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/dist/index.js CHANGED
@@ -96,20 +96,42 @@ function _getConfig() {
96
96
  return {};
97
97
  }
98
98
  async function _startStdioServer() {
99
- await (0, server_1.createSession)(_getConfig(), new stdio_js_1.StdioServerTransport());
99
+ const transport = new stdio_js_1.StdioServerTransport();
100
+ await (0, server_1.createServer)(transport, {
101
+ config: _getConfig(),
102
+ });
103
+ }
104
+ function _createSession(ctx, transport, server) {
105
+ // Create MCP session with MCP server
106
+ const session = (0, server_1.createSession)(transport, server);
107
+ // Register hook to close the associated MCP session on socket close
108
+ const socket = ctx.env.incoming.socket;
109
+ if (!socket._mcpRegistered) {
110
+ socket._mcpRegistered = true;
111
+ socket.on('close', async () => {
112
+ logger.debug(`Socket, which is for MCP session with id ${transport.sessionId}, has been closed`);
113
+ if (config.SESSION_CLOSE_ON_SOCKET_CLOSE) {
114
+ await transport.close();
115
+ }
116
+ });
117
+ }
118
+ // Register MCP session close hook to gracefully close it
119
+ _registerMCPSessionClose(transport, session.server);
120
+ logger.debug(`Created MCP server session with id ${transport.sessionId}`);
121
+ return session;
100
122
  }
101
- async function _createMCPServerSession(ctx) {
102
- let session;
123
+ async function _createTransport(ctx) {
103
124
  // Get MCP server config
104
125
  const serverConfig = _getConfig();
126
+ const holder = {};
105
127
  // Create new instances of MCP Server and Transport for each incoming request
106
128
  const transport = new mcp_1.StreamableHTTPTransport({
107
129
  // Change to `false` if you want to enable SSE in responses.
108
130
  enableJsonResponse: true,
109
131
  sessionIdGenerator: () => crypto_1.default.randomUUID(),
110
132
  onsessioninitialized: async (sessionId) => {
133
+ const session = _createSession(ctx, transport, holder.server);
111
134
  sessions.set(sessionId, session);
112
- session.initialized = true;
113
135
  logger.debug(`MCP session initialized with id ${sessionId}`);
114
136
  },
115
137
  onsessionclosed: async (sessionId) => {
@@ -118,40 +140,38 @@ async function _createMCPServerSession(ctx) {
118
140
  logger.debug(`MCP session closed with id ${sessionId}`);
119
141
  },
120
142
  });
121
- // Create MCP session with MCP server
122
- session = await (0, server_1.createSession)(serverConfig, transport);
123
- // Register hook to close the associated MCP session on socket close
124
- const socket = ctx.env.incoming.socket;
125
- if (!socket._mcpRegistered) {
126
- socket._mcpRegistered = true;
127
- socket.on('close', async () => {
128
- logger.debug(`Socket, which is for MCP session with id ${transport.sessionId}, has been closed`);
129
- if (config.SESSION_CLOSE_ON_SOCKET_CLOSE) {
130
- await transport.close();
131
- }
132
- });
133
- }
134
- // Register MCP session close hook to gracefully close it
135
- _registerMCPSessionClose(transport, session.server);
136
- logger.debug(`Created MCP server session with id ${transport.sessionId}`);
137
- return session;
143
+ holder.server = await (0, server_1.createServer)(transport, {
144
+ config: serverConfig,
145
+ });
146
+ return transport;
138
147
  }
139
- async function _getMCPServerSession(sessionId) {
140
- return sessions.get(sessionId);
148
+ async function _getTransport(ctx) {
149
+ const sessionId = ctx.req.header('mcp-session-id');
150
+ if (sessionId) {
151
+ const session = sessions.get(sessionId);
152
+ if (session) {
153
+ logger.debug(`Reusing MCP session with id ${sessionId}`);
154
+ return session
155
+ .transport;
156
+ }
157
+ }
158
+ return undefined;
141
159
  }
142
- async function _getOrCreateMCPServerSession(ctx) {
160
+ async function _getOrCreateTransport(ctx) {
143
161
  const sessionId = ctx.req.header('mcp-session-id');
144
162
  if (sessionId) {
145
163
  const session = sessions.get(sessionId);
146
164
  if (session) {
147
165
  logger.debug(`Reusing MCP session with id ${sessionId}`);
166
+ return session
167
+ .transport;
148
168
  }
149
169
  else {
150
170
  logger.debug(`No MCP session could be found with id ${sessionId}`);
171
+ return undefined;
151
172
  }
152
- return session;
153
173
  }
154
- return await _createMCPServerSession(ctx);
174
+ return await _createTransport(ctx);
155
175
  }
156
176
  function _registerMCPSessionClose(transport, mcpServer) {
157
177
  let closed = false;
@@ -173,11 +193,14 @@ function _registerMCPSessionClose(transport, mcpServer) {
173
193
  const session = sessions.get(transport.sessionId);
174
194
  if (session) {
175
195
  session.closed = true;
176
- try {
177
- await session.context.close();
178
- }
179
- catch (err) {
180
- logger.error('Error occurred while closing MCP session context', err);
196
+ if (session.context) {
197
+ try {
198
+ await session.context.close();
199
+ logger.debug('Closed MCP session context');
200
+ }
201
+ catch (err) {
202
+ logger.error('Error occurred while closing MCP session context', err);
203
+ }
181
204
  }
182
205
  }
183
206
  sessions.delete(transport.sessionId);
@@ -206,6 +229,19 @@ function _scheduleIdleSessionCheck() {
206
229
  };
207
230
  setInterval(sessionCheck, config.SESSION_IDLE_CHECK_SECONDS * 1000);
208
231
  }
232
+ async function _logRequest(ctx) {
233
+ const reqClone = ctx.req.raw.clone();
234
+ logger.debug(`Got request: ${await reqClone.json()}`);
235
+ }
236
+ function _markSessionAsActive(ctx) {
237
+ const sessionId = ctx.req.header('mcp-session-id');
238
+ if (sessionId) {
239
+ const session = sessions.get(sessionId);
240
+ if (session) {
241
+ session.lastActiveAt = Date.now();
242
+ }
243
+ }
244
+ }
209
245
  const app = new hono_1.Hono();
210
246
  async function _startStreamableHTTPServer(port) {
211
247
  // Global CORS
@@ -231,12 +267,15 @@ async function _startStreamableHTTPServer(port) {
231
267
  // MCP Post message
232
268
  app.post('/mcp', async (ctx) => {
233
269
  try {
234
- const mcpSession = await _getOrCreateMCPServerSession(ctx);
235
- if (!mcpSession) {
270
+ if (logger.isDebugEnabled()) {
271
+ await _logRequest(ctx);
272
+ }
273
+ const transport = await _getOrCreateTransport(ctx);
274
+ if (!transport) {
236
275
  return ctx.json(MCP_ERRORS.sessionNotFound, 400);
237
276
  }
238
- mcpSession.lastActiveAt = Date.now();
239
- return await mcpSession.transport.handleRequest(ctx);
277
+ _markSessionAsActive(ctx);
278
+ return await transport.handleRequest(ctx);
240
279
  }
241
280
  catch (err) {
242
281
  logger.error('Error occurred while handling MCP request', err);
@@ -246,15 +285,11 @@ async function _startStreamableHTTPServer(port) {
246
285
  // MCP Delete session
247
286
  app.delete('/mcp', async (ctx) => {
248
287
  try {
249
- const sessionId = ctx.req.header('mcp-session-id');
250
- if (!sessionId) {
288
+ const transport = await _getTransport(ctx);
289
+ if (!transport) {
251
290
  return ctx.json(MCP_ERRORS.sessionNotFound, 400);
252
291
  }
253
- const mcpSession = await _getMCPServerSession(sessionId);
254
- if (!mcpSession) {
255
- return ctx.json(MCP_ERRORS.sessionNotFound, 400);
256
- }
257
- await mcpSession.transport.close();
292
+ await transport.close();
258
293
  return ctx.json({ ok: true }, 200);
259
294
  }
260
295
  catch (err) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,319 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.OTELController = void 0;
40
+ const fs_1 = __importDefault(require("fs"));
41
+ const path_1 = __importDefault(require("path"));
42
+ const logger = __importStar(require("../logger"));
43
+ const otel_proxy_1 = require("./otel-proxy");
44
+ const config_1 = require("../config");
45
+ const OTEL_PROXY_LOCAL_PATH = '/__mcp_otel/';
46
+ const OTEL_BUNDLE_FILE_NAME = 'otel-initializer.bundle.js';
47
+ function _getOTELExporterConfig() {
48
+ if (config_1.OTEL_EXPORTER_TYPE === 'otlp/http' || config_1.OTEL_EXPORTER_HTTP_URL) {
49
+ if (!config_1.OTEL_EXPORTER_HTTP_URL) {
50
+ throw new Error(`OTEL exporter HTTP url must be set when OTEL exporter type is "otlp/http"`);
51
+ }
52
+ return {
53
+ type: 'otlp/http',
54
+ // IMPORTANT: OTEL_EXPORTER_HTTP_URL is a *base* URL, e.g. "http://localhost:4318"
55
+ // Browser exporter points to same-origin proxy. We choose a default suffix for traces.
56
+ // If you want to support metrics/logs too, you can configure initializer to use
57
+ // "/__mcp_otel/v1/metrics" and "/__mcp_otel/v1/logs" similarly.
58
+ url: OTEL_PROXY_LOCAL_PATH,
59
+ upstreamURL: config_1.OTEL_EXPORTER_HTTP_URL,
60
+ headers: config_1.OTEL_EXPORTER_HTTP_HEADERS,
61
+ };
62
+ }
63
+ else if (config_1.OTEL_EXPORTER_TYPE === 'console') {
64
+ return {
65
+ type: 'console',
66
+ };
67
+ }
68
+ else if (config_1.OTEL_EXPORTER_TYPE === 'none') {
69
+ return {
70
+ type: 'none',
71
+ };
72
+ }
73
+ else {
74
+ throw new Error(`Invalid OTEL exporter type ${config_1.OTEL_EXPORTER_TYPE}`);
75
+ }
76
+ }
77
+ function _getOTELInstrumentationConfig() {
78
+ return {
79
+ userInteractionEvents: config_1.OTEL_INSTRUMENTATION_USER_INTERACTION_EVENTS,
80
+ };
81
+ }
82
+ function _getOTELConfig() {
83
+ return {
84
+ serviceName: config_1.OTEL_SERVICE_NAME,
85
+ serviceVersion: config_1.OTEL_SERVICE_VERSION,
86
+ exporter: _getOTELExporterConfig(),
87
+ instrumentation: _getOTELInstrumentationConfig(),
88
+ debug: false,
89
+ };
90
+ }
91
+ function _readBundleContent(assetDir, bundleFileName) {
92
+ const assetDirAbs = path_1.default.isAbsolute(assetDir)
93
+ ? assetDir
94
+ : path_1.default.join(process.cwd(), assetDir);
95
+ const filePath = path_1.default.join(assetDirAbs, bundleFileName);
96
+ if (!fs_1.default.existsSync(filePath)) {
97
+ throw new Error(`OTEL bundle not found at: ${filePath}`);
98
+ }
99
+ return fs_1.default.readFileSync(filePath, 'utf-8');
100
+ }
101
+ async function _applyConfigToPage(page, cfg) {
102
+ await page
103
+ .evaluate((nextCfg) => {
104
+ const g = globalThis;
105
+ if (!g.__MCP_DEVTOOLS__) {
106
+ g.__MCP_DEVTOOLS__ = {};
107
+ }
108
+ // Keep a stable fallback trace id for debugging & for pages
109
+ // where controller isn't available yet.
110
+ g.__MCP_TRACE_ID__ = nextCfg.traceId;
111
+ if (g.__mcpOtel && typeof g.__mcpOtel.init === 'function') {
112
+ g.__mcpOtel.init(nextCfg);
113
+ }
114
+ else {
115
+ g.__MCP_DEVTOOLS__.otelInitialized = false;
116
+ g.__MCP_DEVTOOLS__.otelInitError =
117
+ '__mcpOtel.init is not available while applying config';
118
+ }
119
+ }, cfg)
120
+ .catch((e) => {
121
+ // NOTE:
122
+ // We intentionally do not throw here because apply is best-effort and
123
+ // should not break user sessions; however, swallowing errors makes debugging hard.
124
+ const msg = e instanceof Error ? e.message : String(e);
125
+ logger.debug(`[otel-controller] applyConfigToPage failed (ignored): ${msg}`);
126
+ });
127
+ }
128
+ /**
129
+ * Installs navigation sync so that after each main-frame navigation we re-apply
130
+ * the latest config. This is important because:
131
+ * - addInitScript config is a snapshot at install time
132
+ * - traceId can change mid-session
133
+ *
134
+ * IMPORTANT:
135
+ * We keep references to handlers so we can remove them on close().
136
+ */
137
+ function _installAutoSync(browserContext, getCfg) {
138
+ const perPageHandlers = new WeakMap();
139
+ const attachToPage = (page) => {
140
+ // Avoid double-attaching to the same Page instance.
141
+ if (perPageHandlers.has(page)) {
142
+ return;
143
+ }
144
+ const onFrameNavigated = async (frame) => {
145
+ if (frame !== page.mainFrame()) {
146
+ return;
147
+ }
148
+ await _applyConfigToPage(page, getCfg());
149
+ };
150
+ perPageHandlers.set(page, onFrameNavigated);
151
+ page.on('framenavigated', onFrameNavigated);
152
+ };
153
+ // Attach to existing pages
154
+ for (const p of browserContext.pages()) {
155
+ attachToPage(p);
156
+ }
157
+ // Attach to future pages
158
+ const onNewPage = (p) => {
159
+ attachToPage(p);
160
+ };
161
+ browserContext.on('page', onNewPage);
162
+ const detach = () => {
163
+ // Remove context-level listener
164
+ try {
165
+ browserContext.off('page', onNewPage);
166
+ }
167
+ catch {
168
+ // Some older Playwright builds may differ; ignore.
169
+ }
170
+ // Remove per-page listeners (best-effort)
171
+ for (const p of browserContext.pages()) {
172
+ const h = perPageHandlers.get(p);
173
+ if (h) {
174
+ try {
175
+ p.off('framenavigated', h);
176
+ }
177
+ catch { }
178
+ }
179
+ }
180
+ // Note: We intentionally do not iterate WeakMap keys.
181
+ // We best-effort remove from currently known pages.
182
+ };
183
+ logger.debug('[otel-controller] auto-sync installed (page+framenavigated)');
184
+ return { detach };
185
+ }
186
+ class OTELController {
187
+ browserContext;
188
+ config;
189
+ proxy;
190
+ /**
191
+ * We prevent multiple installs per OTELController instance.
192
+ */
193
+ initialized = false;
194
+ /**
195
+ * Handler cleanup for auto-sync.
196
+ */
197
+ autoSyncDetach;
198
+ constructor(browserContext) {
199
+ this.browserContext = browserContext;
200
+ this.config = _getOTELConfig();
201
+ }
202
+ async init(options) {
203
+ if (this.initialized) {
204
+ logger.debug('[otel-controller] init skipped: BrowserContext already initialized');
205
+ return;
206
+ }
207
+ // Enforce traceId presence; while OTELConfig allows optional traceId,
208
+ // runtime behavior expects it.
209
+ if (!options.traceId || !options.traceId.trim()) {
210
+ throw new Error('[otel-controller] init requires a non-empty traceId');
211
+ }
212
+ this.config.traceId = options.traceId;
213
+ const assetDir = config_1.OTEL_ASSETS_DIR || __dirname;
214
+ if (this.config.exporter.type === 'otlp/http') {
215
+ this.proxy = new otel_proxy_1.OTELProxy({
216
+ localPath: OTEL_PROXY_LOCAL_PATH,
217
+ upstreamUrl: this.config.exporter.upstreamURL,
218
+ upstreamHeaders: { ...(this.config.exporter.headers ?? {}) },
219
+ });
220
+ await this.proxy.install(this.browserContext);
221
+ }
222
+ // Add extra debug breadcrumbs to quickly verify routing is working.
223
+ // If you see 404s for /__mcp_otel/*, this tells you whether routing is installed.
224
+ logger.debug(`[otel-controller] exporter=${this.config.exporter.type} localBase=${OTEL_PROXY_LOCAL_PATH}` +
225
+ (this.config.exporter.type === 'otlp/http'
226
+ ? ` upstreamBase=${this.config.exporter.upstreamURL}`
227
+ : ''));
228
+ const bundleContent = _readBundleContent(assetDir, OTEL_BUNDLE_FILE_NAME);
229
+ // Install auto-sync (we pass a getter so it always uses latest config)
230
+ const sync = _installAutoSync(this.browserContext, () => this.config);
231
+ this.autoSyncDetach = sync.detach;
232
+ // 1) Install the initializer bundle as an init script (no network, no <script> tag)
233
+ await this.browserContext.addInitScript({
234
+ content: bundleContent,
235
+ });
236
+ // 2) Install a config init script that runs on every new document (snapshot config at install time)
237
+ // Auto-sync will re-apply the latest config after navigations.
238
+ await this.browserContext.addInitScript((cfg) => {
239
+ const g = globalThis;
240
+ if (!g.__MCP_DEVTOOLS__) {
241
+ g.__MCP_DEVTOOLS__ = {};
242
+ }
243
+ g.__MCP_TRACE_ID__ = cfg.traceId;
244
+ if (g.__mcpOtel && typeof g.__mcpOtel.init === 'function') {
245
+ g.__mcpOtel.init(cfg);
246
+ }
247
+ else {
248
+ g.__MCP_DEVTOOLS__.otelInitialized = false;
249
+ g.__MCP_DEVTOOLS__.otelInitError =
250
+ '__mcpOtel.init is not available (initializer bundle did not install)';
251
+ }
252
+ }, this.config);
253
+ this.initialized = true;
254
+ logger.debug('[otel-controller] init installed: bundle + config init scripts + auto-sync');
255
+ }
256
+ async isInitialized(page) {
257
+ return await page.evaluate(() => {
258
+ const g = globalThis;
259
+ return g.__MCP_DEVTOOLS__?.otelInitialized === true;
260
+ });
261
+ }
262
+ async getInitError(page) {
263
+ return await page.evaluate(() => {
264
+ const g = globalThis;
265
+ const v = g.__MCP_DEVTOOLS__?.otelInitError;
266
+ if (typeof v === 'string' && v.trim()) {
267
+ return v;
268
+ }
269
+ return undefined;
270
+ });
271
+ }
272
+ async getTraceId(page) {
273
+ return await page.evaluate(() => {
274
+ const g = globalThis;
275
+ if (g.__mcpOtel && typeof g.__mcpOtel.getTraceId === 'function') {
276
+ const tid = g.__mcpOtel.getTraceId();
277
+ if (typeof tid === 'string' && tid.trim()) {
278
+ return tid;
279
+ }
280
+ }
281
+ const fallback = g.__MCP_TRACE_ID__;
282
+ if (typeof fallback === 'string' && fallback.trim()) {
283
+ return fallback;
284
+ }
285
+ return undefined;
286
+ });
287
+ }
288
+ async setTraceId(page, traceId) {
289
+ // Persist in controller config so future navigations pick it up.
290
+ this.config.traceId = traceId;
291
+ await page.evaluate((tid) => {
292
+ const g = globalThis;
293
+ if (g.__mcpOtel && typeof g.__mcpOtel.setTraceId === 'function') {
294
+ g.__mcpOtel.setTraceId(tid);
295
+ }
296
+ else {
297
+ g.__MCP_TRACE_ID__ = tid;
298
+ }
299
+ }, traceId);
300
+ }
301
+ async close() {
302
+ // Cleanup auto-sync listeners to avoid:
303
+ // - leaking listeners across long sessions
304
+ // - duplicate apply calls if controller is re-created/re-inited
305
+ if (this.autoSyncDetach) {
306
+ try {
307
+ this.autoSyncDetach();
308
+ }
309
+ catch { }
310
+ this.autoSyncDetach = undefined;
311
+ }
312
+ if (this.proxy) {
313
+ await this.proxy.uninstall(this.browserContext);
314
+ this.proxy = undefined;
315
+ }
316
+ }
317
+ }
318
+ exports.OTELController = OTELController;
319
+ //# sourceMappingURL=otel-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-controller.js","sourceRoot":"","sources":["../../src/otel/otel-controller.ts"],"names":[],"mappings":"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"}