@ejazullah/browser-mcp 0.0.61 → 0.0.62

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.
@@ -29,7 +29,7 @@ export async function start(serverBackendFactory, options, authConfig) {
29
29
  if (options.port !== undefined) {
30
30
  const httpServer = await startHttpServer(options);
31
31
  const auth = new AuthManager(authConfig ?? defaultAuthConfig());
32
- startHttpTransport(httpServer, serverBackendFactory, auth);
32
+ startHttpTransport(httpServer, serverBackendFactory, auth, !!options.heartbeat);
33
33
  }
34
34
  else {
35
35
  await startStdioTransport(serverBackendFactory);
@@ -157,7 +157,7 @@ function findSessionIdByCdpKey(sessionCdpKeys, sessions, cdpSessionKey) {
157
157
  }
158
158
  return undefined;
159
159
  }
160
- async function handleStreamable(serverBackendFactory, req, res, sessions, sessionCdpKeys) {
160
+ async function handleStreamable(serverBackendFactory, req, res, sessions, sessionCdpKeys, runHeartbeat) {
161
161
  const cdpSessionKey = resolveClientCdpSessionKey(req);
162
162
  const sessionId = req.headers['mcp-session-id'];
163
163
  if (sessionId) {
@@ -222,7 +222,7 @@ async function handleStreamable(serverBackendFactory, req, res, sessions, sessio
222
222
  testDebug(`create http session: ${transport.sessionId}`);
223
223
  if (cdpSessionKey)
224
224
  sessionCdpKeys.set(sessionId, cdpSessionKey);
225
- await mcpServer.connect(serverBackendFactory, transport, true);
225
+ await mcpServer.connect(serverBackendFactory, transport, runHeartbeat);
226
226
  sessions.set(sessionId, transport);
227
227
  }
228
228
  });
@@ -239,7 +239,7 @@ async function handleStreamable(serverBackendFactory, req, res, sessions, sessio
239
239
  res.statusCode = 400;
240
240
  res.end('Invalid request');
241
241
  }
242
- function startHttpTransport(httpServer, serverBackendFactory, auth) {
242
+ function startHttpTransport(httpServer, serverBackendFactory, auth, runHeartbeat) {
243
243
  const sseSessions = new Map();
244
244
  const streamableSessions = new Map();
245
245
  const streamableSessionCdpKeys = new Map();
@@ -267,7 +267,7 @@ function startHttpTransport(httpServer, serverBackendFactory, auth) {
267
267
  if (url.pathname.startsWith('/sse'))
268
268
  await handleSSE(serverBackendFactory, req, res, url, sseSessions);
269
269
  else
270
- await handleStreamable(serverBackendFactory, req, res, streamableSessions, streamableSessionCdpKeys);
270
+ await handleStreamable(serverBackendFactory, req, res, streamableSessions, streamableSessionCdpKeys, runHeartbeat);
271
271
  });
272
272
  });
273
273
  const url = httpAddressToString(httpServer.address());
package/lib/program.js CHANGED
@@ -78,6 +78,8 @@ program
78
78
  .option('--viewport-size <size>', 'specify browser viewport size in pixels, for example "1280, 720"')
79
79
  .option('--mcp-logs', 'Enable verbose MCP/session transport logs in CLI output')
80
80
  .option('--no-mcp-logs', 'Disable verbose MCP/session transport logs in CLI output')
81
+ .option('--mcp-heartbeat', 'Enable MCP streamable transport heartbeat (may close sessions on slow/long operations)')
82
+ .option('--no-mcp-heartbeat', 'Disable MCP streamable transport heartbeat (recommended for n8n item-by-item runs)')
81
83
  .option('--mongodb-url <url>', 'MongoDB connection URL. Example: mongodb://localhost:27017')
82
84
  .option('--mongodb-db <name>', 'MongoDB database name. Default: playwright_mcp')
83
85
  .option('--mongodb-collection <name>', 'MongoDB collection name. Default: element_interactions')
@@ -113,7 +115,7 @@ program
113
115
  factories.push(createExtensionContextFactory(config));
114
116
  const serverBackendFactory = () => new BrowserServerBackend(config, factories);
115
117
  const authConfig = buildAuthConfig(options);
116
- await mcpTransport.start(serverBackendFactory, config.server, authConfig);
118
+ await mcpTransport.start(serverBackendFactory, { ...config.server, heartbeat: options.mcpHeartbeat }, authConfig);
117
119
  if (config.saveTrace) {
118
120
  const server = await startTraceViewerServer();
119
121
  const urlPrefix = server.urlPrefix('human-readable');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ejazullah/browser-mcp",
3
- "version": "0.0.61",
3
+ "version": "0.0.62",
4
4
  "description": "@ejazullah/browser-mcp - Enhanced Playwright Tools for MCP with CDP Support",
5
5
  "type": "module",
6
6
  "repository": {