@posthog/mcp 0.10.9 → 0.11.1

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 +39 -0
  2. package/dist/extensions/capture.d.ts.map +1 -1
  3. package/dist/extensions/capture.js +2 -0
  4. package/dist/extensions/capture.mjs +2 -0
  5. package/dist/extensions/compatibility.d.ts.map +1 -1
  6. package/dist/extensions/compatibility.js +14 -18
  7. package/dist/extensions/compatibility.mjs +10 -14
  8. package/dist/extensions/constants.d.ts +2 -0
  9. package/dist/extensions/constants.d.ts.map +1 -1
  10. package/dist/extensions/constants.js +3 -1
  11. package/dist/extensions/constants.mjs +3 -1
  12. package/dist/extensions/context-parameters.d.ts.map +1 -1
  13. package/dist/extensions/conversation-id.d.ts +2 -13
  14. package/dist/extensions/conversation-id.d.ts.map +1 -1
  15. package/dist/extensions/detect.d.ts +45 -0
  16. package/dist/extensions/detect.d.ts.map +1 -0
  17. package/dist/extensions/detect.js +90 -0
  18. package/dist/extensions/detect.mjs +35 -0
  19. package/dist/extensions/headers.d.ts +33 -0
  20. package/dist/extensions/headers.d.ts.map +1 -0
  21. package/dist/extensions/headers.js +54 -0
  22. package/dist/extensions/headers.mjs +17 -0
  23. package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
  24. package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
  25. package/dist/extensions/instrumentation.d.ts +7 -0
  26. package/dist/extensions/instrumentation.d.ts.map +1 -1
  27. package/dist/extensions/instrumentation.js +7 -2
  28. package/dist/extensions/instrumentation.mjs +7 -2
  29. package/dist/extensions/internal.d.ts.map +1 -1
  30. package/dist/extensions/internal.js +2 -0
  31. package/dist/extensions/internal.mjs +2 -0
  32. package/dist/extensions/output-instructions.d.ts +6 -8
  33. package/dist/extensions/output-instructions.d.ts.map +1 -1
  34. package/dist/extensions/posthog-events.js +4 -0
  35. package/dist/extensions/posthog-events.mjs +4 -0
  36. package/dist/extensions/posthog-mcp.d.ts.map +1 -1
  37. package/dist/extensions/posthog-mcp.js +3 -0
  38. package/dist/extensions/posthog-mcp.mjs +3 -0
  39. package/dist/extensions/request-headers.d.ts +36 -0
  40. package/dist/extensions/request-headers.d.ts.map +1 -0
  41. package/dist/extensions/request-headers.js +62 -0
  42. package/dist/extensions/request-headers.mjs +28 -0
  43. package/dist/extensions/session-token.d.ts.map +1 -1
  44. package/dist/extensions/session-token.js +5 -14
  45. package/dist/extensions/session-token.mjs +2 -11
  46. package/dist/extensions/session.d.ts +4 -3
  47. package/dist/extensions/session.d.ts.map +1 -1
  48. package/dist/extensions/session.js +2 -1
  49. package/dist/extensions/session.mjs +2 -1
  50. package/dist/extensions/sink.d.ts +4 -6
  51. package/dist/extensions/sink.d.ts.map +1 -1
  52. package/dist/extensions/tools.d.ts.map +1 -1
  53. package/dist/extensions/transport-identity.d.ts +64 -0
  54. package/dist/extensions/transport-identity.d.ts.map +1 -0
  55. package/dist/extensions/transport-identity.js +64 -0
  56. package/dist/extensions/transport-identity.mjs +21 -0
  57. package/dist/extensions/truncation.d.ts.map +1 -1
  58. package/dist/extensions/truncation.js +2 -0
  59. package/dist/extensions/truncation.mjs +2 -0
  60. package/dist/index.d.ts +2 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +11 -7
  63. package/dist/index.mjs +2 -1
  64. package/dist/types.d.ts +52 -0
  65. package/dist/types.d.ts.map +1 -1
  66. package/dist/version.d.ts +1 -1
  67. package/dist/version.js +1 -1
  68. package/dist/version.mjs +1 -1
  69. package/package.json +2 -2
  70. package/src/extensions/capture.ts +6 -0
  71. package/src/extensions/compatibility.ts +25 -33
  72. package/src/extensions/constants.ts +2 -0
  73. package/src/extensions/context-parameters.ts +3 -11
  74. package/src/extensions/conversation-id.ts +5 -17
  75. package/src/extensions/detect.ts +78 -0
  76. package/src/extensions/headers.ts +52 -0
  77. package/src/extensions/instrument-highlevel.ts +0 -1
  78. package/src/extensions/instrument-lowlevel.ts +0 -1
  79. package/src/extensions/instrumentation.ts +32 -39
  80. package/src/extensions/internal.ts +6 -5
  81. package/src/extensions/output-instructions.ts +6 -8
  82. package/src/extensions/posthog-events.ts +14 -0
  83. package/src/extensions/posthog-mcp.ts +7 -5
  84. package/src/extensions/request-headers.ts +76 -0
  85. package/src/extensions/session-token.ts +3 -15
  86. package/src/extensions/session.ts +23 -36
  87. package/src/extensions/sink.ts +4 -6
  88. package/src/extensions/tools.ts +3 -6
  89. package/src/extensions/transport-identity.ts +100 -0
  90. package/src/extensions/truncation.ts +4 -0
  91. package/src/index.ts +4 -0
  92. package/src/types.ts +51 -0
  93. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,7 @@ const external_analytics_parameters_js_namespaceObject = require("./analytics-pa
38
38
  const external_context_parameters_js_namespaceObject = require("./context-parameters.js");
39
39
  const external_conversation_id_js_namespaceObject = require("./conversation-id.js");
40
40
  const external_client_identity_js_namespaceObject = require("./client-identity.js");
41
+ const external_transport_identity_js_namespaceObject = require("./transport-identity.js");
41
42
  const external_output_instructions_js_namespaceObject = require("./output-instructions.js");
42
43
  const external_capture_js_namespaceObject = require("./capture.js");
43
44
  const external_event_types_js_namespaceObject = require("./event-types.js");
@@ -46,6 +47,7 @@ const external_intent_js_namespaceObject = require("./intent.js");
46
47
  const external_internal_js_namespaceObject = require("./internal.js");
47
48
  const external_mcp_payloads_js_namespaceObject = require("./mcp-payloads.js");
48
49
  const external_mcp_sdk_compat_js_namespaceObject = require("./mcp-sdk-compat.js");
50
+ const external_request_headers_js_namespaceObject = require("./request-headers.js");
49
51
  const external_session_js_namespaceObject = require("./session.js");
50
52
  const external_session_token_js_namespaceObject = require("./session-token.js");
51
53
  const external_tools_js_namespaceObject = require("./tools.js");
@@ -109,6 +111,7 @@ async function prepareToolCallEvent(server, data, request, downstreamRequest, ex
109
111
  toolDescription: toolName ? data.toolDescriptions.get(toolName) : void 0
110
112
  };
111
113
  (0, external_client_identity_js_namespaceObject.stampMetaClientInfo)(event, request);
114
+ (0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(event, extra);
112
115
  await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
113
116
  (0, external_intent_js_namespaceObject.setEventIntent)(event, await (0, external_intent_js_namespaceObject.resolveToolCallIntent)(data, request, ownership.context, extra));
114
117
  return {
@@ -228,6 +231,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
228
231
  timestamp: startTime
229
232
  };
230
233
  (0, external_client_identity_js_namespaceObject.stampMetaClientInfo)(event, request);
234
+ (0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(event, extra);
231
235
  if (data) await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
232
236
  const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger, requestAttribution);
233
237
  if (!data) {
@@ -323,8 +327,8 @@ function cacheToolCategories(cache, tools) {
323
327
  }
324
328
  function mintStatelessSessionOnInitialize(server, data, request, extra) {
325
329
  try {
326
- const headers = extra?.requestInfo?.headers;
327
- if (!headers || 'object' != typeof headers) return;
330
+ const headers = (0, external_request_headers_js_namespaceObject.getRequestHeaders)(extra);
331
+ if (!headers) return;
328
332
  if ((0, external_session_token_js_namespaceObject.readMcpSessionHeader)(headers)) return;
329
333
  const transport = server.transport;
330
334
  if (!transport || extra?.sessionId || transport.sessionId) return;
@@ -400,6 +404,7 @@ async function handleInitializeRequest(server, originalInitializeHandler, reques
400
404
  timestamp: new Date()
401
405
  };
402
406
  (0, external_client_identity_js_namespaceObject.stampMetaClientInfo)(event, request);
407
+ (0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(event, extra);
403
408
  await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
404
409
  const result = await originalInitializeHandler(request, extra);
405
410
  event.response = result;
@@ -2,6 +2,7 @@ import { getAnalyticsParameterOwnership, stripOwnedAnalyticsArguments } from "./
2
2
  import { addContextParameterToTools, getContextDescription, isContextEnabled } from "./context-parameters.mjs";
3
3
  import { addConversationIdToTools, canInjectConversationIdPromptBack, injectConversationIdPromptBack, resolveConversationId } from "./conversation-id.mjs";
4
4
  import { stampMetaClientInfo } from "./client-identity.mjs";
5
+ import { stampTransportIdentity } from "./transport-identity.mjs";
5
6
  import { addInstructionsToOutputSchemas, mirrorInstructionsIntoStructuredContent } from "./output-instructions.mjs";
6
7
  import { captureEvent } from "./capture.mjs";
7
8
  import { MCPAnalyticsEventType } from "./event-types.mjs";
@@ -10,6 +11,7 @@ import { resolveToolCallIntent, setEventIntent, setExplicitContextIntent } from
10
11
  import { getServerTrackingData, handleIdentify, setServerTrackingData, withIdentity } from "./internal.mjs";
11
12
  import { buildCapturedMcpParameters } from "./mcp-payloads.mjs";
12
13
  import { readRequestHandlerMethod } from "./mcp-sdk-compat.mjs";
14
+ import { getRequestHeaders } from "./request-headers.mjs";
13
15
  import { getSessionId, getSessionInfo, newSessionId } from "./session.mjs";
14
16
  import { encodeSessionId, readMcpSessionHeader, writeSessionIdToTransport } from "./session-token.mjs";
15
17
  import { getReportMissingToolDescriptor, resolveMissingCapabilityToolName } from "./tools.mjs";
@@ -73,6 +75,7 @@ async function prepareToolCallEvent(server, data, request, downstreamRequest, ex
73
75
  toolDescription: toolName ? data.toolDescriptions.get(toolName) : void 0
74
76
  };
75
77
  stampMetaClientInfo(event, request);
78
+ stampTransportIdentity(event, extra);
76
79
  await applyResolvedMetadata(event, data, request, extra);
77
80
  setEventIntent(event, await resolveToolCallIntent(data, request, ownership.context, extra));
78
81
  return {
@@ -192,6 +195,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
192
195
  timestamp: startTime
193
196
  };
194
197
  stampMetaClientInfo(event, request);
198
+ stampTransportIdentity(event, extra);
195
199
  if (data) await applyResolvedMetadata(event, data, request, extra);
196
200
  const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger, requestAttribution);
197
201
  if (!data) {
@@ -287,8 +291,8 @@ function cacheToolCategories(cache, tools) {
287
291
  }
288
292
  function mintStatelessSessionOnInitialize(server, data, request, extra) {
289
293
  try {
290
- const headers = extra?.requestInfo?.headers;
291
- if (!headers || 'object' != typeof headers) return;
294
+ const headers = getRequestHeaders(extra);
295
+ if (!headers) return;
292
296
  if (readMcpSessionHeader(headers)) return;
293
297
  const transport = server.transport;
294
298
  if (!transport || extra?.sessionId || transport.sessionId) return;
@@ -364,6 +368,7 @@ async function handleInitializeRequest(server, originalInitializeHandler, reques
364
368
  timestamp: new Date()
365
369
  };
366
370
  stampMetaClientInfo(event, request);
371
+ stampTransportIdentity(event, extra);
367
372
  await applyResolvedMetadata(event, data, request, extra);
368
373
  const result = await originalInitializeHandler(request, extra);
369
374
  event.response = result;
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,WAAW,EACX,YAAY,EACb,MAAM,UAAU,CAAA;AAKjB;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,OAAO,SAAO;IAI1B,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAWhD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAapD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B,IAAI,IAAI,MAAM;CAGf;AAID,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAEzF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAEzF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CA4B5E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY,CAapG;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,kBAAkB,EAAE,WAAW,EAC/B,KAAK,CAAC,EAAE,6BAA6B;AACrC;;;;;GAKG;AACH,uBAAuB,UAAQ,GAC9B,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAuDnC;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,WAAW,CAOtG;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAUzC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,WAAW,EACX,YAAY,EACb,MAAM,UAAU,CAAA;AAMjB;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,OAAO,SAAO;IAI1B,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAWhD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAapD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B,IAAI,IAAI,MAAM;CAGf;AAID,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAEzF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAEzF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CA4B5E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY,CAapG;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,kBAAkB,EAAE,WAAW,EAC/B,KAAK,CAAC,EAAE,6BAA6B;AACrC;;;;;GAKG;AACH,uBAAuB,UAAQ,GAC9B,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAuDnC;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,WAAW,CAOtG;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAUzC"}
@@ -36,6 +36,7 @@ __webpack_require__.d(__webpack_exports__, {
36
36
  const external_event_types_js_namespaceObject = require("./event-types.js");
37
37
  const external_capture_js_namespaceObject = require("./capture.js");
38
38
  const external_client_identity_js_namespaceObject = require("./client-identity.js");
39
+ const external_transport_identity_js_namespaceObject = require("./transport-identity.js");
39
40
  class IdentityCache {
40
41
  constructor(maxSize = 1000){
41
42
  this._cache = new Map();
@@ -110,6 +111,7 @@ async function handleIdentify(server, data, sessionId, request, requestAttributi
110
111
  timestamp: new Date()
111
112
  };
112
113
  (0, external_client_identity_js_namespaceObject.stampMetaClientInfo)(identifyEvent, request);
114
+ (0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(identifyEvent, extra);
113
115
  try {
114
116
  const identityResult = 'function' == typeof data.options.identify ? await data.options.identify(request, extra) : data.options.identify;
115
117
  if (identityResult) {
@@ -1,6 +1,7 @@
1
1
  import { MCPAnalyticsEventType } from "./event-types.mjs";
2
2
  import { captureEvent } from "./capture.mjs";
3
3
  import { stampMetaClientInfo } from "./client-identity.mjs";
4
+ import { stampTransportIdentity } from "./transport-identity.mjs";
4
5
  class IdentityCache {
5
6
  constructor(maxSize = 1000){
6
7
  this._cache = new Map();
@@ -75,6 +76,7 @@ async function handleIdentify(server, data, sessionId, request, requestAttributi
75
76
  timestamp: new Date()
76
77
  };
77
78
  stampMetaClientInfo(identifyEvent, request);
79
+ stampTransportIdentity(identifyEvent, extra);
78
80
  try {
79
81
  const identityResult = 'function' == typeof data.options.identify ? await data.options.identify(request, extra) : data.options.identify;
80
82
  if (identityResult) {
@@ -1,17 +1,15 @@
1
1
  import type { LoggerFn } from './logger';
2
2
  /**
3
- * The `conversation_id` session handle reaches the agent as a text block appended to the
4
- * tool result. That block is invisible to any client that reads
5
- * `structuredContent` instead of `content` — which is what clients do whenever a
6
- * tool declares an `outputSchema`. Measured against Claude Code, correlation for
7
- * such tools drops to zero.
8
- *
9
- * The fix is to mirror the session handle into `structuredContent` as well, which this
10
- * module does in two halves that must stay in that order:
3
+ * Mirrors the `conversation_id` session handle into `structuredContent`, in two
4
+ * halves that must stay in that order:
11
5
  *
12
6
  * 1. declare `_mcp_instructions` on the tool's advertised `outputSchema`
13
7
  * 2. write it into the result's `structuredContent`
14
8
  *
9
+ * Needed because clients that read `structuredContent` — which they do whenever
10
+ * a tool declares an `outputSchema` — never see the `content` text block that
11
+ * carries the handle (ADR-0004).
12
+ *
15
13
  * The declaration is what makes the write safe. The MCP client ajv-validates
16
14
  * `structuredContent` against the schema from `tools/list`, and
17
15
  * `zod-to-json-schema` emits `additionalProperties: false` for a plain
@@ -1 +1 @@
1
- {"version":3,"file":"output-instructions.d.ts","sourceRoot":"","sources":["../../src/extensions/output-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAIxC;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,oBAAoB,sBAAsB,CAAA;AAQvD,MAAM,WAAW,gCAAgC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAgC3E;AAwCD;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,SAAS,gCAAgC,EAC1F,IAAI,EAAE,KAAK,EACX,MAAM,GAAE,QAAc,GACrB,KAAK,CA8CP;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,SAAS,gCAAgC,EAC3F,KAAK,EAAE,KAAK,EAAE,EACd,MAAM,GAAE,QAAc,GACrB,KAAK,EAAE,CAET;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;CACrB;AAID,uFAAuF;AACvF,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,MAAM,GAAG,wBAAwB,CAE9F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uCAAuC,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAkBxG"}
1
+ {"version":3,"file":"output-instructions.d.ts","sourceRoot":"","sources":["../../src/extensions/output-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAIxC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,sBAAsB,CAAA;AAQvD,MAAM,WAAW,gCAAgC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAgC3E;AAwCD;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,SAAS,gCAAgC,EAC1F,IAAI,EAAE,KAAK,EACX,MAAM,GAAE,QAAc,GACrB,KAAK,CA8CP;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,SAAS,gCAAgC,EAC3F,KAAK,EAAE,KAAK,EAAE,EACd,MAAM,GAAE,QAAc,GACrB,KAAK,EAAE,CAET;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;CACrB;AAID,uFAAuF;AACvF,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,MAAM,GAAG,wBAAwB,CAE9F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uCAAuC,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAkBxG"}
@@ -98,6 +98,8 @@ function addCommonEventProperties(event, properties) {
98
98
  if (event.serverVersion) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ServerVersion] = event.serverVersion;
99
99
  if (event.clientName) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ClientName] = event.clientName;
100
100
  if (event.clientVersion) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ClientVersion] = event.clientVersion;
101
+ if (event.clientUserAgent) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ClientUserAgent] = event.clientUserAgent;
102
+ if (event.vendorClient) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.VendorClient] = event.vendorClient;
101
103
  if (event.protocolVersion) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ProtocolVersion] = event.protocolVersion;
102
104
  if (event.userIntent) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.Intent] = event.userIntent;
103
105
  if (event.userIntentSource) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.IntentSource] = event.userIntentSource;
@@ -136,6 +138,8 @@ function buildExceptionEvent(event) {
136
138
  if (event.serverVersion) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ServerVersion] = event.serverVersion;
137
139
  if (event.clientName) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ClientName] = event.clientName;
138
140
  if (event.clientVersion) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ClientVersion] = event.clientVersion;
141
+ if (event.clientUserAgent) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ClientUserAgent] = event.clientUserAgent;
142
+ if (event.vendorClient) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.VendorClient] = event.vendorClient;
139
143
  if (event.protocolVersion) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ProtocolVersion] = event.protocolVersion;
140
144
  addCustomEventProperties(event, properties);
141
145
  return {
@@ -70,6 +70,8 @@ function addCommonEventProperties(event, properties) {
70
70
  if (event.serverVersion) properties[PostHogMCPAnalyticsProperty.ServerVersion] = event.serverVersion;
71
71
  if (event.clientName) properties[PostHogMCPAnalyticsProperty.ClientName] = event.clientName;
72
72
  if (event.clientVersion) properties[PostHogMCPAnalyticsProperty.ClientVersion] = event.clientVersion;
73
+ if (event.clientUserAgent) properties[PostHogMCPAnalyticsProperty.ClientUserAgent] = event.clientUserAgent;
74
+ if (event.vendorClient) properties[PostHogMCPAnalyticsProperty.VendorClient] = event.vendorClient;
73
75
  if (event.protocolVersion) properties[PostHogMCPAnalyticsProperty.ProtocolVersion] = event.protocolVersion;
74
76
  if (event.userIntent) properties[PostHogMCPAnalyticsProperty.Intent] = event.userIntent;
75
77
  if (event.userIntentSource) properties[PostHogMCPAnalyticsProperty.IntentSource] = event.userIntentSource;
@@ -108,6 +110,8 @@ function buildExceptionEvent(event) {
108
110
  if (event.serverVersion) properties[PostHogMCPAnalyticsProperty.ServerVersion] = event.serverVersion;
109
111
  if (event.clientName) properties[PostHogMCPAnalyticsProperty.ClientName] = event.clientName;
110
112
  if (event.clientVersion) properties[PostHogMCPAnalyticsProperty.ClientVersion] = event.clientVersion;
113
+ if (event.clientUserAgent) properties[PostHogMCPAnalyticsProperty.ClientUserAgent] = event.clientUserAgent;
114
+ if (event.vendorClient) properties[PostHogMCPAnalyticsProperty.VendorClient] = event.vendorClient;
111
115
  if (event.protocolVersion) properties[PostHogMCPAnalyticsProperty.ProtocolVersion] = event.protocolVersion;
112
116
  addCustomEventProperties(event, properties);
113
117
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"posthog-mcp.d.ts","sourceRoot":"","sources":["../../src/extensions/posthog-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,KAAK,EACV,qBAAqB,EAIrB,4BAA4B,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,UAAU,CAAA;AACjB,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAA;AAQ7B;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,UAAW,SAAQ,OAAO;;gBAWzB,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB;IAO3D,8FAA8F;IAC9F,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAiBhD,iEAAiE;IACjE,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAUpD;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAclD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,eAAe,CAAC,KAAK,SAAS,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,GAAE,sBAA2B,GAAG,KAAK,EAAE;IAYnH;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB;IAW/E;;;;OAIG;IACH,wBAAwB,CAAC,IAAI,EAAE,4BAA4B,GAAG,IAAI;CAkBnE"}
1
+ {"version":3,"file":"posthog-mcp.d.ts","sourceRoot":"","sources":["../../src/extensions/posthog-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,KAAK,EACV,qBAAqB,EAIrB,4BAA4B,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,UAAU,CAAA;AACjB,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAA;AAS7B;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,UAAW,SAAQ,OAAO;;gBAOzB,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB;IAM3D,8FAA8F;IAC9F,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAiBhD,iEAAiE;IACjE,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAUpD;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAclD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,eAAe,CAAC,KAAK,SAAS,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,GAAE,sBAA2B,GAAG,KAAK,EAAE;IAYnH;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB;IAW/E;;;;OAIG;IACH,wBAAwB,CAAC,IAAI,EAAE,4BAA4B,GAAG,IAAI;CAkBnE"}
@@ -30,6 +30,7 @@ const external_posthog_node_namespaceObject = require("posthog-node");
30
30
  const external_context_parameters_js_namespaceObject = require("./context-parameters.js");
31
31
  const external_event_types_js_namespaceObject = require("./event-types.js");
32
32
  const external_exceptions_js_namespaceObject = require("./exceptions.js");
33
+ const external_headers_js_namespaceObject = require("./headers.js");
33
34
  const external_lib_identity_js_namespaceObject = require("./lib-identity.js");
34
35
  const external_logger_js_namespaceObject = require("./logger.js");
35
36
  const external_sink_js_namespaceObject = require("./sink.js");
@@ -115,6 +116,8 @@ function baseEvent(eventType, common) {
115
116
  eventType,
116
117
  sessionId: common.sessionId,
117
118
  protocolVersion: common.protocolVersion,
119
+ clientUserAgent: (0, external_headers_js_namespaceObject.normalizeHeaderString)(common.clientUserAgent),
120
+ vendorClient: (0, external_headers_js_namespaceObject.normalizeHeaderString)(common.vendorClient),
118
121
  timestamp: common.timestamp ?? new Date(),
119
122
  properties: common.properties,
120
123
  groups: common.groups
@@ -2,6 +2,7 @@ import { PostHog } from "posthog-node";
2
2
  import { addContextParameterToTools, getContextDescription, isContextEnabled } from "./context-parameters.mjs";
3
3
  import { MCPAnalyticsEventType } from "./event-types.mjs";
4
4
  import { captureException } from "./exceptions.mjs";
5
+ import { normalizeHeaderString } from "./headers.mjs";
5
6
  import { applyMcpLibIdentity } from "./lib-identity.mjs";
6
7
  import { log } from "./logger.mjs";
7
8
  import { McpEventSink } from "./sink.mjs";
@@ -87,6 +88,8 @@ function baseEvent(eventType, common) {
87
88
  eventType,
88
89
  sessionId: common.sessionId,
89
90
  protocolVersion: common.protocolVersion,
91
+ clientUserAgent: normalizeHeaderString(common.clientUserAgent),
92
+ vendorClient: normalizeHeaderString(common.vendorClient),
90
93
  timestamp: common.timestamp ?? new Date(),
91
94
  properties: common.properties,
92
95
  groups: common.groups
@@ -0,0 +1,36 @@
1
+ import type { RequestHeaderBag } from '../types';
2
+ /**
3
+ * Reads the HTTP request headers off the `extra` (v1) / `ctx` (v2) object the
4
+ * MCP SDK hands a request handler, and returns them as a plain object with
5
+ * lowercase keys. Returns `undefined` when the request did not come over HTTP —
6
+ * stdio and in-memory transports carry no headers at all.
7
+ *
8
+ * The two SDK majors put them in different places and in different shapes: v1
9
+ * attaches a plain object at `extra.requestInfo.headers`, while v2 attaches the
10
+ * WHATWG `Request` at `ctx.http.req`, whose `headers` is a `Headers` instance
11
+ * that only answers to `.get()`. A v1-shaped read returns `undefined` on v2,
12
+ * which is why this exists.
13
+ *
14
+ * Normalisation is **by shape, not by source**: a framework is free to hand us a
15
+ * plain object where the SDK hands `Headers`, so both fields are checked for
16
+ * both shapes. `Headers` is duck-typed on `.entries` rather than `instanceof` —
17
+ * workerd and other edge runtimes are a different realm and would fail the
18
+ * identity check on a perfectly good object.
19
+ *
20
+ * Exported from the package for host callbacks. `identify`, `intentFallback`,
21
+ * `eventProperties` and `beforeSend` receive the SDK's `extra` unchanged — we
22
+ * deliberately do not synthesise a v1 shape on v2, because a fabricated
23
+ * `requestInfo` is a convincing partial lie about a shape the SDK removed on
24
+ * purpose. So a host that reads headers reads them through this instead:
25
+ *
26
+ * ```ts
27
+ * import { getRequestHeaders } from '@posthog/mcp'
28
+ *
29
+ * identify: async (request, extra) => {
30
+ * const auth = getRequestHeaders(extra)?.['authorization']
31
+ * // ...
32
+ * }
33
+ * ```
34
+ */
35
+ export declare function getRequestHeaders(extra: unknown): RequestHeaderBag | undefined;
36
+ //# sourceMappingURL=request-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-headers.d.ts","sourceRoot":"","sources":["../../src/extensions/request-headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,CAY9E"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ getRequestHeaders: ()=>getRequestHeaders
28
+ });
29
+ function getRequestHeaders(extra) {
30
+ if (!extra || 'object' != typeof extra) return;
31
+ const record = extra;
32
+ const http = record.http;
33
+ const requestInfo = record.requestInfo;
34
+ const source = http?.req?.headers ?? requestInfo?.headers;
35
+ if (!source || 'object' != typeof source) return;
36
+ return toHeaderBag(source);
37
+ }
38
+ function toHeaderBag(source) {
39
+ try {
40
+ const entries = isHeadersLike(source) ? [
41
+ ...source.entries()
42
+ ] : Object.entries(source);
43
+ const bag = {};
44
+ for (const [key, value] of entries)if ('string' == typeof key && null != value) {
45
+ if ('string' == typeof value || Array.isArray(value)) bag[key.toLowerCase()] = value;
46
+ }
47
+ return bag;
48
+ } catch {
49
+ return;
50
+ }
51
+ }
52
+ function isHeadersLike(source) {
53
+ const candidate = source;
54
+ return 'function' == typeof candidate.entries && 'function' == typeof candidate.get;
55
+ }
56
+ exports.getRequestHeaders = __webpack_exports__.getRequestHeaders;
57
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
58
+ "getRequestHeaders"
59
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
60
+ Object.defineProperty(exports, '__esModule', {
61
+ value: true
62
+ });
@@ -0,0 +1,28 @@
1
+ function getRequestHeaders(extra) {
2
+ if (!extra || 'object' != typeof extra) return;
3
+ const record = extra;
4
+ const http = record.http;
5
+ const requestInfo = record.requestInfo;
6
+ const source = http?.req?.headers ?? requestInfo?.headers;
7
+ if (!source || 'object' != typeof source) return;
8
+ return toHeaderBag(source);
9
+ }
10
+ function toHeaderBag(source) {
11
+ try {
12
+ const entries = isHeadersLike(source) ? [
13
+ ...source.entries()
14
+ ] : Object.entries(source);
15
+ const bag = {};
16
+ for (const [key, value] of entries)if ('string' == typeof key && null != value) {
17
+ if ('string' == typeof value || Array.isArray(value)) bag[key.toLowerCase()] = value;
18
+ }
19
+ return bag;
20
+ } catch {
21
+ return;
22
+ }
23
+ }
24
+ function isHeadersLike(source) {
25
+ const candidate = source;
26
+ return 'function' == typeof candidate.entries && 'function' == typeof candidate.get;
27
+ }
28
+ export { getRequestHeaders };
@@ -1 +1 @@
1
- {"version":3,"file":"session-token.d.ts","sourceRoot":"","sources":["../../src/extensions/session-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,kBAAkB,mBAAmB,CAAA;AAElD,oCAAoC;AACpC,MAAM,WAAW,mBAAmB;IAClC,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAWD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAepE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAiC1E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgBzE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAsBpF"}
1
+ {"version":3,"file":"session-token.d.ts","sourceRoot":"","sources":["../../src/extensions/session-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,kBAAkB,mBAAmB,CAAA;AAElD,oCAAoC;AACpC,MAAM,WAAW,mBAAmB;IAClC,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAWD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAepE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAiC1E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEzE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAsBpF"}
@@ -24,12 +24,13 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- MCP_SESSION_HEADER: ()=>MCP_SESSION_HEADER,
28
27
  decodeSessionId: ()=>decodeSessionId,
28
+ writeSessionIdToTransport: ()=>writeSessionIdToTransport,
29
+ MCP_SESSION_HEADER: ()=>MCP_SESSION_HEADER,
29
30
  encodeSessionId: ()=>encodeSessionId,
30
- readMcpSessionHeader: ()=>readMcpSessionHeader,
31
- writeSessionIdToTransport: ()=>writeSessionIdToTransport
31
+ readMcpSessionHeader: ()=>readMcpSessionHeader
32
32
  });
33
+ const external_headers_js_namespaceObject = require("./headers.js");
33
34
  const MCP_SESSION_HEADER = 'mcp-session-id';
34
35
  const MAX_TOKEN_LENGTH = 4096;
35
36
  const MAX_SESSION_ID_LENGTH = 128;
@@ -66,17 +67,7 @@ function decodeSessionId(value) {
66
67
  return payload;
67
68
  }
68
69
  function readMcpSessionHeader(headers) {
69
- if (!headers || 'object' != typeof headers) return;
70
- const record = headers;
71
- let value = record[MCP_SESSION_HEADER];
72
- if (void 0 === value) {
73
- const key = Object.keys(record).find((k)=>k.toLowerCase() === MCP_SESSION_HEADER);
74
- value = void 0 === key ? void 0 : record[key];
75
- }
76
- const first = Array.isArray(value) ? value[0] : value;
77
- if ('string' != typeof first) return;
78
- const trimmed = first.trim();
79
- return trimmed.length > 0 ? trimmed : void 0;
70
+ return (0, external_headers_js_namespaceObject.readHeaderValue)(headers, MCP_SESSION_HEADER);
80
71
  }
81
72
  function writeSessionIdToTransport(transport, token) {
82
73
  if (!transport || 'object' != typeof transport) return false;
@@ -1,3 +1,4 @@
1
+ import { readHeaderValue } from "./headers.mjs";
1
2
  const MCP_SESSION_HEADER = 'mcp-session-id';
2
3
  const MAX_TOKEN_LENGTH = 4096;
3
4
  const MAX_SESSION_ID_LENGTH = 128;
@@ -34,17 +35,7 @@ function decodeSessionId(value) {
34
35
  return payload;
35
36
  }
36
37
  function readMcpSessionHeader(headers) {
37
- if (!headers || 'object' != typeof headers) return;
38
- const record = headers;
39
- let value = record[MCP_SESSION_HEADER];
40
- if (void 0 === value) {
41
- const key = Object.keys(record).find((k)=>k.toLowerCase() === MCP_SESSION_HEADER);
42
- value = void 0 === key ? void 0 : record[key];
43
- }
44
- const first = Array.isArray(value) ? value[0] : value;
45
- if ('string' != typeof first) return;
46
- const trimmed = first.trim();
47
- return trimmed.length > 0 ? trimmed : void 0;
38
+ return readHeaderValue(headers, MCP_SESSION_HEADER);
48
39
  }
49
40
  function writeSessionIdToTransport(transport, token) {
50
41
  if (!transport || 'object' != typeof transport) return false;
@@ -6,9 +6,10 @@ export declare function newSessionId(): string;
6
6
  */
7
7
  export declare function deriveSessionIdFromMCPSession(mcpSessionId: string): string;
8
8
  /**
9
- * Derives the SDK session id from the agent's conversation handle. Deterministic
10
- * and unsalted on purpose: two pods that never met must agree on the session, and
11
- * the 2026-07-28 revision leaves them no shared state to agree through.
9
+ * Derives the SDK session id from the agent's conversation handle (ADR-0004).
10
+ * Deterministic and unsalted on purpose: two pods that never met must agree on
11
+ * the session, and the 2026-07-28 revision leaves them no shared state to agree
12
+ * through.
12
13
  *
13
14
  * Hashed rather than used verbatim so an MCP session can never collide with a
14
15
  * Session Replay id — a bare uuidv7 would render a "View recording" button that
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/extensions/session.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,aAAa,EAEb,WAAW,EACZ,MAAM,UAAU,CAAA;AAOjB,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,+BAA+B,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,KAAK,CAAC,EAAE,6BAA6B,EACrC,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CA0CR;AA4ED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,SAAS,CAAC,EAAE,MAAM,GACjB,WAAW,CAmCb"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/extensions/session.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,aAAa,EAEb,WAAW,EACZ,MAAM,UAAU,CAAA;AAQjB,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,+BAA+B,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,KAAK,CAAC,EAAE,6BAA6B,EACrC,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAgCR;AAuED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,SAAS,CAAC,EAAE,MAAM,GACjB,WAAW,CAmCb"}
@@ -34,6 +34,7 @@ const external_version_js_namespaceObject = require("../version.js");
34
34
  const external_constants_js_namespaceObject = require("./constants.js");
35
35
  const external_ids_js_namespaceObject = require("./ids.js");
36
36
  const external_internal_js_namespaceObject = require("./internal.js");
37
+ const external_request_headers_js_namespaceObject = require("./request-headers.js");
37
38
  const external_session_token_js_namespaceObject = require("./session-token.js");
38
39
  function newSessionId() {
39
40
  return (0, external_ids_js_namespaceObject.newPrefixedId)('ses');
@@ -59,7 +60,7 @@ function getSessionId(server, extra, conversationId) {
59
60
  return sessionId;
60
61
  }
61
62
  function applyTokenClientIdentity(data, extra) {
62
- const token = (0, external_session_token_js_namespaceObject.decodeSessionId)((0, external_session_token_js_namespaceObject.readMcpSessionHeader)(extra?.requestInfo?.headers));
63
+ const token = (0, external_session_token_js_namespaceObject.decodeSessionId)((0, external_session_token_js_namespaceObject.readMcpSessionHeader)((0, external_request_headers_js_namespaceObject.getRequestHeaders)(extra)));
63
64
  if (!token) return;
64
65
  data.sessionInfo.clientName = token.clientName;
65
66
  data.sessionInfo.clientVersion = token.clientVersion;
@@ -2,6 +2,7 @@ import { version } from "../version.mjs";
2
2
  import { INACTIVITY_TIMEOUT_IN_MINUTES } from "./constants.mjs";
3
3
  import { deterministicPrefixedId, newPrefixedId } from "./ids.mjs";
4
4
  import { getServerTrackingData, setServerTrackingData } from "./internal.mjs";
5
+ import { getRequestHeaders } from "./request-headers.mjs";
5
6
  import { decodeSessionId, readMcpSessionHeader } from "./session-token.mjs";
6
7
  function newSessionId() {
7
8
  return newPrefixedId('ses');
@@ -27,7 +28,7 @@ function getSessionId(server, extra, conversationId) {
27
28
  return sessionId;
28
29
  }
29
30
  function applyTokenClientIdentity(data, extra) {
30
- const token = decodeSessionId(readMcpSessionHeader(extra?.requestInfo?.headers));
31
+ const token = decodeSessionId(readMcpSessionHeader(getRequestHeaders(extra)));
31
32
  if (!token) return;
32
33
  data.sessionInfo.clientName = token.clientName;
33
34
  data.sessionInfo.clientVersion = token.clientVersion;
@@ -24,9 +24,8 @@ export declare function processMcpEvent(event: McpEvent, options: McpCaptureOpti
24
24
  captures: PostHogCaptureEvent[];
25
25
  } | null>;
26
26
  /**
27
- * Wraps a user-supplied `posthog-node` client. Runs every MCP event through the
28
- * sanitize → truncate pipeline, fans it out into the `$mcp_*` / `$exception`
29
- * events, applies `beforeSend`, and hands each to `posthog.capture()`.
27
+ * Wraps a user-supplied `posthog-node` client: runs every MCP event through
28
+ * {@link processMcpEvent} and hands each surviving payload to `posthog.capture()`.
30
29
  *
31
30
  * The SDK does not own the client lifecycle — the host application constructs
32
31
  * the `PostHog` instance and is responsible for `shutdown()` (matching
@@ -37,9 +36,8 @@ export declare class McpEventSink {
37
36
  private readonly logger;
38
37
  constructor(posthog: PostHog, logger?: LoggerFn);
39
38
  /**
40
- * Push an MCP event through the pipeline (sanitize → truncate → fan out →
41
- * beforeSend → capture). Errors at any stage are logged and the event is
42
- * dropped, never re-thrown into tool code.
39
+ * Errors at any stage are logged and the event is dropped, never re-thrown
40
+ * into tool code.
43
41
  */
44
42
  capture(event: McpEvent, options: McpCaptureOptions): Promise<void>;
45
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sink.d.ts","sourceRoot":"","sources":["../../src/extensions/sink.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,KAAK,mBAAmB,EAA6B,MAAM,kBAAkB,CAAA;AAKtF,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,0BAA0B,EAAE,OAAO,CAAA;IACnC,kFAAkF;IAClF,UAAU,CAAC,EAAE,YAAY,CAAA;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,iBAAiB,EAC1B,MAAM,GAAE,QAAc,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CA2BnE;AA6BD;;;;;;;;GAQG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,QAAc;IAGzC;;;;OAIG;IACG,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAmC1E"}
1
+ {"version":3,"file":"sink.d.ts","sourceRoot":"","sources":["../../src/extensions/sink.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,KAAK,mBAAmB,EAA6B,MAAM,kBAAkB,CAAA;AAKtF,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,0BAA0B,EAAE,OAAO,CAAA;IACnC,kFAAkF;IAClF,UAAU,CAAC,EAAE,YAAY,CAAA;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,iBAAiB,EAC1B,MAAM,GAAE,QAAc,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CA2BnE;AA6BD;;;;;;;GAOG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,QAAc;IAGzC;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAmC1E"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/extensions/tools.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,oCAAoC,CAAA;AAC9F,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7C,eAAO,MAAM,mBAAmB,EAAG,gBAAyB,CAAA;AAE5D;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE;IAAE,yBAAyB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEzG;AAED,KAAK,2BAA2B,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,wBAAgB,8BAA8B,CAAC,IAAI,GAAE,MAA4B,GAAG,2BAA2B,CA6B9G;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,CASnD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,GAAE,QAAc,GAAG,cAAc,CAGrG"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/extensions/tools.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,oCAAoC,CAAA;AAC9F,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7C,eAAO,MAAM,mBAAmB,EAAG,gBAAyB,CAAA;AAE5D;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE;IAAE,yBAAyB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEzG;AAED,KAAK,2BAA2B,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,wBAAgB,8BAA8B,CAAC,IAAI,GAAE,MAA4B,GAAG,2BAA2B,CA0B9G;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,CASnD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,GAAE,QAAc,GAAG,cAAc,CAGrG"}