@posthog/mcp 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/LICENSE +64 -0
  2. package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
  3. package/dist/extensions/instrument-highlevel.js +4 -1
  4. package/dist/extensions/instrument-highlevel.mjs +5 -2
  5. package/dist/extensions/instrument-lowlevel.d.ts +4 -3
  6. package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
  7. package/dist/extensions/instrument-lowlevel.js +4 -1
  8. package/dist/extensions/instrument-lowlevel.mjs +5 -2
  9. package/dist/extensions/instrumentation.d.ts +3 -0
  10. package/dist/extensions/instrumentation.d.ts.map +1 -1
  11. package/dist/extensions/instrumentation.js +76 -2
  12. package/dist/extensions/instrumentation.mjs +72 -1
  13. package/dist/extensions/internal.js +9 -2
  14. package/dist/extensions/internal.mjs +9 -2
  15. package/dist/extensions/mcp-payloads.d.ts +13 -0
  16. package/dist/extensions/mcp-payloads.d.ts.map +1 -1
  17. package/dist/extensions/mcp-payloads.js +205 -4
  18. package/dist/extensions/mcp-payloads.mjs +201 -3
  19. package/dist/extensions/sanitization.d.ts.map +1 -1
  20. package/dist/extensions/sanitization.js +2 -1
  21. package/dist/extensions/sanitization.mjs +3 -2
  22. package/dist/index.d.ts +3 -3
  23. package/dist/types.d.ts +1 -0
  24. package/dist/types.d.ts.map +1 -1
  25. package/dist/version.d.ts +1 -1
  26. package/dist/version.js +1 -1
  27. package/dist/version.mjs +1 -1
  28. package/package.json +3 -3
  29. package/src/extensions/instrument-highlevel.ts +6 -0
  30. package/src/extensions/instrument-lowlevel.ts +10 -3
  31. package/src/extensions/instrumentation.ts +105 -0
  32. package/src/extensions/internal.ts +13 -2
  33. package/src/extensions/mcp-payloads.ts +427 -4
  34. package/src/extensions/sanitization.ts +14 -6
  35. package/src/index.ts +3 -3
  36. package/src/types.ts +1 -0
  37. package/src/version.ts +1 -1
package/LICENSE CHANGED
@@ -217,6 +217,70 @@ limitations under the License.
217
217
  limitations under the License.
218
218
 
219
219
 
220
+ ---
221
+
222
+ The @posthog/core package in packages/core is licensed under the MIT License below.
223
+ Third-party code remains subject to its respective notices in this file.
224
+ This owning notice is preserved from posthog-js-lite, from which @posthog/core was migrated:
225
+ https://github.com/PostHog/posthog-js-lite/blob/5fb7bee96f739b243dfea5589e2027f16629e8cd/LICENSE
226
+
227
+ MIT License
228
+
229
+ Copyright (c) 2022 PostHog (part of Hiberly Inc)
230
+
231
+ Permission is hereby granted, free of charge, to any person obtaining a copy
232
+ of this software and associated documentation files (the "Software"), to deal
233
+ in the Software without restriction, including without limitation the rights
234
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
235
+ copies of the Software, and to permit persons to whom the Software is
236
+ furnished to do so, subject to the following conditions:
237
+
238
+ The above copyright notice and this permission notice shall be included in all
239
+ copies or substantial portions of the Software.
240
+
241
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
242
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
243
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
244
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
245
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
246
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
247
+ SOFTWARE.
248
+
249
+ ---
250
+
251
+ packages/core/src/error-tracking/parsers/index.ts and its compiled distributions contain code
252
+ derived from TraceKit. This license only applies to the relevant code.
253
+
254
+ MIT License
255
+
256
+ Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.
257
+
258
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this
259
+ software and associated documentation files(the 'Software'), to deal in the Software
260
+ without restriction, including without limitation the rights to use, copy, modify,
261
+ merge, publish, distribute, sublicense, and / or sell copies of the Software, and to
262
+ permit persons to whom the Software is furnished to do so, subject to the following
263
+ conditions:
264
+
265
+ The above copyright notice and this permission notice shall be included in all copies
266
+ or substantial portions of the Software.
267
+
268
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
269
+ INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
270
+ PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
271
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
272
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
273
+ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
274
+
275
+ ---
276
+
277
+ packages/core/src/vendor/uuidv7.ts and its compiled distributions contain code from uuidv7:
278
+ https://github.com/LiosK/uuidv7/blob/f30b7a7faff73afbce0b27a46c638310f96912ba/src/index.ts
279
+
280
+ Copyright 2021-2023 LiosK
281
+
282
+ This code is licensed under the Apache License, Version 2.0, reproduced above.
283
+
220
284
  ---
221
285
 
222
286
  Some files in this codebase contain code from getsentry/sentry-javascript.
@@ -1 +1 @@
1
- {"version":3,"file":"instrument-highlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-highlevel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,sBAAsB,EAIvB,MAAM,UAAU,CAAA;AAUjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAmQxC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CA0BhG"}
1
+ {"version":3,"file":"instrument-highlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-highlevel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,sBAAsB,EAIvB,MAAM,UAAU,CAAA;AAUjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAoQxC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CA+BhG"}
@@ -199,7 +199,10 @@ function instrumentHighLevelServer(server, logger) {
199
199
  const handlers = {
200
200
  initialize: (trackedServer, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleInitializeRequest)(trackedServer, originalHandler, request, extra, logger),
201
201
  'tools/list': (trackedServer, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleListToolsRequest)(trackedServer, originalHandler, request, extra, logger),
202
- 'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra, logger)
202
+ 'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra, logger),
203
+ 'resources/list': (0, external_instrumentation_js_namespaceObject.traceResourceRequest)(external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesList, logger),
204
+ 'resources/templates/list': (0, external_instrumentation_js_namespaceObject.traceResourceRequest)(external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesList, logger),
205
+ 'resources/read': (0, external_instrumentation_js_namespaceObject.traceResourceRequest)(external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesRead, logger)
203
206
  };
204
207
  (0, external_instrumentation_js_namespaceObject.patchRequestHandlers)(lowLevelServer, handlers);
205
208
  server._registeredTools = addTracingToToolRegistry(server._registeredTools, server, logger);
@@ -5,7 +5,7 @@ import { MCPAnalyticsEventType } from "./event-types.mjs";
5
5
  import { getServerTrackingData } from "./internal.mjs";
6
6
  import { createWrappedTool, getToolFunction, hasToolFunction } from "./mcp-sdk-compat.mjs";
7
7
  import { handleReportMissing, resolveMissingCapabilityToolName } from "./tools.mjs";
8
- import { captureToolCall, getVirtualToolParameterOwnership, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, readToolMetaCategory } from "./instrumentation.mjs";
8
+ import { captureToolCall, getVirtualToolParameterOwnership, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, readToolMetaCategory, traceResourceRequest } from "./instrumentation.mjs";
9
9
  import { getContextArgument } from "./tracing-helpers.mjs";
10
10
  const wrappedCallbacks = new WeakMap();
11
11
  const MCP_ANALYTICS_PROCESSED = Symbol('__posthog_mcp_analytics_processed__');
@@ -167,7 +167,10 @@ function instrumentHighLevelServer(server, logger) {
167
167
  const handlers = {
168
168
  initialize: (trackedServer, originalHandler, request, extra)=>handleInitializeRequest(trackedServer, originalHandler, request, extra, logger),
169
169
  'tools/list': (trackedServer, originalHandler, request, extra)=>handleListToolsRequest(trackedServer, originalHandler, request, extra, logger),
170
- 'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra, logger)
170
+ 'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra, logger),
171
+ 'resources/list': traceResourceRequest(MCPAnalyticsEventType.mcpResourcesList, logger),
172
+ 'resources/templates/list': traceResourceRequest(MCPAnalyticsEventType.mcpResourcesList, logger),
173
+ 'resources/read': traceResourceRequest(MCPAnalyticsEventType.mcpResourcesRead, logger)
171
174
  };
172
175
  patchRequestHandlers(lowLevelServer, handlers);
173
176
  server._registeredTools = addTracingToToolRegistry(server._registeredTools, server, logger);
@@ -1,9 +1,10 @@
1
1
  import type { MCPServerLike } from '../types';
2
2
  import type { LoggerFn } from './logger';
3
3
  /**
4
- * Instruments a low-level `Server`: wraps `initialize`, `tools/list`, and
5
- * `tools/call`. The tool-call lifecycle is delegated to {@link captureToolCall},
6
- * shared with the high-level wrapper.
4
+ * Instruments a low-level `Server`: wraps `initialize`, `tools/list`,
5
+ * `tools/call`, `resources/list`, `resources/templates/list`, and
6
+ * `resources/read`. The tool-call lifecycle is delegated to
7
+ * {@link captureToolCall}, shared with the high-level wrapper.
7
8
  */
8
9
  export declare function instrumentLowLevelServer(server: MCPServerLike, logger: LoggerFn): void;
9
10
  //# sourceMappingURL=instrument-lowlevel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instrument-lowlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-lowlevel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAiD,aAAa,EAAE,MAAM,UAAU,CAAA;AAG5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAoBxC;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAyBtF"}
1
+ {"version":3,"file":"instrument-lowlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-lowlevel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAiD,aAAa,EAAE,MAAM,UAAU,CAAA;AAG5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAqBxC;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CA8BtF"}
@@ -42,7 +42,10 @@ function instrumentLowLevelServer(server, logger) {
42
42
  const handlers = {
43
43
  initialize: (server, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleInitializeRequest)(server, originalHandler, request, extra, logger),
44
44
  'tools/list': (server, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleListToolsRequest)(server, originalHandler, request, extra, logger),
45
- 'tools/call': traceToolCall
45
+ 'tools/call': traceToolCall,
46
+ 'resources/list': (0, external_instrumentation_js_namespaceObject.traceResourceRequest)(external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesList, logger),
47
+ 'resources/templates/list': (0, external_instrumentation_js_namespaceObject.traceResourceRequest)(external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesList, logger),
48
+ 'resources/read': (0, external_instrumentation_js_namespaceObject.traceResourceRequest)(external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesRead, logger)
46
49
  };
47
50
  (0, external_instrumentation_js_namespaceObject.patchRequestHandlers)(server, handlers);
48
51
  if (!hadCallToolHandler) (0, external_instrumentation_js_namespaceObject.registerFallbackRequestHandler)(server, 'tools/call', unknownToolHandler, traceToolCall);
@@ -1,7 +1,7 @@
1
1
  import { MCPAnalyticsEventType } from "./event-types.mjs";
2
2
  import { getServerTrackingData } from "./internal.mjs";
3
3
  import { handleReportMissing, resolveMissingCapabilityToolName } from "./tools.mjs";
4
- import { captureToolCall, getVirtualToolParameterOwnership, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, registerFallbackRequestHandler } from "./instrumentation.mjs";
4
+ import { captureToolCall, getVirtualToolParameterOwnership, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, registerFallbackRequestHandler, traceResourceRequest } from "./instrumentation.mjs";
5
5
  import { getContextArgument } from "./tracing-helpers.mjs";
6
6
  function instrumentLowLevelServer(server, logger) {
7
7
  try {
@@ -10,7 +10,10 @@ function instrumentLowLevelServer(server, logger) {
10
10
  const handlers = {
11
11
  initialize: (server, originalHandler, request, extra)=>handleInitializeRequest(server, originalHandler, request, extra, logger),
12
12
  'tools/list': (server, originalHandler, request, extra)=>handleListToolsRequest(server, originalHandler, request, extra, logger),
13
- 'tools/call': traceToolCall
13
+ 'tools/call': traceToolCall,
14
+ 'resources/list': traceResourceRequest(MCPAnalyticsEventType.mcpResourcesList, logger),
15
+ 'resources/templates/list': traceResourceRequest(MCPAnalyticsEventType.mcpResourcesList, logger),
16
+ 'resources/read': traceResourceRequest(MCPAnalyticsEventType.mcpResourcesRead, logger)
14
17
  };
15
18
  patchRequestHandlers(server, handlers);
16
19
  if (!hadCallToolHandler) registerFallbackRequestHandler(server, 'tools/call', unknownToolHandler, traceToolCall);
@@ -48,6 +48,9 @@ interface TraceToolCallParams {
48
48
  * throws, and the tool's own errors are always re-thrown to the caller.
49
49
  */
50
50
  export declare function captureToolCall(params: TraceToolCallParams): Promise<unknown>;
51
+ type ResourceEventType = typeof MCPAnalyticsEventType.mcpResourcesList | typeof MCPAnalyticsEventType.mcpResourcesRead;
52
+ /** Builds the handler patch that captures one resource method, for either adapter. */
53
+ export declare function traceResourceRequest(eventType: ResourceEventType, logger: LoggerFn): HandlerPatch;
51
54
  /**
52
55
  * A method's patch: runs the original handler and captures analytics. `server`
53
56
  * and `originalHandler` are bound by {@link patchRequestHandlers}; the SDK
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,8 @@ __webpack_require__.d(__webpack_exports__, {
37
37
  isToolAdvertised: ()=>isToolAdvertised,
38
38
  patchRequestHandlers: ()=>patchRequestHandlers,
39
39
  readToolMetaCategory: ()=>readToolMetaCategory,
40
- registerFallbackRequestHandler: ()=>registerFallbackRequestHandler
40
+ registerFallbackRequestHandler: ()=>registerFallbackRequestHandler,
41
+ traceResourceRequest: ()=>traceResourceRequest
41
42
  });
42
43
  const external_analytics_parameters_js_namespaceObject = require("./analytics-parameters.js");
43
44
  const external_context_parameters_js_namespaceObject = require("./context-parameters.js");
@@ -182,6 +183,77 @@ function publishFailedToolEvent(server, preparedEvent, error, startTime, convers
182
183
  logger(`Warning: PostHog MCP analytics failed to publish failed tool event - ${publishError}`);
183
184
  }
184
185
  }
186
+ function publishResourceEvent(server, preparedEvent, startTime, params, outcome) {
187
+ if (!preparedEvent) return;
188
+ const { event, requestAttribution } = preparedEvent;
189
+ try {
190
+ if ('error' in outcome) {
191
+ event.isError = true;
192
+ event.error = (0, external_exceptions_js_namespaceObject.captureException)(outcome.error);
193
+ } else {
194
+ event.isError = false;
195
+ if (params.eventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesList) event.response = outcome.result;
196
+ }
197
+ event.duration = Date.now() - startTime.getTime();
198
+ (0, external_capture_js_namespaceObject.captureEvent)(server, event, params.logger, requestAttribution);
199
+ } catch (error) {
200
+ params.logger(`Warning: PostHog MCP analytics failed to publish ${params.request.method} analytics - ${error}`);
201
+ }
202
+ }
203
+ function traceResourceRequest(eventType, logger) {
204
+ return (server, originalHandler, request, extra)=>captureResourceRequest({
205
+ server,
206
+ originalHandler,
207
+ request,
208
+ extra,
209
+ eventType,
210
+ logger
211
+ });
212
+ }
213
+ async function captureResourceRequest(params) {
214
+ const { server, originalHandler, request, extra, eventType, logger } = params;
215
+ const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
216
+ if (!data) {
217
+ logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using resources.');
218
+ return await originalHandler(request, extra);
219
+ }
220
+ const startTime = new Date();
221
+ let preparedEvent = null;
222
+ try {
223
+ const sessionId = (0, external_session_js_namespaceObject.getSessionId)(server, extra);
224
+ const sessionInfo = (0, external_session_js_namespaceObject.getSessionInfo)(server, data, sessionId);
225
+ const event = {
226
+ sessionId,
227
+ eventType,
228
+ parameters: (0, external_mcp_payloads_js_namespaceObject.buildCapturedMcpParameters)(request),
229
+ resourceName: eventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesRead ? request.params?.uri : void 0,
230
+ timestamp: startTime
231
+ };
232
+ (0, external_client_identity_js_namespaceObject.stampClientIdentity)(event, request, extra, server);
233
+ (0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(event, extra);
234
+ const identity = await (0, external_internal_js_namespaceObject.handleIdentify)(server, data, sessionId, request, sessionInfo, extra);
235
+ await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
236
+ preparedEvent = {
237
+ event,
238
+ requestAttribution: (0, external_internal_js_namespaceObject.withIdentity)(sessionInfo, identity)
239
+ };
240
+ } catch (error) {
241
+ logger(`Warning: PostHog MCP analytics could not prepare ${request.method} analytics - ${error}`);
242
+ }
243
+ let result;
244
+ try {
245
+ result = await originalHandler(request, extra);
246
+ } catch (error) {
247
+ publishResourceEvent(server, preparedEvent, startTime, params, {
248
+ error
249
+ });
250
+ throw error;
251
+ }
252
+ publishResourceEvent(server, preparedEvent, startTime, params, {
253
+ result
254
+ });
255
+ return result;
256
+ }
185
257
  const originalRequestHandlers = new WeakMap();
186
258
  function rememberOriginalRequestHandler(server, handlerName, originalHandler) {
187
259
  let handlers = originalRequestHandlers.get(server);
@@ -461,6 +533,7 @@ exports.isToolAdvertised = __webpack_exports__.isToolAdvertised;
461
533
  exports.patchRequestHandlers = __webpack_exports__.patchRequestHandlers;
462
534
  exports.readToolMetaCategory = __webpack_exports__.readToolMetaCategory;
463
535
  exports.registerFallbackRequestHandler = __webpack_exports__.registerFallbackRequestHandler;
536
+ exports.traceResourceRequest = __webpack_exports__.traceResourceRequest;
464
537
  for(var __rspack_i in __webpack_exports__)if (-1 === [
465
538
  "cacheToolCategories",
466
539
  "cacheToolDescriptions",
@@ -471,7 +544,8 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
471
544
  "isToolAdvertised",
472
545
  "patchRequestHandlers",
473
546
  "readToolMetaCategory",
474
- "registerFallbackRequestHandler"
547
+ "registerFallbackRequestHandler",
548
+ "traceResourceRequest"
475
549
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
476
550
  Object.defineProperty(exports, '__esModule', {
477
551
  value: true
@@ -141,6 +141,77 @@ function publishFailedToolEvent(server, preparedEvent, error, startTime, convers
141
141
  logger(`Warning: PostHog MCP analytics failed to publish failed tool event - ${publishError}`);
142
142
  }
143
143
  }
144
+ function publishResourceEvent(server, preparedEvent, startTime, params, outcome) {
145
+ if (!preparedEvent) return;
146
+ const { event, requestAttribution } = preparedEvent;
147
+ try {
148
+ if ('error' in outcome) {
149
+ event.isError = true;
150
+ event.error = captureException(outcome.error);
151
+ } else {
152
+ event.isError = false;
153
+ if (params.eventType === MCPAnalyticsEventType.mcpResourcesList) event.response = outcome.result;
154
+ }
155
+ event.duration = Date.now() - startTime.getTime();
156
+ captureEvent(server, event, params.logger, requestAttribution);
157
+ } catch (error) {
158
+ params.logger(`Warning: PostHog MCP analytics failed to publish ${params.request.method} analytics - ${error}`);
159
+ }
160
+ }
161
+ function traceResourceRequest(eventType, logger) {
162
+ return (server, originalHandler, request, extra)=>captureResourceRequest({
163
+ server,
164
+ originalHandler,
165
+ request,
166
+ extra,
167
+ eventType,
168
+ logger
169
+ });
170
+ }
171
+ async function captureResourceRequest(params) {
172
+ const { server, originalHandler, request, extra, eventType, logger } = params;
173
+ const data = getServerTrackingData(server);
174
+ if (!data) {
175
+ logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using resources.');
176
+ return await originalHandler(request, extra);
177
+ }
178
+ const startTime = new Date();
179
+ let preparedEvent = null;
180
+ try {
181
+ const sessionId = getSessionId(server, extra);
182
+ const sessionInfo = getSessionInfo(server, data, sessionId);
183
+ const event = {
184
+ sessionId,
185
+ eventType,
186
+ parameters: buildCapturedMcpParameters(request),
187
+ resourceName: eventType === MCPAnalyticsEventType.mcpResourcesRead ? request.params?.uri : void 0,
188
+ timestamp: startTime
189
+ };
190
+ stampClientIdentity(event, request, extra, server);
191
+ stampTransportIdentity(event, extra);
192
+ const identity = await handleIdentify(server, data, sessionId, request, sessionInfo, extra);
193
+ await applyResolvedMetadata(event, data, request, extra);
194
+ preparedEvent = {
195
+ event,
196
+ requestAttribution: withIdentity(sessionInfo, identity)
197
+ };
198
+ } catch (error) {
199
+ logger(`Warning: PostHog MCP analytics could not prepare ${request.method} analytics - ${error}`);
200
+ }
201
+ let result;
202
+ try {
203
+ result = await originalHandler(request, extra);
204
+ } catch (error) {
205
+ publishResourceEvent(server, preparedEvent, startTime, params, {
206
+ error
207
+ });
208
+ throw error;
209
+ }
210
+ publishResourceEvent(server, preparedEvent, startTime, params, {
211
+ result
212
+ });
213
+ return result;
214
+ }
144
215
  const originalRequestHandlers = new WeakMap();
145
216
  function rememberOriginalRequestHandler(server, handlerName, originalHandler) {
146
217
  let handlers = originalRequestHandlers.get(server);
@@ -410,4 +481,4 @@ function readProtocolVersion(result, request) {
410
481
  const requested = request.params?.protocolVersion;
411
482
  return 'string' == typeof requested && requested.length > 0 ? requested : void 0;
412
483
  }
413
- export { cacheToolCategories, cacheToolDescriptions, captureToolCall, getVirtualToolParameterOwnership, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, readToolMetaCategory, registerFallbackRequestHandler };
484
+ export { cacheToolCategories, cacheToolDescriptions, captureToolCall, getVirtualToolParameterOwnership, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, readToolMetaCategory, registerFallbackRequestHandler, traceResourceRequest };
@@ -158,8 +158,15 @@ async function resolveEventProperties(data, request, extra) {
158
158
  function getRequestResourceName(request) {
159
159
  if (!request || 'object' != typeof request || !('params' in request)) return 'Unknown';
160
160
  const params = request.params;
161
- if (!params || 'object' != typeof params || !('name' in params)) return 'Unknown';
162
- return 'string' == typeof params.name ? params.name : 'Unknown';
161
+ if (!params || 'object' != typeof params) return 'Unknown';
162
+ for (const key of [
163
+ 'name',
164
+ 'uri'
165
+ ]){
166
+ const value = params[key];
167
+ if ('string' == typeof value) return value;
168
+ }
169
+ return 'Unknown';
163
170
  }
164
171
  exports.IdentityCache = __webpack_exports__.IdentityCache;
165
172
  exports.areIdentitiesEqual = __webpack_exports__.areIdentitiesEqual;
@@ -119,7 +119,14 @@ async function resolveEventProperties(data, request, extra) {
119
119
  function getRequestResourceName(request) {
120
120
  if (!request || 'object' != typeof request || !('params' in request)) return 'Unknown';
121
121
  const params = request.params;
122
- if (!params || 'object' != typeof params || !('name' in params)) return 'Unknown';
123
- return 'string' == typeof params.name ? params.name : 'Unknown';
122
+ if (!params || 'object' != typeof params) return 'Unknown';
123
+ for (const key of [
124
+ 'name',
125
+ 'uri'
126
+ ]){
127
+ const value = params[key];
128
+ if ('string' == typeof value) return value;
129
+ }
130
+ return 'Unknown';
124
131
  }
125
132
  export { IdentityCache, areIdentitiesEqual, getServerTrackingData, handleIdentify, mergeIdentities, resolveEventProperties, setServerTrackingData, withIdentity };
@@ -1,4 +1,17 @@
1
1
  type JsonRecord = Record<string, unknown>;
2
+ /**
3
+ * Sanitizes the agent-narrated intent: structured PII on top of the passes every
4
+ * captured string gets.
5
+ *
6
+ * Every step of the order is load-bearing. The binary gate reads the value as it
7
+ * arrived, because splicing `[redacted]` into a blob — a Luhn-valid run inside
8
+ * base64 is enough — stops it looking like base64 and would ship it whole.
9
+ * Credentials go before PII, because a PII pattern can cut a token in half (a
10
+ * phone-shaped run inside one) and leave the halves behind. PII goes before the
11
+ * URL pass, because the URL rewrite percent-encodes the `@` that the email
12
+ * pattern anchors on.
13
+ */
14
+ export declare function sanitizeIntent(value: string): string;
2
15
  /**
3
16
  * Redacts structured personal identifiers (emails, IP addresses, credit-card
4
17
  * numbers, US SSNs, and phone numbers) from a free-text string. Intended for the
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-payloads.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-payloads.ts"],"names":[],"mappings":"AAmEA,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAiGzC;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA0B7D;AA6BD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAiBvE"}
1
+ {"version":3,"file":"mcp-payloads.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-payloads.ts"],"names":[],"mappings":"AAoHA,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAyYzC;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpD;AA6DD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA0B7D;AA6BD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAiBvE"}