@posthog/mcp 0.11.0 → 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 (41) hide show
  1. package/README.md +39 -0
  2. package/dist/extensions/compatibility.d.ts.map +1 -1
  3. package/dist/extensions/compatibility.js +14 -18
  4. package/dist/extensions/compatibility.mjs +10 -14
  5. package/dist/extensions/detect.d.ts +45 -0
  6. package/dist/extensions/detect.d.ts.map +1 -0
  7. package/dist/extensions/detect.js +90 -0
  8. package/dist/extensions/detect.mjs +35 -0
  9. package/dist/extensions/instrumentation.d.ts.map +1 -1
  10. package/dist/extensions/instrumentation.js +3 -2
  11. package/dist/extensions/instrumentation.mjs +3 -2
  12. package/dist/extensions/request-headers.d.ts +36 -0
  13. package/dist/extensions/request-headers.d.ts.map +1 -0
  14. package/dist/extensions/request-headers.js +62 -0
  15. package/dist/extensions/request-headers.mjs +28 -0
  16. package/dist/extensions/session.d.ts.map +1 -1
  17. package/dist/extensions/session.js +2 -1
  18. package/dist/extensions/session.mjs +2 -1
  19. package/dist/extensions/transport-identity.d.ts +8 -3
  20. package/dist/extensions/transport-identity.d.ts.map +1 -1
  21. package/dist/extensions/transport-identity.js +2 -1
  22. package/dist/extensions/transport-identity.mjs +2 -1
  23. package/dist/index.d.ts +2 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +11 -7
  26. package/dist/index.mjs +2 -1
  27. package/dist/types.d.ts +19 -0
  28. package/dist/types.d.ts.map +1 -1
  29. package/dist/version.d.ts +1 -1
  30. package/dist/version.js +1 -1
  31. package/dist/version.mjs +1 -1
  32. package/package.json +2 -2
  33. package/src/extensions/compatibility.ts +25 -24
  34. package/src/extensions/detect.ts +78 -0
  35. package/src/extensions/instrumentation.ts +3 -2
  36. package/src/extensions/request-headers.ts +76 -0
  37. package/src/extensions/session.ts +2 -1
  38. package/src/extensions/transport-identity.ts +10 -4
  39. package/src/index.ts +4 -0
  40. package/src/types.ts +18 -0
  41. package/src/version.ts +1 -1
@@ -1,8 +1,9 @@
1
1
  import { readHeaderValue } from "./headers.mjs";
2
+ import { getRequestHeaders } from "./request-headers.mjs";
2
3
  const CLIENT_USER_AGENT_HEADER = 'user-agent';
3
4
  const VENDOR_CLIENT_HEADER = 'x-anthropic-client';
4
5
  function readTransportIdentity(extra) {
5
- const headers = extra?.requestInfo?.headers;
6
+ const headers = getRequestHeaders(extra);
6
7
  if (!headers) return;
7
8
  const result = {};
8
9
  const clientUserAgent = readHeaderValue(headers, CLIENT_USER_AGENT_HEADER);
package/dist/index.d.ts CHANGED
@@ -50,11 +50,12 @@ declare function instrumentMutator<TServer>(posthog: PostHog, options?: MCPAnaly
50
50
  export { deriveSessionIdFromMCPSession, newSessionId };
51
51
  export { MCP_SESSION_HEADER, decodeSessionId, encodeSessionId, type SessionTokenPayload, } from './extensions/session-token';
52
52
  export { POSTHOG_MCP_ANALYTICS_SOURCE, PostHogMCPAnalyticsEvent, PostHogMCPAnalyticsProperty, } from './extensions/constants';
53
+ export { getRequestHeaders } from './extensions/request-headers';
53
54
  export { PostHogMCP, type PostHogMCPOptions } from './extensions/posthog-mcp';
54
55
  export { getMoreToolsResult } from './extensions/tools';
55
56
  export { setLogger } from './extensions/logger';
56
57
  export { PostHog, type PostHogOptions } from 'posthog-node';
57
- export type { BeforeSendFn, CaptureEventData, InitializeCaptureData, McpAnalytics, McpCaptureCommon, MCPAnalyticsContextOptions, MCPAnalyticsIntentSource, MCPAnalyticsOptions, MissingCapabilityCaptureData, PreparedToolCall, PrepareToolListOptions, ToolCallCaptureData, ToolsListCaptureData, UserIdentity, } from './types';
58
+ export type { BeforeSendFn, CaptureEventData, InitializeCaptureData, McpAnalytics, McpCaptureCommon, MCPAnalyticsContextOptions, MCPAnalyticsIntentSource, MCPAnalyticsOptions, MissingCapabilityCaptureData, PreparedToolCall, PrepareToolListOptions, RequestHeaderBag, ToolCallCaptureData, ToolsListCaptureData, UserIdentity, } from './types';
58
59
  export type IdentifyFunction = MCPAnalyticsOptions['identify'];
59
60
  export { instrument, instrumentMutator };
60
61
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAQ3C,OAAO,EAAE,6BAA6B,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGlG,OAAO,KAAK,EAGV,YAAY,EAEZ,mBAAmB,EAGpB,MAAM,SAAS,CAAA;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAiCtG;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,iBAAS,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAKjH;AAuFD,OAAO,EAAE,6BAA6B,EAAE,YAAY,EAAE,CAAA;AAItD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAI/C,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC3D,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,4BAA4B,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,SAAS,CAAA;AAChB,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAQ3C,OAAO,EAAE,6BAA6B,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGlG,OAAO,KAAK,EAGV,YAAY,EAEZ,mBAAmB,EAGpB,MAAM,SAAS,CAAA;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAiCtG;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,iBAAS,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAKjH;AAuFD,OAAO,EAAE,6BAA6B,EAAE,YAAY,EAAE,CAAA;AAItD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAI/C,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC3D,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,4BAA4B,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,SAAS,CAAA;AAChB,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAA"}
package/dist/index.js CHANGED
@@ -24,20 +24,21 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- setLogger: ()=>logger_js_namespaceObject.setLogger,
28
27
  PostHog: ()=>external_posthog_node_namespaceObject.PostHog,
29
- PostHogMCP: ()=>posthog_mcp_js_namespaceObject.PostHogMCP,
30
28
  POSTHOG_MCP_ANALYTICS_SOURCE: ()=>constants_js_namespaceObject.POSTHOG_MCP_ANALYTICS_SOURCE,
31
29
  deriveSessionIdFromMCPSession: ()=>session_js_namespaceObject.deriveSessionIdFromMCPSession,
32
- instrument: ()=>instrument,
33
30
  decodeSessionId: ()=>session_token_js_namespaceObject.decodeSessionId,
34
- newSessionId: ()=>session_js_namespaceObject.newSessionId,
35
31
  MCP_SESSION_HEADER: ()=>session_token_js_namespaceObject.MCP_SESSION_HEADER,
36
- instrumentMutator: ()=>instrumentMutator,
37
32
  PostHogMCPAnalyticsEvent: ()=>constants_js_namespaceObject.PostHogMCPAnalyticsEvent,
33
+ getRequestHeaders: ()=>request_headers_js_namespaceObject.getRequestHeaders,
34
+ PostHogMCPAnalyticsProperty: ()=>constants_js_namespaceObject.PostHogMCPAnalyticsProperty,
35
+ PostHogMCP: ()=>posthog_mcp_js_namespaceObject.PostHogMCP,
36
+ newSessionId: ()=>session_js_namespaceObject.newSessionId,
37
+ instrument: ()=>instrument,
38
+ instrumentMutator: ()=>instrumentMutator,
39
+ setLogger: ()=>logger_js_namespaceObject.setLogger,
38
40
  encodeSessionId: ()=>session_token_js_namespaceObject.encodeSessionId,
39
- getMoreToolsResult: ()=>tools_js_namespaceObject.getMoreToolsResult,
40
- PostHogMCPAnalyticsProperty: ()=>constants_js_namespaceObject.PostHogMCPAnalyticsProperty
41
+ getMoreToolsResult: ()=>tools_js_namespaceObject.getMoreToolsResult
41
42
  });
42
43
  const compatibility_js_namespaceObject = require("./extensions/compatibility.js");
43
44
  const sink_js_namespaceObject = require("./extensions/sink.js");
@@ -51,6 +52,7 @@ const instrument_lowlevel_js_namespaceObject = require("./extensions/instrument-
51
52
  const instrument_highlevel_js_namespaceObject = require("./extensions/instrument-highlevel.js");
52
53
  const session_token_js_namespaceObject = require("./extensions/session-token.js");
53
54
  const constants_js_namespaceObject = require("./extensions/constants.js");
55
+ const request_headers_js_namespaceObject = require("./extensions/request-headers.js");
54
56
  const posthog_mcp_js_namespaceObject = require("./extensions/posthog-mcp.js");
55
57
  const tools_js_namespaceObject = require("./extensions/tools.js");
56
58
  const external_posthog_node_namespaceObject = require("posthog-node");
@@ -150,6 +152,7 @@ exports.decodeSessionId = __webpack_exports__.decodeSessionId;
150
152
  exports.deriveSessionIdFromMCPSession = __webpack_exports__.deriveSessionIdFromMCPSession;
151
153
  exports.encodeSessionId = __webpack_exports__.encodeSessionId;
152
154
  exports.getMoreToolsResult = __webpack_exports__.getMoreToolsResult;
155
+ exports.getRequestHeaders = __webpack_exports__.getRequestHeaders;
153
156
  exports.instrument = __webpack_exports__.instrument;
154
157
  exports.instrumentMutator = __webpack_exports__.instrumentMutator;
155
158
  exports.newSessionId = __webpack_exports__.newSessionId;
@@ -165,6 +168,7 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
165
168
  "deriveSessionIdFromMCPSession",
166
169
  "encodeSessionId",
167
170
  "getMoreToolsResult",
171
+ "getRequestHeaders",
168
172
  "instrument",
169
173
  "instrumentMutator",
170
174
  "newSessionId",
package/dist/index.mjs CHANGED
@@ -10,6 +10,7 @@ import { instrumentLowLevelServer } from "./extensions/instrument-lowlevel.mjs";
10
10
  import { instrumentHighLevelServer } from "./extensions/instrument-highlevel.mjs";
11
11
  import { MCP_SESSION_HEADER, decodeSessionId, encodeSessionId } from "./extensions/session-token.mjs";
12
12
  import { POSTHOG_MCP_ANALYTICS_SOURCE, PostHogMCPAnalyticsEvent, PostHogMCPAnalyticsProperty } from "./extensions/constants.mjs";
13
+ import { getRequestHeaders } from "./extensions/request-headers.mjs";
13
14
  import { PostHogMCP } from "./extensions/posthog-mcp.mjs";
14
15
  import { getMoreToolsResult } from "./extensions/tools.mjs";
15
16
  import { PostHog } from "posthog-node";
@@ -99,4 +100,4 @@ async function captureCustomEvent(lowLevelServer, eventData) {
99
100
  await captureEvent(lowLevelServer, event, trackingData.logger);
100
101
  trackingData.logger(`Captured event "${eventData.event}" for session ${trackingData.sessionId}`);
101
102
  }
102
- export { MCP_SESSION_HEADER, POSTHOG_MCP_ANALYTICS_SOURCE, PostHog, PostHogMCP, PostHogMCPAnalyticsEvent, PostHogMCPAnalyticsProperty, decodeSessionId, deriveSessionIdFromMCPSession, encodeSessionId, getMoreToolsResult, instrument, instrumentMutator, newSessionId, setLogger };
103
+ export { MCP_SESSION_HEADER, POSTHOG_MCP_ANALYTICS_SOURCE, PostHog, PostHogMCP, PostHogMCPAnalyticsEvent, PostHogMCPAnalyticsProperty, decodeSessionId, deriveSessionIdFromMCPSession, encodeSessionId, getMoreToolsResult, getRequestHeaders, instrument, instrumentMutator, newSessionId, setLogger };
package/dist/types.d.ts CHANGED
@@ -199,13 +199,32 @@ export interface CompatibleRequestInfoLike {
199
199
  headers?: Record<string, string | string[] | undefined>;
200
200
  [key: string]: unknown;
201
201
  }
202
+ /**
203
+ * The HTTP request an MCP SDK v2 server attaches to the handler context, as a
204
+ * WHATWG `Request` — so `headers` answers to `.get()`, not to indexing.
205
+ */
206
+ export interface CompatibleHttpRequestLike {
207
+ req?: {
208
+ headers?: unknown;
209
+ [key: string]: unknown;
210
+ };
211
+ [key: string]: unknown;
212
+ }
202
213
  export interface CompatibleRequestHandlerExtra {
203
214
  headers?: Record<string, string | string[]>;
204
215
  sessionId?: string;
205
216
  /** Present on HTTP transports only — headers ride every request, unlike `clientInfo`. */
206
217
  requestInfo?: CompatibleRequestInfoLike;
218
+ /** Where MCP SDK v2 puts the same thing. Read both through `getRequestHeaders`. */
219
+ http?: CompatibleHttpRequestLike;
207
220
  [key: string]: unknown;
208
221
  }
222
+ /**
223
+ * HTTP headers normalised to lowercase keys, as `getRequestHeaders` returns
224
+ * them — a plain bag, so a host's existing `headers['authorization']` keeps
225
+ * working when only the source of the headers changes.
226
+ */
227
+ export type RequestHeaderBag = Record<string, string | string[]>;
209
228
  export interface ServerClientInfoLike {
210
229
  name?: string;
211
230
  version?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "0.11.0";
1
+ export declare const version = "0.11.1";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -26,7 +26,7 @@ __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
27
  version: ()=>version
28
28
  });
29
- const version = '0.11.0';
29
+ const version = '0.11.1';
30
30
  exports.version = __webpack_exports__.version;
31
31
  for(var __webpack_i__ in __webpack_exports__)if (-1 === [
32
32
  "version"
package/dist/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- const version = '0.11.0';
1
+ const version = '0.11.1';
2
2
  export { version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@posthog/mcp",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
4
4
  "bugs": {
5
5
  "url": "https://github.com/PostHog/posthog-js/issues"
6
6
  },
@@ -28,7 +28,7 @@
28
28
  "module": "dist/index.mjs",
29
29
  "types": "dist/index.d.ts",
30
30
  "dependencies": {
31
- "@posthog/core": "^1.46.9"
31
+ "@posthog/core": "^1.47.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@babel/preset-env": "^7.27.1",
@@ -4,6 +4,16 @@
4
4
  // Licensed under the MIT License: https://github.com/agentcathq/agentcat-typescript-sdk/blob/main/LICENSE
5
5
 
6
6
  import type { HighLevelMCPServerLike, MCPServerLike } from '../types'
7
+ import {
8
+ canRegisterTools,
9
+ canSetRequestHandler,
10
+ hasClientVersionAccessor,
11
+ hasNestedLowLevelServer,
12
+ hasRequestHandlerMap,
13
+ hasServerInfo,
14
+ hasToolRegistry,
15
+ isBareServerShape,
16
+ } from './detect'
7
17
  import type { LoggerFn } from './logger'
8
18
 
9
19
  type ServerRecord = Record<string, unknown>
@@ -28,13 +38,11 @@ export function logCompatibilityWarning(logger: LoggerFn): void {
28
38
  }
29
39
 
30
40
  export function isHighLevelServer(server: unknown): server is ServerRecord & { server: ServerRecord } {
31
- return (
32
- !!server && typeof server === 'object' && 'server' in server && !!server.server && typeof server.server === 'object'
33
- )
41
+ return hasNestedLowLevelServer(server)
34
42
  }
35
43
 
36
44
  export function isLowLevelServer(server: unknown): server is ServerRecord {
37
- return !!server && typeof server === 'object' && !('server' in server)
45
+ return isBareServerShape(server)
38
46
  }
39
47
 
40
48
  export function isCompatibleServerType(server: unknown, logger: LoggerFn): MCPServerLike | HighLevelMCPServerLike {
@@ -46,16 +54,20 @@ export function isCompatibleServerType(server: unknown, logger: LoggerFn): MCPSe
46
54
  }
47
55
 
48
56
  if (isHighLevelServer(server)) {
49
- if (!server._registeredTools || typeof server._registeredTools !== 'object') {
57
+ if (!hasToolRegistry(server)) {
50
58
  logCompatibilityWarning(logger)
51
59
  throw new Error(
52
60
  'PostHog MCP analytics SDK compatibility error: High-level server must have _registeredTools object. This requires MCP SDK v1.11 or higher.'
53
61
  )
54
62
  }
55
- if (typeof server.tool !== 'function') {
63
+ // Either registration method is enough. v1 has both; v2 dropped the
64
+ // deprecated tool() and kept registerTool(). Demanding tool() rejected every
65
+ // v2 high-level server, and instrument() swallows the rejection — so the
66
+ // integration looked healthy and captured nothing.
67
+ if (!canRegisterTools(server)) {
56
68
  logCompatibilityWarning(logger)
57
69
  throw new Error(
58
- 'PostHog MCP analytics SDK compatibility error: High-level server must have tool() method. This requires MCP SDK v1.11 or higher.'
70
+ 'PostHog MCP analytics SDK compatibility error: High-level server must have a registerTool() or tool() method. This requires MCP SDK v1.11 or higher.'
59
71
  )
60
72
  }
61
73
 
@@ -76,41 +88,30 @@ function validateLowLevelServer(server: unknown, logger: LoggerFn): void {
76
88
  )
77
89
  }
78
90
 
79
- const serverRecord = server as ServerRecord
80
-
81
- if (typeof serverRecord.setRequestHandler !== 'function') {
91
+ if (!canSetRequestHandler(server)) {
82
92
  logCompatibilityWarning(logger)
83
93
  throw new Error(
84
94
  'PostHog MCP analytics SDK compatibility error: Server must have a setRequestHandler method. This requires MCP SDK v1.11 or higher.'
85
95
  )
86
96
  }
87
97
 
88
- if (!(serverRecord._requestHandlers && serverRecord._requestHandlers instanceof Map)) {
98
+ // A real Map with a working get(), which is what the handler patch reads and
99
+ // writes. Both majors keep it.
100
+ if (!hasRequestHandlerMap(server)) {
89
101
  logCompatibilityWarning(logger)
90
102
  throw new Error(
91
103
  'PostHog MCP analytics SDK compatibility error: Server._requestHandlers is not accessible. This requires MCP SDK v1.11 or higher.'
92
104
  )
93
105
  }
94
106
 
95
- if (typeof serverRecord._requestHandlers.get !== 'function') {
96
- logCompatibilityWarning(logger)
97
- throw new Error(
98
- 'PostHog MCP analytics SDK compatibility error: Server._requestHandlers must be a Map with a get method. This requires MCP SDK v1.11 or higher.'
99
- )
100
- }
101
-
102
- if (typeof serverRecord.getClientVersion !== 'function') {
107
+ if (!hasClientVersionAccessor(server)) {
103
108
  logCompatibilityWarning(logger)
104
109
  throw new Error(
105
110
  'PostHog MCP analytics SDK compatibility error: Server.getClientVersion must be a function. This requires MCP SDK v1.11 or higher.'
106
111
  )
107
112
  }
108
113
 
109
- if (
110
- !serverRecord._serverInfo ||
111
- typeof serverRecord._serverInfo !== 'object' ||
112
- !('name' in serverRecord._serverInfo)
113
- ) {
114
+ if (!hasServerInfo(server)) {
114
115
  logCompatibilityWarning(logger)
115
116
  throw new Error(
116
117
  'PostHog MCP analytics SDK compatibility error: Server._serverInfo is not accessible or missing name. This requires MCP SDK v1.11 or higher.'
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Structural feature probes.
3
+ *
4
+ * Every question about the shape of a server object is answered here, by
5
+ * duck-typing the object in front of us — never by reading a package version or
6
+ * a protocol constant. Two reasons this is a rule and not a preference:
7
+ *
8
+ * - The two SDK majors expose the same capability under different names (v1's
9
+ * `.tool()` vs v2's `.registerTool()`), so "which SDK is installed" answers a
10
+ * different question than "can this object register a tool".
11
+ * - A single v2 server serves both protocol eras, request by request, so no
12
+ * module-level constant describes it. v2's exported `LATEST_PROTOCOL_VERSION`
13
+ * is `2025-11-25`.
14
+ *
15
+ * Nothing here imports `@modelcontextprotocol/*`; that boundary is pinned by
16
+ * `sdk-import-boundary.test.ts`.
17
+ */
18
+
19
+ type UnknownRecord = Record<string, unknown>
20
+
21
+ function asRecord(value: unknown): UnknownRecord | undefined {
22
+ return value && typeof value === 'object' ? (value as UnknownRecord) : undefined
23
+ }
24
+
25
+ function hasMethod(value: unknown, key: string): boolean {
26
+ return typeof asRecord(value)?.[key] === 'function'
27
+ }
28
+
29
+ /** A high-level `McpServer` wrapper: it holds the low-level server on `.server`. */
30
+ export function hasNestedLowLevelServer(server: unknown): server is UnknownRecord & { server: UnknownRecord } {
31
+ const record = asRecord(server)
32
+ return !!record && 'server' in record && !!asRecord(record.server)
33
+ }
34
+
35
+ /** No `.server` property, so the object is itself the low-level `Server`. */
36
+ export function isBareServerShape(server: unknown): boolean {
37
+ const record = asRecord(server)
38
+ return !!record && !('server' in record)
39
+ }
40
+
41
+ /** The high-level registry we read tool metadata from and wrap callbacks in. */
42
+ export function hasToolRegistry(server: unknown): boolean {
43
+ return !!asRecord(asRecord(server)?._registeredTools)
44
+ }
45
+
46
+ /**
47
+ * The object can register a tool.
48
+ *
49
+ * v1 offers both `tool()` and `registerTool()`; v2 dropped the deprecated
50
+ * `tool()` and keeps only `registerTool()`. Requiring `tool()` specifically is
51
+ * what made `instrument()` reject every v2 high-level server — and, because
52
+ * `instrument()` swallows compatibility errors, reject it silently.
53
+ */
54
+ export function canRegisterTools(server: unknown): boolean {
55
+ return hasMethod(server, 'registerTool') || hasMethod(server, 'tool')
56
+ }
57
+
58
+ /** Handler registration, which we patch to wrap late registrations. */
59
+ export function canSetRequestHandler(server: unknown): boolean {
60
+ return hasMethod(server, 'setRequestHandler')
61
+ }
62
+
63
+ /** The live handler map we read and write directly. A real `Map` on both majors. */
64
+ export function hasRequestHandlerMap(server: unknown): boolean {
65
+ const handlers = asRecord(server)?._requestHandlers
66
+ return handlers instanceof Map && typeof handlers.get === 'function'
67
+ }
68
+
69
+ /** `getClientVersion()` — still present on v2, and a link in B1's identity chain. */
70
+ export function hasClientVersionAccessor(server: unknown): boolean {
71
+ return hasMethod(server, 'getClientVersion')
72
+ }
73
+
74
+ /** `_serverInfo`, which names the server on every event. */
75
+ export function hasServerInfo(server: unknown): boolean {
76
+ const info = asRecord(asRecord(server)?._serverInfo)
77
+ return !!info && 'name' in info
78
+ }
@@ -34,6 +34,7 @@ import { getServerTrackingData, handleIdentify, setServerTrackingData, withIdent
34
34
  import type { LoggerFn } from './logger'
35
35
  import { buildCapturedMcpParameters } from './mcp-payloads'
36
36
  import { readRequestHandlerMethod } from './mcp-sdk-compat'
37
+ import { getRequestHeaders } from './request-headers'
37
38
  import { getSessionId, getSessionInfo, newSessionId } from './session'
38
39
  import { encodeSessionId, readMcpSessionHeader, writeSessionIdToTransport } from './session-token'
39
40
  import { getReportMissingToolDescriptor, resolveMissingCapabilityToolName } from './tools'
@@ -688,8 +689,8 @@ function mintStatelessSessionOnInitialize(
688
689
  extra: CompatibleRequestHandlerExtra | undefined
689
690
  ): string | undefined {
690
691
  try {
691
- const headers = extra?.requestInfo?.headers
692
- if (!headers || typeof headers !== 'object') {
692
+ const headers = getRequestHeaders(extra)
693
+ if (!headers) {
693
694
  return undefined // not an HTTP transport (stdio/in-memory) — nothing to mint into
694
695
  }
695
696
  if (readMcpSessionHeader(headers)) {
@@ -0,0 +1,76 @@
1
+ import type { RequestHeaderBag } from '../types'
2
+
3
+ /**
4
+ * Reads the HTTP request headers off the `extra` (v1) / `ctx` (v2) object the
5
+ * MCP SDK hands a request handler, and returns them as a plain object with
6
+ * lowercase keys. Returns `undefined` when the request did not come over HTTP —
7
+ * stdio and in-memory transports carry no headers at all.
8
+ *
9
+ * The two SDK majors put them in different places and in different shapes: v1
10
+ * attaches a plain object at `extra.requestInfo.headers`, while v2 attaches the
11
+ * WHATWG `Request` at `ctx.http.req`, whose `headers` is a `Headers` instance
12
+ * that only answers to `.get()`. A v1-shaped read returns `undefined` on v2,
13
+ * which is why this exists.
14
+ *
15
+ * Normalisation is **by shape, not by source**: a framework is free to hand us a
16
+ * plain object where the SDK hands `Headers`, so both fields are checked for
17
+ * both shapes. `Headers` is duck-typed on `.entries` rather than `instanceof` —
18
+ * workerd and other edge runtimes are a different realm and would fail the
19
+ * identity check on a perfectly good object.
20
+ *
21
+ * Exported from the package for host callbacks. `identify`, `intentFallback`,
22
+ * `eventProperties` and `beforeSend` receive the SDK's `extra` unchanged — we
23
+ * deliberately do not synthesise a v1 shape on v2, because a fabricated
24
+ * `requestInfo` is a convincing partial lie about a shape the SDK removed on
25
+ * purpose. So a host that reads headers reads them through this instead:
26
+ *
27
+ * ```ts
28
+ * import { getRequestHeaders } from '@posthog/mcp'
29
+ *
30
+ * identify: async (request, extra) => {
31
+ * const auth = getRequestHeaders(extra)?.['authorization']
32
+ * // ...
33
+ * }
34
+ * ```
35
+ */
36
+ export function getRequestHeaders(extra: unknown): RequestHeaderBag | undefined {
37
+ if (!extra || typeof extra !== 'object') {
38
+ return undefined
39
+ }
40
+ const record = extra as Record<string, unknown>
41
+ const http = record.http as { req?: { headers?: unknown } } | undefined
42
+ const requestInfo = record.requestInfo as { headers?: unknown } | undefined
43
+ const source = http?.req?.headers ?? requestInfo?.headers
44
+ if (!source || typeof source !== 'object') {
45
+ return undefined
46
+ }
47
+ return toHeaderBag(source)
48
+ }
49
+
50
+ /**
51
+ * Flattens either shape into a lowercase-keyed bag. Never throws: a header read
52
+ * failing must not take a tool call down with it.
53
+ */
54
+ function toHeaderBag(source: object): RequestHeaderBag | undefined {
55
+ try {
56
+ const entries = isHeadersLike(source) ? [...source.entries()] : Object.entries(source)
57
+ const bag: RequestHeaderBag = {}
58
+ for (const [key, value] of entries) {
59
+ if (typeof key !== 'string' || value === undefined || value === null) {
60
+ continue
61
+ }
62
+ if (typeof value === 'string' || Array.isArray(value)) {
63
+ bag[key.toLowerCase()] = value as string | string[]
64
+ }
65
+ }
66
+ return bag
67
+ } catch {
68
+ return undefined
69
+ }
70
+ }
71
+
72
+ /** Duck-typed, never `instanceof` — an edge runtime's `Headers` is another realm's class. */
73
+ function isHeadersLike(source: object): source is { entries(): Iterable<[string, string]> } {
74
+ const candidate = source as { entries?: unknown; get?: unknown }
75
+ return typeof candidate.entries === 'function' && typeof candidate.get === 'function'
76
+ }
@@ -14,6 +14,7 @@ import type {
14
14
  import { INACTIVITY_TIMEOUT_IN_MINUTES } from './constants'
15
15
  import { deterministicPrefixedId, newPrefixedId } from './ids'
16
16
  import { getServerTrackingData, setServerTrackingData } from './internal'
17
+ import { getRequestHeaders } from './request-headers'
17
18
  import { decodeSessionId, readMcpSessionHeader } from './session-token'
18
19
  import type { SessionTokenPayload } from './session-token'
19
20
 
@@ -110,7 +111,7 @@ function applyTokenClientIdentity(
110
111
  data: MCPAnalyticsData,
111
112
  extra?: CompatibleRequestHandlerExtra
112
113
  ): SessionTokenPayload | undefined {
113
- const token = decodeSessionId(readMcpSessionHeader(extra?.requestInfo?.headers))
114
+ const token = decodeSessionId(readMcpSessionHeader(getRequestHeaders(extra)))
114
115
  if (!token) {
115
116
  return undefined
116
117
  }
@@ -1,5 +1,6 @@
1
1
  import type { CompatibleRequestHandlerExtra, McpEvent } from '../types'
2
2
  import { readHeaderValue } from './headers'
3
+ import { getRequestHeaders } from './request-headers'
3
4
 
4
5
  /**
5
6
  * Transport-level client identity: the two request headers that say *which
@@ -43,12 +44,17 @@ export interface TransportIdentity {
43
44
  }
44
45
 
45
46
  /**
46
- * Reads the transport identity headers off `extra.requestInfo.headers`. Returns
47
- * `undefined` when the request carries neither — including every stdio and
48
- * in-memory request, which has no `requestInfo` at all. Never throws.
47
+ * Reads the transport identity headers off the request. Returns `undefined`
48
+ * when the request carries neither — including every stdio and in-memory
49
+ * request, which has no HTTP headers at all. Never throws.
50
+ *
51
+ * Sourced through `getRequestHeaders` rather than `extra.requestInfo.headers`
52
+ * directly: MCP SDK v2 puts the request at `extra.http.req` as a WHATWG
53
+ * `Request`, so a v1-shaped read finds nothing and this whole feature would be
54
+ * silently inert on exactly the servers being adopted now.
49
55
  */
50
56
  export function readTransportIdentity(extra: CompatibleRequestHandlerExtra | undefined): TransportIdentity | undefined {
51
- const headers = extra?.requestInfo?.headers
57
+ const headers = getRequestHeaders(extra)
52
58
  if (!headers) {
53
59
  return undefined
54
60
  }
package/src/index.ts CHANGED
@@ -210,6 +210,9 @@ export {
210
210
  PostHogMCPAnalyticsEvent,
211
211
  PostHogMCPAnalyticsProperty,
212
212
  } from './extensions/constants'
213
+ // Host callbacks receive the SDK's `extra`/`ctx` unchanged, and the two SDK
214
+ // majors carry HTTP headers in different places and shapes. This reads either.
215
+ export { getRequestHeaders } from './extensions/request-headers'
213
216
  export { PostHogMCP, type PostHogMCPOptions } from './extensions/posthog-mcp'
214
217
  export { getMoreToolsResult } from './extensions/tools'
215
218
  export { setLogger } from './extensions/logger'
@@ -229,6 +232,7 @@ export type {
229
232
  MissingCapabilityCaptureData,
230
233
  PreparedToolCall,
231
234
  PrepareToolListOptions,
235
+ RequestHeaderBag,
232
236
  ToolCallCaptureData,
233
237
  ToolsListCaptureData,
234
238
  UserIdentity,
package/src/types.ts CHANGED
@@ -225,14 +225,32 @@ export interface CompatibleRequestInfoLike {
225
225
  [key: string]: unknown
226
226
  }
227
227
 
228
+ /**
229
+ * The HTTP request an MCP SDK v2 server attaches to the handler context, as a
230
+ * WHATWG `Request` — so `headers` answers to `.get()`, not to indexing.
231
+ */
232
+ export interface CompatibleHttpRequestLike {
233
+ req?: { headers?: unknown; [key: string]: unknown }
234
+ [key: string]: unknown
235
+ }
236
+
228
237
  export interface CompatibleRequestHandlerExtra {
229
238
  headers?: Record<string, string | string[]>
230
239
  sessionId?: string
231
240
  /** Present on HTTP transports only — headers ride every request, unlike `clientInfo`. */
232
241
  requestInfo?: CompatibleRequestInfoLike
242
+ /** Where MCP SDK v2 puts the same thing. Read both through `getRequestHeaders`. */
243
+ http?: CompatibleHttpRequestLike
233
244
  [key: string]: unknown
234
245
  }
235
246
 
247
+ /**
248
+ * HTTP headers normalised to lowercase keys, as `getRequestHeaders` returns
249
+ * them — a plain bag, so a host's existing `headers['authorization']` keeps
250
+ * working when only the source of the headers changes.
251
+ */
252
+ export type RequestHeaderBag = Record<string, string | string[]>
253
+
236
254
  export interface ServerClientInfoLike {
237
255
  name?: string
238
256
  version?: string
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '0.11.0'
1
+ export const version = '0.11.1'