@@ -6,6 +6,7 @@ import logger from "../logger.js";
66import { mongoLogId } from "mongodb-log-writer" ;
77import config from "../config.js" ;
88import { Telemetry } from "../telemetry/telemetry.js" ;
9+ import { type ToolEvent , TELEMETRY_RESULT , type TelemetryResult } from "../telemetry/types.js" ;
910
1011export type ToolArgs < Args extends ZodRawShape > = z . objectOutputType < Args , ZodNever > ;
1112
@@ -31,6 +32,33 @@ export abstract class ToolBase {
3132 this . telemetry = new Telemetry ( session ) ;
3233 }
3334
35+ /**
36+ * Creates and emits a tool telemetry event
37+ * @param startTime - Start time in milliseconds
38+ * @param result - Whether the command succeeded or failed
39+ * @param error - Optional error if the command failed
40+ */
41+ private async emitToolEvent ( startTime : number , result : TelemetryResult , error ?: Error ) : Promise < void > {
42+ const duration = Date . now ( ) - startTime ;
43+ const event : ToolEvent = {
44+ timestamp : new Date ( ) . toISOString ( ) ,
45+ source : "mdbmcp" ,
46+ properties : {
47+ ...this . telemetry . getCommonProperties ( ) ,
48+ command : this . name ,
49+ category : this . category ,
50+ duration_ms : duration ,
51+ result,
52+ ...( error && {
53+ error_type : error . name ,
54+ error_code : error . message ,
55+ } ) ,
56+ } ,
57+ } ;
58+
59+ await this . telemetry . emitEvents ( [ event ] ) ;
60+ }
61+
3462 public register ( server : McpServer ) : void {
3563 if ( ! this . verifyAllowed ( ) ) {
3664 return ;
@@ -46,16 +74,14 @@ export abstract class ToolBase {
4674 ) ;
4775
4876 const result = await this . execute ( ...args ) ;
49- await this . telemetry . emitToolEvent ( this . name , this . category , startTime , "success" ) ;
77+ await this . emitToolEvent ( startTime , TELEMETRY_RESULT . SUCCESS ) ;
5078 return result ;
5179 } catch ( error : unknown ) {
5280 logger . error ( mongoLogId ( 1_000_000 ) , "tool" , `Error executing ${ this . name } : ${ error as string } ` ) ;
5381
54- await this . telemetry . emitToolEvent (
55- this . name ,
56- this . category ,
82+ await this . emitToolEvent (
5783 startTime ,
58- "failure" ,
84+ TELEMETRY_RESULT . FAILURE ,
5985 error instanceof Error ? error : new Error ( String ( error ) )
6086 ) ;
6187
0 commit comments