@posthog/mcp 0.10.3 → 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 (76) hide show
  1. package/dist/extensions/analytics-parameters.d.ts +5 -0
  2. package/dist/extensions/analytics-parameters.d.ts.map +1 -1
  3. package/dist/extensions/analytics-parameters.js +57 -3
  4. package/dist/extensions/analytics-parameters.mjs +47 -2
  5. package/dist/extensions/capture.d.ts +2 -1
  6. package/dist/extensions/capture.d.ts.map +1 -1
  7. package/dist/extensions/capture.js +2 -3
  8. package/dist/extensions/capture.mjs +2 -3
  9. package/dist/extensions/compatibility.d.ts +3 -2
  10. package/dist/extensions/compatibility.d.ts.map +1 -1
  11. package/dist/extensions/compatibility.js +19 -20
  12. package/dist/extensions/compatibility.mjs +15 -16
  13. package/dist/extensions/context-parameters.d.ts +4 -3
  14. package/dist/extensions/context-parameters.d.ts.map +1 -1
  15. package/dist/extensions/context-parameters.js +4 -5
  16. package/dist/extensions/context-parameters.mjs +4 -4
  17. package/dist/extensions/conversation-id.d.ts +3 -8
  18. package/dist/extensions/conversation-id.d.ts.map +1 -1
  19. package/dist/extensions/conversation-id.js +6 -22
  20. package/dist/extensions/conversation-id.mjs +5 -17
  21. package/dist/extensions/instrument-highlevel.d.ts +2 -1
  22. package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
  23. package/dist/extensions/instrument-highlevel.js +31 -51
  24. package/dist/extensions/instrument-highlevel.mjs +30 -50
  25. package/dist/extensions/instrument-lowlevel.d.ts +2 -1
  26. package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
  27. package/dist/extensions/instrument-lowlevel.js +8 -9
  28. package/dist/extensions/instrument-lowlevel.mjs +8 -9
  29. package/dist/extensions/instrumentation.d.ts +7 -8
  30. package/dist/extensions/instrumentation.d.ts.map +1 -1
  31. package/dist/extensions/instrumentation.js +57 -32
  32. package/dist/extensions/instrumentation.mjs +58 -33
  33. package/dist/extensions/intent.d.ts +1 -1
  34. package/dist/extensions/intent.d.ts.map +1 -1
  35. package/dist/extensions/intent.js +3 -4
  36. package/dist/extensions/intent.mjs +3 -4
  37. package/dist/extensions/internal.d.ts.map +1 -1
  38. package/dist/extensions/internal.js +5 -6
  39. package/dist/extensions/internal.mjs +5 -6
  40. package/dist/extensions/logger.d.ts +12 -4
  41. package/dist/extensions/logger.d.ts.map +1 -1
  42. package/dist/extensions/logger.js +12 -3
  43. package/dist/extensions/logger.mjs +10 -4
  44. package/dist/extensions/sink.d.ts +4 -2
  45. package/dist/extensions/sink.d.ts.map +1 -1
  46. package/dist/extensions/sink.js +11 -10
  47. package/dist/extensions/sink.mjs +11 -10
  48. package/dist/extensions/tools.d.ts +2 -1
  49. package/dist/extensions/tools.d.ts.map +1 -1
  50. package/dist/extensions/tools.js +2 -2
  51. package/dist/extensions/tools.mjs +2 -2
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +19 -16
  54. package/dist/index.mjs +20 -17
  55. package/dist/types.d.ts +7 -0
  56. package/dist/types.d.ts.map +1 -1
  57. package/dist/version.d.ts +1 -1
  58. package/dist/version.js +1 -1
  59. package/dist/version.mjs +1 -1
  60. package/package.json +4 -4
  61. package/src/extensions/analytics-parameters.ts +67 -1
  62. package/src/extensions/capture.ts +3 -3
  63. package/src/extensions/compatibility.ts +16 -16
  64. package/src/extensions/context-parameters.ts +9 -7
  65. package/src/extensions/conversation-id.ts +12 -25
  66. package/src/extensions/instrument-highlevel.ts +52 -75
  67. package/src/extensions/instrument-lowlevel.ts +14 -10
  68. package/src/extensions/instrumentation.ts +101 -36
  69. package/src/extensions/intent.ts +8 -3
  70. package/src/extensions/internal.ts +7 -6
  71. package/src/extensions/logger.ts +22 -7
  72. package/src/extensions/sink.ts +17 -12
  73. package/src/extensions/tools.ts +3 -3
  74. package/src/index.ts +22 -19
  75. package/src/types.ts +8 -0
  76. package/src/version.ts +1 -1
package/src/index.ts CHANGED
@@ -8,7 +8,7 @@ import { isCompatibleServerType, isHighLevelServer } from './extensions/compatib
8
8
  import { McpEventSink } from './extensions/sink'
9
9
  import { MCPAnalyticsEventType } from './extensions/event-types'
10
10
  import { IdentityCache, getServerTrackingData, setServerTrackingData } from './extensions/internal'
11
- import { log, setLogger } from './extensions/logger'
11
+ import { createLogger } from './extensions/logger'
12
12
  import { captureEvent } from './extensions/capture'
13
13
  import { applyMcpLibIdentity } from './extensions/lib-identity'
14
14
  import { deriveSessionIdFromMCPSession, getSessionInfo, newSessionId } from './extensions/session'
@@ -51,19 +51,18 @@ import type {
51
51
  * ```
52
52
  */
53
53
  function instrument(server: unknown, posthog: PostHog, options: MCPAnalyticsOptions = {}): McpAnalytics {
54
+ const logger = createLogger(options?.logger)
54
55
  try {
55
- if (options.logger) {
56
- setLogger(options.logger)
57
- }
58
56
  if (!posthog) {
59
- log('Warning: No PostHog client passed to instrument(). Events will not be sent anywhere.')
57
+ logger('Warning: No PostHog client passed to instrument(). Events will not be sent anywhere.')
60
58
  }
61
59
 
62
- const validatedServer = isCompatibleServerType(server)
60
+ const validatedServer = isCompatibleServerType(server, logger)
63
61
  const lowLevelServer = getLowLevelServer(validatedServer)
62
+ const existingData = getServerTrackingData(lowLevelServer)
64
63
 
65
- if (getServerTrackingData(lowLevelServer)) {
66
- log('instrument() - Server already instrumented, skipping initialization')
64
+ if (existingData) {
65
+ existingData.logger('instrument() - Server already instrumented, skipping initialization')
67
66
  return createAnalyticsHandle(lowLevelServer)
68
67
  }
69
68
 
@@ -72,15 +71,15 @@ function instrument(server: unknown, posthog: PostHog, options: MCPAnalyticsOpti
72
71
  // inherited `posthog-node`. Relabels every event the client sends.
73
72
  applyMcpLibIdentity(posthog)
74
73
  }
75
- const sink = posthog ? new McpEventSink(posthog) : undefined
76
- const mcpAnalyticsData = buildTrackingData(lowLevelServer, options, sink)
74
+ const sink = posthog ? new McpEventSink(posthog, logger) : undefined
75
+ const mcpAnalyticsData = buildTrackingData(lowLevelServer, options, sink, logger)
77
76
 
78
77
  setServerTrackingData(lowLevelServer, mcpAnalyticsData)
79
- setupTrackedServer(validatedServer, lowLevelServer)
78
+ setupTrackedServer(validatedServer, lowLevelServer, logger)
80
79
 
81
80
  return createAnalyticsHandle(lowLevelServer)
82
81
  } catch (error) {
83
- log(`Warning: Failed to instrument server - ${error}`)
82
+ logger(`Warning: Failed to instrument server - ${error}`)
84
83
  // Degrade gracefully: a no-op handle so the host app keeps working.
85
84
  return { capture: async () => undefined }
86
85
  }
@@ -136,13 +135,16 @@ const DEFAULT_OPTIONS = {
136
135
  function buildTrackingData(
137
136
  lowLevelServer: MCPServerLike,
138
137
  options: MCPAnalyticsOptions,
139
- sink: McpEventSink | undefined
138
+ sink: McpEventSink | undefined,
139
+ logger: MCPAnalyticsData['logger']
140
140
  ): MCPAnalyticsData {
141
141
  return {
142
142
  sink,
143
+ logger,
143
144
  sessionId: newSessionId(),
144
145
  lastActivity: new Date(),
145
146
  identifiedSessions: new IdentityCache(),
147
+ toolAnalyticsParameterOwnership: new Map(),
146
148
  toolCategories: new Map<string, string>(),
147
149
  toolDescriptions: new Map<string, string>(),
148
150
  sessionInfo: getSessionInfo(lowLevelServer, undefined),
@@ -153,18 +155,19 @@ function buildTrackingData(
153
155
 
154
156
  function setupTrackedServer(
155
157
  validatedServer: MCPServerLike | HighLevelMCPServerLike,
156
- lowLevelServer: MCPServerLike
158
+ lowLevelServer: MCPServerLike,
159
+ logger: MCPAnalyticsData['logger']
157
160
  ): void {
158
161
  if (isHighLevelServer(validatedServer)) {
159
162
  const highLevelServer = validatedServer as HighLevelMCPServerLike
160
- instrumentHighLevelServer(highLevelServer)
163
+ instrumentHighLevelServer(highLevelServer, logger)
161
164
  return
162
165
  }
163
166
 
164
167
  try {
165
- instrumentLowLevelServer(lowLevelServer)
168
+ instrumentLowLevelServer(lowLevelServer, logger)
166
169
  } catch (error) {
167
- log(`Warning: Failed to setup tool call instrumentation - ${error}`)
170
+ logger(`Warning: Failed to setup tool call instrumentation - ${error}`)
168
171
  }
169
172
  }
170
173
 
@@ -188,8 +191,8 @@ async function captureCustomEvent(lowLevelServer: MCPServerLike, eventData: Capt
188
191
 
189
192
  // Re-use the same per-server publish path so the event picks up session info,
190
193
  // identity, sdk metadata, etc. Awaited so callers know the event was processed.
191
- await captureEvent(lowLevelServer, event)
192
- log(`Captured event "${eventData.event}" for session ${trackingData.sessionId}`)
194
+ await captureEvent(lowLevelServer, event, trackingData.logger)
195
+ trackingData.logger(`Captured event "${eventData.event}" for session ${trackingData.sessionId}`)
193
196
  }
194
197
 
195
198
  export { deriveSessionIdFromMCPSession, newSessionId }
package/src/types.ts CHANGED
@@ -271,15 +271,23 @@ export interface SessionInfo {
271
271
  serverVersion?: string
272
272
  }
273
273
 
274
+ export interface AnalyticsParameterOwnership {
275
+ context: boolean
276
+ conversationId: boolean
277
+ }
278
+
274
279
  export interface MCPAnalyticsData {
275
280
  sink: McpEventSink | undefined
276
281
  identifiedSessions: IdentityCache
282
+ /** Safe logger bound to this server; a no-op when no logger was configured. */
283
+ logger: LoggerFn
277
284
  lastActivity: Date
278
285
  options: MCPAnalyticsOptions
279
286
  sessionId: string
280
287
  sessionInfo: SessionInfo
281
288
  /** `token` = recovered from a self-encoded `Mcp-Session-Id` token (see session-token.ts). */
282
289
  sessionSource: 'generated' | 'mcp' | 'token'
290
+ toolAnalyticsParameterOwnership: Map<string, AnalyticsParameterOwnership>
283
291
  toolCategories: Map<string, string>
284
292
  toolDescriptions: Map<string, string>
285
293
  }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '0.10.3'
1
+ export const version = '0.10.5'