@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.
- package/dist/extensions/analytics-parameters.d.ts +5 -0
- package/dist/extensions/analytics-parameters.d.ts.map +1 -1
- package/dist/extensions/analytics-parameters.js +57 -3
- package/dist/extensions/analytics-parameters.mjs +47 -2
- 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 +4 -3
- package/dist/extensions/context-parameters.d.ts.map +1 -1
- package/dist/extensions/context-parameters.js +4 -5
- package/dist/extensions/context-parameters.mjs +4 -4
- package/dist/extensions/conversation-id.d.ts +3 -8
- package/dist/extensions/conversation-id.d.ts.map +1 -1
- package/dist/extensions/conversation-id.js +6 -22
- package/dist/extensions/conversation-id.mjs +5 -17
- 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 +31 -51
- package/dist/extensions/instrument-highlevel.mjs +30 -50
- 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 +8 -9
- package/dist/extensions/instrument-lowlevel.mjs +8 -9
- package/dist/extensions/instrumentation.d.ts +7 -8
- package/dist/extensions/instrumentation.d.ts.map +1 -1
- package/dist/extensions/instrumentation.js +57 -32
- package/dist/extensions/instrumentation.mjs +58 -33
- package/dist/extensions/intent.d.ts +1 -1
- package/dist/extensions/intent.d.ts.map +1 -1
- package/dist/extensions/intent.js +3 -4
- package/dist/extensions/intent.mjs +3 -4
- 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 +19 -16
- package/dist/index.mjs +20 -17
- package/dist/types.d.ts +7 -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 +4 -4
- package/src/extensions/analytics-parameters.ts +67 -1
- package/src/extensions/capture.ts +3 -3
- package/src/extensions/compatibility.ts +16 -16
- package/src/extensions/context-parameters.ts +9 -7
- package/src/extensions/conversation-id.ts +12 -25
- package/src/extensions/instrument-highlevel.ts +52 -75
- package/src/extensions/instrument-lowlevel.ts +14 -10
- package/src/extensions/instrumentation.ts +101 -36
- package/src/extensions/intent.ts +8 -3
- 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 +22 -19
- package/src/types.ts +8 -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,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
|
-
|
|
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
|
-
|
|
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.
|
|
1
|
+
export const version = '0.10.5'
|