@posthog/mcp 0.10.5 → 0.10.7
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/dist/extensions/capture.d.ts +2 -2
- package/dist/extensions/capture.d.ts.map +1 -1
- package/dist/extensions/capture.js +2 -2
- package/dist/extensions/capture.mjs +2 -2
- package/dist/extensions/context-parameters.d.ts.map +1 -1
- package/dist/extensions/context-parameters.js +1 -4
- package/dist/extensions/context-parameters.mjs +1 -4
- package/dist/extensions/conversation-id.d.ts +1 -1
- package/dist/extensions/conversation-id.d.ts.map +1 -1
- package/dist/extensions/conversation-id.js +2 -2
- package/dist/extensions/conversation-id.mjs +2 -2
- package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-highlevel.js +5 -5
- package/dist/extensions/instrument-highlevel.mjs +6 -6
- package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-lowlevel.js +9 -4
- package/dist/extensions/instrument-lowlevel.mjs +10 -5
- package/dist/extensions/instrumentation.d.ts +6 -6
- package/dist/extensions/instrumentation.d.ts.map +1 -1
- package/dist/extensions/instrumentation.js +112 -42
- package/dist/extensions/instrumentation.mjs +110 -43
- package/dist/extensions/intent.d.ts.map +1 -1
- package/dist/extensions/intent.js +1 -1
- package/dist/extensions/intent.mjs +1 -1
- package/dist/extensions/internal.d.ts +3 -2
- package/dist/extensions/internal.d.ts.map +1 -1
- package/dist/extensions/internal.js +25 -9
- package/dist/extensions/internal.mjs +19 -6
- package/dist/extensions/session.js +3 -1
- package/dist/extensions/session.mjs +3 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +2 -2
- package/src/extensions/capture.ts +13 -6
- package/src/extensions/context-parameters.ts +1 -7
- package/src/extensions/conversation-id.ts +2 -1
- package/src/extensions/instrument-highlevel.ts +8 -13
- package/src/extensions/instrument-lowlevel.ts +17 -6
- package/src/extensions/instrumentation.ts +166 -51
- package/src/extensions/intent.ts +1 -6
- package/src/extensions/internal.ts +21 -6
- package/src/extensions/session.ts +1 -1
- package/src/version.ts +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MCPServerLike, McpEvent } from '../types';
|
|
1
|
+
import type { MCPServerLike, McpEvent, SessionInfo } from '../types';
|
|
2
2
|
import type { LoggerFn } from './logger';
|
|
3
3
|
/**
|
|
4
4
|
* Materializes an `McpEvent` against the server's tracking data + session info,
|
|
@@ -10,5 +10,5 @@ import type { LoggerFn } from './logger';
|
|
|
10
10
|
* Auto-capture callers (tool calls, listings, identify) intentionally ignore the
|
|
11
11
|
* return value, keeping the tool path isolated from analytics latency/errors.
|
|
12
12
|
*/
|
|
13
|
-
export declare function captureEvent(server: MCPServerLike, eventInput: McpEvent, logger: LoggerFn): Promise<void> | undefined;
|
|
13
|
+
export declare function captureEvent(server: MCPServerLike, eventInput: McpEvent, logger: LoggerFn, requestAttribution?: SessionInfo): Promise<void> | undefined;
|
|
14
14
|
//# sourceMappingURL=capture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/extensions/capture.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/extensions/capture.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGxC;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,QAAQ,EACpB,MAAM,EAAE,QAAQ,EAChB,kBAAkB,CAAC,EAAE,WAAW,GAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAoE3B"}
|
|
@@ -29,12 +29,12 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
29
29
|
const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
30
30
|
const external_internal_js_namespaceObject = require("./internal.js");
|
|
31
31
|
const external_session_js_namespaceObject = require("./session.js");
|
|
32
|
-
function captureEvent(server, eventInput, logger) {
|
|
32
|
+
function captureEvent(server, eventInput, logger, requestAttribution) {
|
|
33
33
|
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
34
34
|
if (!data) return void logger('Warning: Server tracking data not found. Event will not be published.');
|
|
35
35
|
const sink = data.sink;
|
|
36
36
|
if (!sink) return;
|
|
37
|
-
const sessionInfo = (0, external_session_js_namespaceObject.getSessionInfo)(server, data, eventInput.sessionId);
|
|
37
|
+
const sessionInfo = requestAttribution ?? (0, external_session_js_namespaceObject.getSessionInfo)(server, data, eventInput.sessionId);
|
|
38
38
|
const duration = eventInput.duration || (eventInput.timestamp ? Date.now() - eventInput.timestamp.getTime() : void 0);
|
|
39
39
|
const fullEvent = {
|
|
40
40
|
id: eventInput.id || '',
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
2
2
|
import { getServerTrackingData } from "./internal.mjs";
|
|
3
3
|
import { getSessionInfo } from "./session.mjs";
|
|
4
|
-
function captureEvent(server, eventInput, logger) {
|
|
4
|
+
function captureEvent(server, eventInput, logger, requestAttribution) {
|
|
5
5
|
const data = getServerTrackingData(server);
|
|
6
6
|
if (!data) return void logger('Warning: Server tracking data not found. Event will not be published.');
|
|
7
7
|
const sink = data.sink;
|
|
8
8
|
if (!sink) return;
|
|
9
|
-
const sessionInfo = getSessionInfo(server, data, eventInput.sessionId);
|
|
9
|
+
const sessionInfo = requestAttribution ?? getSessionInfo(server, data, eventInput.sessionId);
|
|
10
10
|
const duration = eventInput.duration || (eventInput.timestamp ? Date.now() - eventInput.timestamp.getTime() : void 0);
|
|
11
11
|
const fullEvent = {
|
|
12
12
|
id: eventInput.id || '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-parameters.d.ts","sourceRoot":"","sources":["../../src/extensions/context-parameters.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7C,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,OAAO,CAEjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAEjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,qBAAqB,EAC3E,IAAI,EAAE,KAAK,EACX,0BAA0B,CAAC,EAAE,MAAM,EACnC,MAAM,GAAE,QAAc,GACrB,KAAK,CA6DP;AAED,wBAAgB,0BAA0B,CAAC,KAAK,SAAS,qBAAqB,EAC5E,KAAK,EAAE,KAAK,EAAE,EACd,0BAA0B,CAAC,EAAE,MAAM,EACnC,MAAM,GAAE,QAAc,GACrB,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"context-parameters.d.ts","sourceRoot":"","sources":["../../src/extensions/context-parameters.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7C,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,OAAO,CAEjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAEjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,qBAAqB,EAC3E,IAAI,EAAE,KAAK,EACX,0BAA0B,CAAC,EAAE,MAAM,EACnC,MAAM,GAAE,QAAc,GACrB,KAAK,CA6DP;AAED,wBAAgB,0BAA0B,CAAC,KAAK,SAAS,qBAAqB,EAC5E,KAAK,EAAE,KAAK,EAAE,EACd,0BAA0B,CAAC,EAAE,MAAM,EACnC,MAAM,GAAE,QAAc,GACrB,KAAK,EAAE,CAET"}
|
|
@@ -70,10 +70,7 @@ function addContextParameterToTool(tool, contextDescriptionOverride, logger = ex
|
|
|
70
70
|
return modifiedTool;
|
|
71
71
|
}
|
|
72
72
|
function addContextParameterToTools(tools, contextDescriptionOverride, logger = external_logger_js_namespaceObject.log) {
|
|
73
|
-
return tools.map((tool)=>
|
|
74
|
-
if ('get_more_tools' === tool.name) return tool;
|
|
75
|
-
return addContextParameterToTool(tool, contextDescriptionOverride, logger);
|
|
76
|
-
});
|
|
73
|
+
return tools.map((tool)=>addContextParameterToTool(tool, contextDescriptionOverride, logger));
|
|
77
74
|
}
|
|
78
75
|
exports.addContextParameterToTool = __webpack_exports__.addContextParameterToTool;
|
|
79
76
|
exports.addContextParameterToTools = __webpack_exports__.addContextParameterToTools;
|
|
@@ -39,9 +39,6 @@ function addContextParameterToTool(tool, contextDescriptionOverride, logger = lo
|
|
|
39
39
|
return modifiedTool;
|
|
40
40
|
}
|
|
41
41
|
function addContextParameterToTools(tools, contextDescriptionOverride, logger = log) {
|
|
42
|
-
return tools.map((tool)=>
|
|
43
|
-
if ('get_more_tools' === tool.name) return tool;
|
|
44
|
-
return addContextParameterToTool(tool, contextDescriptionOverride, logger);
|
|
45
|
-
});
|
|
42
|
+
return tools.map((tool)=>addContextParameterToTool(tool, contextDescriptionOverride, logger));
|
|
46
43
|
}
|
|
47
44
|
export { addContextParameterToTool, addContextParameterToTools, getContextDescription, isContextEnabled };
|
|
@@ -7,7 +7,7 @@ export interface ConversationIdInjectableTool {
|
|
|
7
7
|
[key: string]: unknown;
|
|
8
8
|
}
|
|
9
9
|
export declare function addConversationIdToTool<TTool extends ConversationIdInjectableTool>(tool: TTool, logger?: LoggerFn): TTool;
|
|
10
|
-
export declare function addConversationIdToTools<TTool extends ConversationIdInjectableTool>(tools: TTool[], missingCapabilityToolName?: string, logger?: LoggerFn): TTool[];
|
|
10
|
+
export declare function addConversationIdToTools<TTool extends ConversationIdInjectableTool>(tools: TTool[], missingCapabilityToolName?: string, skipMissingCapabilityTool?: boolean, logger?: LoggerFn): TTool[];
|
|
11
11
|
export type ConversationIdResolution = {
|
|
12
12
|
minted: false;
|
|
13
13
|
conversationId: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-id.d.ts","sourceRoot":"","sources":["../../src/extensions/conversation-id.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAG7C,eAAO,MAAM,0BAA0B,oBAAoB,CAAA;AAE3D,MAAM,WAAW,4BAA4B;IAC3C,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,4BAA4B,EAChF,IAAI,EAAE,KAAK,EACX,MAAM,GAAE,QAAc,GACrB,KAAK,CA4CP;AAED,wBAAgB,wBAAwB,CAAC,KAAK,SAAS,4BAA4B,EACjF,KAAK,EAAE,KAAK,EAAE,EACd,yBAAyB,GAAE,MAA4B,EACvD,MAAM,GAAE,QAAc,GACrB,KAAK,EAAE,CAOT;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACrD;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,yBAAyB,GAAE,MAA4B,GACtD,wBAAwB,CAS1B;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAS1E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUvE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAM1D;AAED,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,MAAM,GAAG;IACrE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAKA;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAS/F"}
|
|
1
|
+
{"version":3,"file":"conversation-id.d.ts","sourceRoot":"","sources":["../../src/extensions/conversation-id.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAG7C,eAAO,MAAM,0BAA0B,oBAAoB,CAAA;AAE3D,MAAM,WAAW,4BAA4B;IAC3C,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,4BAA4B,EAChF,IAAI,EAAE,KAAK,EACX,MAAM,GAAE,QAAc,GACrB,KAAK,CA4CP;AAED,wBAAgB,wBAAwB,CAAC,KAAK,SAAS,4BAA4B,EACjF,KAAK,EAAE,KAAK,EAAE,EACd,yBAAyB,GAAE,MAA4B,EACvD,yBAAyB,UAAO,EAChC,MAAM,GAAE,QAAc,GACrB,KAAK,EAAE,CAOT;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACrD;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,yBAAyB,GAAE,MAA4B,GACtD,wBAAwB,CAS1B;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAS1E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUvE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAM1D;AAED,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,MAAM,GAAG;IACrE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAKA;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAS/F"}
|
|
@@ -65,9 +65,9 @@ function addConversationIdToTool(tool, logger = external_logger_js_namespaceObje
|
|
|
65
65
|
};
|
|
66
66
|
return modifiedTool;
|
|
67
67
|
}
|
|
68
|
-
function addConversationIdToTools(tools, missingCapabilityToolName = external_tools_js_namespaceObject.GET_MORE_TOOLS_NAME, logger = external_logger_js_namespaceObject.log) {
|
|
68
|
+
function addConversationIdToTools(tools, missingCapabilityToolName = external_tools_js_namespaceObject.GET_MORE_TOOLS_NAME, skipMissingCapabilityTool = true, logger = external_logger_js_namespaceObject.log) {
|
|
69
69
|
return tools.map((tool)=>{
|
|
70
|
-
if (tool.name === missingCapabilityToolName) return tool;
|
|
70
|
+
if (skipMissingCapabilityTool && tool.name === missingCapabilityToolName) return tool;
|
|
71
71
|
return addConversationIdToTool(tool, logger);
|
|
72
72
|
});
|
|
73
73
|
}
|
|
@@ -29,9 +29,9 @@ function addConversationIdToTool(tool, logger = log) {
|
|
|
29
29
|
};
|
|
30
30
|
return modifiedTool;
|
|
31
31
|
}
|
|
32
|
-
function addConversationIdToTools(tools, missingCapabilityToolName = GET_MORE_TOOLS_NAME, logger = log) {
|
|
32
|
+
function addConversationIdToTools(tools, missingCapabilityToolName = GET_MORE_TOOLS_NAME, skipMissingCapabilityTool = true, logger = log) {
|
|
33
33
|
return tools.map((tool)=>{
|
|
34
|
-
if (tool.name === missingCapabilityToolName) return tool;
|
|
34
|
+
if (skipMissingCapabilityTool && tool.name === missingCapabilityToolName) return tool;
|
|
35
35
|
return addConversationIdToTool(tool, logger);
|
|
36
36
|
});
|
|
37
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument-highlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-highlevel.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,sBAAsB,EAIvB,MAAM,UAAU,CAAA;AASjB,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":"AAMA,OAAO,KAAK,EAEV,sBAAsB,EAIvB,MAAM,UAAU,CAAA;AASjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AA8PxC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CA2BhG"}
|
|
@@ -107,7 +107,6 @@ function setupListenerToRegisteredTools(server, logger) {
|
|
|
107
107
|
function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInputSchema, logger) {
|
|
108
108
|
const originalCallback = (0, external_mcp_sdk_compat_js_namespaceObject.getToolFunction)(tool);
|
|
109
109
|
const options = (0, external_internal_js_namespaceObject.getServerTrackingData)(server.server)?.options;
|
|
110
|
-
const missingToolName = (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(options);
|
|
111
110
|
if (wrappedCallbacks.has(originalCallback)) {
|
|
112
111
|
logger(`Tool ${toolName} callback already wrapped, skipping re-wrap`);
|
|
113
112
|
return tool;
|
|
@@ -128,8 +127,8 @@ function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInpu
|
|
|
128
127
|
}
|
|
129
128
|
const inputSchema = getCurrentInputSchema();
|
|
130
129
|
const cleanedArgs = (0, external_analytics_parameters_js_namespaceObject.stripOwnedAnalyticsArguments)(args, {
|
|
131
|
-
context:
|
|
132
|
-
conversationId:
|
|
130
|
+
context: (0, external_context_parameters_js_namespaceObject.isContextEnabled)(options?.context) && (0, external_analytics_parameters_js_namespaceObject.analyticsOwnsParameter)(inputSchema, 'context'),
|
|
131
|
+
conversationId: options?.enableConversationId === true && (0, external_analytics_parameters_js_namespaceObject.analyticsOwnsParameter)(inputSchema, 'conversation_id')
|
|
133
132
|
});
|
|
134
133
|
try {
|
|
135
134
|
if (void 0 === cleanedArgs) {
|
|
@@ -155,7 +154,9 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
|
|
|
155
154
|
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
156
155
|
return await originalCallToolHandler(request, extra);
|
|
157
156
|
}
|
|
158
|
-
|
|
157
|
+
const toolName = request.params?.name;
|
|
158
|
+
const isMissingCapabilityCandidate = data.options.reportMissing && toolName === (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(data.options);
|
|
159
|
+
if (isMissingCapabilityCandidate && await (0, external_instrumentation_js_namespaceObject.isToolAdvertised)(server, toolName, extra, data.logger) === false) {
|
|
159
160
|
const context = (0, external_tracing_helpers_js_namespaceObject.getContextArgument)(request) || '';
|
|
160
161
|
return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
|
|
161
162
|
server,
|
|
@@ -169,7 +170,6 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
|
|
|
169
170
|
}, data.logger)
|
|
170
171
|
});
|
|
171
172
|
}
|
|
172
|
-
const toolName = request.params?.name;
|
|
173
173
|
const registeredTool = toolName ? highLevelServer._registeredTools[toolName] : void 0;
|
|
174
174
|
return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
|
|
175
175
|
server,
|
|
@@ -4,7 +4,7 @@ import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
|
4
4
|
import { getServerTrackingData } from "./internal.mjs";
|
|
5
5
|
import { createWrappedTool, getToolFunction, hasToolFunction } from "./mcp-sdk-compat.mjs";
|
|
6
6
|
import { handleReportMissing, resolveMissingCapabilityToolName } from "./tools.mjs";
|
|
7
|
-
import { captureToolCall, handleInitializeRequest, handleListToolsRequest, patchRequestHandlers, readToolMetaCategory } from "./instrumentation.mjs";
|
|
7
|
+
import { captureToolCall, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, readToolMetaCategory } from "./instrumentation.mjs";
|
|
8
8
|
import { getContextArgument } from "./tracing-helpers.mjs";
|
|
9
9
|
const wrappedCallbacks = new WeakMap();
|
|
10
10
|
const MCP_ANALYTICS_PROCESSED = Symbol('__posthog_mcp_analytics_processed__');
|
|
@@ -79,7 +79,6 @@ function setupListenerToRegisteredTools(server, logger) {
|
|
|
79
79
|
function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInputSchema, logger) {
|
|
80
80
|
const originalCallback = getToolFunction(tool);
|
|
81
81
|
const options = getServerTrackingData(server.server)?.options;
|
|
82
|
-
const missingToolName = resolveMissingCapabilityToolName(options);
|
|
83
82
|
if (wrappedCallbacks.has(originalCallback)) {
|
|
84
83
|
logger(`Tool ${toolName} callback already wrapped, skipping re-wrap`);
|
|
85
84
|
return tool;
|
|
@@ -100,8 +99,8 @@ function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInpu
|
|
|
100
99
|
}
|
|
101
100
|
const inputSchema = getCurrentInputSchema();
|
|
102
101
|
const cleanedArgs = stripOwnedAnalyticsArguments(args, {
|
|
103
|
-
context:
|
|
104
|
-
conversationId:
|
|
102
|
+
context: isContextEnabled(options?.context) && analyticsOwnsParameter(inputSchema, 'context'),
|
|
103
|
+
conversationId: options?.enableConversationId === true && analyticsOwnsParameter(inputSchema, 'conversation_id')
|
|
105
104
|
});
|
|
106
105
|
try {
|
|
107
106
|
if (void 0 === cleanedArgs) {
|
|
@@ -127,7 +126,9 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
|
|
|
127
126
|
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
128
127
|
return await originalCallToolHandler(request, extra);
|
|
129
128
|
}
|
|
130
|
-
|
|
129
|
+
const toolName = request.params?.name;
|
|
130
|
+
const isMissingCapabilityCandidate = data.options.reportMissing && toolName === resolveMissingCapabilityToolName(data.options);
|
|
131
|
+
if (isMissingCapabilityCandidate && await isToolAdvertised(server, toolName, extra, data.logger) === false) {
|
|
131
132
|
const context = getContextArgument(request) || '';
|
|
132
133
|
return await captureToolCall({
|
|
133
134
|
server,
|
|
@@ -141,7 +142,6 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
|
|
|
141
142
|
}, data.logger)
|
|
142
143
|
});
|
|
143
144
|
}
|
|
144
|
-
const toolName = request.params?.name;
|
|
145
145
|
const registeredTool = toolName ? highLevelServer._registeredTools[toolName] : void 0;
|
|
146
146
|
return await captureToolCall({
|
|
147
147
|
server,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument-lowlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-lowlevel.ts"],"names":[],"mappings":"AAMA,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":"AAMA,OAAO,KAAK,EAAiD,aAAa,EAAE,MAAM,UAAU,CAAA;AAG5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAkBxC;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CA0BtF"}
|
|
@@ -34,13 +34,16 @@ const external_instrumentation_js_namespaceObject = require("./instrumentation.j
|
|
|
34
34
|
const external_tracing_helpers_js_namespaceObject = require("./tracing-helpers.js");
|
|
35
35
|
function instrumentLowLevelServer(server, logger) {
|
|
36
36
|
try {
|
|
37
|
+
const hadCallToolHandler = server._requestHandlers.has('tools/call');
|
|
37
38
|
const handlers = {
|
|
38
39
|
initialize: (server, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleInitializeRequest)(server, originalHandler, request, extra, logger),
|
|
39
|
-
'tools/list': (server, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleListToolsRequest)(server, originalHandler, request, extra, logger)
|
|
40
|
+
'tools/list': (server, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleListToolsRequest)(server, originalHandler, request, extra, logger),
|
|
41
|
+
'tools/call': (server, originalHandler, request, extra)=>handleToolCallRequest(server, originalHandler, request, extra, logger)
|
|
40
42
|
};
|
|
41
43
|
(0, external_instrumentation_js_namespaceObject.patchRequestHandlers)(server, handlers);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
if (!hadCallToolHandler) server.setRequestHandler(types_js_namespaceObject.CallToolRequestSchema, async (request)=>{
|
|
45
|
+
throw new Error(`Unknown tool: ${request.params?.name || 'unknown'}`);
|
|
46
|
+
});
|
|
44
47
|
} catch (error) {
|
|
45
48
|
logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
46
49
|
throw error;
|
|
@@ -52,7 +55,9 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
|
|
|
52
55
|
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
53
56
|
return await originalCallToolHandler?.(request, extra);
|
|
54
57
|
}
|
|
55
|
-
|
|
58
|
+
const toolName = request.params?.name;
|
|
59
|
+
const isMissingCapabilityCandidate = data.options.reportMissing && toolName === (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(data.options);
|
|
60
|
+
if (isMissingCapabilityCandidate && await (0, external_instrumentation_js_namespaceObject.isToolAdvertised)(server, toolName, extra, data.logger) === false) {
|
|
56
61
|
const context = (0, external_tracing_helpers_js_namespaceObject.getContextArgument)(request) || '';
|
|
57
62
|
return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
|
|
58
63
|
server,
|
|
@@ -2,17 +2,20 @@ import { CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
|
2
2
|
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
3
3
|
import { getServerTrackingData } from "./internal.mjs";
|
|
4
4
|
import { handleReportMissing, resolveMissingCapabilityToolName } from "./tools.mjs";
|
|
5
|
-
import { captureToolCall, handleInitializeRequest, handleListToolsRequest, patchRequestHandlers } from "./instrumentation.mjs";
|
|
5
|
+
import { captureToolCall, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers } from "./instrumentation.mjs";
|
|
6
6
|
import { getContextArgument } from "./tracing-helpers.mjs";
|
|
7
7
|
function instrumentLowLevelServer(server, logger) {
|
|
8
8
|
try {
|
|
9
|
+
const hadCallToolHandler = server._requestHandlers.has('tools/call');
|
|
9
10
|
const handlers = {
|
|
10
11
|
initialize: (server, originalHandler, request, extra)=>handleInitializeRequest(server, originalHandler, request, extra, logger),
|
|
11
|
-
'tools/list': (server, originalHandler, request, extra)=>handleListToolsRequest(server, originalHandler, request, extra, logger)
|
|
12
|
+
'tools/list': (server, originalHandler, request, extra)=>handleListToolsRequest(server, originalHandler, request, extra, logger),
|
|
13
|
+
'tools/call': (server, originalHandler, request, extra)=>handleToolCallRequest(server, originalHandler, request, extra, logger)
|
|
12
14
|
};
|
|
13
15
|
patchRequestHandlers(server, handlers);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
if (!hadCallToolHandler) server.setRequestHandler(CallToolRequestSchema, async (request)=>{
|
|
17
|
+
throw new Error(`Unknown tool: ${request.params?.name || 'unknown'}`);
|
|
18
|
+
});
|
|
16
19
|
} catch (error) {
|
|
17
20
|
logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
18
21
|
throw error;
|
|
@@ -24,7 +27,9 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
|
|
|
24
27
|
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
25
28
|
return await originalCallToolHandler?.(request, extra);
|
|
26
29
|
}
|
|
27
|
-
|
|
30
|
+
const toolName = request.params?.name;
|
|
31
|
+
const isMissingCapabilityCandidate = data.options.reportMissing && toolName === resolveMissingCapabilityToolName(data.options);
|
|
32
|
+
if (isMissingCapabilityCandidate && await isToolAdvertised(server, toolName, extra, data.logger) === false) {
|
|
28
33
|
const context = getContextArgument(request) || '';
|
|
29
34
|
return await captureToolCall({
|
|
30
35
|
server,
|
|
@@ -55,14 +55,14 @@ export declare function captureToolCall(params: TraceToolCallParams): Promise<un
|
|
|
55
55
|
* supplies `request` and `extra` per call.
|
|
56
56
|
*/
|
|
57
57
|
export type HandlerPatch = (server: MCPServerLike, originalHandler: MCPRequestHandler, request: MCPRequestLike, extra: CompatibleRequestHandlerExtra | undefined) => Promise<unknown>;
|
|
58
|
+
export declare function patchRequestHandlers(server: MCPServerLike, patches: Record<string, HandlerPatch>): void;
|
|
58
59
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* bare server to instrument() and only then registers its handlers.
|
|
60
|
+
* Checks the server's raw listing for a real owner of a candidate virtual tool.
|
|
61
|
+
* This does not depend on a previous client request and does not call the
|
|
62
|
+
* instrumented list wrapper, so it neither injects PostHog tools nor captures a
|
|
63
|
+
* synthetic tools/list event. `undefined` fails open to the real dispatcher.
|
|
64
64
|
*/
|
|
65
|
-
export declare function
|
|
65
|
+
export declare function isToolAdvertised(server: MCPServerLike, toolName: string, extra: CompatibleRequestHandlerExtra | undefined, logger: LoggerFn): Promise<boolean | undefined>;
|
|
66
66
|
/**
|
|
67
67
|
* Captures each `tools/list` and injects the SDK-managed tools (context
|
|
68
68
|
* parameter, conversation id, `get_more_tools`) into the returned list.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,KAAK,EACV,2BAA2B,EAC3B,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"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"}
|