@@ -10,12 +10,14 @@ import process from 'node:process';
1010
1111import type { Channel } from './browser.js' ;
1212import { ensureBrowserConnected , ensureBrowserLaunched } from './browser.js' ;
13- import { parseArguments } from './cli.js' ;
13+ import { cliOptions , parseArguments } from './cli.js' ;
1414import { loadIssueDescriptions } from './issue-descriptions.js' ;
1515import { logger , saveLogsToFile } from './logger.js' ;
1616import { McpContext } from './McpContext.js' ;
1717import { McpResponse } from './McpResponse.js' ;
1818import { Mutex } from './Mutex.js' ;
19+ import { ClearcutLogger } from './telemetry/clearcut-logger.js' ;
20+ import { computeFlagUsage } from './telemetry/flag-utils.js' ;
1921import {
2022 McpServer ,
2123 StdioServerTransport ,
@@ -34,6 +36,10 @@ const VERSION = '0.12.1';
3436export const args = parseArguments ( VERSION ) ;
3537
3638const logFile = args . logFile ? saveLogsToFile ( args . logFile ) : undefined ;
39+ let clearcutLogger : ClearcutLogger | undefined ;
40+ if ( args . usageStatistics ) {
41+ clearcutLogger = new ClearcutLogger ( ) ;
42+ }
3743
3844process . on ( 'unhandledRejection' , ( reason , promise ) => {
3945 logger ( 'Unhandled promise rejection' , promise , reason ) ;
@@ -155,6 +161,8 @@ function registerTool(tool: ToolDefinition): void {
155161 } ,
156162 async ( params ) : Promise < CallToolResult > => {
157163 const guard = await toolMutex . acquire ( ) ;
164+ const startTime = Date . now ( ) ;
165+ let success = false ;
158166 try {
159167 logger ( `${ tool . name } request: ${ JSON . stringify ( params , null , ' ' ) } ` ) ;
160168 const context = await getContext ( ) ;
@@ -177,6 +185,7 @@ function registerTool(tool: ToolDefinition): void {
177185 } = {
178186 content,
179187 } ;
188+ success = true ;
180189 if ( args . experimentalStructuredContent ) {
181190 result . structuredContent = structuredContent as Record <
182191 string ,
@@ -200,6 +209,11 @@ function registerTool(tool: ToolDefinition): void {
200209 isError : true ,
201210 } ;
202211 } finally {
212+ void clearcutLogger ?. logToolInvocation ( {
213+ toolName : tool . name ,
214+ success,
215+ latencyMs : Date . now ( ) - startTime ,
216+ } ) ;
203217 guard . dispose ( ) ;
204218 }
205219 } ,
@@ -215,3 +229,4 @@ const transport = new StdioServerTransport();
215229await server . connect ( transport ) ;
216230logger ( 'Chrome DevTools MCP Server connected' ) ;
217231logDisclaimers ( ) ;
232+ void clearcutLogger ?. logServerStart ( computeFlagUsage ( args , cliOptions ) ) ;
0 commit comments