@posthog/mcp 0.21.0 → 0.21.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/README.md CHANGED
@@ -197,6 +197,7 @@ const customDispatcherClient = new PostHogMCP(process.env.POSTHOG_PROJECT_TOKEN,
197
197
  ```
198
198
 
199
199
  Omit `serverBuild` when the deployment does not provide a reliable value.
200
+ `PostHogMCP` also adds the build to custom events from its inherited `capture()` and `captureImmediate()` methods.
200
201
 
201
202
  ### What `$mcp_llm_model` records, and when it stays empty
202
203
 
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,2BAA2B,EAC3B,6BAA6B,EAC7B,uBAAuB,EAEvB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EAId,MAAM,UAAU,CAAA;AAqBjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAIrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAiBxC;;;;;;GAMG;AAEH,KAAK,iBAAiB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,6BAA6B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAE7G,2EAA2E;AAC3E,KAAK,YAAY,GAAG,CAAC,iBAAiB,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAmB3E,UAAU,mBAAmB;IAC3B,MAAM,EAAE,aAAa,CAAA;IACrB,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,EAAE,cAAc,CAAA;IACvB,KAAK,CAAC,EAAE,6BAA6B,CAAA;IACrC,OAAO,EAAE,YAAY,CAAA;IACrB,2FAA2F;IAC3F,kBAAkB,CAAC,EAAE,2BAA2B,CAAA;IAChD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,qBAAqB,CAAA;IACjC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,UAAU,CAAA;IACjC;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAA;CAClC;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAwFnF;AA+QD,KAAK,iBAAiB,GAAG,OAAO,qBAAqB,CAAC,gBAAgB,GAAG,OAAO,qBAAqB,CAAC,gBAAgB,CAAA;AAuDtH,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,GAAG,YAAY,CAGjG;AAgDD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,MAAM,EAAE,aAAa,EACrB,eAAe,EAAE,iBAAiB,EAClC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,6BAA6B,GAAG,SAAS,KAC7C,OAAO,CAAC,OAAO,CAAC,CAAA;AAkBrB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,iBAAiB,EAClC,KAAK,EAAE,YAAY,GAClB,IAAI,CAGN;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CA0CvG;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,6BAA6B,GAAG,SAAS,EAChD,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAoB9B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,aAAa,EACrB,wBAAwB,EAAE,iBAAiB,EAC3C,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,6BAA6B,GAAG,SAAS,EAChD,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,uBAAuB,CAAC,CAmElC;AA2ID,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,KAAK,EAAE,uBAAuB,CAAC,OAAO,CAAC,GAAG,SAAS,GAClD,IAAI,CASN;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGtE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,KAAK,EAAE,uBAAuB,CAAC,OAAO,CAAC,GAAG,SAAS,GAClD,IAAI,CAUN;AAuHD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,aAAa,EACrB,yBAAyB,EAAE,iBAAiB,EAC5C,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,6BAA6B,GAAG,SAAS,EAChD,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,OAAO,CAAC,CA2ElB"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"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"}
@@ -392,7 +392,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
392
392
  (0, external_capture_js_namespaceObject.captureEvent)(server, event, data.logger, requestAttribution);
393
393
  return response;
394
394
  }
395
- event.response = response;
395
+ event.response = toolsListEnvelope(response);
396
396
  event.listedToolNames = collectListedToolNames(tools);
397
397
  event.isError = false;
398
398
  event.duration = Date.now() - startTime.getTime();
@@ -407,6 +407,10 @@ function collectListedToolNames(tools) {
407
407
  const names = tools.map((tool)=>tool?.name).filter((name)=>'string' == typeof name);
408
408
  return names.length > 0 ? names : void 0;
409
409
  }
410
+ function toolsListEnvelope(response) {
411
+ const { tools: _tools, ...envelope } = response;
412
+ return Object.keys(envelope).length > 0 ? envelope : void 0;
413
+ }
410
414
  async function getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger, requestAttribution) {
411
415
  try {
412
416
  const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
@@ -351,7 +351,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
351
351
  captureEvent(server, event, data.logger, requestAttribution);
352
352
  return response;
353
353
  }
354
- event.response = response;
354
+ event.response = toolsListEnvelope(response);
355
355
  event.listedToolNames = collectListedToolNames(tools);
356
356
  event.isError = false;
357
357
  event.duration = Date.now() - startTime.getTime();
@@ -366,6 +366,10 @@ function collectListedToolNames(tools) {
366
366
  const names = tools.map((tool)=>tool?.name).filter((name)=>'string' == typeof name);
367
367
  return names.length > 0 ? names : void 0;
368
368
  }
369
+ function toolsListEnvelope(response) {
370
+ const { tools: _tools, ...envelope } = response;
371
+ return Object.keys(envelope).length > 0 ? envelope : void 0;
372
+ }
369
373
  async function getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger, requestAttribution) {
370
374
  try {
371
375
  const data = getServerTrackingData(server);
@@ -1,4 +1,4 @@
1
- import { PostHog, type PostHogOptions } from 'posthog-node';
1
+ import { PostHog, type EventMessage, type PostHogOptions } from 'posthog-node';
2
2
  import type { FeedbackCaptureData, CollectFeedbackConfig, InitializeCaptureData, MCPAnalyticsOptions, MissingCapabilityCaptureData, PreparedToolCall, PreparedToolResult, PrepareToolCallOptions, PrepareToolListOptions, ToolCallCaptureData, ToolsListCaptureData } from '../types';
3
3
  import { type ContextInjectableTool } from './context-parameters';
4
4
  /**
@@ -81,6 +81,9 @@ export interface PostHogMCPOptions extends PostHogOptions {
81
81
  export declare class PostHogMCP extends PostHog {
82
82
  #private;
83
83
  constructor(apiKey: string, options?: PostHogMCPOptions);
84
+ /** Add the configured build to SDK events and custom events captured through this client. */
85
+ capture(event: EventMessage): void;
86
+ captureImmediate(event: EventMessage): Promise<void>;
84
87
  /** Capture a tool invocation. Emits `$mcp_tool_call` (+ an `$exception` sibling on error). */
85
88
  captureToolCall(data: ToolCallCaptureData): void;
86
89
  /** Capture the connection handshake. Emits `$mcp_initialize`. */
@@ -1 +1 @@
1
- {"version":3,"file":"posthog-mcp.d.ts","sourceRoot":"","sources":["../../src/extensions/posthog-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,KAAK,EACV,mBAAmB,EAGnB,qBAAqB,EACrB,qBAAqB,EAErB,mBAAmB,EAGnB,4BAA4B,EAC5B,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,UAAU,CAAA;AAgBjB,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAA;AAmB7B;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,qBAAqB,CAAA;IACvC;;;OAGG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAA;IAClD;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,UAAW,SAAQ,OAAO;;IAerC,YAAY,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,EAiB1D;IAMD,8FAA8F;IAC9F,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAgB/C;IAED,iEAAiE;IACjE,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAQnD;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAYjD;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,eAAe,CAAC,KAAK,SAAS,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,GAAE,sBAA2B,GAAG,KAAK,EAAE,CAmDlH;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+CG;IACH,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,GAAE,sBAA2B,GACnC,gBAAgB,CAiDlB;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CA2BvG;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,IAAI,EAAE,4BAA4B,GAAG,IAAI,CAOjE;IAED;;;;;;OAMG;IACH,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAW/C;CAaF"}
1
+ {"version":3,"file":"posthog-mcp.d.ts","sourceRoot":"","sources":["../../src/extensions/posthog-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAE9E,OAAO,KAAK,EACV,mBAAmB,EAGnB,qBAAqB,EACrB,qBAAqB,EAErB,mBAAmB,EAGnB,4BAA4B,EAC5B,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,UAAU,CAAA;AAgBjB,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAA;AAoB7B;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,qBAAqB,CAAA;IACvC;;;OAGG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAA;IAClD;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,UAAW,SAAQ,OAAO;;IAerC,YAAY,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,EAiB1D;IAMD,6FAA6F;IACpF,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAE1C;IAEQ,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;IAED,8FAA8F;IAC9F,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAgB/C;IAED,iEAAiE;IACjE,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAQnD;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAYjD;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,eAAe,CAAC,KAAK,SAAS,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,GAAE,sBAA2B,GAAG,KAAK,EAAE,CAmDlH;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+CG;IACH,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,GAAE,sBAA2B,GACnC,gBAAgB,CAiDlB;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CA2BvG;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,IAAI,EAAE,4BAA4B,GAAG,IAAI,CAOjE;IAED;;;;;;OAMG;IACH,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAW/C;CA2BF"}
@@ -35,6 +35,7 @@ const external_feedback_js_namespaceObject = require("./feedback.js");
35
35
  const external_analytics_parameters_js_namespaceObject = require("./analytics-parameters.js");
36
36
  const external_conversation_id_js_namespaceObject = require("./conversation-id.js");
37
37
  const external_context_parameters_js_namespaceObject = require("./context-parameters.js");
38
+ const external_constants_js_namespaceObject = require("./constants.js");
38
39
  const external_event_types_js_namespaceObject = require("./event-types.js");
39
40
  const external_exceptions_js_namespaceObject = require("./exceptions.js");
40
41
  const external_headers_js_namespaceObject = require("./headers.js");
@@ -70,6 +71,12 @@ class PostHogMCP extends external_posthog_node_namespaceObject.PostHog {
70
71
  get #feedbackToolName() {
71
72
  return this.#feedbackOptions?.toolName ?? external_feedback_js_namespaceObject.SEND_FEEDBACK_TOOL_NAME;
72
73
  }
74
+ capture(event) {
75
+ super.capture(this.#withServerBuild(event));
76
+ }
77
+ captureImmediate(event) {
78
+ return super.captureImmediate(this.#withServerBuild(event));
79
+ }
73
80
  captureToolCall(data) {
74
81
  const event = baseEvent(external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsCall, data);
75
82
  event.resourceName = data.toolName;
@@ -244,6 +251,16 @@ class PostHogMCP extends external_posthog_node_namespaceObject.PostHog {
244
251
  enableExceptionAutocapture: this.options.enableExceptionAutocapture ?? true
245
252
  }).catch((error)=>(0, external_logger_js_namespaceObject.log)(`Warning: PostHogMCP failed to capture event - ${error}`));
246
253
  }
254
+ #withServerBuild(event) {
255
+ if (!this.#serverBuild) return event;
256
+ return {
257
+ ...event,
258
+ properties: {
259
+ ...event.properties,
260
+ [external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ServerBuild]: event.properties?.[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ServerBuild] ?? this.#serverBuild
261
+ }
262
+ };
263
+ }
247
264
  }
248
265
  function baseEvent(eventType, common) {
249
266
  const event = {
@@ -3,6 +3,7 @@ import { SEND_FEEDBACK_TOOL_NAME, buildFeedbackEventProperties, buildFeedbackInt
3
3
  import { getAnalyticsParameterOwnership, stripOwnedAnalyticsArguments } from "./analytics-parameters.mjs";
4
4
  import { addConversationIdToTools, canInjectConversationIdPromptBack, injectConversationIdPromptBack, resolveConversationId } from "./conversation-id.mjs";
5
5
  import { addContextParameterToTools, getContextDescription, isContextEnabled } from "./context-parameters.mjs";
6
+ import { PostHogMCPAnalyticsProperty } from "./constants.mjs";
6
7
  import { MCPAnalyticsEventType } from "./event-types.mjs";
7
8
  import { captureException } from "./exceptions.mjs";
8
9
  import { normalizeHeaderString } from "./headers.mjs";
@@ -38,6 +39,12 @@ class PostHogMCP extends PostHog {
38
39
  get #feedbackToolName() {
39
40
  return this.#feedbackOptions?.toolName ?? SEND_FEEDBACK_TOOL_NAME;
40
41
  }
42
+ capture(event) {
43
+ super.capture(this.#withServerBuild(event));
44
+ }
45
+ captureImmediate(event) {
46
+ return super.captureImmediate(this.#withServerBuild(event));
47
+ }
41
48
  captureToolCall(data) {
42
49
  const event = baseEvent(MCPAnalyticsEventType.mcpToolsCall, data);
43
50
  event.resourceName = data.toolName;
@@ -212,6 +219,16 @@ class PostHogMCP extends PostHog {
212
219
  enableExceptionAutocapture: this.options.enableExceptionAutocapture ?? true
213
220
  }).catch((error)=>log(`Warning: PostHogMCP failed to capture event - ${error}`));
214
221
  }
222
+ #withServerBuild(event) {
223
+ if (!this.#serverBuild) return event;
224
+ return {
225
+ ...event,
226
+ properties: {
227
+ ...event.properties,
228
+ [PostHogMCPAnalyticsProperty.ServerBuild]: event.properties?.[PostHogMCPAnalyticsProperty.ServerBuild] ?? this.#serverBuild
229
+ }
230
+ };
231
+ }
215
232
  }
216
233
  function baseEvent(eventType, common) {
217
234
  const event = {
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "0.21.0";
1
+ export declare const version = "0.21.2";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -27,7 +27,7 @@ var __webpack_require__ = {};
27
27
  })();
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
- const version = '0.21.0';
30
+ const version = "0.21.2";
31
31
  __webpack_require__.d(__webpack_exports__, {}, {
32
32
  version: version
33
33
  });
package/dist/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- const version = '0.21.0';
1
+ const version = "0.21.2";
2
2
  export { version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@posthog/mcp",
3
- "version": "0.21.0",
3
+ "version": "0.21.2",
4
4
  "bugs": {
5
5
  "url": "https://github.com/PostHog/posthog-js/issues"
6
6
  },
@@ -54,7 +54,7 @@
54
54
  "@vitest/coverage-v8": "^1.6.1",
55
55
  "vitest": "^1.6.1",
56
56
  "@posthog-tooling/tsconfig-base": "1.1.1",
57
- "posthog-node": "^5.54.1"
57
+ "posthog-node": "^5.55.0"
58
58
  },
59
59
  "peerDependencies": {
60
60
  "@modelcontextprotocol/sdk": ">=1.26.0",
@@ -89,7 +89,7 @@
89
89
  "clean": "rimraf dist coverage",
90
90
  "lint": "oxlint --report-unused-disable-directives-severity error src && oxfmt --check harness",
91
91
  "lint:fix": "oxlint --report-unused-disable-directives-severity error src --fix && oxfmt --write harness",
92
- "generate-version": "node -p \"'export const version = \\'' + require('./package.json').version + '\\''\" > src/version.ts",
92
+ "generate-version": "node ../../tooling/write-version.mjs",
93
93
  "pretest:unit": "pnpm generate-version",
94
94
  "test:unit": "vitest run",
95
95
  "test:integration": "pnpm test:integration:sdk-v1 && pnpm test:integration:sdk-v2 && pnpm test:integration:nest-v1 && pnpm test:integration:nest-v2",
@@ -818,7 +818,7 @@ export async function handleListToolsRequest(
818
818
  return response
819
819
  }
820
820
 
821
- event.response = response
821
+ event.response = toolsListEnvelope(response)
822
822
  event.listedToolNames = collectListedToolNames(tools)
823
823
  event.isError = false
824
824
  event.duration = Date.now() - startTime.getTime()
@@ -846,6 +846,13 @@ function collectListedToolNames(tools: CompatibleToolsListLike['tools'] | undefi
846
846
  return names.length > 0 ? names : undefined
847
847
  }
848
848
 
849
+ // `listedToolNames` already names the tools. A copy of the full descriptors would be
850
+ // sanitized and truncated on the request path, and a large catalogue loses most of it.
851
+ function toolsListEnvelope(response: CompatibleToolsListLike): Record<string, unknown> | undefined {
852
+ const { tools: _tools, ...envelope } = response
853
+ return Object.keys(envelope).length > 0 ? envelope : undefined
854
+ }
855
+
849
856
  async function getTracedToolsList(
850
857
  server: MCPServerLike,
851
858
  originalListToolsHandler: MCPRequestHandler,
@@ -1,4 +1,4 @@
1
- import { PostHog, type PostHogOptions } from 'posthog-node'
1
+ import { PostHog, type EventMessage, type PostHogOptions } from 'posthog-node'
2
2
 
3
3
  import type {
4
4
  FeedbackCaptureData,
@@ -39,6 +39,7 @@ import {
39
39
  isContextEnabled,
40
40
  type ContextInjectableTool,
41
41
  } from './context-parameters'
42
+ import { PostHogMCPAnalyticsProperty } from './constants'
42
43
  import { MCPAnalyticsEventType } from './event-types'
43
44
  import { captureException } from './exceptions'
44
45
  import { normalizeHeaderString } from './headers'
@@ -184,6 +185,15 @@ export class PostHogMCP extends PostHog {
184
185
  return this.#feedbackOptions?.toolName ?? SEND_FEEDBACK_TOOL_NAME
185
186
  }
186
187
 
188
+ /** Add the configured build to SDK events and custom events captured through this client. */
189
+ override capture(event: EventMessage): void {
190
+ super.capture(this.#withServerBuild(event))
191
+ }
192
+
193
+ override captureImmediate(event: EventMessage): Promise<void> {
194
+ return super.captureImmediate(this.#withServerBuild(event))
195
+ }
196
+
187
197
  /** Capture a tool invocation. Emits `$mcp_tool_call` (+ an `$exception` sibling on error). */
188
198
  captureToolCall(data: ToolCallCaptureData): void {
189
199
  const event = baseEvent(MCPAnalyticsEventType.mcpToolsCall, data)
@@ -500,6 +510,20 @@ export class PostHogMCP extends PostHog {
500
510
  .capture(event, { enableExceptionAutocapture: this.options.enableExceptionAutocapture ?? true })
501
511
  .catch((error) => log(`Warning: PostHogMCP failed to capture event - ${error}`))
502
512
  }
513
+
514
+ #withServerBuild(event: EventMessage): EventMessage {
515
+ if (!this.#serverBuild) {
516
+ return event
517
+ }
518
+ return {
519
+ ...event,
520
+ properties: {
521
+ ...event.properties,
522
+ [PostHogMCPAnalyticsProperty.ServerBuild]:
523
+ event.properties?.[PostHogMCPAnalyticsProperty.ServerBuild] ?? this.#serverBuild,
524
+ },
525
+ }
526
+ }
503
527
  }
504
528
 
505
529
  /**
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '0.21.0'
1
+ export const version = "0.21.2"