@posthog/mcp 0.11.0 → 0.11.2

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 (55) hide show
  1. package/README.md +39 -0
  2. package/dist/extensions/client-identity.d.ts +70 -15
  3. package/dist/extensions/client-identity.d.ts.map +1 -1
  4. package/dist/extensions/client-identity.js +72 -17
  5. package/dist/extensions/client-identity.mjs +59 -13
  6. package/dist/extensions/compatibility.d.ts.map +1 -1
  7. package/dist/extensions/compatibility.js +14 -18
  8. package/dist/extensions/compatibility.mjs +10 -14
  9. package/dist/extensions/detect.d.ts +51 -0
  10. package/dist/extensions/detect.d.ts.map +1 -0
  11. package/dist/extensions/detect.js +96 -0
  12. package/dist/extensions/detect.mjs +38 -0
  13. package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
  14. package/dist/extensions/instrumentation.d.ts +4 -5
  15. package/dist/extensions/instrumentation.d.ts.map +1 -1
  16. package/dist/extensions/instrumentation.js +6 -5
  17. package/dist/extensions/instrumentation.mjs +7 -6
  18. package/dist/extensions/internal.js +1 -1
  19. package/dist/extensions/internal.mjs +2 -2
  20. package/dist/extensions/request-headers.d.ts +36 -0
  21. package/dist/extensions/request-headers.d.ts.map +1 -0
  22. package/dist/extensions/request-headers.js +62 -0
  23. package/dist/extensions/request-headers.mjs +28 -0
  24. package/dist/extensions/session.d.ts.map +1 -1
  25. package/dist/extensions/session.js +2 -1
  26. package/dist/extensions/session.mjs +2 -1
  27. package/dist/extensions/tools.d.ts +4 -4
  28. package/dist/extensions/tools.d.ts.map +1 -1
  29. package/dist/extensions/transport-identity.d.ts +8 -3
  30. package/dist/extensions/transport-identity.d.ts.map +1 -1
  31. package/dist/extensions/transport-identity.js +2 -1
  32. package/dist/extensions/transport-identity.mjs +2 -1
  33. package/dist/index.d.ts +2 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +11 -7
  36. package/dist/index.mjs +2 -1
  37. package/dist/types.d.ts +77 -2
  38. package/dist/types.d.ts.map +1 -1
  39. package/dist/version.d.ts +1 -1
  40. package/dist/version.js +1 -1
  41. package/dist/version.mjs +1 -1
  42. package/package.json +12 -2
  43. package/src/extensions/client-identity.ts +146 -31
  44. package/src/extensions/compatibility.ts +25 -24
  45. package/src/extensions/detect.ts +87 -0
  46. package/src/extensions/instrument-highlevel.ts +4 -4
  47. package/src/extensions/instrumentation.ts +22 -15
  48. package/src/extensions/internal.ts +2 -2
  49. package/src/extensions/request-headers.ts +76 -0
  50. package/src/extensions/session.ts +2 -1
  51. package/src/extensions/tools.ts +4 -4
  52. package/src/extensions/transport-identity.ts +10 -4
  53. package/src/index.ts +4 -0
  54. package/src/types.ts +78 -3
  55. package/src/version.ts +1 -1
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
@@ -1,5 +1,5 @@
1
- import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
1
  import type { ErrorTracking } from '@posthog/core';
2
+ import type { AnalyticsInjectableJsonSchema } from './extensions/analytics-parameters';
3
3
  import type { MCPAnalyticsEventType } from './extensions/event-types';
4
4
  import type { IdentityCache } from './extensions/internal';
5
5
  import type { PostHogCaptureEvent } from './extensions/posthog-events';
@@ -10,6 +10,53 @@ export type JsonRecord = Record<string, unknown>;
10
10
  export type ErrorProperties = ErrorTracking.ErrorProperties;
11
11
  /** A single parsed stack frame. Re-exported from `@posthog/core`. */
12
12
  export type StackFrame = ErrorTracking.StackFrame;
13
+ /**
14
+ * The MCP wire shapes we touch, declared structurally rather than imported from
15
+ * `@modelcontextprotocol/sdk`.
16
+ *
17
+ * Both SDK majors are **optional** peers — a v2-only consumer has no v1 SDK
18
+ * installed — so a type import of it in shipped `.d.ts` output is a `TS2307`
19
+ * for anyone type-checking without `skipLibCheck`. These are deliberately loose
20
+ * (open-ended, everything optional): they describe what we *read* off an SDK
21
+ * result, and an SDK-typed value assigns to them cleanly. What we hand back to
22
+ * the SDK is typed precisely instead — see {@link CompatibleTextToolResult}.
23
+ */
24
+ export interface CompatibleToolResultLike {
25
+ content?: unknown[];
26
+ structuredContent?: JsonRecord;
27
+ isError?: boolean;
28
+ _meta?: JsonRecord;
29
+ [key: string]: unknown;
30
+ }
31
+ /** One entry of a `tools/list` response, as we read it. */
32
+ export interface CompatibleToolDescriptorLike {
33
+ name: string;
34
+ title?: string;
35
+ description?: string;
36
+ /** The advertised JSON Schema, as the analytics parameters are injected into it. */
37
+ inputSchema?: AnalyticsInjectableJsonSchema;
38
+ outputSchema?: unknown;
39
+ _meta?: JsonRecord;
40
+ [key: string]: unknown;
41
+ }
42
+ /** A `tools/list` response, as we read it. */
43
+ export interface CompatibleToolsListLike {
44
+ tools: CompatibleToolDescriptorLike[];
45
+ nextCursor?: string;
46
+ [key: string]: unknown;
47
+ }
48
+ /**
49
+ * A text-only tool result *we* construct and a host may hand straight back to
50
+ * the SDK. Typed precisely, not loosely, so it stays assignable to the SDK's own
51
+ * `CallToolResult` — the direction that would silently break callers.
52
+ */
53
+ export interface CompatibleTextToolResult {
54
+ content: {
55
+ type: 'text';
56
+ text: string;
57
+ }[];
58
+ isError?: boolean;
59
+ }
13
60
  export interface MCPRequestParamsLike {
14
61
  arguments?: JsonRecord;
15
62
  name?: string;
@@ -104,7 +151,7 @@ export interface MCPAnalyticsContextOptions {
104
151
  }
105
152
  export type MaybePromise<T> = T | Promise<T>;
106
153
  export type MCPAnalyticsIntentSource = 'context_parameter' | 'inferred';
107
- export type ToolCallback = ((args: unknown, extra: CompatibleRequestHandlerExtra) => CallToolResult | Promise<CallToolResult>) | ((extra: CompatibleRequestHandlerExtra) => CallToolResult | Promise<CallToolResult>);
154
+ export type ToolCallback = ((args: unknown, extra: CompatibleRequestHandlerExtra) => CompatibleToolResultLike | Promise<CompatibleToolResultLike>) | ((extra: CompatibleRequestHandlerExtra) => CompatibleToolResultLike | Promise<CompatibleToolResultLike>);
108
155
  export type RegisteredTool = {
109
156
  description?: string;
110
157
  /** MCP tool `_meta` block (spec-allowed arbitrary metadata, e.g. `category`). */
@@ -199,13 +246,41 @@ export interface CompatibleRequestInfoLike {
199
246
  headers?: Record<string, string | string[] | undefined>;
200
247
  [key: string]: unknown;
201
248
  }
249
+ /**
250
+ * The HTTP request an MCP SDK v2 server attaches to the handler context, as a
251
+ * WHATWG `Request` — so `headers` answers to `.get()`, not to indexing.
252
+ */
253
+ export interface CompatibleHttpRequestLike {
254
+ req?: {
255
+ headers?: unknown;
256
+ [key: string]: unknown;
257
+ };
258
+ [key: string]: unknown;
259
+ }
202
260
  export interface CompatibleRequestHandlerExtra {
203
261
  headers?: Record<string, string | string[]>;
204
262
  sessionId?: string;
205
263
  /** Present on HTTP transports only — headers ride every request, unlike `clientInfo`. */
206
264
  requestInfo?: CompatibleRequestInfoLike;
265
+ /** Where MCP SDK v2 puts the same thing. Read both through `getRequestHeaders`. */
266
+ http?: CompatibleHttpRequestLike;
267
+ /**
268
+ * MCP SDK v2's parsed request. It lifts the reserved `io.modelcontextprotocol/*`
269
+ * keys out of `params._meta` into `envelope`, so client identity is here rather
270
+ * than on the request by the time a handler runs.
271
+ */
272
+ mcpReq?: {
273
+ envelope?: Record<string, unknown>;
274
+ [key: string]: unknown;
275
+ };
207
276
  [key: string]: unknown;
208
277
  }
278
+ /**
279
+ * HTTP headers normalised to lowercase keys, as `getRequestHeaders` returns
280
+ * them — a plain bag, so a host's existing `headers['authorization']` keeps
281
+ * working when only the source of the headers changes.
282
+ */
283
+ export type RequestHeaderBag = Record<string, string | string[]>;
209
284
  export interface ServerClientInfoLike {
210
285
  name?: string;
211
286
  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.2";
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.2';
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.2';
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.2",
4
4
  "bugs": {
5
5
  "url": "https://github.com/PostHog/posthog-js/issues"
6
6
  },
@@ -28,12 +28,13 @@
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",
35
35
  "@babel/preset-typescript": "^7.27.1",
36
36
  "@modelcontextprotocol/sdk": "~1.29.0",
37
+ "@modelcontextprotocol/server": "~2.0.0",
37
38
  "@rslib/core": "0.10.6",
38
39
  "@types/jest": "^29.5.14",
39
40
  "@types/node": "^20.0.0",
@@ -44,8 +45,17 @@
44
45
  },
45
46
  "peerDependencies": {
46
47
  "@modelcontextprotocol/sdk": ">=1.26.0",
48
+ "@modelcontextprotocol/server": ">=2.0.0",
47
49
  "posthog-node": "^5.0.0"
48
50
  },
51
+ "peerDependenciesMeta": {
52
+ "@modelcontextprotocol/sdk": {
53
+ "optional": true
54
+ },
55
+ "@modelcontextprotocol/server": {
56
+ "optional": true
57
+ }
58
+ },
49
59
  "keywords": [
50
60
  "posthog",
51
61
  "mcp",
@@ -1,14 +1,26 @@
1
- import type { McpEvent, MCPRequestLike } from '../types'
1
+ import type { CompatibleRequestHandlerExtra, McpEvent, MCPRequestLike, MCPServerLike } from '../types'
2
+ import { hasClientVersionAccessor, hasNegotiatedProtocolVersionAccessor } from './detect'
2
3
 
3
4
  /**
4
- * Client identity under the MCP 2026-07-28 (stateless) revision.
5
+ * Client identity — who is calling, and which spec revision they speak.
5
6
  *
6
- * That revision removes the `initialize` handshake and the `Mcp-Session-Id`
7
- * header (SEP-2575 / SEP-2567). Client name/version and the protocol version no
8
- * longer arrive once at `initialize` — they travel in every request's
9
- * `params._meta` under these reverse-DNS keys. We mirror the literal key strings
10
- * here rather than depend on the (still beta) v2 SDK, which is not a dependency
11
- * of this package.
7
+ * Where it lives depends on the revision the *request* declares, so this is a
8
+ * fallback chain and never a branch: one server serves both eras, request by
9
+ * request.
10
+ *
11
+ * 1. `ctx.mcpReq.envelope` — MCP SDK v2 lifts the reserved
12
+ * `io.modelcontextprotocol/*` keys out of `_meta` before dispatch, so by
13
+ * the time a handler runs they are here and `params._meta` is empty.
14
+ * 2. `request.params._meta` — where 2026-07-28 puts them on the wire, and
15
+ * where they still are on any server that does not lift them.
16
+ * 3. the server's own accessors — `getClientVersion()` from a legacy
17
+ * `initialize` handshake, `getNegotiatedProtocolVersion()` on v2.
18
+ *
19
+ * The 2026-07-28 revision removed the `initialize` handshake and the
20
+ * `Mcp-Session-Id` header (SEP-2575 / SEP-2567), so client name/version and the
21
+ * protocol version no longer arrive once per connection — they travel with
22
+ * every request. The key strings are mirrored here rather than imported,
23
+ * because no `@modelcontextprotocol/*` package is a dependency of this one.
12
24
  */
13
25
  export const META_CLIENT_INFO_KEY = 'io.modelcontextprotocol/clientInfo'
14
26
  export const META_PROTOCOL_VERSION_KEY = 'io.modelcontextprotocol/protocolVersion'
@@ -19,53 +31,156 @@ export interface MetaClientInfo {
19
31
  protocolVersion?: string
20
32
  }
21
33
 
34
+ /** Everything a request can be asked about who is calling. */
35
+ export interface ClientIdentitySources {
36
+ request: MCPRequestLike
37
+ extra?: CompatibleRequestHandlerExtra
38
+ /**
39
+ * Typed `unknown` on purpose: every accessor on it is reached through a
40
+ * structural probe, never a declared type, because the two SDK majors expose
41
+ * different ones. Call sites pass a real `MCPServerLike`; the shape checks
42
+ * here are what decide whether it can answer.
43
+ */
44
+ server?: unknown
45
+ }
46
+
47
+ type UnknownRecord = Record<string, unknown>
48
+
49
+ function nonEmptyString(value: unknown): string | undefined {
50
+ return typeof value === 'string' && value.length > 0 ? value : undefined
51
+ }
52
+
53
+ /** Pulls `{ name, version }` out of a reserved-key value, whatever carried it. */
54
+ function readClientInfoValue(value: unknown): MetaClientInfo | undefined {
55
+ if (!value || typeof value !== 'object') {
56
+ return undefined
57
+ }
58
+ const { name, version } = value as UnknownRecord
59
+ const result: MetaClientInfo = {}
60
+ const clientName = nonEmptyString(name)
61
+ const clientVersion = nonEmptyString(version)
62
+ if (clientName) {
63
+ result.clientName = clientName
64
+ }
65
+ if (clientVersion) {
66
+ result.clientVersion = clientVersion
67
+ }
68
+ return result.clientName || result.clientVersion ? result : undefined
69
+ }
70
+
71
+ function readReservedKeys(bag: unknown): MetaClientInfo | undefined {
72
+ if (!bag || typeof bag !== 'object') {
73
+ return undefined
74
+ }
75
+ const record = bag as UnknownRecord
76
+ const result: MetaClientInfo = { ...readClientInfoValue(record[META_CLIENT_INFO_KEY]) }
77
+ const protocolVersion = nonEmptyString(record[META_PROTOCOL_VERSION_KEY])
78
+ if (protocolVersion) {
79
+ result.protocolVersion = protocolVersion
80
+ }
81
+ return result.clientName || result.clientVersion || result.protocolVersion ? result : undefined
82
+ }
83
+
22
84
  /**
23
85
  * Reads the client name/version and protocol version a modern client puts in
24
86
  * `params._meta`. Returns `undefined` when the request carries none (e.g. a
25
87
  * legacy client, which sends this on `initialize` instead). Never throws.
26
88
  */
27
89
  export function readMetaClientInfo(request: MCPRequestLike): MetaClientInfo | undefined {
28
- const meta = request.params?._meta
29
- if (!meta || typeof meta !== 'object') {
90
+ return readReservedKeys(request.params?._meta)
91
+ }
92
+
93
+ /**
94
+ * Reads the same keys from MCP SDK v2's request envelope. v2 strips the reserved
95
+ * `io.modelcontextprotocol/*` keys from `_meta` while parsing, so on exactly the
96
+ * traffic this matters for, `readMetaClientInfo` finds nothing and this finds
97
+ * everything.
98
+ */
99
+ export function readEnvelopeClientInfo(extra: CompatibleRequestHandlerExtra | undefined): MetaClientInfo | undefined {
100
+ return readReservedKeys((extra as { mcpReq?: { envelope?: unknown } } | undefined)?.mcpReq?.envelope)
101
+ }
102
+
103
+ /**
104
+ * Asks the server itself. `getClientVersion()` answers on any server that
105
+ * handled an `initialize` (and v2 hosts such as `createMcpHandler` backfill it
106
+ * from the envelope); `getNegotiatedProtocolVersion()` exists on v2 only, which
107
+ * is why it is a link in the chain rather than a branch. Never throws — a
108
+ * server that dislikes being asked must not fail the tool call.
109
+ */
110
+ export function readServerClientIdentity(server: unknown): MetaClientInfo | undefined {
111
+ if (!server) {
30
112
  return undefined
31
113
  }
32
- const record = meta as Record<string, unknown>
33
114
  const result: MetaClientInfo = {}
34
-
35
- const clientInfo = record[META_CLIENT_INFO_KEY]
36
- if (clientInfo && typeof clientInfo === 'object') {
37
- const { name, version } = clientInfo as Record<string, unknown>
38
- if (typeof name === 'string' && name.length > 0) {
39
- result.clientName = name
115
+ try {
116
+ if (hasClientVersionAccessor(server)) {
117
+ Object.assign(result, readClientInfoValue((server as MCPServerLike).getClientVersion()))
40
118
  }
41
- if (typeof version === 'string' && version.length > 0) {
42
- result.clientVersion = version
119
+ if (hasNegotiatedProtocolVersionAccessor(server)) {
120
+ const negotiated = (
121
+ server as unknown as { getNegotiatedProtocolVersion(): unknown }
122
+ ).getNegotiatedProtocolVersion()
123
+ const protocolVersion = nonEmptyString(negotiated)
124
+ if (protocolVersion) {
125
+ result.protocolVersion = protocolVersion
126
+ }
43
127
  }
128
+ } catch {
129
+ // fall through to whatever was read before the accessor objected
44
130
  }
131
+ return result.clientName || result.clientVersion || result.protocolVersion ? result : undefined
132
+ }
45
133
 
46
- const protocolVersion = record[META_PROTOCOL_VERSION_KEY]
47
- if (typeof protocolVersion === 'string' && protocolVersion.length > 0) {
48
- result.protocolVersion = protocolVersion
134
+ /**
135
+ * Resolves client identity through the whole chain, field by field: the first
136
+ * source that answers a field wins, and a source that answers nothing simply
137
+ * does not participate. Field-by-field rather than source-by-source because a
138
+ * request may carry its protocol version in the envelope while the client's
139
+ * name is only known to the server from a handshake.
140
+ *
141
+ * The first three links are **per request**, so they cannot describe anyone but
142
+ * the caller. Only the last — the server's own accessors — is connection-scoped,
143
+ * and on a server that multiplexes several clients through one connection it
144
+ * answers for whichever client completed the handshake. That is the best answer
145
+ * available on that connection, and it is the same scope `capture.ts` has always
146
+ * fallen back to (`eventInput.clientName ?? sessionInfo.clientName`), so the
147
+ * chain neither introduces that sharing nor widens it. Ordering it last is what
148
+ * keeps it a fallback: any request that identifies itself wins outright.
149
+ */
150
+ export function resolveClientIdentity({ request, extra, server }: ClientIdentitySources): MetaClientInfo | undefined {
151
+ const chain = [readEnvelopeClientInfo(extra), readMetaClientInfo(request), readServerClientIdentity(server)]
152
+ const result: MetaClientInfo = {}
153
+ for (const source of chain) {
154
+ if (!source) {
155
+ continue
156
+ }
157
+ result.clientName ??= source.clientName
158
+ result.clientVersion ??= source.clientVersion
159
+ result.protocolVersion ??= source.protocolVersion
49
160
  }
50
-
51
161
  return result.clientName || result.clientVersion || result.protocolVersion ? result : undefined
52
162
  }
53
163
 
54
164
  /**
55
- * Stamps any client identity found in `params._meta` directly onto the event
56
- * being built for *this* request, so it carries `$mcp_client_name`,
57
- * `$mcp_client_version`, and `$mcp_protocol_version` even when there was no
58
- * `initialize` to learn them from (the modern stateless case).
165
+ * Stamps whatever the chain resolved onto the event being built for *this*
166
+ * request, so it carries `$mcp_client_name`, `$mcp_client_version` and
167
+ * `$mcp_protocol_version` even when there was no `initialize` to learn them
168
+ * from (the modern stateless case).
59
169
  *
60
170
  * Writing to the event — a per-request object — rather than the server-wide
61
171
  * `sessionInfo` keeps identity correct when one instrumented server multiplexes
62
172
  * concurrent requests from different clients (which the stateless spec allows):
63
173
  * a sibling request can't clobber this event's attribution between now and when
64
- * it's captured. Only fields the request actually carries are set, so a request
65
- * without `_meta` leaves the event's existing values untouched.
174
+ * it's captured. Only fields actually resolved are set, so a request that
175
+ * carries nothing leaves the event's existing values untouched.
66
176
  */
67
- export function stampMetaClientInfo(event: McpEvent, request: MCPRequestLike): void {
68
- const info = readMetaClientInfo(request)
177
+ export function stampClientIdentity(
178
+ event: McpEvent,
179
+ request: MCPRequestLike,
180
+ extra?: CompatibleRequestHandlerExtra,
181
+ server?: MCPServerLike
182
+ ): void {
183
+ const info = resolveClientIdentity({ request, extra, server })
69
184
  if (!info) {
70
185
  return
71
186
  }
@@ -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.'