repo_description: Chrome DevTools for coding agents
repo_topics: browser chrome chrome-devtools debugging devtools mcp mcp-server puppeteer
code: /**
   * @license
   * Copyright 2025 Google LLC
   * SPDX-License-Identifier: Apache-2.0
   */
  
  import '../polyfill.js';
  
  import process from 'node:process';
  
  import {createMcpServer, logDisclaimers} from '../index.js';
  import {logger, saveLogsToFile} from '../logger.js';
  import {computeFlagUsage} from '../telemetry/flagUtils.js';
  import {StdioServerTransport} from '../third_party/index.js';
  import {checkForUpdates} from '../utils/check-for-updates.js';
  import {VERSION} from '../version.js';
  
  import {cliOptions, parseArguments} from './chrome-devtools-mcp-cli-options.js';
  
  await checkForUpdates(
    'Run `npm install chrome-devtools-mcp@latest` to update.',
  );
  
  export const args = parseArguments(VERSION);
  
  const logFile = args.logFile ? saveLogsToFile(args.logFile) : undefined;
  if (
    process.env['CI'] ||
    process.env['CHROME_DEVTOOLS_MCP_NO_USAGE_STATISTICS']
  ) {
    console.error(
      "turning off usage statistics. process.env['CI'] || process.env['CHROME_DEVTOOLS_MCP_NO_USAGE_STATISTICS'] is set.",
    );
    args.usageStatistics = false;
  }
  
  if (process.env['CHROME_DEVTOOLS_MCP_CRASH_ON_UNCAUGHT'] !== 'true') {
    process.on('unhandledRejection', (reason, promise) => {
      logger('Unhandled promise rejection', promise, reason);
    });
  }
  
  logger(`Starting Chrome DevTools MCP Server v${VERSION}`);
  const {server, clearcutLogger} = await createMcpServer(args, {
    logFile,
  });
  const transport = new StdioServerTransport();
  await server.connect(transport);
  logger('Chrome DevTools MCP Server connected');
  logDisclaimers(args);
  void clearcutLogger?.logDailyActiveIfNeeded();
  void clearcutLogger?.logServerStart(computeFlagUsage(args, cliOptions));
  