@posthog/mcp 0.0.8 → 0.1.16

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 (138) hide show
  1. package/LICENSE +307 -2
  2. package/README.md +186 -93
  3. package/dist/extensions/capture.d.ts +13 -0
  4. package/dist/extensions/capture.d.ts.map +1 -0
  5. package/dist/extensions/capture.js +80 -0
  6. package/dist/extensions/capture.mjs +46 -0
  7. package/dist/extensions/compatibility.d.ts +23 -0
  8. package/dist/extensions/compatibility.d.ts.map +1 -0
  9. package/dist/extensions/compatibility.js +113 -0
  10. package/dist/extensions/compatibility.mjs +67 -0
  11. package/dist/extensions/constants.d.ts +39 -0
  12. package/dist/extensions/constants.d.ts.map +1 -0
  13. package/dist/extensions/constants.js +86 -0
  14. package/dist/extensions/constants.mjs +37 -0
  15. package/dist/extensions/context-parameters.d.ts +31 -0
  16. package/dist/extensions/context-parameters.d.ts.map +1 -0
  17. package/dist/extensions/context-parameters.js +93 -0
  18. package/dist/extensions/context-parameters.mjs +50 -0
  19. package/dist/extensions/conversation-id.d.ts +52 -0
  20. package/dist/extensions/conversation-id.d.ts.map +1 -0
  21. package/dist/extensions/conversation-id.js +164 -0
  22. package/dist/extensions/conversation-id.mjs +103 -0
  23. package/dist/extensions/event-types.d.ts +21 -0
  24. package/dist/extensions/event-types.d.ts.map +1 -0
  25. package/dist/extensions/event-types.js +47 -0
  26. package/dist/extensions/event-types.mjs +13 -0
  27. package/dist/extensions/exceptions.d.ts +13 -0
  28. package/dist/extensions/exceptions.d.ts.map +1 -0
  29. package/dist/extensions/exceptions.js +58 -0
  30. package/dist/extensions/exceptions.mjs +24 -0
  31. package/dist/extensions/ids.d.ts +13 -0
  32. package/dist/extensions/ids.d.ts.map +1 -0
  33. package/dist/extensions/ids.js +55 -0
  34. package/dist/extensions/ids.mjs +18 -0
  35. package/dist/extensions/instrument-highlevel.d.ts +3 -0
  36. package/dist/extensions/instrument-highlevel.d.ts.map +1 -0
  37. package/dist/extensions/instrument-highlevel.js +229 -0
  38. package/dist/extensions/instrument-highlevel.mjs +195 -0
  39. package/dist/extensions/instrument-lowlevel.d.ts +8 -0
  40. package/dist/extensions/instrument-lowlevel.d.ts.map +1 -0
  41. package/dist/extensions/instrument-lowlevel.js +85 -0
  42. package/dist/extensions/instrument-lowlevel.mjs +51 -0
  43. package/dist/extensions/instrumentation.d.ts +59 -0
  44. package/dist/extensions/instrumentation.d.ts.map +1 -0
  45. package/dist/extensions/instrumentation.js +237 -0
  46. package/dist/extensions/instrumentation.mjs +194 -0
  47. package/dist/extensions/intent.d.ts +10 -0
  48. package/dist/extensions/intent.d.ts.map +1 -0
  49. package/dist/extensions/intent.js +84 -0
  50. package/dist/extensions/intent.mjs +44 -0
  51. package/dist/extensions/internal.d.ts +32 -0
  52. package/dist/extensions/internal.d.ts.map +1 -0
  53. package/dist/extensions/internal.js +158 -0
  54. package/dist/extensions/internal.mjs +106 -0
  55. package/dist/extensions/logger.d.ts +14 -0
  56. package/dist/extensions/logger.d.ts.map +1 -0
  57. package/dist/extensions/logger.js +47 -0
  58. package/dist/extensions/logger.mjs +10 -0
  59. package/dist/extensions/mcp-payloads.d.ts +5 -0
  60. package/dist/extensions/mcp-payloads.d.ts.map +1 -0
  61. package/dist/extensions/mcp-payloads.js +91 -0
  62. package/dist/extensions/mcp-payloads.mjs +54 -0
  63. package/dist/extensions/mcp-sdk-compat.d.ts +33 -0
  64. package/dist/extensions/mcp-sdk-compat.d.ts.map +1 -0
  65. package/dist/extensions/mcp-sdk-compat.js +112 -0
  66. package/dist/extensions/mcp-sdk-compat.mjs +60 -0
  67. package/dist/extensions/posthog-events.d.ts +14 -0
  68. package/dist/extensions/posthog-events.d.ts.map +1 -0
  69. package/dist/extensions/posthog-events.js +143 -0
  70. package/dist/extensions/posthog-events.mjs +109 -0
  71. package/dist/extensions/sanitization.d.ts +10 -0
  72. package/dist/extensions/sanitization.d.ts.map +1 -0
  73. package/dist/extensions/sanitization.js +96 -0
  74. package/dist/extensions/sanitization.mjs +62 -0
  75. package/dist/extensions/session.d.ts +20 -0
  76. package/dist/extensions/session.d.ts.map +1 -0
  77. package/dist/extensions/session.js +113 -0
  78. package/dist/extensions/session.mjs +67 -0
  79. package/dist/extensions/sink.d.ts +44 -0
  80. package/dist/extensions/sink.d.ts.map +1 -0
  81. package/dist/extensions/sink.js +102 -0
  82. package/dist/extensions/sink.mjs +65 -0
  83. package/dist/extensions/tools.d.ts +9 -0
  84. package/dist/extensions/tools.d.ts.map +1 -0
  85. package/dist/extensions/tools.js +79 -0
  86. package/dist/extensions/tools.mjs +39 -0
  87. package/dist/extensions/tracing-helpers.d.ts +29 -0
  88. package/dist/extensions/tracing-helpers.d.ts.map +1 -0
  89. package/dist/extensions/tracing-helpers.js +59 -0
  90. package/dist/extensions/tracing-helpers.mjs +16 -0
  91. package/dist/extensions/truncation.d.ts +25 -0
  92. package/dist/extensions/truncation.d.ts.map +1 -0
  93. package/dist/extensions/truncation.js +277 -0
  94. package/dist/extensions/truncation.mjs +228 -0
  95. package/dist/index.d.ts +36 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +132 -0
  98. package/dist/index.mjs +83 -2928
  99. package/dist/types.d.ts +220 -0
  100. package/dist/types.d.ts.map +1 -0
  101. package/dist/types.js +18 -0
  102. package/dist/types.mjs +0 -0
  103. package/dist/version.d.ts +2 -0
  104. package/dist/version.d.ts.map +1 -0
  105. package/dist/version.js +36 -0
  106. package/dist/version.mjs +2 -0
  107. package/package.json +55 -87
  108. package/src/extensions/capture.ts +68 -0
  109. package/src/extensions/compatibility.ts +138 -0
  110. package/src/extensions/constants.ts +48 -0
  111. package/src/extensions/context-parameters.ts +119 -0
  112. package/src/extensions/conversation-id.ts +177 -0
  113. package/src/extensions/event-types.ts +21 -0
  114. package/src/extensions/exceptions.ts +83 -0
  115. package/src/extensions/ids.ts +32 -0
  116. package/src/extensions/instrument-highlevel.ts +297 -0
  117. package/src/extensions/instrument-lowlevel.ts +83 -0
  118. package/src/extensions/instrumentation.ts +415 -0
  119. package/src/extensions/intent.ts +78 -0
  120. package/src/extensions/internal.ts +193 -0
  121. package/src/extensions/logger.ts +27 -0
  122. package/src/extensions/mcp-payloads.ts +98 -0
  123. package/src/extensions/mcp-sdk-compat.ts +160 -0
  124. package/src/extensions/posthog-events.ts +212 -0
  125. package/src/extensions/sanitization.ts +121 -0
  126. package/src/extensions/session.ts +117 -0
  127. package/src/extensions/sink.ts +130 -0
  128. package/src/extensions/tools.ts +50 -0
  129. package/src/extensions/tracing-helpers.ts +51 -0
  130. package/src/extensions/truncation.ts +453 -0
  131. package/src/index.ts +174 -0
  132. package/src/types.ts +244 -0
  133. package/src/version.ts +1 -0
  134. package/dist/index.cjs +0 -2936
  135. package/dist/index.cjs.map +0 -1
  136. package/dist/index.d.cts +0 -264
  137. package/dist/index.d.mts +0 -263
  138. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,158 @@
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
+ mergeIdentities: ()=>mergeIdentities,
28
+ areIdentitiesEqual: ()=>areIdentitiesEqual,
29
+ resolveEventProperties: ()=>resolveEventProperties,
30
+ handleIdentify: ()=>handleIdentify,
31
+ getServerTrackingData: ()=>getServerTrackingData,
32
+ IdentityCache: ()=>IdentityCache,
33
+ setServerTrackingData: ()=>setServerTrackingData
34
+ });
35
+ const external_event_types_js_namespaceObject = require("./event-types.js");
36
+ const external_logger_js_namespaceObject = require("./logger.js");
37
+ const external_capture_js_namespaceObject = require("./capture.js");
38
+ class IdentityCache {
39
+ constructor(maxSize = 1000){
40
+ this._cache = new Map();
41
+ this._maxSize = maxSize;
42
+ }
43
+ get(sessionId) {
44
+ const identity = this._cache.get(sessionId);
45
+ if (void 0 === identity) return;
46
+ this._cache.delete(sessionId);
47
+ this._cache.set(sessionId, identity);
48
+ return identity;
49
+ }
50
+ set(sessionId, identity) {
51
+ this._cache.delete(sessionId);
52
+ if (this._cache.size >= this._maxSize) {
53
+ const oldestKey = this._cache.keys().next().value;
54
+ if (void 0 !== oldestKey) this._cache.delete(oldestKey);
55
+ }
56
+ this._cache.set(sessionId, identity);
57
+ }
58
+ has(sessionId) {
59
+ return this._cache.has(sessionId);
60
+ }
61
+ size() {
62
+ return this._cache.size;
63
+ }
64
+ }
65
+ const _serverTracking = new WeakMap();
66
+ function getServerTrackingData(server) {
67
+ return _serverTracking.get(server);
68
+ }
69
+ function setServerTrackingData(server, data) {
70
+ _serverTracking.set(server, data);
71
+ }
72
+ function areIdentitiesEqual(a, b) {
73
+ if (a.distinctId !== b.distinctId) return false;
74
+ if (JSON.stringify(a.groups ?? {}) !== JSON.stringify(b.groups ?? {})) return false;
75
+ const aProps = a.properties || {};
76
+ const bProps = b.properties || {};
77
+ const aKeys = Object.keys(aProps);
78
+ const bKeys = Object.keys(bProps);
79
+ if (aKeys.length !== bKeys.length) return false;
80
+ for (const key of aKeys){
81
+ if (!(key in bProps)) return false;
82
+ if (JSON.stringify(aProps[key]) !== JSON.stringify(bProps[key])) return false;
83
+ }
84
+ return true;
85
+ }
86
+ function mergeIdentities(previous, next) {
87
+ if (!previous) return next;
88
+ return {
89
+ distinctId: next.distinctId,
90
+ properties: {
91
+ ...previous.properties || {},
92
+ ...next.properties || {}
93
+ },
94
+ groups: next.groups ?? previous.groups
95
+ };
96
+ }
97
+ async function handleIdentify(server, data, sessionId, request, extra) {
98
+ if (!data.options.identify) return;
99
+ const identifyEvent = {
100
+ sessionId,
101
+ resourceName: getRequestResourceName(request),
102
+ eventType: external_event_types_js_namespaceObject.MCPAnalyticsEventType.identify,
103
+ parameters: {
104
+ request,
105
+ extra
106
+ },
107
+ timestamp: new Date()
108
+ };
109
+ try {
110
+ const identityResult = 'function' == typeof data.options.identify ? await data.options.identify(request, extra) : data.options.identify;
111
+ if (identityResult) {
112
+ const previousIdentity = data.identifiedSessions.get(sessionId);
113
+ const mergedIdentity = mergeIdentities(previousIdentity, identityResult);
114
+ const hasChanged = !(previousIdentity && areIdentitiesEqual(previousIdentity, mergedIdentity));
115
+ data.identifiedSessions.set(sessionId, mergedIdentity);
116
+ if (hasChanged) {
117
+ (0, external_logger_js_namespaceObject.log)(`Identified session ${sessionId} with identity: ${JSON.stringify(mergedIdentity)}`);
118
+ (0, external_capture_js_namespaceObject.captureEvent)(server, identifyEvent);
119
+ }
120
+ } else (0, external_logger_js_namespaceObject.log)(`Warning: Supplied identify function returned null for session ${sessionId}`);
121
+ } catch (error) {
122
+ (0, external_logger_js_namespaceObject.log)(`Error: User supplied identify function threw an error while identifying session ${sessionId} - ${error}`);
123
+ }
124
+ }
125
+ async function resolveEventProperties(data, request, extra) {
126
+ if (!data.options.eventProperties) return null;
127
+ try {
128
+ return await data.options.eventProperties(request, extra) ?? null;
129
+ } catch (e) {
130
+ (0, external_logger_js_namespaceObject.log)(`eventProperties callback error: ${e}`);
131
+ return null;
132
+ }
133
+ }
134
+ function getRequestResourceName(request) {
135
+ if (!request || 'object' != typeof request || !('params' in request)) return 'Unknown';
136
+ const params = request.params;
137
+ if (!params || 'object' != typeof params || !('name' in params)) return 'Unknown';
138
+ return 'string' == typeof params.name ? params.name : 'Unknown';
139
+ }
140
+ exports.IdentityCache = __webpack_exports__.IdentityCache;
141
+ exports.areIdentitiesEqual = __webpack_exports__.areIdentitiesEqual;
142
+ exports.getServerTrackingData = __webpack_exports__.getServerTrackingData;
143
+ exports.handleIdentify = __webpack_exports__.handleIdentify;
144
+ exports.mergeIdentities = __webpack_exports__.mergeIdentities;
145
+ exports.resolveEventProperties = __webpack_exports__.resolveEventProperties;
146
+ exports.setServerTrackingData = __webpack_exports__.setServerTrackingData;
147
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
148
+ "IdentityCache",
149
+ "areIdentitiesEqual",
150
+ "getServerTrackingData",
151
+ "handleIdentify",
152
+ "mergeIdentities",
153
+ "resolveEventProperties",
154
+ "setServerTrackingData"
155
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
156
+ Object.defineProperty(exports, '__esModule', {
157
+ value: true
158
+ });
@@ -0,0 +1,106 @@
1
+ import { MCPAnalyticsEventType } from "./event-types.mjs";
2
+ import { log } from "./logger.mjs";
3
+ import { captureEvent } from "./capture.mjs";
4
+ class IdentityCache {
5
+ constructor(maxSize = 1000){
6
+ this._cache = new Map();
7
+ this._maxSize = maxSize;
8
+ }
9
+ get(sessionId) {
10
+ const identity = this._cache.get(sessionId);
11
+ if (void 0 === identity) return;
12
+ this._cache.delete(sessionId);
13
+ this._cache.set(sessionId, identity);
14
+ return identity;
15
+ }
16
+ set(sessionId, identity) {
17
+ this._cache.delete(sessionId);
18
+ if (this._cache.size >= this._maxSize) {
19
+ const oldestKey = this._cache.keys().next().value;
20
+ if (void 0 !== oldestKey) this._cache.delete(oldestKey);
21
+ }
22
+ this._cache.set(sessionId, identity);
23
+ }
24
+ has(sessionId) {
25
+ return this._cache.has(sessionId);
26
+ }
27
+ size() {
28
+ return this._cache.size;
29
+ }
30
+ }
31
+ const _serverTracking = new WeakMap();
32
+ function getServerTrackingData(server) {
33
+ return _serverTracking.get(server);
34
+ }
35
+ function setServerTrackingData(server, data) {
36
+ _serverTracking.set(server, data);
37
+ }
38
+ function areIdentitiesEqual(a, b) {
39
+ if (a.distinctId !== b.distinctId) return false;
40
+ if (JSON.stringify(a.groups ?? {}) !== JSON.stringify(b.groups ?? {})) return false;
41
+ const aProps = a.properties || {};
42
+ const bProps = b.properties || {};
43
+ const aKeys = Object.keys(aProps);
44
+ const bKeys = Object.keys(bProps);
45
+ if (aKeys.length !== bKeys.length) return false;
46
+ for (const key of aKeys){
47
+ if (!(key in bProps)) return false;
48
+ if (JSON.stringify(aProps[key]) !== JSON.stringify(bProps[key])) return false;
49
+ }
50
+ return true;
51
+ }
52
+ function mergeIdentities(previous, next) {
53
+ if (!previous) return next;
54
+ return {
55
+ distinctId: next.distinctId,
56
+ properties: {
57
+ ...previous.properties || {},
58
+ ...next.properties || {}
59
+ },
60
+ groups: next.groups ?? previous.groups
61
+ };
62
+ }
63
+ async function handleIdentify(server, data, sessionId, request, extra) {
64
+ if (!data.options.identify) return;
65
+ const identifyEvent = {
66
+ sessionId,
67
+ resourceName: getRequestResourceName(request),
68
+ eventType: MCPAnalyticsEventType.identify,
69
+ parameters: {
70
+ request,
71
+ extra
72
+ },
73
+ timestamp: new Date()
74
+ };
75
+ try {
76
+ const identityResult = 'function' == typeof data.options.identify ? await data.options.identify(request, extra) : data.options.identify;
77
+ if (identityResult) {
78
+ const previousIdentity = data.identifiedSessions.get(sessionId);
79
+ const mergedIdentity = mergeIdentities(previousIdentity, identityResult);
80
+ const hasChanged = !(previousIdentity && areIdentitiesEqual(previousIdentity, mergedIdentity));
81
+ data.identifiedSessions.set(sessionId, mergedIdentity);
82
+ if (hasChanged) {
83
+ log(`Identified session ${sessionId} with identity: ${JSON.stringify(mergedIdentity)}`);
84
+ captureEvent(server, identifyEvent);
85
+ }
86
+ } else log(`Warning: Supplied identify function returned null for session ${sessionId}`);
87
+ } catch (error) {
88
+ log(`Error: User supplied identify function threw an error while identifying session ${sessionId} - ${error}`);
89
+ }
90
+ }
91
+ async function resolveEventProperties(data, request, extra) {
92
+ if (!data.options.eventProperties) return null;
93
+ try {
94
+ return await data.options.eventProperties(request, extra) ?? null;
95
+ } catch (e) {
96
+ log(`eventProperties callback error: ${e}`);
97
+ return null;
98
+ }
99
+ }
100
+ function getRequestResourceName(request) {
101
+ if (!request || 'object' != typeof request || !('params' in request)) return 'Unknown';
102
+ const params = request.params;
103
+ if (!params || 'object' != typeof params || !('name' in params)) return 'Unknown';
104
+ return 'string' == typeof params.name ? params.name : 'Unknown';
105
+ }
106
+ export { IdentityCache, areIdentitiesEqual, getServerTrackingData, handleIdentify, mergeIdentities, resolveEventProperties, setServerTrackingData };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * STDIO-safe logger.
3
+ *
4
+ * MCP servers running over the STDIO transport use stdout/stderr to exchange
5
+ * protocol messages, so we cannot use the default `console.log`. We accept a
6
+ * `logger` option on the public API; when omitted, log calls are silently
7
+ * dropped. Errors that affect tracking should still be observable in apps that
8
+ * want them, so the consumer can plug in any function (e.g. `console.error`
9
+ * for non-STDIO transports, a file logger, etc.).
10
+ */
11
+ export type LoggerFn = (message: string) => void;
12
+ export declare function setLogger(logger: LoggerFn | undefined): void;
13
+ export declare function log(message: string): void;
14
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/extensions/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;AAIhD,wBAAgB,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAE5D;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAQzC"}
@@ -0,0 +1,47 @@
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
+ log: ()=>log,
28
+ setLogger: ()=>setLogger
29
+ });
30
+ let activeLogger;
31
+ function setLogger(logger) {
32
+ activeLogger = logger;
33
+ }
34
+ function log(message) {
35
+ if (activeLogger) try {
36
+ activeLogger(message);
37
+ } catch {}
38
+ }
39
+ exports.log = __webpack_exports__.log;
40
+ exports.setLogger = __webpack_exports__.setLogger;
41
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
42
+ "log",
43
+ "setLogger"
44
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
45
+ Object.defineProperty(exports, '__esModule', {
46
+ value: true
47
+ });
@@ -0,0 +1,10 @@
1
+ let activeLogger;
2
+ function setLogger(logger) {
3
+ activeLogger = logger;
4
+ }
5
+ function log(message) {
6
+ if (activeLogger) try {
7
+ activeLogger(message);
8
+ } catch {}
9
+ }
10
+ export { log, setLogger };
@@ -0,0 +1,5 @@
1
+ type JsonRecord = Record<string, unknown>;
2
+ export declare function sanitizeCapturedValue(value: unknown): unknown;
3
+ export declare function buildCapturedMcpParameters(request: unknown): JsonRecord;
4
+ export {};
5
+ //# sourceMappingURL=mcp-payloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-payloads.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-payloads.ts"],"names":[],"mappings":"AAQA,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAiBzC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA0B7D;AA6BD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAiBvE"}
@@ -0,0 +1,91 @@
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
+ buildCapturedMcpParameters: ()=>buildCapturedMcpParameters,
28
+ sanitizeCapturedValue: ()=>sanitizeCapturedValue
29
+ });
30
+ const CONTEXT_ARGUMENT_NAME = 'context';
31
+ const REDACTED_VALUE = '[redacted]';
32
+ const BASE64_PATTERN = /^[A-Za-z0-9+/\n\r]+=*$/;
33
+ const SIZE_GATE = 10240;
34
+ const POSTHOG_TOKEN_PATTERN = /\bph[a-z]_[A-Za-z0-9_-]{20,}\b/g;
35
+ const SENSITIVE_KEY_PATTERN = /^(authorization|cookie|set-cookie|x-api-key|api[-_]?key|api[-_]?token|access[-_]?token|refresh[-_]?token|token|password|secret|client[-_]?secret|private[-_]?key)$/i;
36
+ function isRecord(value) {
37
+ return !!value && 'object' == typeof value && !Array.isArray(value);
38
+ }
39
+ function shouldRedactKey(key) {
40
+ return SENSITIVE_KEY_PATTERN.test(key);
41
+ }
42
+ function sanitizeString(value) {
43
+ if (value.length >= SIZE_GATE && BASE64_PATTERN.test(value)) return '[binary data redacted - not supported by PostHog MCP analytics]';
44
+ return value.replace(POSTHOG_TOKEN_PATTERN, REDACTED_VALUE);
45
+ }
46
+ function sanitizeCapturedValue(value) {
47
+ if (null == value) return value;
48
+ if ('string' == typeof value) return sanitizeString(value);
49
+ if (Array.isArray(value)) return value.map(sanitizeCapturedValue);
50
+ if (value instanceof Date) return value;
51
+ if ('object' != typeof value) return value;
52
+ const result = {};
53
+ for (const [key, nestedValue] of Object.entries(value))result[key] = shouldRedactKey(key) ? REDACTED_VALUE : sanitizeCapturedValue(nestedValue);
54
+ return result;
55
+ }
56
+ function buildCapturedMcpArguments(argumentsValue) {
57
+ if (!isRecord(argumentsValue)) return sanitizeCapturedValue(argumentsValue);
58
+ const capturedArguments = {};
59
+ for (const [key, value] of Object.entries(argumentsValue))if (key !== CONTEXT_ARGUMENT_NAME) capturedArguments[key] = sanitizeCapturedValue(value);
60
+ return capturedArguments;
61
+ }
62
+ function buildCapturedMcpParams(params) {
63
+ if (!isRecord(params)) return sanitizeCapturedValue(params);
64
+ const capturedParams = {};
65
+ for (const [key, value] of Object.entries(params))capturedParams[key] = 'arguments' === key ? buildCapturedMcpArguments(value) : sanitizeCapturedValue(value);
66
+ return capturedParams;
67
+ }
68
+ function buildCapturedMcpParameters(request) {
69
+ if (!isRecord(request)) return {
70
+ request: sanitizeCapturedValue(request)
71
+ };
72
+ const capturedRequest = {};
73
+ for (const key of [
74
+ 'id',
75
+ 'jsonrpc',
76
+ 'method'
77
+ ])if (key in request) capturedRequest[key] = sanitizeCapturedValue(request[key]);
78
+ if ('params' in request) capturedRequest.params = buildCapturedMcpParams(request.params);
79
+ return {
80
+ request: capturedRequest
81
+ };
82
+ }
83
+ exports.buildCapturedMcpParameters = __webpack_exports__.buildCapturedMcpParameters;
84
+ exports.sanitizeCapturedValue = __webpack_exports__.sanitizeCapturedValue;
85
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
86
+ "buildCapturedMcpParameters",
87
+ "sanitizeCapturedValue"
88
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
89
+ Object.defineProperty(exports, '__esModule', {
90
+ value: true
91
+ });
@@ -0,0 +1,54 @@
1
+ const CONTEXT_ARGUMENT_NAME = 'context';
2
+ const REDACTED_VALUE = '[redacted]';
3
+ const BASE64_PATTERN = /^[A-Za-z0-9+/\n\r]+=*$/;
4
+ const SIZE_GATE = 10240;
5
+ const POSTHOG_TOKEN_PATTERN = /\bph[a-z]_[A-Za-z0-9_-]{20,}\b/g;
6
+ const SENSITIVE_KEY_PATTERN = /^(authorization|cookie|set-cookie|x-api-key|api[-_]?key|api[-_]?token|access[-_]?token|refresh[-_]?token|token|password|secret|client[-_]?secret|private[-_]?key)$/i;
7
+ function isRecord(value) {
8
+ return !!value && 'object' == typeof value && !Array.isArray(value);
9
+ }
10
+ function shouldRedactKey(key) {
11
+ return SENSITIVE_KEY_PATTERN.test(key);
12
+ }
13
+ function sanitizeString(value) {
14
+ if (value.length >= SIZE_GATE && BASE64_PATTERN.test(value)) return '[binary data redacted - not supported by PostHog MCP analytics]';
15
+ return value.replace(POSTHOG_TOKEN_PATTERN, REDACTED_VALUE);
16
+ }
17
+ function sanitizeCapturedValue(value) {
18
+ if (null == value) return value;
19
+ if ('string' == typeof value) return sanitizeString(value);
20
+ if (Array.isArray(value)) return value.map(sanitizeCapturedValue);
21
+ if (value instanceof Date) return value;
22
+ if ('object' != typeof value) return value;
23
+ const result = {};
24
+ for (const [key, nestedValue] of Object.entries(value))result[key] = shouldRedactKey(key) ? REDACTED_VALUE : sanitizeCapturedValue(nestedValue);
25
+ return result;
26
+ }
27
+ function buildCapturedMcpArguments(argumentsValue) {
28
+ if (!isRecord(argumentsValue)) return sanitizeCapturedValue(argumentsValue);
29
+ const capturedArguments = {};
30
+ for (const [key, value] of Object.entries(argumentsValue))if (key !== CONTEXT_ARGUMENT_NAME) capturedArguments[key] = sanitizeCapturedValue(value);
31
+ return capturedArguments;
32
+ }
33
+ function buildCapturedMcpParams(params) {
34
+ if (!isRecord(params)) return sanitizeCapturedValue(params);
35
+ const capturedParams = {};
36
+ for (const [key, value] of Object.entries(params))capturedParams[key] = 'arguments' === key ? buildCapturedMcpArguments(value) : sanitizeCapturedValue(value);
37
+ return capturedParams;
38
+ }
39
+ function buildCapturedMcpParameters(request) {
40
+ if (!isRecord(request)) return {
41
+ request: sanitizeCapturedValue(request)
42
+ };
43
+ const capturedRequest = {};
44
+ for (const key of [
45
+ 'id',
46
+ 'jsonrpc',
47
+ 'method'
48
+ ])if (key in request) capturedRequest[key] = sanitizeCapturedValue(request[key]);
49
+ if ('params' in request) capturedRequest.params = buildCapturedMcpParams(request.params);
50
+ return {
51
+ request: capturedRequest
52
+ };
53
+ }
54
+ export { buildCapturedMcpParameters, sanitizeCapturedValue };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * MCP SDK Compatibility Helpers
3
+ *
4
+ * Internal utilities for handling differences between MCP SDK versions.
5
+ * These helpers abstract away SDK-internal details like:
6
+ * - Tool callback/handler property names (changed in SDK 1.24)
7
+ * - Zod schema internal structures (v3 vs v4)
8
+ */
9
+ import type { RegisteredTool, ToolCallback } from '../types';
10
+ export type ToolFunctionKey = 'callback' | 'handler';
11
+ /**
12
+ * Returns the tool function (callback/handler) from a RegisteredTool.
13
+ * Supports both MCP SDK 1.23- (callback) and 1.24+ (handler).
14
+ */
15
+ export declare function getToolFunction(tool: RegisteredTool): ToolCallback;
16
+ /**
17
+ * Returns the property key name used for the tool function ("callback" or "handler").
18
+ * This preserves the original property name when wrapping tools.
19
+ */
20
+ export declare function getToolFunctionKey(tool: RegisteredTool): ToolFunctionKey;
21
+ /**
22
+ * Returns true if the tool has a callback or handler property.
23
+ */
24
+ export declare function hasToolFunction(tool: unknown): tool is RegisteredTool;
25
+ /**
26
+ * Creates a new tool object with the wrapped function, preserving the original property name.
27
+ * This ensures MCP SDK 1.24+ gets back a tool with "handler" and 1.23- gets "callback".
28
+ */
29
+ export declare function createWrappedTool(originalTool: RegisteredTool, wrappedFunction: ToolCallback): RegisteredTool;
30
+ export declare function isZ4Schema(schema: unknown): boolean;
31
+ export declare function getObjectShape(schema: unknown): Record<string, unknown> | undefined;
32
+ export declare function getLiteralValue(schema: unknown): unknown;
33
+ //# sourceMappingURL=mcp-sdk-compat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-sdk-compat.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-sdk-compat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAK5D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,CAAA;AAEpD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAQlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CAKxE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAMrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,GAAG,cAAc,CAM7G;AAyBD,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAKnD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA6BnF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAkCxD"}
@@ -0,0 +1,112 @@
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
+ createWrappedTool: ()=>createWrappedTool,
28
+ getLiteralValue: ()=>getLiteralValue,
29
+ getObjectShape: ()=>getObjectShape,
30
+ getToolFunction: ()=>getToolFunction,
31
+ getToolFunctionKey: ()=>getToolFunctionKey,
32
+ hasToolFunction: ()=>hasToolFunction,
33
+ isZ4Schema: ()=>isZ4Schema
34
+ });
35
+ function getToolFunction(tool) {
36
+ if ('handler' in tool && 'function' == typeof tool.handler) return tool.handler;
37
+ if ('callback' in tool && 'function' == typeof tool.callback) return tool.callback;
38
+ throw new Error('Tool has neither callback nor handler property');
39
+ }
40
+ function getToolFunctionKey(tool) {
41
+ if ('handler' in tool && 'function' == typeof tool.handler) return 'handler';
42
+ return 'callback';
43
+ }
44
+ function hasToolFunction(tool) {
45
+ if (!tool || 'object' != typeof tool) return false;
46
+ const t = tool;
47
+ return 'handler' in t && 'function' == typeof t.handler || 'callback' in t && 'function' == typeof t.callback;
48
+ }
49
+ function createWrappedTool(originalTool, wrappedFunction) {
50
+ const key = getToolFunctionKey(originalTool);
51
+ return {
52
+ ...originalTool,
53
+ [key]: wrappedFunction
54
+ };
55
+ }
56
+ function isZ4Schema(schema) {
57
+ if (!schema || 'object' != typeof schema) return false;
58
+ return !!schema._zod;
59
+ }
60
+ function getObjectShape(schema) {
61
+ if (!schema || 'object' != typeof schema) return;
62
+ let rawShape;
63
+ if (isZ4Schema(schema)) {
64
+ const v4Schema = schema;
65
+ rawShape = v4Schema._zod?.def?.shape;
66
+ } else {
67
+ const v3Schema = schema;
68
+ rawShape = v3Schema.shape ?? v3Schema._def?.shape;
69
+ }
70
+ if (!rawShape) return;
71
+ if ('function' == typeof rawShape) try {
72
+ return rawShape();
73
+ } catch {
74
+ return;
75
+ }
76
+ return rawShape;
77
+ }
78
+ function getLiteralValue(schema) {
79
+ if (!schema || 'object' != typeof schema) return;
80
+ if (isZ4Schema(schema)) {
81
+ const v4Schema = schema;
82
+ const def = v4Schema._zod?.def;
83
+ if (def?.value !== void 0) return def.value;
84
+ if (Array.isArray(def?.values) && def.values.length > 0) return def.values[0];
85
+ } else {
86
+ const v3Schema = schema;
87
+ const def = v3Schema._def;
88
+ if (def?.value !== void 0) return def.value;
89
+ if (Array.isArray(def?.values) && def.values.length > 0) return def.values[0];
90
+ }
91
+ const directValue = schema.value;
92
+ if (void 0 !== directValue) return directValue;
93
+ }
94
+ exports.createWrappedTool = __webpack_exports__.createWrappedTool;
95
+ exports.getLiteralValue = __webpack_exports__.getLiteralValue;
96
+ exports.getObjectShape = __webpack_exports__.getObjectShape;
97
+ exports.getToolFunction = __webpack_exports__.getToolFunction;
98
+ exports.getToolFunctionKey = __webpack_exports__.getToolFunctionKey;
99
+ exports.hasToolFunction = __webpack_exports__.hasToolFunction;
100
+ exports.isZ4Schema = __webpack_exports__.isZ4Schema;
101
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
102
+ "createWrappedTool",
103
+ "getLiteralValue",
104
+ "getObjectShape",
105
+ "getToolFunction",
106
+ "getToolFunctionKey",
107
+ "hasToolFunction",
108
+ "isZ4Schema"
109
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
110
+ Object.defineProperty(exports, '__esModule', {
111
+ value: true
112
+ });