@posthog/mcp 0.10.4 → 0.10.6
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/dist/extensions/capture.d.ts +2 -1
- package/dist/extensions/capture.d.ts.map +1 -1
- package/dist/extensions/capture.js +2 -3
- package/dist/extensions/capture.mjs +2 -3
- package/dist/extensions/compatibility.d.ts +3 -2
- package/dist/extensions/compatibility.d.ts.map +1 -1
- package/dist/extensions/compatibility.js +19 -20
- package/dist/extensions/compatibility.mjs +15 -16
- package/dist/extensions/context-parameters.d.ts +3 -2
- package/dist/extensions/context-parameters.d.ts.map +1 -1
- package/dist/extensions/context-parameters.js +4 -8
- package/dist/extensions/context-parameters.mjs +4 -7
- package/dist/extensions/conversation-id.d.ts +3 -2
- package/dist/extensions/conversation-id.d.ts.map +1 -1
- package/dist/extensions/conversation-id.js +5 -6
- package/dist/extensions/conversation-id.mjs +5 -5
- package/dist/extensions/instrument-highlevel.d.ts +2 -1
- package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-highlevel.js +29 -30
- package/dist/extensions/instrument-highlevel.mjs +30 -31
- package/dist/extensions/instrument-lowlevel.d.ts +2 -1
- package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-lowlevel.js +15 -11
- package/dist/extensions/instrument-lowlevel.mjs +16 -12
- package/dist/extensions/instrumentation.d.ts +9 -8
- package/dist/extensions/instrumentation.d.ts.map +1 -1
- package/dist/extensions/instrumentation.js +84 -40
- package/dist/extensions/instrumentation.mjs +80 -39
- package/dist/extensions/intent.d.ts.map +1 -1
- package/dist/extensions/intent.js +2 -3
- package/dist/extensions/intent.mjs +2 -3
- package/dist/extensions/internal.d.ts.map +1 -1
- package/dist/extensions/internal.js +5 -6
- package/dist/extensions/internal.mjs +5 -6
- package/dist/extensions/logger.d.ts +12 -4
- package/dist/extensions/logger.d.ts.map +1 -1
- package/dist/extensions/logger.js +12 -3
- package/dist/extensions/logger.mjs +10 -4
- package/dist/extensions/sink.d.ts +4 -2
- package/dist/extensions/sink.d.ts.map +1 -1
- package/dist/extensions/sink.js +11 -10
- package/dist/extensions/sink.mjs +11 -10
- package/dist/extensions/tools.d.ts +2 -1
- package/dist/extensions/tools.d.ts.map +1 -1
- package/dist/extensions/tools.js +2 -2
- package/dist/extensions/tools.mjs +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -16
- package/dist/index.mjs +19 -17
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- 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/capture.ts +3 -3
- package/src/extensions/compatibility.ts +16 -16
- package/src/extensions/context-parameters.ts +8 -12
- package/src/extensions/conversation-id.ts +14 -7
- package/src/extensions/instrument-highlevel.ts +45 -44
- package/src/extensions/instrument-lowlevel.ts +30 -15
- package/src/extensions/instrumentation.ts +119 -42
- package/src/extensions/intent.ts +2 -8
- package/src/extensions/internal.ts +7 -6
- package/src/extensions/logger.ts +22 -7
- package/src/extensions/sink.ts +17 -12
- package/src/extensions/tools.ts +3 -3
- package/src/index.ts +21 -19
- package/src/types.ts +2 -0
- 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 {
|
|
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
|
-
|
|
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 (
|
|
66
|
-
|
|
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
|
-
|
|
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,10 +135,12 @@ 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(),
|
|
@@ -154,18 +155,19 @@ function buildTrackingData(
|
|
|
154
155
|
|
|
155
156
|
function setupTrackedServer(
|
|
156
157
|
validatedServer: MCPServerLike | HighLevelMCPServerLike,
|
|
157
|
-
lowLevelServer: MCPServerLike
|
|
158
|
+
lowLevelServer: MCPServerLike,
|
|
159
|
+
logger: MCPAnalyticsData['logger']
|
|
158
160
|
): void {
|
|
159
161
|
if (isHighLevelServer(validatedServer)) {
|
|
160
162
|
const highLevelServer = validatedServer as HighLevelMCPServerLike
|
|
161
|
-
instrumentHighLevelServer(highLevelServer)
|
|
163
|
+
instrumentHighLevelServer(highLevelServer, logger)
|
|
162
164
|
return
|
|
163
165
|
}
|
|
164
166
|
|
|
165
167
|
try {
|
|
166
|
-
instrumentLowLevelServer(lowLevelServer)
|
|
168
|
+
instrumentLowLevelServer(lowLevelServer, logger)
|
|
167
169
|
} catch (error) {
|
|
168
|
-
|
|
170
|
+
logger(`Warning: Failed to setup tool call instrumentation - ${error}`)
|
|
169
171
|
}
|
|
170
172
|
}
|
|
171
173
|
|
|
@@ -189,8 +191,8 @@ async function captureCustomEvent(lowLevelServer: MCPServerLike, eventData: Capt
|
|
|
189
191
|
|
|
190
192
|
// Re-use the same per-server publish path so the event picks up session info,
|
|
191
193
|
// identity, sdk metadata, etc. Awaited so callers know the event was processed.
|
|
192
|
-
await captureEvent(lowLevelServer, event)
|
|
193
|
-
|
|
194
|
+
await captureEvent(lowLevelServer, event, trackingData.logger)
|
|
195
|
+
trackingData.logger(`Captured event "${eventData.event}" for session ${trackingData.sessionId}`)
|
|
194
196
|
}
|
|
195
197
|
|
|
196
198
|
export { deriveSessionIdFromMCPSession, newSessionId }
|
package/src/types.ts
CHANGED
|
@@ -279,6 +279,8 @@ export interface AnalyticsParameterOwnership {
|
|
|
279
279
|
export interface MCPAnalyticsData {
|
|
280
280
|
sink: McpEventSink | undefined
|
|
281
281
|
identifiedSessions: IdentityCache
|
|
282
|
+
/** Safe logger bound to this server; a no-op when no logger was configured. */
|
|
283
|
+
logger: LoggerFn
|
|
282
284
|
lastActivity: Date
|
|
283
285
|
options: MCPAnalyticsOptions
|
|
284
286
|
sessionId: string
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '0.10.
|
|
1
|
+
export const version = '0.10.6'
|