@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.
- package/LICENSE +64 -0
- package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-highlevel.js +4 -1
- package/dist/extensions/instrument-highlevel.mjs +5 -2
- package/dist/extensions/instrument-lowlevel.d.ts +4 -3
- package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-lowlevel.js +4 -1
- package/dist/extensions/instrument-lowlevel.mjs +5 -2
- package/dist/extensions/instrumentation.d.ts +3 -0
- package/dist/extensions/instrumentation.d.ts.map +1 -1
- package/dist/extensions/instrumentation.js +76 -2
- package/dist/extensions/instrumentation.mjs +72 -1
- package/dist/extensions/internal.js +9 -2
- package/dist/extensions/internal.mjs +9 -2
- package/dist/extensions/mcp-payloads.d.ts +13 -0
- package/dist/extensions/mcp-payloads.d.ts.map +1 -1
- package/dist/extensions/mcp-payloads.js +205 -4
- package/dist/extensions/mcp-payloads.mjs +201 -3
- package/dist/extensions/sanitization.d.ts.map +1 -1
- package/dist/extensions/sanitization.js +2 -1
- package/dist/extensions/sanitization.mjs +3 -2
- package/dist/index.d.ts +3 -3
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +3 -3
- package/src/extensions/instrument-highlevel.ts +6 -0
- package/src/extensions/instrument-lowlevel.ts +10 -3
- package/src/extensions/instrumentation.ts +105 -0
- package/src/extensions/internal.ts +13 -2
- package/src/extensions/mcp-payloads.ts +427 -4
- package/src/extensions/sanitization.ts +14 -6
- package/src/index.ts +3 -3
- package/src/types.ts +1 -0
- 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;
|
|
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`,
|
|
5
|
-
* `tools/call
|
|
6
|
-
*
|
|
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;
|
|
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":"AAKA,OAAO,KAAK,EACV,2BAA2B,EAC3B,6BAA6B,EAC7B,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,aAAa,EAId,MAAM,UAAU,CAAA;AAqBjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAIrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AASxC;;;;;;GAMG;AAEH,KAAK,iBAAiB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,6BAA6B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAE7G,2EAA2E;AAC3E,KAAK,YAAY,GAAG,CAAC,iBAAiB,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAE3E,UAAU,mBAAmB;IAC3B,MAAM,EAAE,aAAa,CAAA;IACrB,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,EAAE,cAAc,CAAA;IACvB,KAAK,CAAC,EAAE,6BAA6B,CAAA;IACrC,OAAO,EAAE,YAAY,CAAA;IACrB,2FAA2F;IAC3F,kBAAkB,CAAC,EAAE,2BAA2B,CAAA;IAChD;;;;OAIG;IACH,SAAS,CAAC,EAAE,qBAAqB,CAAA;IACjC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAA;CAClC;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CA8DnF;
|
|
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
|
|
162
|
-
|
|
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
|
|
123
|
-
|
|
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":"
|
|
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"}
|