@posthog/mcp 0.10.4 → 0.10.5

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.
Files changed (70) hide show
  1. package/dist/extensions/capture.d.ts +2 -1
  2. package/dist/extensions/capture.d.ts.map +1 -1
  3. package/dist/extensions/capture.js +2 -3
  4. package/dist/extensions/capture.mjs +2 -3
  5. package/dist/extensions/compatibility.d.ts +3 -2
  6. package/dist/extensions/compatibility.d.ts.map +1 -1
  7. package/dist/extensions/compatibility.js +19 -20
  8. package/dist/extensions/compatibility.mjs +15 -16
  9. package/dist/extensions/context-parameters.d.ts +3 -2
  10. package/dist/extensions/context-parameters.d.ts.map +1 -1
  11. package/dist/extensions/context-parameters.js +4 -5
  12. package/dist/extensions/context-parameters.mjs +4 -4
  13. package/dist/extensions/conversation-id.d.ts +3 -2
  14. package/dist/extensions/conversation-id.d.ts.map +1 -1
  15. package/dist/extensions/conversation-id.js +4 -5
  16. package/dist/extensions/conversation-id.mjs +4 -4
  17. package/dist/extensions/instrument-highlevel.d.ts +2 -1
  18. package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
  19. package/dist/extensions/instrument-highlevel.js +24 -25
  20. package/dist/extensions/instrument-highlevel.mjs +24 -25
  21. package/dist/extensions/instrument-lowlevel.d.ts +2 -1
  22. package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
  23. package/dist/extensions/instrument-lowlevel.js +8 -9
  24. package/dist/extensions/instrument-lowlevel.mjs +8 -9
  25. package/dist/extensions/instrumentation.d.ts +3 -2
  26. package/dist/extensions/instrumentation.d.ts.map +1 -1
  27. package/dist/extensions/instrumentation.js +25 -26
  28. package/dist/extensions/instrumentation.mjs +25 -26
  29. package/dist/extensions/intent.d.ts.map +1 -1
  30. package/dist/extensions/intent.js +1 -2
  31. package/dist/extensions/intent.mjs +1 -2
  32. package/dist/extensions/internal.d.ts.map +1 -1
  33. package/dist/extensions/internal.js +5 -6
  34. package/dist/extensions/internal.mjs +5 -6
  35. package/dist/extensions/logger.d.ts +12 -4
  36. package/dist/extensions/logger.d.ts.map +1 -1
  37. package/dist/extensions/logger.js +12 -3
  38. package/dist/extensions/logger.mjs +10 -4
  39. package/dist/extensions/sink.d.ts +4 -2
  40. package/dist/extensions/sink.d.ts.map +1 -1
  41. package/dist/extensions/sink.js +11 -10
  42. package/dist/extensions/sink.mjs +11 -10
  43. package/dist/extensions/tools.d.ts +2 -1
  44. package/dist/extensions/tools.d.ts.map +1 -1
  45. package/dist/extensions/tools.js +2 -2
  46. package/dist/extensions/tools.mjs +2 -2
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +18 -16
  49. package/dist/index.mjs +19 -17
  50. package/dist/types.d.ts +2 -0
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/version.d.ts +1 -1
  53. package/dist/version.js +1 -1
  54. package/dist/version.mjs +1 -1
  55. package/package.json +1 -1
  56. package/src/extensions/capture.ts +3 -3
  57. package/src/extensions/compatibility.ts +16 -16
  58. package/src/extensions/context-parameters.ts +8 -6
  59. package/src/extensions/conversation-id.ts +12 -6
  60. package/src/extensions/instrument-highlevel.ts +37 -31
  61. package/src/extensions/instrument-lowlevel.ts +14 -10
  62. package/src/extensions/instrumentation.ts +30 -25
  63. package/src/extensions/intent.ts +1 -2
  64. package/src/extensions/internal.ts +7 -6
  65. package/src/extensions/logger.ts +22 -7
  66. package/src/extensions/sink.ts +17 -12
  67. package/src/extensions/tools.ts +3 -3
  68. package/src/index.ts +21 -19
  69. package/src/types.ts +2 -0
  70. package/src/version.ts +1 -1
@@ -2,7 +2,6 @@ import { analyticsOwnsParameter, getAnalyticsParameterOwnership, stripOwnedAnaly
2
2
  import { isContextEnabled } from "./context-parameters.mjs";
3
3
  import { MCPAnalyticsEventType } from "./event-types.mjs";
4
4
  import { getServerTrackingData } from "./internal.mjs";
5
- import { log } from "./logger.mjs";
6
5
  import { createWrappedTool, getToolFunction, hasToolFunction } from "./mcp-sdk-compat.mjs";
7
6
  import { handleReportMissing, resolveMissingCapabilityToolName } from "./tools.mjs";
8
7
  import { captureToolCall, handleInitializeRequest, handleListToolsRequest, patchRequestHandlers, readToolMetaCategory } from "./instrumentation.mjs";
@@ -12,31 +11,31 @@ const MCP_ANALYTICS_PROCESSED = Symbol('__posthog_mcp_analytics_processed__');
12
11
  function isCallbackUpdate(value) {
13
12
  return !!value && 'object' == typeof value && 'callback' in value && 'function' == typeof value.callback;
14
13
  }
15
- function addTracingToToolRegistry(tools, server) {
14
+ function addTracingToToolRegistry(tools, server, logger) {
16
15
  return Object.fromEntries(Object.entries(tools).map(([name, tool])=>[
17
16
  name,
18
- addTracingToToolCallbackInternal(tool, name, server)
17
+ addTracingToToolCallbackInternal(tool, name, server, ()=>tool.inputSchema, logger)
19
18
  ]));
20
19
  }
21
- function setupListenerToRegisteredTools(server) {
20
+ function setupListenerToRegisteredTools(server, logger) {
22
21
  try {
23
22
  const data = getServerTrackingData(server.server);
24
- if (!data) return void log('Warning: Cannot setup listener - no tracking data found');
23
+ if (!data) return void logger('Warning: Cannot setup listener - no tracking data found');
25
24
  const handler = {
26
25
  set (target, property, value) {
27
26
  try {
28
27
  if ('string' == typeof property && value && 'object' == typeof value && hasToolFunction(value)) {
29
28
  if ('string' == typeof value.description) data.toolDescriptions.set(property, value.description);
30
29
  if (value[MCP_ANALYTICS_PROCESSED]) {
31
- log(`Tool ${String(property)} already processed, skipping proxy wrapping`);
30
+ logger(`Tool ${String(property)} already processed, skipping proxy wrapping`);
32
31
  return Reflect.set(target, property, value);
33
32
  }
34
33
  if (wrappedCallbacks.has(getToolFunction(value))) {
35
- log(`Tool ${String(property)} callback already wrapped, skipping proxy wrapping`);
34
+ logger(`Tool ${String(property)} callback already wrapped, skipping proxy wrapping`);
36
35
  return Reflect.set(target, property, value);
37
36
  }
38
37
  const getCurrentInputSchema = ()=>value.inputSchema;
39
- const nextValue = addTracingToToolCallbackInternal(value, property, server, getCurrentInputSchema);
38
+ const nextValue = addTracingToToolCallbackInternal(value, property, server, getCurrentInputSchema, logger);
40
39
  if ('function' == typeof nextValue.update) {
41
40
  const originalUpdate = nextValue.update;
42
41
  nextValue.update = function(...updateArgs) {
@@ -45,7 +44,7 @@ function setupListenerToRegisteredTools(server) {
45
44
  if (isCallbackUpdate(updateObj)) {
46
45
  const wrappedTool = addTracingToToolCallbackInternal({
47
46
  callback: updateObj.callback
48
- }, property, server, getCurrentInputSchema);
47
+ }, property, server, getCurrentInputSchema, logger);
49
48
  updateObj.callback = getToolFunction(wrappedTool);
50
49
  }
51
50
  }
@@ -56,7 +55,7 @@ function setupListenerToRegisteredTools(server) {
56
55
  }
57
56
  return Reflect.set(target, property, value);
58
57
  } catch (error) {
59
- log(`Warning: Error in proxy set handler for tool ${String(property)} - ${error}`);
58
+ logger(`Warning: Error in proxy set handler for tool ${String(property)} - ${error}`);
60
59
  return Reflect.set(target, property, value);
61
60
  }
62
61
  },
@@ -72,21 +71,21 @@ function setupListenerToRegisteredTools(server) {
72
71
  };
73
72
  const originalTools = server._registeredTools || {};
74
73
  server._registeredTools = new Proxy(originalTools, handler);
75
- log('Successfully set up listener for new tool registrations');
74
+ logger('Successfully set up listener for new tool registrations');
76
75
  } catch (error) {
77
- log(`Warning: Failed to setup listener for registered tools - ${error}`);
76
+ logger(`Warning: Failed to setup listener for registered tools - ${error}`);
78
77
  }
79
78
  }
80
- function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInputSchema = ()=>tool.inputSchema) {
79
+ function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInputSchema, logger) {
81
80
  const originalCallback = getToolFunction(tool);
82
81
  const options = getServerTrackingData(server.server)?.options;
83
82
  const missingToolName = resolveMissingCapabilityToolName(options);
84
83
  if (wrappedCallbacks.has(originalCallback)) {
85
- log(`Tool ${toolName} callback already wrapped, skipping re-wrap`);
84
+ logger(`Tool ${toolName} callback already wrapped, skipping re-wrap`);
86
85
  return tool;
87
86
  }
88
87
  if (tool[MCP_ANALYTICS_PROCESSED]) {
89
- log(`Tool ${toolName} already processed, skipping re-wrap`);
88
+ logger(`Tool ${toolName} already processed, skipping re-wrap`);
90
89
  return tool;
91
90
  }
92
91
  const wrappedCallback = async (...params)=>{
@@ -122,10 +121,10 @@ function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInpu
122
121
  wrappedTool[MCP_ANALYTICS_PROCESSED] = true;
123
122
  return wrappedTool;
124
123
  }
125
- async function handleToolCallRequest(highLevelServer, server, originalCallToolHandler, request, extra) {
124
+ async function handleToolCallRequest(highLevelServer, server, originalCallToolHandler, request, extra, logger) {
126
125
  const data = getServerTrackingData(server);
127
126
  if (!data) {
128
- log('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
127
+ logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
129
128
  return await originalCallToolHandler(request, extra);
130
129
  }
131
130
  if (request.params?.name === resolveMissingCapabilityToolName(data.options)) {
@@ -139,7 +138,7 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
139
138
  explicitContextIntent: context,
140
139
  execute: async ()=>handleReportMissing({
141
140
  context
142
- })
141
+ }, data.logger)
143
142
  });
144
143
  }
145
144
  const toolName = request.params?.name;
@@ -158,24 +157,24 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
158
157
  }
159
158
  });
160
159
  }
161
- function instrumentHighLevelServer(server) {
160
+ function instrumentHighLevelServer(server, logger) {
162
161
  try {
163
162
  const lowLevelServer = server.server;
164
163
  const mcpAnalyticsData = getServerTrackingData(lowLevelServer);
165
164
  const handlers = {
166
- initialize: handleInitializeRequest,
167
- 'tools/list': handleListToolsRequest,
168
- 'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra)
165
+ initialize: (trackedServer, originalHandler, request, extra)=>handleInitializeRequest(trackedServer, originalHandler, request, extra, logger),
166
+ 'tools/list': (trackedServer, originalHandler, request, extra)=>handleListToolsRequest(trackedServer, originalHandler, request, extra, logger),
167
+ 'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra, logger)
169
168
  };
170
169
  patchRequestHandlers(lowLevelServer, handlers);
171
- server._registeredTools = addTracingToToolRegistry(server._registeredTools, server);
170
+ server._registeredTools = addTracingToToolRegistry(server._registeredTools, server, logger);
172
171
  if (mcpAnalyticsData) {
173
172
  seedToolDescriptionsFromRegistry(mcpAnalyticsData.toolDescriptions, server._registeredTools);
174
173
  seedToolCategoriesFromRegistry(mcpAnalyticsData.toolCategories, server._registeredTools);
175
174
  }
176
- setupListenerToRegisteredTools(server);
175
+ setupListenerToRegisteredTools(server, logger);
177
176
  } catch (error) {
178
- log(`Warning: Failed to setup tool call instrumentation - ${error}`);
177
+ logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
179
178
  }
180
179
  }
181
180
  function seedToolDescriptionsFromRegistry(cache, tools) {
@@ -1,8 +1,9 @@
1
1
  import type { MCPServerLike } from '../types';
2
+ import type { LoggerFn } from './logger';
2
3
  /**
3
4
  * Instruments a low-level `Server`: wraps `initialize`, `tools/list`, and
4
5
  * `tools/call`. The tool-call lifecycle is delegated to {@link captureToolCall},
5
6
  * shared with the high-level wrapper.
6
7
  */
7
- export declare function instrumentLowLevelServer(server: MCPServerLike): void;
8
+ export declare function instrumentLowLevelServer(server: MCPServerLike, logger: LoggerFn): void;
8
9
  //# sourceMappingURL=instrument-lowlevel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instrument-lowlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-lowlevel.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAiD,aAAa,EAAE,MAAM,UAAU,CAAA;AAmB5F;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBpE"}
1
+ {"version":3,"file":"instrument-lowlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-lowlevel.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAiD,aAAa,EAAE,MAAM,UAAU,CAAA;AAG5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAiBxC;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAoBtF"}
@@ -29,28 +29,27 @@ __webpack_require__.d(__webpack_exports__, {
29
29
  const types_js_namespaceObject = require("@modelcontextprotocol/sdk/types.js");
30
30
  const external_event_types_js_namespaceObject = require("./event-types.js");
31
31
  const external_internal_js_namespaceObject = require("./internal.js");
32
- const external_logger_js_namespaceObject = require("./logger.js");
33
32
  const external_tools_js_namespaceObject = require("./tools.js");
34
33
  const external_instrumentation_js_namespaceObject = require("./instrumentation.js");
35
34
  const external_tracing_helpers_js_namespaceObject = require("./tracing-helpers.js");
36
- function instrumentLowLevelServer(server) {
35
+ function instrumentLowLevelServer(server, logger) {
37
36
  try {
38
37
  const handlers = {
39
- initialize: external_instrumentation_js_namespaceObject.handleInitializeRequest,
40
- 'tools/list': external_instrumentation_js_namespaceObject.handleListToolsRequest
38
+ initialize: (server, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleInitializeRequest)(server, originalHandler, request, extra, logger),
39
+ 'tools/list': (server, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleListToolsRequest)(server, originalHandler, request, extra, logger)
41
40
  };
42
41
  (0, external_instrumentation_js_namespaceObject.patchRequestHandlers)(server, handlers);
43
42
  const originalCallToolHandler = server._requestHandlers.get('tools/call');
44
- server.setRequestHandler(types_js_namespaceObject.CallToolRequestSchema, async (request, extra)=>await handleToolCallRequest(server, originalCallToolHandler, request, extra));
43
+ server.setRequestHandler(types_js_namespaceObject.CallToolRequestSchema, async (request, extra)=>await handleToolCallRequest(server, originalCallToolHandler, request, extra, logger));
45
44
  } catch (error) {
46
- (0, external_logger_js_namespaceObject.log)(`Warning: Failed to setup tool call instrumentation - ${error}`);
45
+ logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
47
46
  throw error;
48
47
  }
49
48
  }
50
- async function handleToolCallRequest(server, originalCallToolHandler, request, extra) {
49
+ async function handleToolCallRequest(server, originalCallToolHandler, request, extra, logger) {
51
50
  const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
52
51
  if (!data) {
53
- (0, external_logger_js_namespaceObject.log)('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
52
+ logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
54
53
  return await originalCallToolHandler?.(request, extra);
55
54
  }
56
55
  if (request.params?.name === (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(data.options)) {
@@ -64,7 +63,7 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
64
63
  explicitContextIntent: context,
65
64
  execute: async ()=>(0, external_tools_js_namespaceObject.handleReportMissing)({
66
65
  context
67
- })
66
+ }, data.logger)
68
67
  });
69
68
  }
70
69
  return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
@@ -1,28 +1,27 @@
1
1
  import { CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
2
2
  import { MCPAnalyticsEventType } from "./event-types.mjs";
3
3
  import { getServerTrackingData } from "./internal.mjs";
4
- import { log } from "./logger.mjs";
5
4
  import { handleReportMissing, resolveMissingCapabilityToolName } from "./tools.mjs";
6
5
  import { captureToolCall, handleInitializeRequest, handleListToolsRequest, patchRequestHandlers } from "./instrumentation.mjs";
7
6
  import { getContextArgument } from "./tracing-helpers.mjs";
8
- function instrumentLowLevelServer(server) {
7
+ function instrumentLowLevelServer(server, logger) {
9
8
  try {
10
9
  const handlers = {
11
- initialize: handleInitializeRequest,
12
- 'tools/list': handleListToolsRequest
10
+ initialize: (server, originalHandler, request, extra)=>handleInitializeRequest(server, originalHandler, request, extra, logger),
11
+ 'tools/list': (server, originalHandler, request, extra)=>handleListToolsRequest(server, originalHandler, request, extra, logger)
13
12
  };
14
13
  patchRequestHandlers(server, handlers);
15
14
  const originalCallToolHandler = server._requestHandlers.get('tools/call');
16
- server.setRequestHandler(CallToolRequestSchema, async (request, extra)=>await handleToolCallRequest(server, originalCallToolHandler, request, extra));
15
+ server.setRequestHandler(CallToolRequestSchema, async (request, extra)=>await handleToolCallRequest(server, originalCallToolHandler, request, extra, logger));
17
16
  } catch (error) {
18
- log(`Warning: Failed to setup tool call instrumentation - ${error}`);
17
+ logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
19
18
  throw error;
20
19
  }
21
20
  }
22
- async function handleToolCallRequest(server, originalCallToolHandler, request, extra) {
21
+ async function handleToolCallRequest(server, originalCallToolHandler, request, extra, logger) {
23
22
  const data = getServerTrackingData(server);
24
23
  if (!data) {
25
- log('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
24
+ logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
26
25
  return await originalCallToolHandler?.(request, extra);
27
26
  }
28
27
  if (request.params?.name === resolveMissingCapabilityToolName(data.options)) {
@@ -36,7 +35,7 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
36
35
  explicitContextIntent: context,
37
36
  execute: async ()=>handleReportMissing({
38
37
  context
39
- })
38
+ }, data.logger)
40
39
  });
41
40
  }
42
41
  return await captureToolCall({
@@ -1,6 +1,7 @@
1
1
  import type { ListToolsResult } from '@modelcontextprotocol/sdk/types.js';
2
2
  import type { AnalyticsParameterOwnership, CompatibleRequestHandlerExtra, MCPAnalyticsData, MCPRequestLike, MCPServerLike } from '../types';
3
3
  import { MCPAnalyticsEventType } from './event-types';
4
+ import type { LoggerFn } from './logger';
4
5
  /**
5
6
  * Single instrumentation core shared by the low-level (`Server`) and high-level
6
7
  * (`McpServer`) wrappers. The two entrypoints differ only in how they reach the
@@ -66,7 +67,7 @@ export declare function patchRequestHandlers(server: MCPServerLike, patches: Rec
66
67
  * Captures each `tools/list` and injects the SDK-managed tools (context
67
68
  * parameter, conversation id, `get_more_tools`) into the returned list.
68
69
  */
69
- export declare function handleListToolsRequest(server: MCPServerLike, originalListToolsHandler: MCPRequestHandler, request: MCPRequestLike, extra?: CompatibleRequestHandlerExtra): Promise<{
70
+ export declare function handleListToolsRequest(server: MCPServerLike, originalListToolsHandler: MCPRequestHandler, request: MCPRequestLike, extra: CompatibleRequestHandlerExtra | undefined, logger: LoggerFn): Promise<{
70
71
  tools: ListToolsResult['tools'];
71
72
  }>;
72
73
  export declare function cacheToolDescriptions(cache: Map<string, string>, tools: ListToolsResult['tools'] | undefined): void;
@@ -81,6 +82,6 @@ export declare function cacheToolCategories(cache: Map<string, string>, tools: L
81
82
  * Captures the connection handshake (and resolves identity) on `initialize`
82
83
  * before the original handler runs.
83
84
  */
84
- export declare function handleInitializeRequest(server: MCPServerLike, originalInitializeHandler: MCPRequestHandler, request: MCPRequestLike, extra?: CompatibleRequestHandlerExtra): Promise<unknown>;
85
+ export declare function handleInitializeRequest(server: MCPServerLike, originalInitializeHandler: MCPRequestHandler, request: MCPRequestLike, extra: CompatibleRequestHandlerExtra | undefined, logger: LoggerFn): Promise<unknown>;
85
86
  export {};
86
87
  //# sourceMappingURL=instrumentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,KAAK,EACV,2BAA2B,EAC3B,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAGd,MAAM,UAAU,CAAA;AAYjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAYrD;;;;;;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;AAE3E,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;;;;OAIG;IACH,SAAS,CAAC,EAAE,qBAAqB,CAAA;IACjC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAA;CAClC;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmDnF;AAqJD;;;;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;AAErB;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAqBvG;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,aAAa,EACrB,wBAAwB,EAAE,iBAAiB,EAC3C,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAyC9C;AAwED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CASnH;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGtE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CAUjH;AA8GD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,aAAa,EACrB,yBAAyB,EAAE,iBAAiB,EAC5C,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,OAAO,CAAC,CA0ClB"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,KAAK,EACV,2BAA2B,EAC3B,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAGd,MAAM,UAAU,CAAA;AAYjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAIrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAQxC;;;;;;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;AAE3E,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;;;;OAIG;IACH,SAAS,CAAC,EAAE,qBAAqB,CAAA;IACjC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAA;CAClC;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmDnF;AAuJD;;;;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;AAErB;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAqBvG;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;IAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAyC9C;AAyED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CASnH;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGtE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CAUjH;AA8GD;;;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,CA0ClB"}
@@ -41,7 +41,6 @@ const external_event_types_js_namespaceObject = require("./event-types.js");
41
41
  const external_exceptions_js_namespaceObject = require("./exceptions.js");
42
42
  const external_intent_js_namespaceObject = require("./intent.js");
43
43
  const external_internal_js_namespaceObject = require("./internal.js");
44
- const external_logger_js_namespaceObject = require("./logger.js");
45
44
  const external_mcp_payloads_js_namespaceObject = require("./mcp-payloads.js");
46
45
  const external_mcp_sdk_compat_js_namespaceObject = require("./mcp-sdk-compat.js");
47
46
  const external_session_js_namespaceObject = require("./session.js");
@@ -60,11 +59,11 @@ async function captureToolCall(params) {
60
59
  try {
61
60
  result = await execute(downstreamRequest);
62
61
  } catch (error) {
63
- publishFailedToolEvent(server, event, error, startTime, conversation);
62
+ publishFailedToolEvent(server, event, error, startTime, conversation, data.logger);
64
63
  throw error;
65
64
  }
66
65
  const finalResult = applyConversationPromptBack(event, result, conversation);
67
- publishSuccessfulToolEvent(server, event, finalResult, startTime, takeCapturedError);
66
+ publishSuccessfulToolEvent(server, event, finalResult, startTime, data.logger, takeCapturedError);
68
67
  return finalResult;
69
68
  }
70
69
  function getActiveAnalyticsParameterOwnership(data, toolName, override) {
@@ -107,7 +106,7 @@ async function prepareToolCallEvent(server, data, request, downstreamRequest, ex
107
106
  (0, external_intent_js_namespaceObject.setEventIntent)(event, await (0, external_intent_js_namespaceObject.resolveToolCallIntent)(data, request, ownership.context, extra));
108
107
  return event;
109
108
  } catch (error) {
110
- (0, external_logger_js_namespaceObject.log)(`Warning: PostHog MCP analytics instrumentation failed for tool ${request.params?.name}, the tool will still run - ${error}`);
109
+ data.logger(`Warning: PostHog MCP analytics instrumentation failed for tool ${request.params?.name}, the tool will still run - ${error}`);
111
110
  return null;
112
111
  }
113
112
  }
@@ -117,7 +116,7 @@ function applyConversationPromptBack(event, result, conversation) {
117
116
  if (event) event.conversationId = void 0;
118
117
  return result;
119
118
  }
120
- function publishSuccessfulToolEvent(server, event, result, startTime, takeCapturedError) {
119
+ function publishSuccessfulToolEvent(server, event, result, startTime, logger, takeCapturedError) {
121
120
  if (!event) return;
122
121
  try {
123
122
  if ((0, external_tracing_helpers_js_namespaceObject.isToolResultError)(result)) {
@@ -127,21 +126,21 @@ function publishSuccessfulToolEvent(server, event, result, startTime, takeCaptur
127
126
  } else event.isError = false;
128
127
  event.response = result;
129
128
  event.duration = Date.now() - startTime.getTime();
130
- (0, external_capture_js_namespaceObject.captureEvent)(server, event);
129
+ (0, external_capture_js_namespaceObject.captureEvent)(server, event, logger);
131
130
  } catch (error) {
132
- (0, external_logger_js_namespaceObject.log)(`Warning: PostHog MCP analytics failed to publish tool event - ${error}`);
131
+ logger(`Warning: PostHog MCP analytics failed to publish tool event - ${error}`);
133
132
  }
134
133
  }
135
- function publishFailedToolEvent(server, event, error, startTime, conversation) {
134
+ function publishFailedToolEvent(server, event, error, startTime, conversation, logger) {
136
135
  if (!event) return;
137
136
  try {
138
137
  if (conversation.minted) event.conversationId = void 0;
139
138
  event.isError = true;
140
139
  event.error = (0, external_exceptions_js_namespaceObject.captureException)(error);
141
140
  event.duration = Date.now() - startTime.getTime();
142
- (0, external_capture_js_namespaceObject.captureEvent)(server, event);
141
+ (0, external_capture_js_namespaceObject.captureEvent)(server, event, logger);
143
142
  } catch (publishError) {
144
- (0, external_logger_js_namespaceObject.log)(`Warning: PostHog MCP analytics failed to publish failed tool event - ${publishError}`);
143
+ logger(`Warning: PostHog MCP analytics failed to publish failed tool event - ${publishError}`);
145
144
  }
146
145
  }
147
146
  function patchRequestHandlers(server, patches) {
@@ -158,7 +157,7 @@ function patchRequestHandlers(server, patches) {
158
157
  return originalSetRequestHandler(requestSchema, (request, extra)=>patch(server, originalHandler, request, extra));
159
158
  };
160
159
  }
161
- async function handleListToolsRequest(server, originalListToolsHandler, request, extra) {
160
+ async function handleListToolsRequest(server, originalListToolsHandler, request, extra, logger) {
162
161
  const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
163
162
  const startTime = new Date();
164
163
  const event = {
@@ -169,19 +168,19 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
169
168
  };
170
169
  (0, external_client_identity_js_namespaceObject.stampMetaClientInfo)(event, request);
171
170
  if (data) await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
172
- const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event);
171
+ const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger);
173
172
  if (!data) {
174
- (0, external_logger_js_namespaceObject.log)('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
173
+ logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
175
174
  return {
176
175
  tools
177
176
  };
178
177
  }
179
178
  if (0 === tools.length) {
180
- (0, external_logger_js_namespaceObject.log)('Warning: No tools found in the original list. This is likely due to the tools not being registered before PostHog MCP analytics.instrument().');
179
+ data.logger('Warning: No tools found in the original list. This is likely due to the tools not being registered before PostHog MCP analytics.instrument().');
181
180
  event.error = (0, external_exceptions_js_namespaceObject.captureException)('No tools were sent to MCP client.');
182
181
  event.isError = true;
183
182
  event.duration = Date.now() - startTime.getTime();
184
- (0, external_capture_js_namespaceObject.captureEvent)(server, event);
183
+ (0, external_capture_js_namespaceObject.captureEvent)(server, event, data.logger);
185
184
  return {
186
185
  tools
187
186
  };
@@ -192,7 +191,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
192
191
  event.listedToolNames = collectListedToolNames(tools);
193
192
  event.isError = false;
194
193
  event.duration = Date.now() - startTime.getTime();
195
- (0, external_capture_js_namespaceObject.captureEvent)(server, event);
194
+ (0, external_capture_js_namespaceObject.captureEvent)(server, event, data.logger);
196
195
  return {
197
196
  tools
198
197
  };
@@ -205,14 +204,14 @@ function collectListedToolNames(tools) {
205
204
  const names = tools.map((tool)=>tool?.name).filter((name)=>'string' == typeof name);
206
205
  return names.length > 0 ? names : void 0;
207
206
  }
208
- async function getTracedToolsList(server, originalListToolsHandler, request, extra, event) {
207
+ async function getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger) {
209
208
  try {
210
209
  const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
211
210
  const originalResponse = await originalListToolsHandler(request, extra);
212
211
  let tools = originalResponse.tools || [];
213
212
  if (data) cacheToolAnalyticsParameterOwnership(data.toolAnalyticsParameterOwnership, tools);
214
- if (data && (0, external_context_parameters_js_namespaceObject.isContextEnabled)(data.options.context)) tools = (0, external_context_parameters_js_namespaceObject.addContextParameterToTools)(tools, (0, external_context_parameters_js_namespaceObject.getContextDescription)(data.options.context));
215
- if (data?.options.enableConversationId) tools = (0, external_conversation_id_js_namespaceObject.addConversationIdToTools)(tools, (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(data.options));
213
+ if (data && (0, external_context_parameters_js_namespaceObject.isContextEnabled)(data.options.context)) tools = (0, external_context_parameters_js_namespaceObject.addContextParameterToTools)(tools, (0, external_context_parameters_js_namespaceObject.getContextDescription)(data.options.context), data.logger);
214
+ if (data?.options.enableConversationId) tools = (0, external_conversation_id_js_namespaceObject.addConversationIdToTools)(tools, (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(data.options), data.logger);
216
215
  if (data?.options.reportMissing) {
217
216
  const missingToolName = (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(data.options);
218
217
  const alreadyPresent = tools.some((tool)=>tool?.name === missingToolName);
@@ -224,11 +223,11 @@ async function getTracedToolsList(server, originalListToolsHandler, request, ext
224
223
  }
225
224
  return tools;
226
225
  } catch (error) {
227
- (0, external_logger_js_namespaceObject.log)(`Warning: Original list tools handler failed, this suggests an error PostHog MCP analytics did not cause - ${error}`);
226
+ logger(`Warning: Original list tools handler failed, this suggests an error PostHog MCP analytics did not cause - ${error}`);
228
227
  event.error = (0, external_exceptions_js_namespaceObject.captureException)(error);
229
228
  event.isError = true;
230
229
  event.duration = event.timestamp ? Date.now() - event.timestamp.getTime() : 0;
231
- (0, external_capture_js_namespaceObject.captureEvent)(server, event);
230
+ (0, external_capture_js_namespaceObject.captureEvent)(server, event, logger);
232
231
  throw error;
233
232
  }
234
233
  }
@@ -273,7 +272,7 @@ function mintStatelessSessionOnInitialize(server, data, request, extra) {
273
272
  (0, external_internal_js_namespaceObject.setServerTrackingData)(server, data);
274
273
  return sessionId;
275
274
  } catch (error) {
276
- (0, external_logger_js_namespaceObject.log)(`Warning: PostHog MCP analytics failed to mint a stateless session id - ${error}`);
275
+ data.logger(`Warning: PostHog MCP analytics failed to mint a stateless session id - ${error}`);
277
276
  return;
278
277
  }
279
278
  }
@@ -289,7 +288,7 @@ function upgradeMintedTokenToNegotiated(server, data, mintedSessionId, negotiate
289
288
  });
290
289
  (0, external_session_token_js_namespaceObject.writeSessionIdToTransport)(transport, token);
291
290
  } catch (error) {
292
- (0, external_logger_js_namespaceObject.log)(`Warning: PostHog MCP analytics failed to upgrade the stateless session token - ${error}`);
291
+ data.logger(`Warning: PostHog MCP analytics failed to upgrade the stateless session token - ${error}`);
293
292
  }
294
293
  }
295
294
  function readInitializeClientInfo(request) {
@@ -301,10 +300,10 @@ function readInitializeClientInfo(request) {
301
300
  version: 'string' == typeof version ? version : void 0
302
301
  };
303
302
  }
304
- async function handleInitializeRequest(server, originalInitializeHandler, request, extra) {
303
+ async function handleInitializeRequest(server, originalInitializeHandler, request, extra, logger) {
305
304
  const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
306
305
  if (!data) {
307
- (0, external_logger_js_namespaceObject.log)('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
306
+ logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
308
307
  return await originalInitializeHandler(request, extra);
309
308
  }
310
309
  const mintedSessionId = mintStatelessSessionOnInitialize(server, data, request, extra);
@@ -326,7 +325,7 @@ async function handleInitializeRequest(server, originalInitializeHandler, reques
326
325
  data.sessionInfo.protocolVersion = negotiatedProtocolVersion;
327
326
  (0, external_internal_js_namespaceObject.setServerTrackingData)(server, data);
328
327
  if (mintedSessionId) upgradeMintedTokenToNegotiated(server, data, mintedSessionId, negotiatedProtocolVersion);
329
- (0, external_capture_js_namespaceObject.captureEvent)(server, event);
328
+ (0, external_capture_js_namespaceObject.captureEvent)(server, event, data.logger);
330
329
  return result;
331
330
  }
332
331
  function readProtocolVersion(result, request) {