@posthog/mcp 0.10.3 → 0.10.5
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/analytics-parameters.d.ts +5 -0
- package/dist/extensions/analytics-parameters.d.ts.map +1 -1
- package/dist/extensions/analytics-parameters.js +57 -3
- package/dist/extensions/analytics-parameters.mjs +47 -2
- package/dist/extensions/capture.d.ts +2 -1
- package/dist/extensions/capture.d.ts.map +1 -1
- package/dist/extensions/capture.js +2 -3
- package/dist/extensions/capture.mjs +2 -3
- package/dist/extensions/compatibility.d.ts +3 -2
- package/dist/extensions/compatibility.d.ts.map +1 -1
- package/dist/extensions/compatibility.js +19 -20
- package/dist/extensions/compatibility.mjs +15 -16
- package/dist/extensions/context-parameters.d.ts +4 -3
- package/dist/extensions/context-parameters.d.ts.map +1 -1
- package/dist/extensions/context-parameters.js +4 -5
- package/dist/extensions/context-parameters.mjs +4 -4
- package/dist/extensions/conversation-id.d.ts +3 -8
- package/dist/extensions/conversation-id.d.ts.map +1 -1
- package/dist/extensions/conversation-id.js +6 -22
- package/dist/extensions/conversation-id.mjs +5 -17
- package/dist/extensions/instrument-highlevel.d.ts +2 -1
- package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-highlevel.js +31 -51
- package/dist/extensions/instrument-highlevel.mjs +30 -50
- package/dist/extensions/instrument-lowlevel.d.ts +2 -1
- package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-lowlevel.js +8 -9
- package/dist/extensions/instrument-lowlevel.mjs +8 -9
- package/dist/extensions/instrumentation.d.ts +7 -8
- package/dist/extensions/instrumentation.d.ts.map +1 -1
- package/dist/extensions/instrumentation.js +57 -32
- package/dist/extensions/instrumentation.mjs +58 -33
- package/dist/extensions/intent.d.ts +1 -1
- package/dist/extensions/intent.d.ts.map +1 -1
- package/dist/extensions/intent.js +3 -4
- package/dist/extensions/intent.mjs +3 -4
- package/dist/extensions/internal.d.ts.map +1 -1
- package/dist/extensions/internal.js +5 -6
- package/dist/extensions/internal.mjs +5 -6
- package/dist/extensions/logger.d.ts +12 -4
- package/dist/extensions/logger.d.ts.map +1 -1
- package/dist/extensions/logger.js +12 -3
- package/dist/extensions/logger.mjs +10 -4
- package/dist/extensions/sink.d.ts +4 -2
- package/dist/extensions/sink.d.ts.map +1 -1
- package/dist/extensions/sink.js +11 -10
- package/dist/extensions/sink.mjs +11 -10
- package/dist/extensions/tools.d.ts +2 -1
- package/dist/extensions/tools.d.ts.map +1 -1
- package/dist/extensions/tools.js +2 -2
- package/dist/extensions/tools.mjs +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -16
- package/dist/index.mjs +20 -17
- package/dist/types.d.ts +7 -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 +4 -4
- package/src/extensions/analytics-parameters.ts +67 -1
- package/src/extensions/capture.ts +3 -3
- package/src/extensions/compatibility.ts +16 -16
- package/src/extensions/context-parameters.ts +9 -7
- package/src/extensions/conversation-id.ts +12 -25
- package/src/extensions/instrument-highlevel.ts +52 -75
- package/src/extensions/instrument-lowlevel.ts +14 -10
- package/src/extensions/instrumentation.ts +101 -36
- package/src/extensions/intent.ts +8 -3
- package/src/extensions/internal.ts +7 -6
- package/src/extensions/logger.ts +22 -7
- package/src/extensions/sink.ts +17 -12
- package/src/extensions/tools.ts +3 -3
- package/src/index.ts +22 -19
- package/src/types.ts +8 -0
- package/src/version.ts +1 -1
|
@@ -4,14 +4,14 @@ import { DEFAULT_CONVERSATION_ID_DESCRIPTION } from "./constants.mjs";
|
|
|
4
4
|
import { log } from "./logger.mjs";
|
|
5
5
|
import { GET_MORE_TOOLS_NAME } from "./tools.mjs";
|
|
6
6
|
const CONVERSATION_ID_PARAM_NAME = 'conversation_id';
|
|
7
|
-
function addConversationIdToTool(tool) {
|
|
7
|
+
function addConversationIdToTool(tool, logger = log) {
|
|
8
8
|
const modifiedTool = {
|
|
9
9
|
...tool
|
|
10
10
|
};
|
|
11
11
|
const toolName = tool.name || 'unknown';
|
|
12
12
|
const schema = modifiedTool.inputSchema;
|
|
13
13
|
if (!canInjectAnalyticsParameter(schema, CONVERSATION_ID_PARAM_NAME)) {
|
|
14
|
-
hasAnalyticsParameter(schema, CONVERSATION_ID_PARAM_NAME) ?
|
|
14
|
+
logger(hasAnalyticsParameter(schema, CONVERSATION_ID_PARAM_NAME) ? `WARN: Tool "${toolName}" already has '${CONVERSATION_ID_PARAM_NAME}' parameter. Skipping conversation_id injection.` : `WARN: Tool "${toolName}" has complex schema (oneOf/allOf/anyOf/$ref). Skipping conversation_id injection.`);
|
|
15
15
|
return modifiedTool;
|
|
16
16
|
}
|
|
17
17
|
if (!modifiedTool.inputSchema) modifiedTool.inputSchema = {
|
|
@@ -29,10 +29,10 @@ function addConversationIdToTool(tool) {
|
|
|
29
29
|
};
|
|
30
30
|
return modifiedTool;
|
|
31
31
|
}
|
|
32
|
-
function addConversationIdToTools(tools, missingCapabilityToolName = GET_MORE_TOOLS_NAME) {
|
|
32
|
+
function addConversationIdToTools(tools, missingCapabilityToolName = GET_MORE_TOOLS_NAME, logger = log) {
|
|
33
33
|
return tools.map((tool)=>{
|
|
34
34
|
if (tool.name === missingCapabilityToolName) return tool;
|
|
35
|
-
return addConversationIdToTool(tool);
|
|
35
|
+
return addConversationIdToTool(tool, logger);
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
38
|
function resolveConversationId(enabled, args, toolName, missingCapabilityToolName = GET_MORE_TOOLS_NAME) {
|
|
@@ -63,18 +63,6 @@ function extractConversationId(args) {
|
|
|
63
63
|
const trimmed = value.trim();
|
|
64
64
|
return trimmed.length > 0 ? trimmed : void 0;
|
|
65
65
|
}
|
|
66
|
-
function cloneRequestWithoutConversationId(request) {
|
|
67
|
-
if (!request.params || 'object' != typeof request.params) return request;
|
|
68
|
-
const args = request.params.arguments;
|
|
69
|
-
if (!(args && 'object' == typeof args)) return request;
|
|
70
|
-
return {
|
|
71
|
-
...request,
|
|
72
|
-
params: {
|
|
73
|
-
...request.params,
|
|
74
|
-
arguments: stripConversationId(args)
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
66
|
function stripConversationId(args) {
|
|
79
67
|
if (!args || 'object' != typeof args || !(CONVERSATION_ID_PARAM_NAME in args)) return args;
|
|
80
68
|
const { [CONVERSATION_ID_PARAM_NAME]: _omit, ...rest } = args;
|
|
@@ -97,4 +85,4 @@ function injectConversationIdPromptBack(result, conversationId) {
|
|
|
97
85
|
]
|
|
98
86
|
};
|
|
99
87
|
}
|
|
100
|
-
export { CONVERSATION_ID_PARAM_NAME, addConversationIdToTool, addConversationIdToTools, buildConversationIdPromptBack, canInjectConversationIdPromptBack,
|
|
88
|
+
export { CONVERSATION_ID_PARAM_NAME, addConversationIdToTool, addConversationIdToTools, buildConversationIdPromptBack, canInjectConversationIdPromptBack, extractConversationId, injectConversationIdPromptBack, resolveConversationId, stripConversationId };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { HighLevelMCPServerLike } from '../types';
|
|
2
|
-
|
|
2
|
+
import type { LoggerFn } from './logger';
|
|
3
|
+
export declare function instrumentHighLevelServer(server: HighLevelMCPServerLike, logger: LoggerFn): void;
|
|
3
4
|
//# sourceMappingURL=instrument-highlevel.d.ts.map
|
|
@@ -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;
|
|
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;AAmQxC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CA2BhG"}
|
|
@@ -27,11 +27,9 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
27
27
|
instrumentHighLevelServer: ()=>instrumentHighLevelServer
|
|
28
28
|
});
|
|
29
29
|
const external_analytics_parameters_js_namespaceObject = require("./analytics-parameters.js");
|
|
30
|
-
const external_conversation_id_js_namespaceObject = require("./conversation-id.js");
|
|
31
30
|
const external_context_parameters_js_namespaceObject = require("./context-parameters.js");
|
|
32
31
|
const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
33
32
|
const external_internal_js_namespaceObject = require("./internal.js");
|
|
34
|
-
const external_logger_js_namespaceObject = require("./logger.js");
|
|
35
33
|
const external_mcp_sdk_compat_js_namespaceObject = require("./mcp-sdk-compat.js");
|
|
36
34
|
const external_tools_js_namespaceObject = require("./tools.js");
|
|
37
35
|
const external_instrumentation_js_namespaceObject = require("./instrumentation.js");
|
|
@@ -41,52 +39,31 @@ const MCP_ANALYTICS_PROCESSED = Symbol('__posthog_mcp_analytics_processed__');
|
|
|
41
39
|
function isCallbackUpdate(value) {
|
|
42
40
|
return !!value && 'object' == typeof value && 'callback' in value && 'function' == typeof value.callback;
|
|
43
41
|
}
|
|
44
|
-
function
|
|
45
|
-
if (!inputSchema || 'object' != typeof inputSchema) return (0, external_analytics_parameters_js_namespaceObject.canInjectAnalyticsParameter)(void 0, parameterName);
|
|
46
|
-
if ((0, external_mcp_sdk_compat_js_namespaceObject.isZodRawShapeCompat)(inputSchema)) return (0, external_analytics_parameters_js_namespaceObject.canInjectAnalyticsParameter)({
|
|
47
|
-
properties: inputSchema
|
|
48
|
-
}, parameterName);
|
|
49
|
-
const shape = (0, external_mcp_sdk_compat_js_namespaceObject.getObjectShape)(inputSchema);
|
|
50
|
-
if (shape) return (0, external_analytics_parameters_js_namespaceObject.canInjectAnalyticsParameter)({
|
|
51
|
-
properties: shape
|
|
52
|
-
}, parameterName);
|
|
53
|
-
const schema = inputSchema;
|
|
54
|
-
if ('_def' in schema || '_zod' in schema || '~standard' in schema) return (0, external_analytics_parameters_js_namespaceObject.canInjectAnalyticsParameter)(void 0, parameterName);
|
|
55
|
-
return (0, external_analytics_parameters_js_namespaceObject.canInjectAnalyticsParameter)(schema, parameterName);
|
|
56
|
-
}
|
|
57
|
-
function stripOwnedAnalyticsArguments(args, ownership) {
|
|
58
|
-
let cleanedArgs = args;
|
|
59
|
-
if (ownership.context && cleanedArgs && 'object' == typeof cleanedArgs && 'context' in cleanedArgs) {
|
|
60
|
-
const { context: _context, ...rest } = cleanedArgs;
|
|
61
|
-
cleanedArgs = rest;
|
|
62
|
-
}
|
|
63
|
-
return ownership.conversationId ? (0, external_conversation_id_js_namespaceObject.stripConversationId)(cleanedArgs) : cleanedArgs;
|
|
64
|
-
}
|
|
65
|
-
function addTracingToToolRegistry(tools, server) {
|
|
42
|
+
function addTracingToToolRegistry(tools, server, logger) {
|
|
66
43
|
return Object.fromEntries(Object.entries(tools).map(([name, tool])=>[
|
|
67
44
|
name,
|
|
68
|
-
addTracingToToolCallbackInternal(tool, name, server)
|
|
45
|
+
addTracingToToolCallbackInternal(tool, name, server, ()=>tool.inputSchema, logger)
|
|
69
46
|
]));
|
|
70
47
|
}
|
|
71
|
-
function setupListenerToRegisteredTools(server) {
|
|
48
|
+
function setupListenerToRegisteredTools(server, logger) {
|
|
72
49
|
try {
|
|
73
50
|
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server.server);
|
|
74
|
-
if (!data) return void (
|
|
51
|
+
if (!data) return void logger('Warning: Cannot setup listener - no tracking data found');
|
|
75
52
|
const handler = {
|
|
76
53
|
set (target, property, value) {
|
|
77
54
|
try {
|
|
78
55
|
if ('string' == typeof property && value && 'object' == typeof value && (0, external_mcp_sdk_compat_js_namespaceObject.hasToolFunction)(value)) {
|
|
79
56
|
if ('string' == typeof value.description) data.toolDescriptions.set(property, value.description);
|
|
80
57
|
if (value[MCP_ANALYTICS_PROCESSED]) {
|
|
81
|
-
(
|
|
58
|
+
logger(`Tool ${String(property)} already processed, skipping proxy wrapping`);
|
|
82
59
|
return Reflect.set(target, property, value);
|
|
83
60
|
}
|
|
84
61
|
if (wrappedCallbacks.has((0, external_mcp_sdk_compat_js_namespaceObject.getToolFunction)(value))) {
|
|
85
|
-
(
|
|
62
|
+
logger(`Tool ${String(property)} callback already wrapped, skipping proxy wrapping`);
|
|
86
63
|
return Reflect.set(target, property, value);
|
|
87
64
|
}
|
|
88
65
|
const getCurrentInputSchema = ()=>value.inputSchema;
|
|
89
|
-
const nextValue = addTracingToToolCallbackInternal(value, property, server, getCurrentInputSchema);
|
|
66
|
+
const nextValue = addTracingToToolCallbackInternal(value, property, server, getCurrentInputSchema, logger);
|
|
90
67
|
if ('function' == typeof nextValue.update) {
|
|
91
68
|
const originalUpdate = nextValue.update;
|
|
92
69
|
nextValue.update = function(...updateArgs) {
|
|
@@ -95,7 +72,7 @@ function setupListenerToRegisteredTools(server) {
|
|
|
95
72
|
if (isCallbackUpdate(updateObj)) {
|
|
96
73
|
const wrappedTool = addTracingToToolCallbackInternal({
|
|
97
74
|
callback: updateObj.callback
|
|
98
|
-
}, property, server, getCurrentInputSchema);
|
|
75
|
+
}, property, server, getCurrentInputSchema, logger);
|
|
99
76
|
updateObj.callback = (0, external_mcp_sdk_compat_js_namespaceObject.getToolFunction)(wrappedTool);
|
|
100
77
|
}
|
|
101
78
|
}
|
|
@@ -106,7 +83,7 @@ function setupListenerToRegisteredTools(server) {
|
|
|
106
83
|
}
|
|
107
84
|
return Reflect.set(target, property, value);
|
|
108
85
|
} catch (error) {
|
|
109
|
-
(
|
|
86
|
+
logger(`Warning: Error in proxy set handler for tool ${String(property)} - ${error}`);
|
|
110
87
|
return Reflect.set(target, property, value);
|
|
111
88
|
}
|
|
112
89
|
},
|
|
@@ -122,21 +99,21 @@ function setupListenerToRegisteredTools(server) {
|
|
|
122
99
|
};
|
|
123
100
|
const originalTools = server._registeredTools || {};
|
|
124
101
|
server._registeredTools = new Proxy(originalTools, handler);
|
|
125
|
-
(
|
|
102
|
+
logger('Successfully set up listener for new tool registrations');
|
|
126
103
|
} catch (error) {
|
|
127
|
-
(
|
|
104
|
+
logger(`Warning: Failed to setup listener for registered tools - ${error}`);
|
|
128
105
|
}
|
|
129
106
|
}
|
|
130
|
-
function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInputSchema
|
|
107
|
+
function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInputSchema, logger) {
|
|
131
108
|
const originalCallback = (0, external_mcp_sdk_compat_js_namespaceObject.getToolFunction)(tool);
|
|
132
109
|
const options = (0, external_internal_js_namespaceObject.getServerTrackingData)(server.server)?.options;
|
|
133
110
|
const missingToolName = (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(options);
|
|
134
111
|
if (wrappedCallbacks.has(originalCallback)) {
|
|
135
|
-
(
|
|
112
|
+
logger(`Tool ${toolName} callback already wrapped, skipping re-wrap`);
|
|
136
113
|
return tool;
|
|
137
114
|
}
|
|
138
115
|
if (tool[MCP_ANALYTICS_PROCESSED]) {
|
|
139
|
-
(
|
|
116
|
+
logger(`Tool ${toolName} already processed, skipping re-wrap`);
|
|
140
117
|
return tool;
|
|
141
118
|
}
|
|
142
119
|
const wrappedCallback = async (...params)=>{
|
|
@@ -150,9 +127,9 @@ function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInpu
|
|
|
150
127
|
extra = params[0];
|
|
151
128
|
}
|
|
152
129
|
const inputSchema = getCurrentInputSchema();
|
|
153
|
-
const cleanedArgs = stripOwnedAnalyticsArguments(args, {
|
|
154
|
-
context: toolName !== missingToolName && (0, external_context_parameters_js_namespaceObject.isContextEnabled)(options?.context) && analyticsOwnsParameter(inputSchema, 'context'),
|
|
155
|
-
conversationId: toolName !== missingToolName && options?.enableConversationId === true && analyticsOwnsParameter(inputSchema, 'conversation_id')
|
|
130
|
+
const cleanedArgs = (0, external_analytics_parameters_js_namespaceObject.stripOwnedAnalyticsArguments)(args, {
|
|
131
|
+
context: toolName !== missingToolName && (0, external_context_parameters_js_namespaceObject.isContextEnabled)(options?.context) && (0, external_analytics_parameters_js_namespaceObject.analyticsOwnsParameter)(inputSchema, 'context'),
|
|
132
|
+
conversationId: toolName !== missingToolName && options?.enableConversationId === true && (0, external_analytics_parameters_js_namespaceObject.analyticsOwnsParameter)(inputSchema, 'conversation_id')
|
|
156
133
|
});
|
|
157
134
|
try {
|
|
158
135
|
if (void 0 === cleanedArgs) {
|
|
@@ -172,10 +149,10 @@ function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInpu
|
|
|
172
149
|
wrappedTool[MCP_ANALYTICS_PROCESSED] = true;
|
|
173
150
|
return wrappedTool;
|
|
174
151
|
}
|
|
175
|
-
async function handleToolCallRequest(server, originalCallToolHandler, request, extra) {
|
|
152
|
+
async function handleToolCallRequest(highLevelServer, server, originalCallToolHandler, request, extra, logger) {
|
|
176
153
|
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
177
154
|
if (!data) {
|
|
178
|
-
(
|
|
155
|
+
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
179
156
|
return await originalCallToolHandler(request, extra);
|
|
180
157
|
}
|
|
181
158
|
if (request.params?.name === (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(data.options)) {
|
|
@@ -189,15 +166,18 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
|
|
|
189
166
|
explicitContextIntent: context,
|
|
190
167
|
execute: async ()=>(0, external_tools_js_namespaceObject.handleReportMissing)({
|
|
191
168
|
context
|
|
192
|
-
})
|
|
169
|
+
}, data.logger)
|
|
193
170
|
});
|
|
194
171
|
}
|
|
172
|
+
const toolName = request.params?.name;
|
|
173
|
+
const registeredTool = toolName ? highLevelServer._registeredTools[toolName] : void 0;
|
|
195
174
|
return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
|
|
196
175
|
server,
|
|
197
176
|
data,
|
|
198
177
|
request,
|
|
199
178
|
extra,
|
|
200
|
-
execute: ()=>originalCallToolHandler(
|
|
179
|
+
execute: (downstreamRequest)=>originalCallToolHandler(downstreamRequest, extra),
|
|
180
|
+
parameterOwnership: registeredTool ? (0, external_analytics_parameters_js_namespaceObject.getAnalyticsParameterOwnership)(registeredTool.inputSchema) : void 0,
|
|
201
181
|
takeCapturedError: ()=>{
|
|
202
182
|
const captured = extra?.__mcp_analytics_error;
|
|
203
183
|
if (extra) extra.__mcp_analytics_error = void 0;
|
|
@@ -205,24 +185,24 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
|
|
|
205
185
|
}
|
|
206
186
|
});
|
|
207
187
|
}
|
|
208
|
-
function instrumentHighLevelServer(server) {
|
|
188
|
+
function instrumentHighLevelServer(server, logger) {
|
|
209
189
|
try {
|
|
210
190
|
const lowLevelServer = server.server;
|
|
211
191
|
const mcpAnalyticsData = (0, external_internal_js_namespaceObject.getServerTrackingData)(lowLevelServer);
|
|
212
192
|
const handlers = {
|
|
213
|
-
initialize: external_instrumentation_js_namespaceObject.handleInitializeRequest,
|
|
214
|
-
'tools/list': external_instrumentation_js_namespaceObject.handleListToolsRequest,
|
|
215
|
-
'tools/call': handleToolCallRequest
|
|
193
|
+
initialize: (trackedServer, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleInitializeRequest)(trackedServer, originalHandler, request, extra, logger),
|
|
194
|
+
'tools/list': (trackedServer, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleListToolsRequest)(trackedServer, originalHandler, request, extra, logger),
|
|
195
|
+
'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra, logger)
|
|
216
196
|
};
|
|
217
197
|
(0, external_instrumentation_js_namespaceObject.patchRequestHandlers)(lowLevelServer, handlers);
|
|
218
|
-
server._registeredTools = addTracingToToolRegistry(server._registeredTools, server);
|
|
198
|
+
server._registeredTools = addTracingToToolRegistry(server._registeredTools, server, logger);
|
|
219
199
|
if (mcpAnalyticsData) {
|
|
220
200
|
seedToolDescriptionsFromRegistry(mcpAnalyticsData.toolDescriptions, server._registeredTools);
|
|
221
201
|
seedToolCategoriesFromRegistry(mcpAnalyticsData.toolCategories, server._registeredTools);
|
|
222
202
|
}
|
|
223
|
-
setupListenerToRegisteredTools(server);
|
|
203
|
+
setupListenerToRegisteredTools(server, logger);
|
|
224
204
|
} catch (error) {
|
|
225
|
-
(
|
|
205
|
+
logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
226
206
|
}
|
|
227
207
|
}
|
|
228
208
|
function seedToolDescriptionsFromRegistry(cache, tools) {
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { stripConversationId } from "./conversation-id.mjs";
|
|
1
|
+
import { analyticsOwnsParameter, getAnalyticsParameterOwnership, stripOwnedAnalyticsArguments } from "./analytics-parameters.mjs";
|
|
3
2
|
import { isContextEnabled } from "./context-parameters.mjs";
|
|
4
3
|
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
5
4
|
import { getServerTrackingData } from "./internal.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import { createWrappedTool, getObjectShape, getToolFunction, hasToolFunction, isZodRawShapeCompat } from "./mcp-sdk-compat.mjs";
|
|
5
|
+
import { createWrappedTool, getToolFunction, hasToolFunction } from "./mcp-sdk-compat.mjs";
|
|
8
6
|
import { handleReportMissing, resolveMissingCapabilityToolName } from "./tools.mjs";
|
|
9
7
|
import { captureToolCall, handleInitializeRequest, handleListToolsRequest, patchRequestHandlers, readToolMetaCategory } from "./instrumentation.mjs";
|
|
10
8
|
import { getContextArgument } from "./tracing-helpers.mjs";
|
|
@@ -13,52 +11,31 @@ const MCP_ANALYTICS_PROCESSED = Symbol('__posthog_mcp_analytics_processed__');
|
|
|
13
11
|
function isCallbackUpdate(value) {
|
|
14
12
|
return !!value && 'object' == typeof value && 'callback' in value && 'function' == typeof value.callback;
|
|
15
13
|
}
|
|
16
|
-
function
|
|
17
|
-
if (!inputSchema || 'object' != typeof inputSchema) return canInjectAnalyticsParameter(void 0, parameterName);
|
|
18
|
-
if (isZodRawShapeCompat(inputSchema)) return canInjectAnalyticsParameter({
|
|
19
|
-
properties: inputSchema
|
|
20
|
-
}, parameterName);
|
|
21
|
-
const shape = getObjectShape(inputSchema);
|
|
22
|
-
if (shape) return canInjectAnalyticsParameter({
|
|
23
|
-
properties: shape
|
|
24
|
-
}, parameterName);
|
|
25
|
-
const schema = inputSchema;
|
|
26
|
-
if ('_def' in schema || '_zod' in schema || '~standard' in schema) return canInjectAnalyticsParameter(void 0, parameterName);
|
|
27
|
-
return canInjectAnalyticsParameter(schema, parameterName);
|
|
28
|
-
}
|
|
29
|
-
function stripOwnedAnalyticsArguments(args, ownership) {
|
|
30
|
-
let cleanedArgs = args;
|
|
31
|
-
if (ownership.context && cleanedArgs && 'object' == typeof cleanedArgs && 'context' in cleanedArgs) {
|
|
32
|
-
const { context: _context, ...rest } = cleanedArgs;
|
|
33
|
-
cleanedArgs = rest;
|
|
34
|
-
}
|
|
35
|
-
return ownership.conversationId ? stripConversationId(cleanedArgs) : cleanedArgs;
|
|
36
|
-
}
|
|
37
|
-
function addTracingToToolRegistry(tools, server) {
|
|
14
|
+
function addTracingToToolRegistry(tools, server, logger) {
|
|
38
15
|
return Object.fromEntries(Object.entries(tools).map(([name, tool])=>[
|
|
39
16
|
name,
|
|
40
|
-
addTracingToToolCallbackInternal(tool, name, server)
|
|
17
|
+
addTracingToToolCallbackInternal(tool, name, server, ()=>tool.inputSchema, logger)
|
|
41
18
|
]));
|
|
42
19
|
}
|
|
43
|
-
function setupListenerToRegisteredTools(server) {
|
|
20
|
+
function setupListenerToRegisteredTools(server, logger) {
|
|
44
21
|
try {
|
|
45
22
|
const data = getServerTrackingData(server.server);
|
|
46
|
-
if (!data) return void
|
|
23
|
+
if (!data) return void logger('Warning: Cannot setup listener - no tracking data found');
|
|
47
24
|
const handler = {
|
|
48
25
|
set (target, property, value) {
|
|
49
26
|
try {
|
|
50
27
|
if ('string' == typeof property && value && 'object' == typeof value && hasToolFunction(value)) {
|
|
51
28
|
if ('string' == typeof value.description) data.toolDescriptions.set(property, value.description);
|
|
52
29
|
if (value[MCP_ANALYTICS_PROCESSED]) {
|
|
53
|
-
|
|
30
|
+
logger(`Tool ${String(property)} already processed, skipping proxy wrapping`);
|
|
54
31
|
return Reflect.set(target, property, value);
|
|
55
32
|
}
|
|
56
33
|
if (wrappedCallbacks.has(getToolFunction(value))) {
|
|
57
|
-
|
|
34
|
+
logger(`Tool ${String(property)} callback already wrapped, skipping proxy wrapping`);
|
|
58
35
|
return Reflect.set(target, property, value);
|
|
59
36
|
}
|
|
60
37
|
const getCurrentInputSchema = ()=>value.inputSchema;
|
|
61
|
-
const nextValue = addTracingToToolCallbackInternal(value, property, server, getCurrentInputSchema);
|
|
38
|
+
const nextValue = addTracingToToolCallbackInternal(value, property, server, getCurrentInputSchema, logger);
|
|
62
39
|
if ('function' == typeof nextValue.update) {
|
|
63
40
|
const originalUpdate = nextValue.update;
|
|
64
41
|
nextValue.update = function(...updateArgs) {
|
|
@@ -67,7 +44,7 @@ function setupListenerToRegisteredTools(server) {
|
|
|
67
44
|
if (isCallbackUpdate(updateObj)) {
|
|
68
45
|
const wrappedTool = addTracingToToolCallbackInternal({
|
|
69
46
|
callback: updateObj.callback
|
|
70
|
-
}, property, server, getCurrentInputSchema);
|
|
47
|
+
}, property, server, getCurrentInputSchema, logger);
|
|
71
48
|
updateObj.callback = getToolFunction(wrappedTool);
|
|
72
49
|
}
|
|
73
50
|
}
|
|
@@ -78,7 +55,7 @@ function setupListenerToRegisteredTools(server) {
|
|
|
78
55
|
}
|
|
79
56
|
return Reflect.set(target, property, value);
|
|
80
57
|
} catch (error) {
|
|
81
|
-
|
|
58
|
+
logger(`Warning: Error in proxy set handler for tool ${String(property)} - ${error}`);
|
|
82
59
|
return Reflect.set(target, property, value);
|
|
83
60
|
}
|
|
84
61
|
},
|
|
@@ -94,21 +71,21 @@ function setupListenerToRegisteredTools(server) {
|
|
|
94
71
|
};
|
|
95
72
|
const originalTools = server._registeredTools || {};
|
|
96
73
|
server._registeredTools = new Proxy(originalTools, handler);
|
|
97
|
-
|
|
74
|
+
logger('Successfully set up listener for new tool registrations');
|
|
98
75
|
} catch (error) {
|
|
99
|
-
|
|
76
|
+
logger(`Warning: Failed to setup listener for registered tools - ${error}`);
|
|
100
77
|
}
|
|
101
78
|
}
|
|
102
|
-
function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInputSchema
|
|
79
|
+
function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInputSchema, logger) {
|
|
103
80
|
const originalCallback = getToolFunction(tool);
|
|
104
81
|
const options = getServerTrackingData(server.server)?.options;
|
|
105
82
|
const missingToolName = resolveMissingCapabilityToolName(options);
|
|
106
83
|
if (wrappedCallbacks.has(originalCallback)) {
|
|
107
|
-
|
|
84
|
+
logger(`Tool ${toolName} callback already wrapped, skipping re-wrap`);
|
|
108
85
|
return tool;
|
|
109
86
|
}
|
|
110
87
|
if (tool[MCP_ANALYTICS_PROCESSED]) {
|
|
111
|
-
|
|
88
|
+
logger(`Tool ${toolName} already processed, skipping re-wrap`);
|
|
112
89
|
return tool;
|
|
113
90
|
}
|
|
114
91
|
const wrappedCallback = async (...params)=>{
|
|
@@ -144,10 +121,10 @@ function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInpu
|
|
|
144
121
|
wrappedTool[MCP_ANALYTICS_PROCESSED] = true;
|
|
145
122
|
return wrappedTool;
|
|
146
123
|
}
|
|
147
|
-
async function handleToolCallRequest(server, originalCallToolHandler, request, extra) {
|
|
124
|
+
async function handleToolCallRequest(highLevelServer, server, originalCallToolHandler, request, extra, logger) {
|
|
148
125
|
const data = getServerTrackingData(server);
|
|
149
126
|
if (!data) {
|
|
150
|
-
|
|
127
|
+
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
151
128
|
return await originalCallToolHandler(request, extra);
|
|
152
129
|
}
|
|
153
130
|
if (request.params?.name === resolveMissingCapabilityToolName(data.options)) {
|
|
@@ -161,15 +138,18 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
|
|
|
161
138
|
explicitContextIntent: context,
|
|
162
139
|
execute: async ()=>handleReportMissing({
|
|
163
140
|
context
|
|
164
|
-
})
|
|
141
|
+
}, data.logger)
|
|
165
142
|
});
|
|
166
143
|
}
|
|
144
|
+
const toolName = request.params?.name;
|
|
145
|
+
const registeredTool = toolName ? highLevelServer._registeredTools[toolName] : void 0;
|
|
167
146
|
return await captureToolCall({
|
|
168
147
|
server,
|
|
169
148
|
data,
|
|
170
149
|
request,
|
|
171
150
|
extra,
|
|
172
|
-
execute: ()=>originalCallToolHandler(
|
|
151
|
+
execute: (downstreamRequest)=>originalCallToolHandler(downstreamRequest, extra),
|
|
152
|
+
parameterOwnership: registeredTool ? getAnalyticsParameterOwnership(registeredTool.inputSchema) : void 0,
|
|
173
153
|
takeCapturedError: ()=>{
|
|
174
154
|
const captured = extra?.__mcp_analytics_error;
|
|
175
155
|
if (extra) extra.__mcp_analytics_error = void 0;
|
|
@@ -177,24 +157,24 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
|
|
|
177
157
|
}
|
|
178
158
|
});
|
|
179
159
|
}
|
|
180
|
-
function instrumentHighLevelServer(server) {
|
|
160
|
+
function instrumentHighLevelServer(server, logger) {
|
|
181
161
|
try {
|
|
182
162
|
const lowLevelServer = server.server;
|
|
183
163
|
const mcpAnalyticsData = getServerTrackingData(lowLevelServer);
|
|
184
164
|
const handlers = {
|
|
185
|
-
initialize: handleInitializeRequest,
|
|
186
|
-
'tools/list': handleListToolsRequest,
|
|
187
|
-
'tools/call': handleToolCallRequest
|
|
165
|
+
initialize: (trackedServer, originalHandler, request, extra)=>handleInitializeRequest(trackedServer, originalHandler, request, extra, logger),
|
|
166
|
+
'tools/list': (trackedServer, originalHandler, request, extra)=>handleListToolsRequest(trackedServer, originalHandler, request, extra, logger),
|
|
167
|
+
'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra, logger)
|
|
188
168
|
};
|
|
189
169
|
patchRequestHandlers(lowLevelServer, handlers);
|
|
190
|
-
server._registeredTools = addTracingToToolRegistry(server._registeredTools, server);
|
|
170
|
+
server._registeredTools = addTracingToToolRegistry(server._registeredTools, server, logger);
|
|
191
171
|
if (mcpAnalyticsData) {
|
|
192
172
|
seedToolDescriptionsFromRegistry(mcpAnalyticsData.toolDescriptions, server._registeredTools);
|
|
193
173
|
seedToolCategoriesFromRegistry(mcpAnalyticsData.toolCategories, server._registeredTools);
|
|
194
174
|
}
|
|
195
|
-
setupListenerToRegisteredTools(server);
|
|
175
|
+
setupListenerToRegisteredTools(server, logger);
|
|
196
176
|
} catch (error) {
|
|
197
|
-
|
|
177
|
+
logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
198
178
|
}
|
|
199
179
|
}
|
|
200
180
|
function seedToolDescriptionsFromRegistry(cache, tools) {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { MCPServerLike } from '../types';
|
|
2
|
+
import type { LoggerFn } from './logger';
|
|
2
3
|
/**
|
|
3
4
|
* Instruments a low-level `Server`: wraps `initialize`, `tools/list`, and
|
|
4
5
|
* `tools/call`. The tool-call lifecycle is delegated to {@link captureToolCall},
|
|
5
6
|
* shared with the high-level wrapper.
|
|
6
7
|
*/
|
|
7
|
-
export declare function instrumentLowLevelServer(server: MCPServerLike): void;
|
|
8
|
+
export declare function instrumentLowLevelServer(server: MCPServerLike, logger: LoggerFn): void;
|
|
8
9
|
//# 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":"AAMA,OAAO,KAAK,EAAiD,aAAa,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;AAiBxC;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAoBtF"}
|
|
@@ -29,28 +29,27 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
29
29
|
const types_js_namespaceObject = require("@modelcontextprotocol/sdk/types.js");
|
|
30
30
|
const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
31
31
|
const external_internal_js_namespaceObject = require("./internal.js");
|
|
32
|
-
const external_logger_js_namespaceObject = require("./logger.js");
|
|
33
32
|
const external_tools_js_namespaceObject = require("./tools.js");
|
|
34
33
|
const external_instrumentation_js_namespaceObject = require("./instrumentation.js");
|
|
35
34
|
const external_tracing_helpers_js_namespaceObject = require("./tracing-helpers.js");
|
|
36
|
-
function instrumentLowLevelServer(server) {
|
|
35
|
+
function instrumentLowLevelServer(server, logger) {
|
|
37
36
|
try {
|
|
38
37
|
const handlers = {
|
|
39
|
-
initialize: external_instrumentation_js_namespaceObject.handleInitializeRequest,
|
|
40
|
-
'tools/list': external_instrumentation_js_namespaceObject.handleListToolsRequest
|
|
38
|
+
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)
|
|
41
40
|
};
|
|
42
41
|
(0, external_instrumentation_js_namespaceObject.patchRequestHandlers)(server, handlers);
|
|
43
42
|
const originalCallToolHandler = server._requestHandlers.get('tools/call');
|
|
44
|
-
server.setRequestHandler(types_js_namespaceObject.CallToolRequestSchema, async (request, extra)=>await handleToolCallRequest(server, originalCallToolHandler, request, extra));
|
|
43
|
+
server.setRequestHandler(types_js_namespaceObject.CallToolRequestSchema, async (request, extra)=>await handleToolCallRequest(server, originalCallToolHandler, request, extra, logger));
|
|
45
44
|
} catch (error) {
|
|
46
|
-
(
|
|
45
|
+
logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
47
46
|
throw error;
|
|
48
47
|
}
|
|
49
48
|
}
|
|
50
|
-
async function handleToolCallRequest(server, originalCallToolHandler, request, extra) {
|
|
49
|
+
async function handleToolCallRequest(server, originalCallToolHandler, request, extra, logger) {
|
|
51
50
|
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
52
51
|
if (!data) {
|
|
53
|
-
(
|
|
52
|
+
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
54
53
|
return await originalCallToolHandler?.(request, extra);
|
|
55
54
|
}
|
|
56
55
|
if (request.params?.name === (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(data.options)) {
|
|
@@ -64,7 +63,7 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
|
|
|
64
63
|
explicitContextIntent: context,
|
|
65
64
|
execute: async ()=>(0, external_tools_js_namespaceObject.handleReportMissing)({
|
|
66
65
|
context
|
|
67
|
-
})
|
|
66
|
+
}, data.logger)
|
|
68
67
|
});
|
|
69
68
|
}
|
|
70
69
|
return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
|
|
@@ -1,28 +1,27 @@
|
|
|
1
1
|
import { CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
2
2
|
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
3
3
|
import { getServerTrackingData } from "./internal.mjs";
|
|
4
|
-
import { log } from "./logger.mjs";
|
|
5
4
|
import { handleReportMissing, resolveMissingCapabilityToolName } from "./tools.mjs";
|
|
6
5
|
import { captureToolCall, handleInitializeRequest, handleListToolsRequest, patchRequestHandlers } from "./instrumentation.mjs";
|
|
7
6
|
import { getContextArgument } from "./tracing-helpers.mjs";
|
|
8
|
-
function instrumentLowLevelServer(server) {
|
|
7
|
+
function instrumentLowLevelServer(server, logger) {
|
|
9
8
|
try {
|
|
10
9
|
const handlers = {
|
|
11
|
-
initialize: handleInitializeRequest,
|
|
12
|
-
'tools/list': handleListToolsRequest
|
|
10
|
+
initialize: (server, originalHandler, request, extra)=>handleInitializeRequest(server, originalHandler, request, extra, logger),
|
|
11
|
+
'tools/list': (server, originalHandler, request, extra)=>handleListToolsRequest(server, originalHandler, request, extra, logger)
|
|
13
12
|
};
|
|
14
13
|
patchRequestHandlers(server, handlers);
|
|
15
14
|
const originalCallToolHandler = server._requestHandlers.get('tools/call');
|
|
16
|
-
server.setRequestHandler(CallToolRequestSchema, async (request, extra)=>await handleToolCallRequest(server, originalCallToolHandler, request, extra));
|
|
15
|
+
server.setRequestHandler(CallToolRequestSchema, async (request, extra)=>await handleToolCallRequest(server, originalCallToolHandler, request, extra, logger));
|
|
17
16
|
} catch (error) {
|
|
18
|
-
|
|
17
|
+
logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
19
18
|
throw error;
|
|
20
19
|
}
|
|
21
20
|
}
|
|
22
|
-
async function handleToolCallRequest(server, originalCallToolHandler, request, extra) {
|
|
21
|
+
async function handleToolCallRequest(server, originalCallToolHandler, request, extra, logger) {
|
|
23
22
|
const data = getServerTrackingData(server);
|
|
24
23
|
if (!data) {
|
|
25
|
-
|
|
24
|
+
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
26
25
|
return await originalCallToolHandler?.(request, extra);
|
|
27
26
|
}
|
|
28
27
|
if (request.params?.name === resolveMissingCapabilityToolName(data.options)) {
|
|
@@ -36,7 +35,7 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
|
|
|
36
35
|
explicitContextIntent: context,
|
|
37
36
|
execute: async ()=>handleReportMissing({
|
|
38
37
|
context
|
|
39
|
-
})
|
|
38
|
+
}, data.logger)
|
|
40
39
|
});
|
|
41
40
|
}
|
|
42
41
|
return await captureToolCall({
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ListToolsResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import type { CompatibleRequestHandlerExtra, MCPAnalyticsData, MCPRequestLike, MCPServerLike } from '../types';
|
|
2
|
+
import type { AnalyticsParameterOwnership, CompatibleRequestHandlerExtra, MCPAnalyticsData, MCPRequestLike, MCPServerLike } from '../types';
|
|
3
3
|
import { MCPAnalyticsEventType } from './event-types';
|
|
4
|
+
import type { LoggerFn } from './logger';
|
|
4
5
|
/**
|
|
5
6
|
* Single instrumentation core shared by the low-level (`Server`) and high-level
|
|
6
7
|
* (`McpServer`) wrappers. The two entrypoints differ only in how they reach the
|
|
@@ -9,11 +10,7 @@ import { MCPAnalyticsEventType } from './event-types';
|
|
|
9
10
|
* attribution, and event capture are defined exactly once.
|
|
10
11
|
*/
|
|
11
12
|
type MCPRequestHandler = (request: MCPRequestLike, extra?: CompatibleRequestHandlerExtra) => Promise<unknown>;
|
|
12
|
-
/**
|
|
13
|
-
* Runs the underlying tool. Receives the request with the SDK-injected
|
|
14
|
-
* `conversation_id` stripped; an adapter is free to ignore it (the high-level
|
|
15
|
-
* path strips arguments inside the wrapped callback instead).
|
|
16
|
-
*/
|
|
13
|
+
/** Runs the underlying tool with SDK-owned analytics arguments removed. */
|
|
17
14
|
type ToolExecutor = (downstreamRequest: MCPRequestLike) => Promise<unknown>;
|
|
18
15
|
interface TraceToolCallParams {
|
|
19
16
|
server: MCPServerLike;
|
|
@@ -21,6 +18,8 @@ interface TraceToolCallParams {
|
|
|
21
18
|
request: MCPRequestLike;
|
|
22
19
|
extra?: CompatibleRequestHandlerExtra;
|
|
23
20
|
execute: ToolExecutor;
|
|
21
|
+
/** Optional schema-derived ownership override for adapters with direct registry access. */
|
|
22
|
+
parameterOwnership?: AnalyticsParameterOwnership;
|
|
24
23
|
/**
|
|
25
24
|
* Event type to capture. Defaults to a tool call; the `get_more_tools` virtual
|
|
26
25
|
* tool passes `mcpMissingCapability` so it records a capability gap rather than
|
|
@@ -68,7 +67,7 @@ export declare function patchRequestHandlers(server: MCPServerLike, patches: Rec
|
|
|
68
67
|
* Captures each `tools/list` and injects the SDK-managed tools (context
|
|
69
68
|
* parameter, conversation id, `get_more_tools`) into the returned list.
|
|
70
69
|
*/
|
|
71
|
-
export declare function handleListToolsRequest(server: MCPServerLike, originalListToolsHandler: MCPRequestHandler, request: MCPRequestLike, extra
|
|
70
|
+
export declare function handleListToolsRequest(server: MCPServerLike, originalListToolsHandler: MCPRequestHandler, request: MCPRequestLike, extra: CompatibleRequestHandlerExtra | undefined, logger: LoggerFn): Promise<{
|
|
72
71
|
tools: ListToolsResult['tools'];
|
|
73
72
|
}>;
|
|
74
73
|
export declare function cacheToolDescriptions(cache: Map<string, string>, tools: ListToolsResult['tools'] | undefined): void;
|
|
@@ -83,6 +82,6 @@ export declare function cacheToolCategories(cache: Map<string, string>, tools: L
|
|
|
83
82
|
* Captures the connection handshake (and resolves identity) on `initialize`
|
|
84
83
|
* before the original handler runs.
|
|
85
84
|
*/
|
|
86
|
-
export declare function handleInitializeRequest(server: MCPServerLike, originalInitializeHandler: MCPRequestHandler, request: MCPRequestLike, extra
|
|
85
|
+
export declare function handleInitializeRequest(server: MCPServerLike, originalInitializeHandler: MCPRequestHandler, request: MCPRequestLike, extra: CompatibleRequestHandlerExtra | undefined, logger: LoggerFn): Promise<unknown>;
|
|
87
86
|
export {};
|
|
88
87
|
//# sourceMappingURL=instrumentation.d.ts.map
|
|
@@ -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,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAGd,MAAM,UAAU,CAAA;AAYjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;
|
|
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,EAGd,MAAM,UAAU,CAAA;AAYjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAIrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAQxC;;;;;;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,CAmDnF;AAuJD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,MAAM,EAAE,aAAa,EACrB,eAAe,EAAE,iBAAiB,EAClC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,6BAA6B,GAAG,SAAS,KAC7C,OAAO,CAAC,OAAO,CAAC,CAAA;AAErB;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAqBvG;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,aAAa,EACrB,wBAAwB,EAAE,iBAAiB,EAC3C,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,6BAA6B,GAAG,SAAS,EAChD,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAyC9C;AAyED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CASnH;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGtE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CAUjH;AA8GD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,aAAa,EACrB,yBAAyB,EAAE,iBAAiB,EAC5C,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,6BAA6B,GAAG,SAAS,EAChD,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,OAAO,CAAC,CA0ClB"}
|