@posthog/mcp 0.0.8 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +307 -2
- package/README.md +186 -93
- package/dist/extensions/capture.d.ts +13 -0
- package/dist/extensions/capture.d.ts.map +1 -0
- package/dist/extensions/capture.js +80 -0
- package/dist/extensions/capture.mjs +46 -0
- package/dist/extensions/compatibility.d.ts +23 -0
- package/dist/extensions/compatibility.d.ts.map +1 -0
- package/dist/extensions/compatibility.js +113 -0
- package/dist/extensions/compatibility.mjs +67 -0
- package/dist/extensions/constants.d.ts +39 -0
- package/dist/extensions/constants.d.ts.map +1 -0
- package/dist/extensions/constants.js +86 -0
- package/dist/extensions/constants.mjs +37 -0
- package/dist/extensions/context-parameters.d.ts +31 -0
- package/dist/extensions/context-parameters.d.ts.map +1 -0
- package/dist/extensions/context-parameters.js +93 -0
- package/dist/extensions/context-parameters.mjs +50 -0
- package/dist/extensions/conversation-id.d.ts +52 -0
- package/dist/extensions/conversation-id.d.ts.map +1 -0
- package/dist/extensions/conversation-id.js +164 -0
- package/dist/extensions/conversation-id.mjs +103 -0
- package/dist/extensions/event-types.d.ts +21 -0
- package/dist/extensions/event-types.d.ts.map +1 -0
- package/dist/extensions/event-types.js +47 -0
- package/dist/extensions/event-types.mjs +13 -0
- package/dist/extensions/exceptions.d.ts +13 -0
- package/dist/extensions/exceptions.d.ts.map +1 -0
- package/dist/extensions/exceptions.js +58 -0
- package/dist/extensions/exceptions.mjs +24 -0
- package/dist/extensions/ids.d.ts +13 -0
- package/dist/extensions/ids.d.ts.map +1 -0
- package/dist/extensions/ids.js +55 -0
- package/dist/extensions/ids.mjs +18 -0
- package/dist/extensions/instrument-highlevel.d.ts +3 -0
- package/dist/extensions/instrument-highlevel.d.ts.map +1 -0
- package/dist/extensions/instrument-highlevel.js +229 -0
- package/dist/extensions/instrument-highlevel.mjs +195 -0
- package/dist/extensions/instrument-lowlevel.d.ts +8 -0
- package/dist/extensions/instrument-lowlevel.d.ts.map +1 -0
- package/dist/extensions/instrument-lowlevel.js +85 -0
- package/dist/extensions/instrument-lowlevel.mjs +51 -0
- package/dist/extensions/instrumentation.d.ts +59 -0
- package/dist/extensions/instrumentation.d.ts.map +1 -0
- package/dist/extensions/instrumentation.js +237 -0
- package/dist/extensions/instrumentation.mjs +194 -0
- package/dist/extensions/intent.d.ts +10 -0
- package/dist/extensions/intent.d.ts.map +1 -0
- package/dist/extensions/intent.js +84 -0
- package/dist/extensions/intent.mjs +44 -0
- package/dist/extensions/internal.d.ts +32 -0
- package/dist/extensions/internal.d.ts.map +1 -0
- package/dist/extensions/internal.js +158 -0
- package/dist/extensions/internal.mjs +106 -0
- package/dist/extensions/logger.d.ts +14 -0
- package/dist/extensions/logger.d.ts.map +1 -0
- package/dist/extensions/logger.js +47 -0
- package/dist/extensions/logger.mjs +10 -0
- package/dist/extensions/mcp-payloads.d.ts +5 -0
- package/dist/extensions/mcp-payloads.d.ts.map +1 -0
- package/dist/extensions/mcp-payloads.js +91 -0
- package/dist/extensions/mcp-payloads.mjs +54 -0
- package/dist/extensions/mcp-sdk-compat.d.ts +33 -0
- package/dist/extensions/mcp-sdk-compat.d.ts.map +1 -0
- package/dist/extensions/mcp-sdk-compat.js +112 -0
- package/dist/extensions/mcp-sdk-compat.mjs +60 -0
- package/dist/extensions/posthog-events.d.ts +14 -0
- package/dist/extensions/posthog-events.d.ts.map +1 -0
- package/dist/extensions/posthog-events.js +143 -0
- package/dist/extensions/posthog-events.mjs +109 -0
- package/dist/extensions/sanitization.d.ts +10 -0
- package/dist/extensions/sanitization.d.ts.map +1 -0
- package/dist/extensions/sanitization.js +96 -0
- package/dist/extensions/sanitization.mjs +62 -0
- package/dist/extensions/session.d.ts +20 -0
- package/dist/extensions/session.d.ts.map +1 -0
- package/dist/extensions/session.js +113 -0
- package/dist/extensions/session.mjs +67 -0
- package/dist/extensions/sink.d.ts +44 -0
- package/dist/extensions/sink.d.ts.map +1 -0
- package/dist/extensions/sink.js +102 -0
- package/dist/extensions/sink.mjs +65 -0
- package/dist/extensions/tools.d.ts +9 -0
- package/dist/extensions/tools.d.ts.map +1 -0
- package/dist/extensions/tools.js +79 -0
- package/dist/extensions/tools.mjs +39 -0
- package/dist/extensions/tracing-helpers.d.ts +29 -0
- package/dist/extensions/tracing-helpers.d.ts.map +1 -0
- package/dist/extensions/tracing-helpers.js +59 -0
- package/dist/extensions/tracing-helpers.mjs +16 -0
- package/dist/extensions/truncation.d.ts +25 -0
- package/dist/extensions/truncation.d.ts.map +1 -0
- package/dist/extensions/truncation.js +277 -0
- package/dist/extensions/truncation.mjs +228 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +132 -0
- package/dist/index.mjs +83 -2928
- package/dist/types.d.ts +220 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +18 -0
- package/dist/types.mjs +0 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +36 -0
- package/dist/version.mjs +2 -0
- package/package.json +55 -87
- package/src/extensions/capture.ts +68 -0
- package/src/extensions/compatibility.ts +138 -0
- package/src/extensions/constants.ts +48 -0
- package/src/extensions/context-parameters.ts +119 -0
- package/src/extensions/conversation-id.ts +177 -0
- package/src/extensions/event-types.ts +21 -0
- package/src/extensions/exceptions.ts +83 -0
- package/src/extensions/ids.ts +32 -0
- package/src/extensions/instrument-highlevel.ts +297 -0
- package/src/extensions/instrument-lowlevel.ts +83 -0
- package/src/extensions/instrumentation.ts +415 -0
- package/src/extensions/intent.ts +78 -0
- package/src/extensions/internal.ts +193 -0
- package/src/extensions/logger.ts +27 -0
- package/src/extensions/mcp-payloads.ts +98 -0
- package/src/extensions/mcp-sdk-compat.ts +160 -0
- package/src/extensions/posthog-events.ts +212 -0
- package/src/extensions/sanitization.ts +121 -0
- package/src/extensions/session.ts +117 -0
- package/src/extensions/sink.ts +130 -0
- package/src/extensions/tools.ts +50 -0
- package/src/extensions/tracing-helpers.ts +51 -0
- package/src/extensions/truncation.ts +453 -0
- package/src/index.ts +174 -0
- package/src/types.ts +244 -0
- package/src/version.ts +1 -0
- package/dist/index.cjs +0 -2936
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -264
- package/dist/index.d.mts +0 -263
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
instrumentHighLevelServer: ()=>instrumentHighLevelServer
|
|
28
|
+
});
|
|
29
|
+
const external_conversation_id_js_namespaceObject = require("./conversation-id.js");
|
|
30
|
+
const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
31
|
+
const external_internal_js_namespaceObject = require("./internal.js");
|
|
32
|
+
const external_logger_js_namespaceObject = require("./logger.js");
|
|
33
|
+
const external_mcp_sdk_compat_js_namespaceObject = require("./mcp-sdk-compat.js");
|
|
34
|
+
const external_tools_js_namespaceObject = require("./tools.js");
|
|
35
|
+
const external_instrumentation_js_namespaceObject = require("./instrumentation.js");
|
|
36
|
+
const external_tracing_helpers_js_namespaceObject = require("./tracing-helpers.js");
|
|
37
|
+
const wrappedCallbacks = new WeakMap();
|
|
38
|
+
const MCP_ANALYTICS_PROCESSED = Symbol('__posthog_mcp_analytics_processed__');
|
|
39
|
+
function isCallbackUpdate(value) {
|
|
40
|
+
return !!value && 'object' == typeof value && 'callback' in value && 'function' == typeof value.callback;
|
|
41
|
+
}
|
|
42
|
+
function addTracingToToolRegistry(tools, server) {
|
|
43
|
+
return Object.fromEntries(Object.entries(tools).map(([name, tool])=>[
|
|
44
|
+
name,
|
|
45
|
+
addTracingToToolCallbackInternal(tool, name, server)
|
|
46
|
+
]));
|
|
47
|
+
}
|
|
48
|
+
function setupListenerToRegisteredTools(server) {
|
|
49
|
+
try {
|
|
50
|
+
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server.server);
|
|
51
|
+
if (!data) return void (0, external_logger_js_namespaceObject.log)('Warning: Cannot setup listener - no tracking data found');
|
|
52
|
+
const handler = {
|
|
53
|
+
set (target, property, value) {
|
|
54
|
+
try {
|
|
55
|
+
if ('string' == typeof property && value && 'object' == typeof value && (0, external_mcp_sdk_compat_js_namespaceObject.hasToolFunction)(value)) {
|
|
56
|
+
if ('string' == typeof value.description) data.toolDescriptions.set(property, value.description);
|
|
57
|
+
if (value[MCP_ANALYTICS_PROCESSED]) {
|
|
58
|
+
(0, external_logger_js_namespaceObject.log)(`Tool ${String(property)} already processed, skipping proxy wrapping`);
|
|
59
|
+
return Reflect.set(target, property, value);
|
|
60
|
+
}
|
|
61
|
+
if (wrappedCallbacks.has((0, external_mcp_sdk_compat_js_namespaceObject.getToolFunction)(value))) {
|
|
62
|
+
(0, external_logger_js_namespaceObject.log)(`Tool ${String(property)} callback already wrapped, skipping proxy wrapping`);
|
|
63
|
+
return Reflect.set(target, property, value);
|
|
64
|
+
}
|
|
65
|
+
const nextValue = addTracingToToolCallbackInternal(value, property, server);
|
|
66
|
+
(0, external_instrumentation_js_namespaceObject.instrumentToolsListHandler)(server.server);
|
|
67
|
+
if ('function' == typeof nextValue.update) {
|
|
68
|
+
const originalUpdate = nextValue.update;
|
|
69
|
+
nextValue.update = function(...updateArgs) {
|
|
70
|
+
if (updateArgs[0]) {
|
|
71
|
+
const updateObj = updateArgs[0];
|
|
72
|
+
if (isCallbackUpdate(updateObj)) {
|
|
73
|
+
const wrappedTool = addTracingToToolCallbackInternal({
|
|
74
|
+
callback: updateObj.callback
|
|
75
|
+
}, property, server);
|
|
76
|
+
updateObj.callback = (0, external_mcp_sdk_compat_js_namespaceObject.getToolFunction)(wrappedTool);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return originalUpdate.apply(this, updateArgs);
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return Reflect.set(target, property, nextValue);
|
|
83
|
+
}
|
|
84
|
+
return Reflect.set(target, property, value);
|
|
85
|
+
} catch (error) {
|
|
86
|
+
(0, external_logger_js_namespaceObject.log)(`Warning: Error in proxy set handler for tool ${String(property)} - ${error}`);
|
|
87
|
+
return Reflect.set(target, property, value);
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
get (target, property) {
|
|
91
|
+
return Reflect.get(target, property);
|
|
92
|
+
},
|
|
93
|
+
deleteProperty (target, property) {
|
|
94
|
+
return Reflect.deleteProperty(target, property);
|
|
95
|
+
},
|
|
96
|
+
has (target, property) {
|
|
97
|
+
return Reflect.has(target, property);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const originalTools = server._registeredTools || {};
|
|
101
|
+
server._registeredTools = new Proxy(originalTools, handler);
|
|
102
|
+
(0, external_logger_js_namespaceObject.log)('Successfully set up listener for new tool registrations');
|
|
103
|
+
} catch (error) {
|
|
104
|
+
(0, external_logger_js_namespaceObject.log)(`Warning: Failed to setup listener for registered tools - ${error}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function addTracingToToolCallbackInternal(tool, toolName, _server) {
|
|
108
|
+
const originalCallback = (0, external_mcp_sdk_compat_js_namespaceObject.getToolFunction)(tool);
|
|
109
|
+
if (wrappedCallbacks.has(originalCallback)) {
|
|
110
|
+
(0, external_logger_js_namespaceObject.log)(`Tool ${toolName} callback already wrapped, skipping re-wrap`);
|
|
111
|
+
return tool;
|
|
112
|
+
}
|
|
113
|
+
if (tool[MCP_ANALYTICS_PROCESSED]) {
|
|
114
|
+
(0, external_logger_js_namespaceObject.log)(`Tool ${toolName} already processed, skipping re-wrap`);
|
|
115
|
+
return tool;
|
|
116
|
+
}
|
|
117
|
+
const wrappedCallback = async (...params)=>{
|
|
118
|
+
let args;
|
|
119
|
+
let extra;
|
|
120
|
+
if (2 === params.length) {
|
|
121
|
+
args = params[0];
|
|
122
|
+
extra = params[1];
|
|
123
|
+
} else {
|
|
124
|
+
args = void 0;
|
|
125
|
+
extra = params[0];
|
|
126
|
+
}
|
|
127
|
+
const removeContextFromArgs = (input)=>{
|
|
128
|
+
if (input && 'object' == typeof input && 'context' in input) {
|
|
129
|
+
const { context: _context, ...rest } = input;
|
|
130
|
+
return rest;
|
|
131
|
+
}
|
|
132
|
+
return input;
|
|
133
|
+
};
|
|
134
|
+
const cleanedArgs = toolName === external_tools_js_namespaceObject.GET_MORE_TOOLS_NAME ? args : (0, external_conversation_id_js_namespaceObject.stripConversationId)(removeContextFromArgs(args));
|
|
135
|
+
try {
|
|
136
|
+
if (void 0 === cleanedArgs) {
|
|
137
|
+
const handler = originalCallback;
|
|
138
|
+
return await handler(extra);
|
|
139
|
+
}
|
|
140
|
+
const handler = originalCallback;
|
|
141
|
+
return await handler(cleanedArgs, extra);
|
|
142
|
+
} catch (error) {
|
|
143
|
+
if (error instanceof Error) extra.__mcp_analytics_error = error;
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
wrappedCallbacks.set(originalCallback, true);
|
|
148
|
+
wrappedCallbacks.set(wrappedCallback, true);
|
|
149
|
+
const wrappedTool = (0, external_mcp_sdk_compat_js_namespaceObject.createWrappedTool)(tool, wrappedCallback);
|
|
150
|
+
wrappedTool[MCP_ANALYTICS_PROCESSED] = true;
|
|
151
|
+
return wrappedTool;
|
|
152
|
+
}
|
|
153
|
+
function setupToolsCallHandlerWrapping(server) {
|
|
154
|
+
const lowLevelServer = server.server;
|
|
155
|
+
const existingHandler = lowLevelServer._requestHandlers.get('tools/call');
|
|
156
|
+
if (existingHandler) {
|
|
157
|
+
const wrappedHandler = createToolsCallWrapper(existingHandler, lowLevelServer);
|
|
158
|
+
lowLevelServer._requestHandlers.set('tools/call', wrappedHandler);
|
|
159
|
+
}
|
|
160
|
+
const originalSetRequestHandler = lowLevelServer.setRequestHandler.bind(lowLevelServer);
|
|
161
|
+
lowLevelServer.setRequestHandler = (requestSchema, handler)=>{
|
|
162
|
+
const shape = (0, external_mcp_sdk_compat_js_namespaceObject.getObjectShape)(requestSchema);
|
|
163
|
+
const method = shape?.method ? (0, external_mcp_sdk_compat_js_namespaceObject.getLiteralValue)(shape.method) : void 0;
|
|
164
|
+
if ('tools/call' === method) {
|
|
165
|
+
const wrappedHandler = createToolsCallWrapper(handler, lowLevelServer);
|
|
166
|
+
return originalSetRequestHandler(requestSchema, wrappedHandler);
|
|
167
|
+
}
|
|
168
|
+
return originalSetRequestHandler(requestSchema, handler);
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function createToolsCallWrapper(originalHandler, server) {
|
|
172
|
+
return async (request, extra)=>await handleWrappedToolsCall(originalHandler, server, request, extra);
|
|
173
|
+
}
|
|
174
|
+
async function handleWrappedToolsCall(originalHandler, server, request, extra) {
|
|
175
|
+
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
176
|
+
if (!data) {
|
|
177
|
+
(0, external_logger_js_namespaceObject.log)('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
178
|
+
return await originalHandler(request, extra);
|
|
179
|
+
}
|
|
180
|
+
if (request.params?.name === external_tools_js_namespaceObject.GET_MORE_TOOLS_NAME) {
|
|
181
|
+
const context = (0, external_tracing_helpers_js_namespaceObject.getContextArgument)(request) || '';
|
|
182
|
+
return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
|
|
183
|
+
server,
|
|
184
|
+
data,
|
|
185
|
+
request,
|
|
186
|
+
extra,
|
|
187
|
+
eventType: external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpMissingCapability,
|
|
188
|
+
explicitContextIntent: context,
|
|
189
|
+
execute: async ()=>(0, external_tools_js_namespaceObject.handleReportMissing)({
|
|
190
|
+
context
|
|
191
|
+
})
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
|
|
195
|
+
server,
|
|
196
|
+
data,
|
|
197
|
+
request,
|
|
198
|
+
extra,
|
|
199
|
+
execute: ()=>originalHandler(request, extra),
|
|
200
|
+
takeCapturedError: ()=>{
|
|
201
|
+
const captured = extra?.__mcp_analytics_error;
|
|
202
|
+
if (extra) extra.__mcp_analytics_error = void 0;
|
|
203
|
+
return captured;
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
function instrumentHighLevelServer(server) {
|
|
208
|
+
try {
|
|
209
|
+
const mcpAnalyticsData = (0, external_internal_js_namespaceObject.getServerTrackingData)(server.server);
|
|
210
|
+
setupToolsCallHandlerWrapping(server);
|
|
211
|
+
(0, external_instrumentation_js_namespaceObject.instrumentInitializeHandler)(server.server);
|
|
212
|
+
server._registeredTools = addTracingToToolRegistry(server._registeredTools, server);
|
|
213
|
+
if (mcpAnalyticsData) seedToolDescriptionsFromRegistry(mcpAnalyticsData.toolDescriptions, server._registeredTools);
|
|
214
|
+
(0, external_instrumentation_js_namespaceObject.instrumentToolsListHandler)(server.server);
|
|
215
|
+
setupListenerToRegisteredTools(server);
|
|
216
|
+
} catch (error) {
|
|
217
|
+
(0, external_logger_js_namespaceObject.log)(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function seedToolDescriptionsFromRegistry(cache, tools) {
|
|
221
|
+
for (const [name, tool] of Object.entries(tools))if ('string' == typeof tool?.description) cache.set(name, tool.description);
|
|
222
|
+
}
|
|
223
|
+
exports.instrumentHighLevelServer = __webpack_exports__.instrumentHighLevelServer;
|
|
224
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
225
|
+
"instrumentHighLevelServer"
|
|
226
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
227
|
+
Object.defineProperty(exports, '__esModule', {
|
|
228
|
+
value: true
|
|
229
|
+
});
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { stripConversationId } from "./conversation-id.mjs";
|
|
2
|
+
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
3
|
+
import { getServerTrackingData } from "./internal.mjs";
|
|
4
|
+
import { log } from "./logger.mjs";
|
|
5
|
+
import { createWrappedTool, getLiteralValue, getObjectShape, getToolFunction, hasToolFunction } from "./mcp-sdk-compat.mjs";
|
|
6
|
+
import { GET_MORE_TOOLS_NAME, handleReportMissing } from "./tools.mjs";
|
|
7
|
+
import { captureToolCall, instrumentInitializeHandler, instrumentToolsListHandler } from "./instrumentation.mjs";
|
|
8
|
+
import { getContextArgument } from "./tracing-helpers.mjs";
|
|
9
|
+
const wrappedCallbacks = new WeakMap();
|
|
10
|
+
const MCP_ANALYTICS_PROCESSED = Symbol('__posthog_mcp_analytics_processed__');
|
|
11
|
+
function isCallbackUpdate(value) {
|
|
12
|
+
return !!value && 'object' == typeof value && 'callback' in value && 'function' == typeof value.callback;
|
|
13
|
+
}
|
|
14
|
+
function addTracingToToolRegistry(tools, server) {
|
|
15
|
+
return Object.fromEntries(Object.entries(tools).map(([name, tool])=>[
|
|
16
|
+
name,
|
|
17
|
+
addTracingToToolCallbackInternal(tool, name, server)
|
|
18
|
+
]));
|
|
19
|
+
}
|
|
20
|
+
function setupListenerToRegisteredTools(server) {
|
|
21
|
+
try {
|
|
22
|
+
const data = getServerTrackingData(server.server);
|
|
23
|
+
if (!data) return void log('Warning: Cannot setup listener - no tracking data found');
|
|
24
|
+
const handler = {
|
|
25
|
+
set (target, property, value) {
|
|
26
|
+
try {
|
|
27
|
+
if ('string' == typeof property && value && 'object' == typeof value && hasToolFunction(value)) {
|
|
28
|
+
if ('string' == typeof value.description) data.toolDescriptions.set(property, value.description);
|
|
29
|
+
if (value[MCP_ANALYTICS_PROCESSED]) {
|
|
30
|
+
log(`Tool ${String(property)} already processed, skipping proxy wrapping`);
|
|
31
|
+
return Reflect.set(target, property, value);
|
|
32
|
+
}
|
|
33
|
+
if (wrappedCallbacks.has(getToolFunction(value))) {
|
|
34
|
+
log(`Tool ${String(property)} callback already wrapped, skipping proxy wrapping`);
|
|
35
|
+
return Reflect.set(target, property, value);
|
|
36
|
+
}
|
|
37
|
+
const nextValue = addTracingToToolCallbackInternal(value, property, server);
|
|
38
|
+
instrumentToolsListHandler(server.server);
|
|
39
|
+
if ('function' == typeof nextValue.update) {
|
|
40
|
+
const originalUpdate = nextValue.update;
|
|
41
|
+
nextValue.update = function(...updateArgs) {
|
|
42
|
+
if (updateArgs[0]) {
|
|
43
|
+
const updateObj = updateArgs[0];
|
|
44
|
+
if (isCallbackUpdate(updateObj)) {
|
|
45
|
+
const wrappedTool = addTracingToToolCallbackInternal({
|
|
46
|
+
callback: updateObj.callback
|
|
47
|
+
}, property, server);
|
|
48
|
+
updateObj.callback = getToolFunction(wrappedTool);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return originalUpdate.apply(this, updateArgs);
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return Reflect.set(target, property, nextValue);
|
|
55
|
+
}
|
|
56
|
+
return Reflect.set(target, property, value);
|
|
57
|
+
} catch (error) {
|
|
58
|
+
log(`Warning: Error in proxy set handler for tool ${String(property)} - ${error}`);
|
|
59
|
+
return Reflect.set(target, property, value);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
get (target, property) {
|
|
63
|
+
return Reflect.get(target, property);
|
|
64
|
+
},
|
|
65
|
+
deleteProperty (target, property) {
|
|
66
|
+
return Reflect.deleteProperty(target, property);
|
|
67
|
+
},
|
|
68
|
+
has (target, property) {
|
|
69
|
+
return Reflect.has(target, property);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const originalTools = server._registeredTools || {};
|
|
73
|
+
server._registeredTools = new Proxy(originalTools, handler);
|
|
74
|
+
log('Successfully set up listener for new tool registrations');
|
|
75
|
+
} catch (error) {
|
|
76
|
+
log(`Warning: Failed to setup listener for registered tools - ${error}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function addTracingToToolCallbackInternal(tool, toolName, _server) {
|
|
80
|
+
const originalCallback = getToolFunction(tool);
|
|
81
|
+
if (wrappedCallbacks.has(originalCallback)) {
|
|
82
|
+
log(`Tool ${toolName} callback already wrapped, skipping re-wrap`);
|
|
83
|
+
return tool;
|
|
84
|
+
}
|
|
85
|
+
if (tool[MCP_ANALYTICS_PROCESSED]) {
|
|
86
|
+
log(`Tool ${toolName} already processed, skipping re-wrap`);
|
|
87
|
+
return tool;
|
|
88
|
+
}
|
|
89
|
+
const wrappedCallback = async (...params)=>{
|
|
90
|
+
let args;
|
|
91
|
+
let extra;
|
|
92
|
+
if (2 === params.length) {
|
|
93
|
+
args = params[0];
|
|
94
|
+
extra = params[1];
|
|
95
|
+
} else {
|
|
96
|
+
args = void 0;
|
|
97
|
+
extra = params[0];
|
|
98
|
+
}
|
|
99
|
+
const removeContextFromArgs = (input)=>{
|
|
100
|
+
if (input && 'object' == typeof input && 'context' in input) {
|
|
101
|
+
const { context: _context, ...rest } = input;
|
|
102
|
+
return rest;
|
|
103
|
+
}
|
|
104
|
+
return input;
|
|
105
|
+
};
|
|
106
|
+
const cleanedArgs = toolName === GET_MORE_TOOLS_NAME ? args : stripConversationId(removeContextFromArgs(args));
|
|
107
|
+
try {
|
|
108
|
+
if (void 0 === cleanedArgs) {
|
|
109
|
+
const handler = originalCallback;
|
|
110
|
+
return await handler(extra);
|
|
111
|
+
}
|
|
112
|
+
const handler = originalCallback;
|
|
113
|
+
return await handler(cleanedArgs, extra);
|
|
114
|
+
} catch (error) {
|
|
115
|
+
if (error instanceof Error) extra.__mcp_analytics_error = error;
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
wrappedCallbacks.set(originalCallback, true);
|
|
120
|
+
wrappedCallbacks.set(wrappedCallback, true);
|
|
121
|
+
const wrappedTool = createWrappedTool(tool, wrappedCallback);
|
|
122
|
+
wrappedTool[MCP_ANALYTICS_PROCESSED] = true;
|
|
123
|
+
return wrappedTool;
|
|
124
|
+
}
|
|
125
|
+
function setupToolsCallHandlerWrapping(server) {
|
|
126
|
+
const lowLevelServer = server.server;
|
|
127
|
+
const existingHandler = lowLevelServer._requestHandlers.get('tools/call');
|
|
128
|
+
if (existingHandler) {
|
|
129
|
+
const wrappedHandler = createToolsCallWrapper(existingHandler, lowLevelServer);
|
|
130
|
+
lowLevelServer._requestHandlers.set('tools/call', wrappedHandler);
|
|
131
|
+
}
|
|
132
|
+
const originalSetRequestHandler = lowLevelServer.setRequestHandler.bind(lowLevelServer);
|
|
133
|
+
lowLevelServer.setRequestHandler = (requestSchema, handler)=>{
|
|
134
|
+
const shape = getObjectShape(requestSchema);
|
|
135
|
+
const method = shape?.method ? getLiteralValue(shape.method) : void 0;
|
|
136
|
+
if ('tools/call' === method) {
|
|
137
|
+
const wrappedHandler = createToolsCallWrapper(handler, lowLevelServer);
|
|
138
|
+
return originalSetRequestHandler(requestSchema, wrappedHandler);
|
|
139
|
+
}
|
|
140
|
+
return originalSetRequestHandler(requestSchema, handler);
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function createToolsCallWrapper(originalHandler, server) {
|
|
144
|
+
return async (request, extra)=>await handleWrappedToolsCall(originalHandler, server, request, extra);
|
|
145
|
+
}
|
|
146
|
+
async function handleWrappedToolsCall(originalHandler, server, request, extra) {
|
|
147
|
+
const data = getServerTrackingData(server);
|
|
148
|
+
if (!data) {
|
|
149
|
+
log('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
150
|
+
return await originalHandler(request, extra);
|
|
151
|
+
}
|
|
152
|
+
if (request.params?.name === GET_MORE_TOOLS_NAME) {
|
|
153
|
+
const context = getContextArgument(request) || '';
|
|
154
|
+
return await captureToolCall({
|
|
155
|
+
server,
|
|
156
|
+
data,
|
|
157
|
+
request,
|
|
158
|
+
extra,
|
|
159
|
+
eventType: MCPAnalyticsEventType.mcpMissingCapability,
|
|
160
|
+
explicitContextIntent: context,
|
|
161
|
+
execute: async ()=>handleReportMissing({
|
|
162
|
+
context
|
|
163
|
+
})
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return await captureToolCall({
|
|
167
|
+
server,
|
|
168
|
+
data,
|
|
169
|
+
request,
|
|
170
|
+
extra,
|
|
171
|
+
execute: ()=>originalHandler(request, extra),
|
|
172
|
+
takeCapturedError: ()=>{
|
|
173
|
+
const captured = extra?.__mcp_analytics_error;
|
|
174
|
+
if (extra) extra.__mcp_analytics_error = void 0;
|
|
175
|
+
return captured;
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
function instrumentHighLevelServer(server) {
|
|
180
|
+
try {
|
|
181
|
+
const mcpAnalyticsData = getServerTrackingData(server.server);
|
|
182
|
+
setupToolsCallHandlerWrapping(server);
|
|
183
|
+
instrumentInitializeHandler(server.server);
|
|
184
|
+
server._registeredTools = addTracingToToolRegistry(server._registeredTools, server);
|
|
185
|
+
if (mcpAnalyticsData) seedToolDescriptionsFromRegistry(mcpAnalyticsData.toolDescriptions, server._registeredTools);
|
|
186
|
+
instrumentToolsListHandler(server.server);
|
|
187
|
+
setupListenerToRegisteredTools(server);
|
|
188
|
+
} catch (error) {
|
|
189
|
+
log(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function seedToolDescriptionsFromRegistry(cache, tools) {
|
|
193
|
+
for (const [name, tool] of Object.entries(tools))if ('string' == typeof tool?.description) cache.set(name, tool.description);
|
|
194
|
+
}
|
|
195
|
+
export { instrumentHighLevelServer };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MCPServerLike } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Instruments a low-level `Server`: wraps `initialize`, `tools/list`, and
|
|
4
|
+
* `tools/call`. The tool-call lifecycle is delegated to {@link captureToolCall},
|
|
5
|
+
* shared with the high-level wrapper.
|
|
6
|
+
*/
|
|
7
|
+
export declare function instrumentLowLevelServer(server: MCPServerLike): void;
|
|
8
|
+
//# sourceMappingURL=instrument-lowlevel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrument-lowlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-lowlevel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiD,aAAa,EAAE,MAAM,UAAU,CAAA;AAc5F;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAcpE"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
instrumentLowLevelServer: ()=>instrumentLowLevelServer
|
|
28
|
+
});
|
|
29
|
+
const types_js_namespaceObject = require("@modelcontextprotocol/sdk/types.js");
|
|
30
|
+
const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
31
|
+
const external_internal_js_namespaceObject = require("./internal.js");
|
|
32
|
+
const external_logger_js_namespaceObject = require("./logger.js");
|
|
33
|
+
const external_tools_js_namespaceObject = require("./tools.js");
|
|
34
|
+
const external_instrumentation_js_namespaceObject = require("./instrumentation.js");
|
|
35
|
+
const external_tracing_helpers_js_namespaceObject = require("./tracing-helpers.js");
|
|
36
|
+
function instrumentLowLevelServer(server) {
|
|
37
|
+
try {
|
|
38
|
+
(0, external_instrumentation_js_namespaceObject.instrumentInitializeHandler)(server);
|
|
39
|
+
(0, external_instrumentation_js_namespaceObject.instrumentToolsListHandler)(server);
|
|
40
|
+
const originalCallToolHandler = server._requestHandlers.get('tools/call');
|
|
41
|
+
server.setRequestHandler(types_js_namespaceObject.CallToolRequestSchema, async (request, extra)=>await handleToolCallRequest(server, originalCallToolHandler, request, extra));
|
|
42
|
+
} catch (error) {
|
|
43
|
+
(0, external_logger_js_namespaceObject.log)(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async function handleToolCallRequest(server, originalCallToolHandler, request, extra) {
|
|
48
|
+
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
49
|
+
if (!data) {
|
|
50
|
+
(0, external_logger_js_namespaceObject.log)('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
51
|
+
return await originalCallToolHandler?.(request, extra);
|
|
52
|
+
}
|
|
53
|
+
if (request.params?.name === external_tools_js_namespaceObject.GET_MORE_TOOLS_NAME) {
|
|
54
|
+
const context = (0, external_tracing_helpers_js_namespaceObject.getContextArgument)(request) || '';
|
|
55
|
+
return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
|
|
56
|
+
server,
|
|
57
|
+
data,
|
|
58
|
+
request,
|
|
59
|
+
extra,
|
|
60
|
+
eventType: external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpMissingCapability,
|
|
61
|
+
explicitContextIntent: context,
|
|
62
|
+
execute: async ()=>(0, external_tools_js_namespaceObject.handleReportMissing)({
|
|
63
|
+
context
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
|
|
68
|
+
server,
|
|
69
|
+
data,
|
|
70
|
+
request,
|
|
71
|
+
extra,
|
|
72
|
+
execute: (downstreamRequest)=>runOriginalToolHandler(originalCallToolHandler, downstreamRequest, extra)
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function runOriginalToolHandler(handler, request, extra) {
|
|
76
|
+
if (!handler) throw new Error(`Unknown tool: ${request.params?.name || 'unknown'}`);
|
|
77
|
+
return handler(request, extra);
|
|
78
|
+
}
|
|
79
|
+
exports.instrumentLowLevelServer = __webpack_exports__.instrumentLowLevelServer;
|
|
80
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
81
|
+
"instrumentLowLevelServer"
|
|
82
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
83
|
+
Object.defineProperty(exports, '__esModule', {
|
|
84
|
+
value: true
|
|
85
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
3
|
+
import { getServerTrackingData } from "./internal.mjs";
|
|
4
|
+
import { log } from "./logger.mjs";
|
|
5
|
+
import { GET_MORE_TOOLS_NAME, handleReportMissing } from "./tools.mjs";
|
|
6
|
+
import { captureToolCall, instrumentInitializeHandler, instrumentToolsListHandler } from "./instrumentation.mjs";
|
|
7
|
+
import { getContextArgument } from "./tracing-helpers.mjs";
|
|
8
|
+
function instrumentLowLevelServer(server) {
|
|
9
|
+
try {
|
|
10
|
+
instrumentInitializeHandler(server);
|
|
11
|
+
instrumentToolsListHandler(server);
|
|
12
|
+
const originalCallToolHandler = server._requestHandlers.get('tools/call');
|
|
13
|
+
server.setRequestHandler(CallToolRequestSchema, async (request, extra)=>await handleToolCallRequest(server, originalCallToolHandler, request, extra));
|
|
14
|
+
} catch (error) {
|
|
15
|
+
log(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
16
|
+
throw error;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function handleToolCallRequest(server, originalCallToolHandler, request, extra) {
|
|
20
|
+
const data = getServerTrackingData(server);
|
|
21
|
+
if (!data) {
|
|
22
|
+
log('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
23
|
+
return await originalCallToolHandler?.(request, extra);
|
|
24
|
+
}
|
|
25
|
+
if (request.params?.name === GET_MORE_TOOLS_NAME) {
|
|
26
|
+
const context = getContextArgument(request) || '';
|
|
27
|
+
return await captureToolCall({
|
|
28
|
+
server,
|
|
29
|
+
data,
|
|
30
|
+
request,
|
|
31
|
+
extra,
|
|
32
|
+
eventType: MCPAnalyticsEventType.mcpMissingCapability,
|
|
33
|
+
explicitContextIntent: context,
|
|
34
|
+
execute: async ()=>handleReportMissing({
|
|
35
|
+
context
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return await captureToolCall({
|
|
40
|
+
server,
|
|
41
|
+
data,
|
|
42
|
+
request,
|
|
43
|
+
extra,
|
|
44
|
+
execute: (downstreamRequest)=>runOriginalToolHandler(originalCallToolHandler, downstreamRequest, extra)
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function runOriginalToolHandler(handler, request, extra) {
|
|
48
|
+
if (!handler) throw new Error(`Unknown tool: ${request.params?.name || 'unknown'}`);
|
|
49
|
+
return handler(request, extra);
|
|
50
|
+
}
|
|
51
|
+
export { instrumentLowLevelServer };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type ListToolsResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { CompatibleRequestHandlerExtra, MCPAnalyticsData, MCPRequestLike, MCPServerLike } from '../types';
|
|
3
|
+
import { MCPAnalyticsEventType } from './event-types';
|
|
4
|
+
/**
|
|
5
|
+
* Runs the underlying tool. Receives the request with the SDK-injected
|
|
6
|
+
* `conversation_id` stripped; an adapter is free to ignore it (the high-level
|
|
7
|
+
* path strips arguments inside the wrapped callback instead).
|
|
8
|
+
*/
|
|
9
|
+
type ToolExecutor = (downstreamRequest: MCPRequestLike) => Promise<unknown>;
|
|
10
|
+
interface TraceToolCallParams {
|
|
11
|
+
server: MCPServerLike;
|
|
12
|
+
data: MCPAnalyticsData;
|
|
13
|
+
request: MCPRequestLike;
|
|
14
|
+
extra?: CompatibleRequestHandlerExtra;
|
|
15
|
+
execute: ToolExecutor;
|
|
16
|
+
/**
|
|
17
|
+
* Event type to capture. Defaults to a tool call; the `get_more_tools` virtual
|
|
18
|
+
* tool passes `mcpMissingCapability` so it records a capability gap rather than
|
|
19
|
+
* a tool invocation.
|
|
20
|
+
*/
|
|
21
|
+
eventType?: MCPAnalyticsEventType;
|
|
22
|
+
/**
|
|
23
|
+
* When set, used verbatim as the captured intent (source `context_parameter`)
|
|
24
|
+
* instead of running `resolveToolCallIntent`. Used by the `get_more_tools`
|
|
25
|
+
* virtual tool, which carries its intent in the `context` argument.
|
|
26
|
+
*/
|
|
27
|
+
explicitContextIntent?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Optional accessor for an error the executor captured out-of-band. The
|
|
30
|
+
* high-level SDK turns thrown tool errors into `isError: true` results before
|
|
31
|
+
* they reach us, so the wrapped callback stashes the original error and we
|
|
32
|
+
* read it here to capture the real stack rather than the result envelope.
|
|
33
|
+
*/
|
|
34
|
+
takeCapturedError?: () => unknown;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The shared tool-call lifecycle: resolve conversation id, build + enrich the
|
|
38
|
+
* analytics event, run the tool, then capture success/failure.
|
|
39
|
+
*
|
|
40
|
+
* Analytics is isolated from the tool path on both sides — a failure while
|
|
41
|
+
* preparing or publishing the event can never change what the tool returns or
|
|
42
|
+
* throws, and the tool's own errors are always re-thrown to the caller.
|
|
43
|
+
*/
|
|
44
|
+
export declare function captureToolCall(params: TraceToolCallParams): Promise<unknown>;
|
|
45
|
+
/**
|
|
46
|
+
* Wraps the server's `tools/list` handler so each listing is captured and the
|
|
47
|
+
* SDK-managed tools (context parameter, conversation id, `get_more_tools`) are
|
|
48
|
+
* injected. Idempotent per server. Works for both low-level and high-level
|
|
49
|
+
* servers — the high-level wrapper passes its underlying `server`.
|
|
50
|
+
*/
|
|
51
|
+
export declare function instrumentToolsListHandler(server: MCPServerLike): void;
|
|
52
|
+
export declare function cacheToolDescriptions(cache: Map<string, string>, tools: ListToolsResult['tools'] | undefined): void;
|
|
53
|
+
/**
|
|
54
|
+
* Wraps the server's `initialize` handler so the connection handshake is
|
|
55
|
+
* captured (and identity resolved) before the original handler runs.
|
|
56
|
+
*/
|
|
57
|
+
export declare function instrumentInitializeHandler(server: MCPServerLike): void;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=instrumentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,KAAK,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAY,MAAM,UAAU,CAAA;AAWxH,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAoBrD;;;;GAIG;AACH,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;;;;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,CAsCnF;AAuHD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAsBtE;AAqGD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CASnH;AAID;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAiCvE"}
|