@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 +1 -0
- package/dist/extensions/instrumentation.d.ts.map +1 -1
- package/dist/extensions/instrumentation.js +5 -1
- package/dist/extensions/instrumentation.mjs +5 -1
- package/dist/extensions/posthog-mcp.d.ts +4 -1
- package/dist/extensions/posthog-mcp.d.ts.map +1 -1
- package/dist/extensions/posthog-mcp.js +17 -0
- package/dist/extensions/posthog-mcp.mjs +17 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +3 -3
- package/src/extensions/instrumentation.ts +8 -1
- package/src/extensions/posthog-mcp.ts +25 -1
- package/src/version.ts +1 -1
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;
|
|
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;
|
|
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.
|
|
1
|
+
export declare const version = "0.21.2";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/dist/version.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const version =
|
|
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.
|
|
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.
|
|
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 -
|
|
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 =
|
|
1
|
+
export const version = "0.21.2"
|