mcp-use 0.1.1 → 0.1.2

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.d.ts CHANGED
@@ -10,5 +10,6 @@ import { MCPSession } from './src/session.js';
10
10
  export { BaseAdapter, LangChainAdapter } from './src/adapters/index.js';
11
11
  export { ServerManager } from './src/managers/server_manager.js';
12
12
  export * from './src/managers/tools/index.js';
13
+ export { setTelemetrySource, Telemetry } from './src/telemetry/index.js';
13
14
  export { BaseConnector, HttpConnector, loadConfigFile, Logger, logger, MCPAgent, MCPClient, MCPSession, StdioConnector, WebSocketConnector };
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAChE,cAAc,+BAA+B,CAAA;AAE7C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAChE,cAAc,+BAA+B,CAAA;AAG7C,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAExE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA"}
package/dist/index.js CHANGED
@@ -10,4 +10,6 @@ import { MCPSession } from './src/session.js';
10
10
  export { BaseAdapter, LangChainAdapter } from './src/adapters/index.js';
11
11
  export { ServerManager } from './src/managers/server_manager.js';
12
12
  export * from './src/managers/tools/index.js';
13
+ // Export telemetry utilities
14
+ export { setTelemetrySource, Telemetry } from './src/telemetry/index.js';
13
15
  export { BaseConnector, HttpConnector, loadConfigFile, Logger, logger, MCPAgent, MCPClient, MCPSession, StdioConnector, WebSocketConnector };
@@ -29,6 +29,9 @@ export declare class MCPAgent {
29
29
  private tools;
30
30
  private adapter;
31
31
  private serverManager;
32
+ private telemetry;
33
+ private modelProvider;
34
+ private modelName;
32
35
  constructor(options: {
33
36
  llm: BaseLanguageModelInterface;
34
37
  client?: MCPClient;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp_agent.d.ts","sourceRoot":"","sources":["../../../src/agents/mcp_agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp_agent.d.ts","sourceRoot":"","sources":["../../../src/agents/mcp_agent.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { AgentExecutor, createToolCallingAgent, } from 'langchain/agents';
5
5
  import { LangChainAdapter } from '../adapters/langchain_adapter.js';
6
6
  import { logger } from '../logging.js';
7
7
  import { ServerManager } from '../managers/server_manager.js';
8
+ import { extractModelInfo, Telemetry } from '../telemetry/index.js';
8
9
  import { createSystemMessage } from './prompts/system_prompt_builder.js';
9
10
  import { DEFAULT_SYSTEM_PROMPT_TEMPLATE, SERVER_MANAGER_SYSTEM_PROMPT_TEMPLATE } from './prompts/templates.js';
10
11
  export class MCPAgent {
@@ -29,6 +30,9 @@ export class MCPAgent {
29
30
  tools = [];
30
31
  adapter;
31
32
  serverManager = null;
33
+ telemetry;
34
+ modelProvider;
35
+ modelName;
32
36
  constructor(options) {
33
37
  this.llm = options.llm;
34
38
  this.client = options.client;
@@ -57,6 +61,12 @@ export class MCPAgent {
57
61
  else {
58
62
  this.adapter = options.adapter ?? new LangChainAdapter(this.disallowedTools);
59
63
  }
64
+ // Initialize telemetry
65
+ this.telemetry = Telemetry.getInstance();
66
+ // Track model info for telemetry
67
+ const [provider, name] = extractModelInfo(this.llm);
68
+ this.modelProvider = provider;
69
+ this.modelName = name;
60
70
  }
61
71
  async initialize() {
62
72
  logger.info('🚀 Initializing MCP agent and connecting to services...');
@@ -201,6 +211,10 @@ export class MCPAgent {
201
211
  async *stream(query, maxSteps, manageConnector = true, externalHistory) {
202
212
  let result = '';
203
213
  let initializedHere = false;
214
+ const startTime = Date.now();
215
+ const toolsUsedNames = [];
216
+ let stepsTaken = 0;
217
+ let success = false;
204
218
  try {
205
219
  if (manageConnector && !this.initialized) {
206
220
  await this.initialize();
@@ -233,6 +247,7 @@ export class MCPAgent {
233
247
  let nameToToolMap = Object.fromEntries(this.tools.map(t => [t.name, t]));
234
248
  logger.info(`🏁 Starting agent execution with max_steps=${steps}`);
235
249
  for (let stepNum = 0; stepNum < steps; stepNum++) {
250
+ stepsTaken = stepNum + 1;
236
251
  if (this.useServerManager && this.serverManager) {
237
252
  const currentTools = this.serverManager.tools;
238
253
  const currentToolNames = new Set(currentTools.map(t => t.name));
@@ -264,6 +279,7 @@ export class MCPAgent {
264
279
  yield step;
265
280
  const { action, observation } = step;
266
281
  const toolName = action.tool;
282
+ toolsUsedNames.push(toolName);
267
283
  let toolInputStr = String(action.toolInput);
268
284
  if (toolInputStr.length > 100)
269
285
  toolInputStr = `${toolInputStr.slice(0, 97)}...`;
@@ -306,6 +322,7 @@ export class MCPAgent {
306
322
  this.addToHistory(new AIMessage(result));
307
323
  }
308
324
  logger.info('🎉 Agent execution complete');
325
+ success = true;
309
326
  return result;
310
327
  }
311
328
  catch (e) {
@@ -317,6 +334,40 @@ export class MCPAgent {
317
334
  throw e;
318
335
  }
319
336
  finally {
337
+ // Track comprehensive execution data
338
+ const executionTimeMs = Date.now() - startTime;
339
+ let serverCount = 0;
340
+ if (this.client) {
341
+ serverCount = Object.keys(await this.client.getAllActiveSessions()).length;
342
+ }
343
+ else if (this.connectors) {
344
+ serverCount = this.connectors.length;
345
+ }
346
+ const conversationHistoryLength = this.memoryEnabled ? this.conversationHistory.length : 0;
347
+ await this.telemetry.trackAgentExecution({
348
+ executionMethod: 'stream',
349
+ query,
350
+ success,
351
+ modelProvider: this.modelProvider,
352
+ modelName: this.modelName,
353
+ serverCount,
354
+ serverIdentifiers: this.connectors.map(connector => connector.publicIdentifier),
355
+ totalToolsAvailable: this.tools.length,
356
+ toolsAvailableNames: this.tools.map(t => t.name),
357
+ maxStepsConfigured: this.maxSteps,
358
+ memoryEnabled: this.memoryEnabled,
359
+ useServerManager: this.useServerManager,
360
+ maxStepsUsed: maxSteps ?? null,
361
+ manageConnector,
362
+ externalHistoryUsed: externalHistory !== undefined,
363
+ stepsTaken,
364
+ toolsUsedCount: toolsUsedNames.length,
365
+ toolsUsedNames,
366
+ response: result,
367
+ executionTimeMs,
368
+ errorType: success ? null : 'execution_error',
369
+ conversationHistoryLength,
370
+ });
320
371
  if (manageConnector && !this.client && initializedHere) {
321
372
  logger.info('🧹 Closing agent after query completion');
322
373
  await this.close();
@@ -25,6 +25,8 @@ export declare abstract class BaseConnector {
25
25
  constructor(opts?: ConnectorInitOptions);
26
26
  /** Establish the connection and create the SDK client. */
27
27
  abstract connect(): Promise<void>;
28
+ /** Get the identifier for the connector. */
29
+ abstract get publicIdentifier(): Record<string, string>;
28
30
  /** Disconnect and release resources. */
29
31
  disconnect(): Promise<void>;
30
32
  /** Check if the client is connected */
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/connectors/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAA;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAGjE,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,cAAc,CAAA;CACvC;AAED;;GAEG;AACH,8BAAsB,aAAa;IACjC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAO;IACtC,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAO;IACjE,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAO;IAC1C,SAAS,CAAC,SAAS,UAAQ;IAC3B,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;gBAEjC,IAAI,GAAE,oBAAyB;IAI3C,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjC,wCAAwC;IAClC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC,uCAAuC;IACvC,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED;;;;;;OAMG;IACG,UAAU,CAAC,qBAAqB,GAAE,cAAsD,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAkBrJ,2CAA2C;IAC3C,IAAI,KAAK,IAAI,IAAI,EAAE,CAKlB;IAED,iCAAiC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAW1G,sCAAsC;IAChC,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;IAS5C,8BAA8B;IACxB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc;;;;IAUlD,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IASX,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IASvD,6CAA6C;IACvC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,EAAE,OAAO,CAAC,EAAE,cAAc;IASjG;;OAEG;cACa,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAsClD"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/connectors/base.ts"],"names":[],"mappings":"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"}
@@ -19,5 +19,6 @@ export declare class HttpConnector extends BaseConnector {
19
19
  constructor(baseUrl: string, opts?: HttpConnectorOptions);
20
20
  /** Establish connection to the MCP implementation via SSE. */
21
21
  connect(): Promise<void>;
22
+ get publicIdentifier(): Record<string, string>;
22
23
  }
23
24
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/connectors/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAIrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;gBAElD,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB;IAc5D,8DAA8D;IACxD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAoC/B"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/connectors/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAIrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;gBAElD,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB;IAc5D,8DAA8D;IACxD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC9B,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK7C;CACF"}
@@ -48,4 +48,10 @@ export class HttpConnector extends BaseConnector {
48
48
  throw err;
49
49
  }
50
50
  }
51
+ get publicIdentifier() {
52
+ return {
53
+ type: 'http',
54
+ url: this.baseUrl,
55
+ };
56
+ }
51
57
  }
@@ -21,5 +21,6 @@ export declare class StdioConnector extends BaseConnector {
21
21
  } & StdioConnectorOptions);
22
22
  /** Establish connection to the MCP implementation. */
23
23
  connect(): Promise<void>;
24
+ get publicIdentifier(): Record<string, string>;
24
25
  }
25
26
  //# sourceMappingURL=stdio.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/connectors/stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAMrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED,qBAAa,cAAe,SAAQ,aAAa;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;gBAG5D,EACE,OAAe,EACf,IAAS,EACT,GAAG,EACH,MAAuB,EACvB,GAAG,IAAI,EACR,GAAE;QACD,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC5B,MAAM,CAAC,EAAE,QAAQ,CAAA;KAClB,GAAG,qBAA0B;IAWhC,sDAAsD;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA+C/B"}
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/connectors/stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAMrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED,qBAAa,cAAe,SAAQ,aAAa;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;gBAG5D,EACE,OAAe,EACf,IAAS,EACT,GAAG,EACH,MAAuB,EACvB,GAAG,IAAI,EACR,GAAE;QACD,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC5B,MAAM,CAAC,EAAE,QAAQ,CAAA;KAClB,GAAG,qBAA0B;IAWhC,sDAAsD;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgD9B,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK7C;CACF"}
@@ -59,4 +59,10 @@ export class StdioConnector extends BaseConnector {
59
59
  throw err;
60
60
  }
61
61
  }
62
+ get publicIdentifier() {
63
+ return {
64
+ 'type': 'stdio',
65
+ 'command&args': `${this.command} ${this.args.join(' ')}`,
66
+ };
67
+ }
62
68
  }
@@ -30,5 +30,6 @@ export declare class WebSocketConnector extends BaseConnector {
30
30
  request(method: string, params?: Record<string, any> | null): Promise<any>;
31
31
  get tools(): Tool[];
32
32
  protected cleanupResources(): Promise<void>;
33
+ get publicIdentifier(): Record<string, string>;
33
34
  }
34
35
  //# sourceMappingURL=websocket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/connectors/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,IAAI,EACL,MAAM,oCAAoC,CAAA;AAG3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD,SAAS,CAAC,iBAAiB,EAAE,0BAA0B,GAAG,IAAI,CAAO;IACrE,OAAO,CAAC,EAAE,CAAkD;IAC5D,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,OAAO,CACF;IAEb,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAO;gBAE9B,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,yBAA8B;IAQvD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC,OAAO,CAAC,WAAW;YAiBL,WAAW;IAyCzB,OAAO,CAAC,SAAS;IAKX,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAS1C,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAK5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAI1E,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAK7B,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAItF,IAAI,KAAK,IAAI,IAAI,EAAE,CAIlB;cAEe,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAkBlD"}
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/connectors/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,IAAI,EACL,MAAM,oCAAoC,CAAA;AAG3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD,SAAS,CAAC,iBAAiB,EAAE,0BAA0B,GAAG,IAAI,CAAO;IACrE,OAAO,CAAC,EAAE,CAAkD;IAC5D,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,OAAO,CACF;IAEb,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAO;gBAE9B,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,yBAA8B;IAQvD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC,OAAO,CAAC,WAAW;YAiBL,WAAW;IAyCzB,OAAO,CAAC,SAAS;IAKX,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAS1C,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAK5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAI1E,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAK7B,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAItF,IAAI,KAAK,IAAI,IAAI,EAAE,CAIlB;cAEe,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjD,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK7C;CACF"}
@@ -148,4 +148,10 @@ export class WebSocketConnector extends BaseConnector {
148
148
  }
149
149
  this.toolsCache = null;
150
150
  }
151
+ get publicIdentifier() {
152
+ return {
153
+ type: 'websocket',
154
+ url: this.url,
155
+ };
156
+ }
151
157
  }
@@ -10,7 +10,7 @@ function resolveLevel(env) {
10
10
  case '1':
11
11
  return 'info';
12
12
  default:
13
- return 'warn';
13
+ return 'info';
14
14
  }
15
15
  }
16
16
  const minimalFormatter = printf(({ level, message, label, timestamp }) => {
@@ -77,7 +77,7 @@ export class Logger {
77
77
  else if (enabled === 1)
78
78
  level = 'info';
79
79
  else
80
- level = 'warn';
80
+ level = 'info';
81
81
  Object.values(this.instances).forEach((logger) => {
82
82
  logger.level = level;
83
83
  });
@@ -0,0 +1,35 @@
1
+ export declare abstract class BaseTelemetryEvent {
2
+ abstract get name(): string;
3
+ abstract get properties(): Record<string, any>;
4
+ }
5
+ export interface MCPAgentExecutionEventData {
6
+ executionMethod: string;
7
+ query: string;
8
+ success: boolean;
9
+ modelProvider: string;
10
+ modelName: string;
11
+ serverCount: number;
12
+ serverIdentifiers: Array<Record<string, string>>;
13
+ totalToolsAvailable: number;
14
+ toolsAvailableNames: string[];
15
+ maxStepsConfigured: number;
16
+ memoryEnabled: boolean;
17
+ useServerManager: boolean;
18
+ maxStepsUsed: number | null;
19
+ manageConnector: boolean;
20
+ externalHistoryUsed: boolean;
21
+ stepsTaken?: number | null;
22
+ toolsUsedCount?: number | null;
23
+ toolsUsedNames?: string[] | null;
24
+ response?: string | null;
25
+ executionTimeMs?: number | null;
26
+ errorType?: string | null;
27
+ conversationHistoryLength?: number | null;
28
+ }
29
+ export declare class MCPAgentExecutionEvent extends BaseTelemetryEvent {
30
+ private data;
31
+ constructor(data: MCPAgentExecutionEventData);
32
+ get name(): string;
33
+ get properties(): Record<string, any>;
34
+ }
35
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/telemetry/events.ts"],"names":[],"mappings":"AAAA,8BAAsB,kBAAkB;IACtC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAA;IAC3B,QAAQ,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,0BAA0B;IAEzC,eAAe,EAAE,MAAM,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAGhB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChD,mBAAmB,EAAE,MAAM,CAAA;IAC3B,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAA;IACtB,gBAAgB,EAAE,OAAO,CAAA;IAGzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,eAAe,EAAE,OAAO,CAAA;IACxB,mBAAmB,EAAE,OAAO,CAAA;IAG5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAGzB,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1C;AAED,qBAAa,sBAAuB,SAAQ,kBAAkB;IAChD,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,0BAA0B;IAIpD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+BpC;CACF"}
@@ -0,0 +1,44 @@
1
+ export class BaseTelemetryEvent {
2
+ }
3
+ export class MCPAgentExecutionEvent extends BaseTelemetryEvent {
4
+ data;
5
+ constructor(data) {
6
+ super();
7
+ this.data = data;
8
+ }
9
+ get name() {
10
+ return 'mcp_agent_execution';
11
+ }
12
+ get properties() {
13
+ return {
14
+ // Core execution info
15
+ execution_method: this.data.executionMethod,
16
+ query: this.data.query,
17
+ query_length: this.data.query.length,
18
+ success: this.data.success,
19
+ // Agent configuration
20
+ model_provider: this.data.modelProvider,
21
+ model_name: this.data.modelName,
22
+ server_count: this.data.serverCount,
23
+ server_identifiers: this.data.serverIdentifiers,
24
+ total_tools_available: this.data.totalToolsAvailable,
25
+ tools_available_names: this.data.toolsAvailableNames,
26
+ max_steps_configured: this.data.maxStepsConfigured,
27
+ memory_enabled: this.data.memoryEnabled,
28
+ use_server_manager: this.data.useServerManager,
29
+ // Execution parameters (always include, even if null)
30
+ max_steps_used: this.data.maxStepsUsed,
31
+ manage_connector: this.data.manageConnector,
32
+ external_history_used: this.data.externalHistoryUsed,
33
+ // Execution results (always include, even if null)
34
+ steps_taken: this.data.stepsTaken ?? null,
35
+ tools_used_count: this.data.toolsUsedCount ?? null,
36
+ tools_used_names: this.data.toolsUsedNames ?? null,
37
+ response: this.data.response ?? null,
38
+ response_length: this.data.response ? this.data.response.length : null,
39
+ execution_time_ms: this.data.executionTimeMs ?? null,
40
+ error_type: this.data.errorType ?? null,
41
+ conversation_history_length: this.data.conversationHistoryLength ?? null,
42
+ };
43
+ }
44
+ }
@@ -0,0 +1,5 @@
1
+ export { BaseTelemetryEvent, MCPAgentExecutionEvent, MCPAgentExecutionEventData } from './events.js';
2
+ export { Telemetry } from './telemetry.js';
3
+ export { extractModelInfo, getModelName, getModelProvider, getPackageVersion } from './utils.js';
4
+ export declare function setTelemetrySource(source: string): void;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAGhG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEvD"}
@@ -0,0 +1,8 @@
1
+ import { Telemetry } from './telemetry.js';
2
+ export { BaseTelemetryEvent, MCPAgentExecutionEvent } from './events.js';
3
+ export { Telemetry } from './telemetry.js';
4
+ export { extractModelInfo, getModelName, getModelProvider, getPackageVersion } from './utils.js';
5
+ // Convenience function to set telemetry source globally
6
+ export function setTelemetrySource(source) {
7
+ Telemetry.getInstance().setSource(source);
8
+ }
@@ -0,0 +1,33 @@
1
+ import type { BaseTelemetryEvent, MCPAgentExecutionEventData } from './events.js';
2
+ export declare class Telemetry {
3
+ private static instance;
4
+ private readonly USER_ID_PATH;
5
+ private readonly VERSION_DOWNLOAD_PATH;
6
+ private readonly PROJECT_API_KEY;
7
+ private readonly HOST;
8
+ private readonly SCARF_GATEWAY_URL;
9
+ private readonly UNKNOWN_USER_ID;
10
+ private _currUserId;
11
+ private _posthogClient;
12
+ private _scarfClient;
13
+ private _source;
14
+ private constructor();
15
+ static getInstance(): Telemetry;
16
+ /**
17
+ * Set the source identifier for telemetry events.
18
+ * This allows tracking usage from different applications.
19
+ * @param source - The source identifier (e.g., "my-app", "cli", "vs-code-extension")
20
+ */
21
+ setSource(source: string): void;
22
+ /**
23
+ * Get the current source identifier.
24
+ */
25
+ getSource(): string;
26
+ get userId(): string;
27
+ capture(event: BaseTelemetryEvent): Promise<void>;
28
+ trackPackageDownload(properties?: Record<string, any>): Promise<void>;
29
+ trackAgentExecution(data: MCPAgentExecutionEventData): Promise<void>;
30
+ flush(): void;
31
+ shutdown(): void;
32
+ }
33
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/telemetry/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AA0EjF,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAyB;IAEhD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8D;IAC3F,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2D;IACjG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoD;IACpF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA8C;IAChF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;IAEpD,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,OAAO,CAAuB;IAEtC,OAAO;IAwCP,MAAM,CAAC,WAAW,IAAI,SAAS;IAO/B;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB,IAAI,MAAM,IAAI,MAAM,CAgCnB;IAEK,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CjD,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDrE,mBAAmB,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1E,KAAK,IAAI,IAAI;IAkBb,QAAQ,IAAI,IAAI;CAiBjB"}
@@ -0,0 +1,278 @@
1
+ import * as fs from 'node:fs';
2
+ import * as os from 'node:os';
3
+ import * as path from 'node:path';
4
+ import { PostHog } from 'posthog-node';
5
+ import { v4 as uuidv4 } from 'uuid';
6
+ import { logger } from '../logging.js';
7
+ import { MCPAgentExecutionEvent } from './events.js';
8
+ import { getPackageVersion } from './utils.js';
9
+ // Simple Scarf event logger implementation
10
+ class ScarfEventLogger {
11
+ endpoint;
12
+ timeout;
13
+ constructor(endpoint, timeout = 3000) {
14
+ this.endpoint = endpoint;
15
+ this.timeout = timeout;
16
+ }
17
+ async logEvent(properties) {
18
+ try {
19
+ const controller = new AbortController();
20
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
21
+ const response = await fetch(this.endpoint, {
22
+ method: 'POST',
23
+ headers: {
24
+ 'Content-Type': 'application/json',
25
+ },
26
+ body: JSON.stringify(properties),
27
+ signal: controller.signal,
28
+ });
29
+ clearTimeout(timeoutId);
30
+ if (!response.ok) {
31
+ throw new Error(`HTTP error! status: ${response.status}`);
32
+ }
33
+ }
34
+ catch (error) {
35
+ // Silently fail - telemetry should not break the application
36
+ logger.debug(`Failed to send Scarf event: ${error}`);
37
+ }
38
+ }
39
+ }
40
+ function getCacheHome() {
41
+ // XDG_CACHE_HOME for Linux and manually set envs
42
+ const envVar = process.env.XDG_CACHE_HOME;
43
+ if (envVar && path.isAbsolute(envVar)) {
44
+ return envVar;
45
+ }
46
+ const platform = process.platform;
47
+ const homeDir = os.homedir();
48
+ if (platform === 'win32') {
49
+ const appdata = process.env.LOCALAPPDATA || process.env.APPDATA;
50
+ if (appdata) {
51
+ return appdata;
52
+ }
53
+ return path.join(homeDir, 'AppData', 'Local');
54
+ }
55
+ else if (platform === 'darwin') {
56
+ // macOS
57
+ return path.join(homeDir, 'Library', 'Caches');
58
+ }
59
+ else {
60
+ // Linux or other Unix
61
+ return path.join(homeDir, '.cache');
62
+ }
63
+ }
64
+ export class Telemetry {
65
+ static instance = null;
66
+ USER_ID_PATH = path.join(getCacheHome(), 'mcp_use_3', 'telemetry_user_id');
67
+ VERSION_DOWNLOAD_PATH = path.join(getCacheHome(), 'mcp_use', 'download_version');
68
+ PROJECT_API_KEY = 'phc_lyTtbYwvkdSbrcMQNPiKiiRWrrM1seyKIMjycSvItEI';
69
+ HOST = 'https://eu.i.posthog.com';
70
+ SCARF_GATEWAY_URL = 'https://mcpuse.gateway.scarf.sh/events-ts';
71
+ UNKNOWN_USER_ID = 'UNKNOWN_USER_ID';
72
+ _currUserId = null;
73
+ _posthogClient = null;
74
+ _scarfClient = null;
75
+ _source = 'typescript';
76
+ constructor() {
77
+ const telemetryDisabled = process.env.MCP_USE_ANONYMIZED_TELEMETRY?.toLowerCase() === 'false';
78
+ // Check for source from environment variable, default to 'typescript'
79
+ this._source = process.env.MCP_USE_TELEMETRY_SOURCE || 'typescript';
80
+ if (telemetryDisabled) {
81
+ this._posthogClient = null;
82
+ this._scarfClient = null;
83
+ logger.debug('Telemetry disabled');
84
+ }
85
+ else {
86
+ logger.info('Anonymized telemetry enabled. Set MCP_USE_ANONYMIZED_TELEMETRY=false to disable.');
87
+ // Initialize PostHog
88
+ try {
89
+ this._posthogClient = new PostHog(this.PROJECT_API_KEY, {
90
+ host: this.HOST,
91
+ disableGeoip: false,
92
+ });
93
+ }
94
+ catch (e) {
95
+ logger.warn(`Failed to initialize PostHog telemetry: ${e}`);
96
+ this._posthogClient = null;
97
+ }
98
+ // Initialize Scarf
99
+ try {
100
+ this._scarfClient = new ScarfEventLogger(this.SCARF_GATEWAY_URL, 3000);
101
+ }
102
+ catch (e) {
103
+ logger.warn(`Failed to initialize Scarf telemetry: ${e}`);
104
+ this._scarfClient = null;
105
+ }
106
+ }
107
+ }
108
+ static getInstance() {
109
+ if (!Telemetry.instance) {
110
+ Telemetry.instance = new Telemetry();
111
+ }
112
+ return Telemetry.instance;
113
+ }
114
+ /**
115
+ * Set the source identifier for telemetry events.
116
+ * This allows tracking usage from different applications.
117
+ * @param source - The source identifier (e.g., "my-app", "cli", "vs-code-extension")
118
+ */
119
+ setSource(source) {
120
+ this._source = source;
121
+ logger.debug(`Telemetry source set to: ${source}`);
122
+ }
123
+ /**
124
+ * Get the current source identifier.
125
+ */
126
+ getSource() {
127
+ return this._source;
128
+ }
129
+ get userId() {
130
+ if (this._currUserId) {
131
+ return this._currUserId;
132
+ }
133
+ try {
134
+ const isFirstTime = !fs.existsSync(this.USER_ID_PATH);
135
+ if (isFirstTime) {
136
+ logger.debug(`Creating user ID path: ${this.USER_ID_PATH}`);
137
+ fs.mkdirSync(path.dirname(this.USER_ID_PATH), { recursive: true });
138
+ const newUserId = uuidv4();
139
+ fs.writeFileSync(this.USER_ID_PATH, newUserId);
140
+ this._currUserId = newUserId;
141
+ logger.debug(`User ID path created: ${this.USER_ID_PATH}`);
142
+ }
143
+ else {
144
+ this._currUserId = fs.readFileSync(this.USER_ID_PATH, 'utf-8').trim();
145
+ }
146
+ // Always check for version-based download tracking
147
+ // Note: We can't await here since this is a getter, so we fire and forget
148
+ this.trackPackageDownload({
149
+ triggered_by: 'user_id_property',
150
+ }).catch(e => logger.debug(`Failed to track package download: ${e}`));
151
+ }
152
+ catch (e) {
153
+ logger.debug(`Failed to get/create user ID: ${e}`);
154
+ this._currUserId = this.UNKNOWN_USER_ID;
155
+ }
156
+ return this._currUserId;
157
+ }
158
+ async capture(event) {
159
+ if (!this._posthogClient && !this._scarfClient) {
160
+ return;
161
+ }
162
+ // Send to PostHog
163
+ if (this._posthogClient) {
164
+ try {
165
+ // Add package version, language flag, and source to all events
166
+ const properties = { ...event.properties };
167
+ properties.mcp_use_version = getPackageVersion();
168
+ properties.language = 'typescript';
169
+ properties.source = this._source;
170
+ this._posthogClient.capture({
171
+ distinctId: this.userId,
172
+ event: event.name,
173
+ properties,
174
+ });
175
+ }
176
+ catch (e) {
177
+ logger.debug(`Failed to track PostHog event ${event.name}: ${e}`);
178
+ }
179
+ }
180
+ // Send to Scarf (when implemented)
181
+ if (this._scarfClient) {
182
+ try {
183
+ // Add package version, user_id, language flag, and source to all events
184
+ const properties = {};
185
+ properties.mcp_use_version = getPackageVersion();
186
+ properties.user_id = this.userId;
187
+ properties.event = event.name;
188
+ properties.language = 'typescript';
189
+ properties.source = this._source;
190
+ await this._scarfClient.logEvent(properties);
191
+ }
192
+ catch (e) {
193
+ logger.debug(`Failed to track Scarf event ${event.name}: ${e}`);
194
+ }
195
+ }
196
+ }
197
+ async trackPackageDownload(properties) {
198
+ if (!this._scarfClient) {
199
+ return;
200
+ }
201
+ try {
202
+ const currentVersion = getPackageVersion();
203
+ let shouldTrack = false;
204
+ let firstDownload = false;
205
+ // Check if version file exists
206
+ if (!fs.existsSync(this.VERSION_DOWNLOAD_PATH)) {
207
+ // First download
208
+ shouldTrack = true;
209
+ firstDownload = true;
210
+ // Create directory and save version
211
+ fs.mkdirSync(path.dirname(this.VERSION_DOWNLOAD_PATH), { recursive: true });
212
+ fs.writeFileSync(this.VERSION_DOWNLOAD_PATH, currentVersion);
213
+ }
214
+ else {
215
+ // Read saved version
216
+ const savedVersion = fs.readFileSync(this.VERSION_DOWNLOAD_PATH, 'utf-8').trim();
217
+ // Compare versions (simple string comparison for now)
218
+ if (currentVersion > savedVersion) {
219
+ shouldTrack = true;
220
+ firstDownload = false;
221
+ // Update saved version
222
+ fs.writeFileSync(this.VERSION_DOWNLOAD_PATH, currentVersion);
223
+ }
224
+ }
225
+ if (shouldTrack) {
226
+ logger.debug(`Tracking package download event with properties: ${JSON.stringify(properties)}`);
227
+ // Add package version, user_id, language flag, and source to event
228
+ const eventProperties = { ...(properties || {}) };
229
+ eventProperties.mcp_use_version = currentVersion;
230
+ eventProperties.user_id = this.userId;
231
+ eventProperties.event = 'package_download';
232
+ eventProperties.first_download = firstDownload;
233
+ eventProperties.language = 'typescript';
234
+ eventProperties.source = this._source;
235
+ await this._scarfClient.logEvent(eventProperties);
236
+ }
237
+ }
238
+ catch (e) {
239
+ logger.debug(`Failed to track Scarf package_download event: ${e}`);
240
+ }
241
+ }
242
+ async trackAgentExecution(data) {
243
+ const event = new MCPAgentExecutionEvent(data);
244
+ await this.capture(event);
245
+ }
246
+ flush() {
247
+ // Flush PostHog
248
+ if (this._posthogClient) {
249
+ try {
250
+ this._posthogClient.flush();
251
+ logger.debug('PostHog client telemetry queue flushed');
252
+ }
253
+ catch (e) {
254
+ logger.debug(`Failed to flush PostHog client: ${e}`);
255
+ }
256
+ }
257
+ // Scarf events are sent immediately, no flush needed
258
+ if (this._scarfClient) {
259
+ logger.debug('Scarf telemetry events sent immediately (no flush needed)');
260
+ }
261
+ }
262
+ shutdown() {
263
+ // Shutdown PostHog
264
+ if (this._posthogClient) {
265
+ try {
266
+ this._posthogClient.shutdown();
267
+ logger.debug('PostHog client shutdown successfully');
268
+ }
269
+ catch (e) {
270
+ logger.debug(`Error shutting down PostHog client: ${e}`);
271
+ }
272
+ }
273
+ // Scarf doesn't require explicit shutdown
274
+ if (this._scarfClient) {
275
+ logger.debug('Scarf telemetry client shutdown (no action needed)');
276
+ }
277
+ }
278
+ }
@@ -0,0 +1,6 @@
1
+ import type { BaseLanguageModel } from '@langchain/core/language_models/base';
2
+ export declare function getPackageVersion(): string;
3
+ export declare function getModelProvider(llm: BaseLanguageModel): string;
4
+ export declare function getModelName(llm: BaseLanguageModel): string;
5
+ export declare function extractModelInfo(llm: BaseLanguageModel): [string, string];
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/telemetry/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA;AAI7E,wBAAgB,iBAAiB,IAAI,MAAM,CAS1C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAG/D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAgB3D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzE"}
@@ -0,0 +1,35 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ export function getPackageVersion() {
4
+ try {
5
+ const packagePath = path.join(__dirname, '../../package.json');
6
+ const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
7
+ return packageJson.version || 'unknown';
8
+ }
9
+ catch {
10
+ return 'unknown';
11
+ }
12
+ }
13
+ export function getModelProvider(llm) {
14
+ // Use LangChain's standard _llm_type property for identification
15
+ return llm._llm_type || llm.constructor.name.toLowerCase();
16
+ }
17
+ export function getModelName(llm) {
18
+ // First try _identifying_params which may contain model info
19
+ if ('_identifyingParams' in llm) {
20
+ const identifyingParams = llm._identifyingParams;
21
+ if (typeof identifyingParams === 'object' && identifyingParams !== null) {
22
+ // Common keys that contain model names
23
+ for (const key of ['model', 'modelName', 'model_name', 'modelId', 'model_id', 'deploymentName', 'deployment_name']) {
24
+ if (key in identifyingParams) {
25
+ return String(identifyingParams[key]);
26
+ }
27
+ }
28
+ }
29
+ }
30
+ // Fallback to direct model attributes
31
+ return llm.model || llm.modelName || llm.constructor.name;
32
+ }
33
+ export function extractModelInfo(llm) {
34
+ return [getModelProvider(llm), getModelName(llm)];
35
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mcp-use",
3
3
  "type": "module",
4
- "version": "0.1.1",
4
+ "version": "0.1.2",
5
5
  "packageManager": "pnpm@10.6.1",
6
6
  "description": "A utility library for integrating Model Context Protocol (MCP) with LangChain, Zod, and related tools. Provides helpers for schema conversion, event streaming, and SDK usage.",
7
7
  "author": "Zane",
@@ -75,11 +75,13 @@
75
75
  "@langchain/core": "0.3.58",
76
76
  "@langchain/openai": "^0.5.15",
77
77
  "@modelcontextprotocol/sdk": "1.12.1",
78
+ "@scarf/scarf": "^1.4.0",
78
79
  "dotenv": "^16.5.0",
79
80
  "eventsource": "^3.0.6",
80
81
  "fastembed": "^1.14.4",
81
82
  "langchain": "^0.3.27",
82
83
  "lodash-es": "^4.17.21",
84
+ "posthog-node": "^5.1.1",
83
85
  "uuid": "^11.1.0",
84
86
  "winston": "^3.17.0",
85
87
  "ws": "^8.18.2",