@posthog/mcp 0.11.7 → 0.13.0

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 (93) hide show
  1. package/README.md +51 -2
  2. package/dist/extensions/analytics-parameters.d.ts +22 -2
  3. package/dist/extensions/analytics-parameters.d.ts.map +1 -1
  4. package/dist/extensions/analytics-parameters.js +53 -10
  5. package/dist/extensions/analytics-parameters.mjs +37 -1
  6. package/dist/extensions/capture.d.ts.map +1 -1
  7. package/dist/extensions/capture.js +14 -8
  8. package/dist/extensions/capture.mjs +2 -0
  9. package/dist/extensions/client-identity.js +18 -14
  10. package/dist/extensions/compatibility.js +16 -12
  11. package/dist/extensions/constants.d.ts +3 -0
  12. package/dist/extensions/constants.d.ts.map +1 -1
  13. package/dist/extensions/constants.js +28 -18
  14. package/dist/extensions/constants.mjs +5 -2
  15. package/dist/extensions/context-parameters.d.ts +2 -2
  16. package/dist/extensions/context-parameters.d.ts.map +1 -1
  17. package/dist/extensions/context-parameters.js +14 -38
  18. package/dist/extensions/context-parameters.mjs +2 -30
  19. package/dist/extensions/conversation-id.js +18 -14
  20. package/dist/extensions/detect.js +23 -19
  21. package/dist/extensions/event-types.js +15 -11
  22. package/dist/extensions/exceptions.js +12 -8
  23. package/dist/extensions/headers.js +16 -12
  24. package/dist/extensions/ids.js +12 -8
  25. package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
  26. package/dist/extensions/instrument-highlevel.js +16 -9
  27. package/dist/extensions/instrument-highlevel.mjs +5 -2
  28. package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
  29. package/dist/extensions/instrument-lowlevel.js +13 -8
  30. package/dist/extensions/instrument-lowlevel.mjs +2 -1
  31. package/dist/extensions/instrumentation.d.ts +16 -0
  32. package/dist/extensions/instrumentation.d.ts.map +1 -1
  33. package/dist/extensions/instrumentation.js +31 -14
  34. package/dist/extensions/instrumentation.mjs +11 -1
  35. package/dist/extensions/intent.js +14 -10
  36. package/dist/extensions/internal.js +17 -13
  37. package/dist/extensions/lib-identity.js +12 -8
  38. package/dist/extensions/logger.js +17 -13
  39. package/dist/extensions/mcp-payloads.js +16 -12
  40. package/dist/extensions/mcp-sdk-compat.js +23 -19
  41. package/dist/extensions/model-parameters.d.ts +48 -0
  42. package/dist/extensions/model-parameters.d.ts.map +1 -0
  43. package/dist/extensions/model-parameters.js +84 -0
  44. package/dist/extensions/model-parameters.mjs +31 -0
  45. package/dist/extensions/output-instructions.js +15 -11
  46. package/dist/extensions/posthog-events.js +14 -8
  47. package/dist/extensions/posthog-events.mjs +2 -0
  48. package/dist/extensions/posthog-mcp.d.ts +23 -12
  49. package/dist/extensions/posthog-mcp.d.ts.map +1 -1
  50. package/dist/extensions/posthog-mcp.js +49 -11
  51. package/dist/extensions/posthog-mcp.mjs +37 -3
  52. package/dist/extensions/request-headers.js +15 -11
  53. package/dist/extensions/sanitization.d.ts +2 -2
  54. package/dist/extensions/sanitization.d.ts.map +1 -1
  55. package/dist/extensions/sanitization.js +13 -8
  56. package/dist/extensions/sanitization.mjs +1 -0
  57. package/dist/extensions/session-token.js +17 -13
  58. package/dist/extensions/session-token.mjs +2 -2
  59. package/dist/extensions/session.js +16 -12
  60. package/dist/extensions/sink.js +14 -10
  61. package/dist/extensions/tools.js +15 -11
  62. package/dist/extensions/tracing-helpers.js +15 -11
  63. package/dist/extensions/transport-identity.js +15 -11
  64. package/dist/extensions/truncation.d.ts.map +1 -1
  65. package/dist/extensions/truncation.js +22 -16
  66. package/dist/extensions/truncation.mjs +1 -0
  67. package/dist/index.d.ts +1 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +22 -18
  70. package/dist/index.mjs +7 -7
  71. package/dist/types.d.ts +55 -4
  72. package/dist/types.d.ts.map +1 -1
  73. package/dist/types.js +2 -2
  74. package/dist/types.mjs +1 -0
  75. package/dist/version.d.ts +1 -1
  76. package/dist/version.js +15 -11
  77. package/dist/version.mjs +1 -1
  78. package/package.json +28 -11
  79. package/src/extensions/analytics-parameters.ts +88 -2
  80. package/src/extensions/capture.ts +4 -0
  81. package/src/extensions/constants.ts +4 -0
  82. package/src/extensions/context-parameters.ts +10 -59
  83. package/src/extensions/instrument-highlevel.ts +4 -0
  84. package/src/extensions/instrument-lowlevel.ts +2 -0
  85. package/src/extensions/instrumentation.ts +51 -0
  86. package/src/extensions/model-parameters.ts +98 -0
  87. package/src/extensions/posthog-events.ts +8 -0
  88. package/src/extensions/posthog-mcp.ts +84 -12
  89. package/src/extensions/sanitization.ts +6 -2
  90. package/src/extensions/truncation.ts +3 -0
  91. package/src/index.ts +3 -0
  92. package/src/types.ts +55 -4
  93. package/src/version.ts +1 -1
package/src/types.ts CHANGED
@@ -129,6 +129,20 @@ export interface MCPAnalyticsOptions {
129
129
  enableExceptionAutocapture?: boolean
130
130
  /** Inject a required `context` parameter on every tool to capture user intent. */
131
131
  context?: boolean | MCPAnalyticsContextOptions
132
+ /**
133
+ * Inject a required `llm_model` parameter on every tool so the calling agent
134
+ * self-reports the model it runs as, captured as `$mcp_llm_model` with
135
+ * `$mcp_llm_model_source = "self_reported"`. Off by default.
136
+ *
137
+ * The MCP wire deliberately carries no model identity, so self-report is the
138
+ * only capture path — harnesses inject the model id into the agent's system
139
+ * prompt, and agents restate it accurately. Like `clientInfo` in the MCP
140
+ * spec, the value is unverified: use it for per-model quality analytics, not
141
+ * billing or security. An honest `"unknown"` from the agent is dropped
142
+ * rather than captured. Reasoning effort is intentionally not collected —
143
+ * agents don't reliably know it, so it would only ever be noise.
144
+ */
145
+ captureModel?: boolean | MCPAnalyticsModelOptions
132
146
  /**
133
147
  * Identify the calling user. Returning a non-null value sets `distinct_id` and `$set`
134
148
  * on subsequent events for the session. Object form is treated as a static identity.
@@ -172,8 +186,13 @@ export interface MCPAnalyticsContextOptions {
172
186
  description?: string
173
187
  }
174
188
 
189
+ export interface MCPAnalyticsModelOptions {
190
+ description?: string
191
+ }
192
+
175
193
  export type MaybePromise<T> = T | Promise<T>
176
194
  export type MCPAnalyticsIntentSource = 'context_parameter' | 'inferred'
195
+ export type MCPAnalyticsModelSource = 'self_reported'
177
196
 
178
197
  export type ToolCallback =
179
198
  | ((
@@ -225,6 +244,14 @@ export interface Event {
225
244
  eventId?: string
226
245
  eventType: MCPAnalyticsEventType
227
246
  groups?: Record<string, string>
247
+ /**
248
+ * The calling agent's self-reported model id → `$mcp_llm_model`. Read off
249
+ * the SDK-injected `llm_model` argument (`captureModel` option); unverified
250
+ * by design, like the MCP spec's own `clientInfo`.
251
+ */
252
+ llmModel?: string
253
+ /** How the model id was obtained → `$mcp_llm_model_source`. Always `self_reported` today. */
254
+ llmModelSource?: MCPAnalyticsModelSource
228
255
  /**
229
256
  * Explicit PostHog event name. When set (via `capture(server, { event })`) it
230
257
  * overrides the built-in name derived from `eventType`, so callers can emit any
@@ -380,6 +407,7 @@ export interface SessionInfo {
380
407
  export interface AnalyticsParameterOwnership {
381
408
  context: boolean
382
409
  conversationId: boolean
410
+ llmModel: boolean
383
411
  /**
384
412
  * True when we declared `_mcp_instructions` on this tool's advertised output
385
413
  * schema, so writing that key into `structuredContent` will validate. False
@@ -483,6 +511,13 @@ export interface ToolCallCaptureData extends McpCaptureCommon {
483
511
  * the host derived it. Defaults to `context_parameter` when an intent is set.
484
512
  */
485
513
  intentSource?: MCPAnalyticsIntentSource
514
+ /**
515
+ * The calling agent's self-reported model id -> `$mcp_llm_model`. On the
516
+ * custom-dispatcher path, read it from {@link PostHogMCP.prepareToolCall}.
517
+ */
518
+ llmModel?: string
519
+ /** How the model id was obtained -> `$mcp_llm_model_source`. */
520
+ llmModelSource?: MCPAnalyticsModelSource
486
521
  /** Captured call arguments → `$mcp_parameters` (sanitized + truncated). */
487
522
  parameters?: unknown
488
523
  /** Captured tool result → `$mcp_response` (sanitized + truncated). */
@@ -558,18 +593,30 @@ export interface PrepareToolListOptions {
558
593
  reportMissing?: boolean
559
594
  }
560
595
 
596
+ /** Options for {@link PostHogMCP.prepareToolCall}. */
597
+ export interface PrepareToolCallOptions {
598
+ /**
599
+ * The tool descriptor before PostHog preparation. Pass this on stateless or
600
+ * multi-replica servers so SDK argument ownership is resolved per request.
601
+ */
602
+ originalTool?: { inputSchema?: unknown }
603
+ }
604
+
561
605
  /**
562
606
  * Result of {@link PostHogMCP.prepareToolCall}: the intent pulled off the
563
- * incoming call, the arguments with the injected `context` removed (so your tool
564
- * handler and its schema validation never see it), and whether the call targeted
565
- * the `get_more_tools` virtual tool.
607
+ * incoming call, the arguments with SDK-owned analytics fields removed, and
608
+ * whether the call targeted the `get_more_tools` virtual tool.
566
609
  */
567
610
  export interface PreparedToolCall {
568
611
  /** The agent's stated intent (the `context` argument), if present. */
569
612
  intent?: string
570
613
  /** Where the intent came from. Always `context_parameter` here when set. */
571
614
  intentSource?: MCPAnalyticsIntentSource
572
- /** The call arguments with the injected `context` key stripped out. */
615
+ /** The agent's self-reported model id, when `captureModel` is enabled and owned by the SDK. */
616
+ llmModel?: string
617
+ /** How the model id was obtained. Always `self_reported` when present. */
618
+ llmModelSource?: MCPAnalyticsModelSource
619
+ /** The call arguments with SDK-owned `context` and `llm_model` keys removed. */
573
620
  args?: Record<string, unknown>
574
621
  /** True when `name` is the `get_more_tools` virtual tool. */
575
622
  isMissingCapability: boolean
@@ -582,6 +629,10 @@ export interface MissingCapabilityCaptureData extends McpCaptureCommon {
582
629
  * on the `get_more_tools` call) → `$mcp_intent`.
583
630
  */
584
631
  context?: string
632
+ /** The calling agent's self-reported model id -> `$mcp_llm_model`. */
633
+ llmModel?: string
634
+ /** How the model id was obtained -> `$mcp_llm_model_source`. */
635
+ llmModelSource?: MCPAnalyticsModelSource
585
636
  /** Captured call arguments → `$mcp_parameters` (sanitized + truncated). */
586
637
  parameters?: unknown
587
638
  }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '0.11.7'
1
+ export const version = '0.13.0'