@posthog/mcp 0.21.0 → 0.21.1

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,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.1";
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.1";
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.1";
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.1",
4
4
  "bugs": {
5
5
  "url": "https://github.com/PostHog/posthog-js/issues"
6
6
  },
@@ -53,8 +53,8 @@
53
53
  "zod4": "npm:zod@^4.4.3",
54
54
  "@vitest/coverage-v8": "^1.6.1",
55
55
  "vitest": "^1.6.1",
56
- "@posthog-tooling/tsconfig-base": "1.1.1",
57
- "posthog-node": "^5.54.1"
56
+ "posthog-node": "^5.54.1",
57
+ "@posthog-tooling/tsconfig-base": "1.1.1"
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",
@@ -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.1"