@posthog/mcp 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/extensions/constants.d.ts +3 -1
  2. package/dist/extensions/constants.d.ts.map +1 -1
  3. package/dist/extensions/constants.js +3 -1
  4. package/dist/extensions/constants.mjs +3 -1
  5. package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
  6. package/dist/extensions/instrument-highlevel.js +1 -0
  7. package/dist/extensions/instrument-highlevel.mjs +1 -0
  8. package/dist/extensions/instrumentation.d.ts +1 -0
  9. package/dist/extensions/instrumentation.d.ts.map +1 -1
  10. package/dist/extensions/instrumentation.js +27 -2
  11. package/dist/extensions/instrumentation.mjs +28 -3
  12. package/dist/extensions/internal.d.ts +9 -8
  13. package/dist/extensions/internal.d.ts.map +1 -1
  14. package/dist/extensions/internal.js +17 -12
  15. package/dist/extensions/internal.mjs +15 -13
  16. package/dist/extensions/mcp-sdk-compat.d.ts +7 -0
  17. package/dist/extensions/mcp-sdk-compat.d.ts.map +1 -1
  18. package/dist/extensions/mcp-sdk-compat.js +21 -3
  19. package/dist/extensions/mcp-sdk-compat.mjs +17 -2
  20. package/dist/extensions/tool-input.d.ts +9 -0
  21. package/dist/extensions/tool-input.d.ts.map +1 -0
  22. package/dist/extensions/tool-input.js +117 -0
  23. package/dist/extensions/tool-input.mjs +79 -0
  24. package/dist/index.d.ts +2 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +5 -0
  27. package/dist/index.mjs +3 -1
  28. package/dist/types.d.ts +31 -1
  29. package/dist/types.d.ts.map +1 -1
  30. package/dist/version.d.ts +1 -1
  31. package/dist/version.js +1 -1
  32. package/dist/version.mjs +1 -1
  33. package/package.json +3 -3
  34. package/src/extensions/constants.ts +3 -1
  35. package/src/extensions/instrument-highlevel.ts +1 -0
  36. package/src/extensions/instrumentation.ts +37 -1
  37. package/src/extensions/internal.ts +18 -17
  38. package/src/extensions/mcp-sdk-compat.ts +38 -1
  39. package/src/extensions/tool-input.ts +92 -0
  40. package/src/index.ts +6 -1
  41. package/src/types.ts +32 -1
  42. package/src/version.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  export declare const INACTIVITY_TIMEOUT_IN_MINUTES = 30;
2
2
  export declare const DEFAULT_CONTEXT_PARAMETER_DESCRIPTION = "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"";
3
3
  export declare const DEFAULT_MODEL_PARAMETER_DESCRIPTION = "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" \u2014 never guess.";
4
- export declare const DEFAULT_CONVERSATION_ID_DESCRIPTION = "Echo the conversation_id from the server's previous response. The server provides it on the first call \u2014 never invent one, and do not issue parallel tool calls until you have it.";
4
+ export declare const DEFAULT_CONVERSATION_ID_DESCRIPTION = "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call \u2014 never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.";
5
5
  export declare const POSTHOG_MCP_ANALYTICS_SOURCE = "posthog_mcp_analytics";
6
6
  export declare const POSTHOG_MCP_LIB_NAME = "posthog-node-mcp";
7
7
  export declare const PostHogMCPAnalyticsEvent: {
@@ -36,6 +36,8 @@ export declare const PostHogMCPAnalyticsProperty: {
36
36
  readonly FeedbackTool: '$mcp_feedback_tool';
37
37
  readonly FeedbackType: '$mcp_feedback_type';
38
38
  readonly IsError: '$mcp_is_error';
39
+ readonly InputAliasesUsed: '$mcp_input_aliases_used';
40
+ readonly InputKeys: '$mcp_input_keys';
39
41
  readonly Intent: '$mcp_intent';
40
42
  readonly IntentSource: '$mcp_intent_source';
41
43
  readonly ListedToolNames: '$mcp_listed_tool_names';
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/extensions/constants.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,6BAA6B,KAAK,CAAA;AAE/C,eAAO,MAAM,qCAAqC,onBAA4mB,CAAA;AAE9pB,eAAO,MAAM,mCAAmC,gRAAqQ,CAAA;AAErT,eAAO,MAAM,mCAAmC,4LACsI,CAAA;AAEtL,eAAO,MAAM,4BAA4B,0BAA0B,CAAA;AAMnE,eAAO,MAAM,oBAAoB,qBAAqB,CAAA;AAItD,eAAO,MAAM,wBAAwB;aACnC,MAAM,EAAE,aAAa;aACrB,SAAS,EAAE,YAAY;aACvB,QAAQ,EAAE,eAAe;aACzB,QAAQ,EAAE,WAAW;aACrB,UAAU,EAAE,iBAAiB;aAC7B,iBAAiB,EAAE,yBAAyB;aAC5C,SAAS,EAAE,iBAAiB;aAC5B,WAAW,EAAE,mBAAmB;aAChC,YAAY,EAAE,oBAAoB;aAClC,aAAa,EAAE,qBAAqB;aACpC,QAAQ,EAAE,gBAAgB;aAC1B,SAAS,EAAE,iBAAiB;CACpB,CAAA;AAEV,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAA;AAE/G,eAAO,MAAM,2BAA2B;aACtC,UAAU,EAAE,kBAAkB;aAC9B,eAAe,EAAE,wBAAwB;aACzC,aAAa,EAAE,qBAAqB;aACpC,cAAc,EAAE,sBAAsB;aACtC,UAAU,EAAE,kBAAkB;aAC9B,YAAY,EAAE,oBAAoB;aAClC,SAAS,EAAE,iBAAiB;aAC5B,eAAe,EAAE,uBAAuB;aACxC,sBAAsB,EAAE,+BAA+B;aACvD,iBAAiB,EAAE,yBAAyB;aAC5C,4BAA4B,EAAE,qCAAqC;aACnE,eAAe,EAAE,uBAAuB;aACxC,qBAAqB,EAAE,8BAA8B;aACrD,YAAY,EAAE,oBAAoB;aAClC,YAAY,EAAE,oBAAoB;aAClC,OAAO,EAAE,eAAe;aACxB,MAAM,EAAE,aAAa;aACrB,YAAY,EAAE,oBAAoB;aAClC,eAAe,EAAE,wBAAwB;aACzC,QAAQ,EAAE,gBAAgB;aAC1B,cAAc,EAAE,uBAAuB;aACvC,UAAU,EAAE,iBAAiB;aAC7B,eAAe,EAAE,uBAAuB;aACxC,YAAY,EAAE,oBAAoB;aAClC,QAAQ,EAAE,eAAe;aACzB,UAAU,EAAE,kBAAkB;aAC9B,aAAa,EAAE,qBAAqB;aACpC,SAAS,EAAE,aAAa;aACxB,MAAM,EAAE,aAAa;aACrB,YAAY,EAAE,oBAAoB;aAClC,eAAe,EAAE,uBAAuB;aACxC,QAAQ,EAAE,gBAAgB;aAC1B,YAAY,EAAE,oBAAoB;CAC1B,CAAA;AAEV,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,OAAO,2BAA2B,CAAC,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/extensions/constants.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,6BAA6B,KAAK,CAAA;AAE/C,eAAO,MAAM,qCAAqC,onBAA4mB,CAAA;AAE9pB,eAAO,MAAM,mCAAmC,gRAAqQ,CAAA;AAErT,eAAO,MAAM,mCAAmC,qYAC+U,CAAA;AAE/X,eAAO,MAAM,4BAA4B,0BAA0B,CAAA;AAMnE,eAAO,MAAM,oBAAoB,qBAAqB,CAAA;AAItD,eAAO,MAAM,wBAAwB;aACnC,MAAM,EAAE,aAAa;aACrB,SAAS,EAAE,YAAY;aACvB,QAAQ,EAAE,eAAe;aACzB,QAAQ,EAAE,WAAW;aACrB,UAAU,EAAE,iBAAiB;aAC7B,iBAAiB,EAAE,yBAAyB;aAC5C,SAAS,EAAE,iBAAiB;aAC5B,WAAW,EAAE,mBAAmB;aAChC,YAAY,EAAE,oBAAoB;aAClC,aAAa,EAAE,qBAAqB;aACpC,QAAQ,EAAE,gBAAgB;aAC1B,SAAS,EAAE,iBAAiB;CACpB,CAAA;AAEV,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAA;AAE/G,eAAO,MAAM,2BAA2B;aACtC,UAAU,EAAE,kBAAkB;aAC9B,eAAe,EAAE,wBAAwB;aACzC,aAAa,EAAE,qBAAqB;aACpC,cAAc,EAAE,sBAAsB;aACtC,UAAU,EAAE,kBAAkB;aAC9B,YAAY,EAAE,oBAAoB;aAClC,SAAS,EAAE,iBAAiB;aAC5B,eAAe,EAAE,uBAAuB;aACxC,sBAAsB,EAAE,+BAA+B;aACvD,iBAAiB,EAAE,yBAAyB;aAC5C,4BAA4B,EAAE,qCAAqC;aACnE,eAAe,EAAE,uBAAuB;aACxC,qBAAqB,EAAE,8BAA8B;aACrD,YAAY,EAAE,oBAAoB;aAClC,YAAY,EAAE,oBAAoB;aAClC,OAAO,EAAE,eAAe;aACxB,gBAAgB,EAAE,yBAAyB;aAC3C,SAAS,EAAE,iBAAiB;aAC5B,MAAM,EAAE,aAAa;aACrB,YAAY,EAAE,oBAAoB;aAClC,eAAe,EAAE,wBAAwB;aACzC,QAAQ,EAAE,gBAAgB;aAC1B,cAAc,EAAE,uBAAuB;aACvC,UAAU,EAAE,iBAAiB;aAC7B,eAAe,EAAE,uBAAuB;aACxC,YAAY,EAAE,oBAAoB;aAClC,QAAQ,EAAE,eAAe;aACzB,UAAU,EAAE,kBAAkB;aAC9B,aAAa,EAAE,qBAAqB;aACpC,SAAS,EAAE,aAAa;aACxB,MAAM,EAAE,aAAa;aACrB,YAAY,EAAE,oBAAoB;aAClC,eAAe,EAAE,uBAAuB;aACxC,QAAQ,EAAE,gBAAgB;aAC1B,YAAY,EAAE,oBAAoB;CAC1B,CAAA;AAEV,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,OAAO,2BAA2B,CAAC,CAAA"}
@@ -30,7 +30,7 @@ __webpack_require__.r(__webpack_exports__);
30
30
  const INACTIVITY_TIMEOUT_IN_MINUTES = 30;
31
31
  const DEFAULT_CONTEXT_PARAMETER_DESCRIPTION = 'Explain in 15-25 words, in third person, why this tool is called and how it supports the user\'s goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer\'s recent orders to investigate a billing issue and help support determine the appropriate resolution."';
32
32
  const DEFAULT_MODEL_PARAMETER_DESCRIPTION = 'The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.';
33
- const DEFAULT_CONVERSATION_ID_DESCRIPTION = "Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it.";
33
+ const DEFAULT_CONVERSATION_ID_DESCRIPTION = "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.";
34
34
  const POSTHOG_MCP_ANALYTICS_SOURCE = 'posthog_mcp_analytics';
35
35
  const POSTHOG_MCP_LIB_NAME = 'posthog-node-mcp';
36
36
  const PostHogMCPAnalyticsEvent = {
@@ -64,6 +64,8 @@ const PostHogMCPAnalyticsProperty = {
64
64
  FeedbackTool: '$mcp_feedback_tool',
65
65
  FeedbackType: '$mcp_feedback_type',
66
66
  IsError: '$mcp_is_error',
67
+ InputAliasesUsed: '$mcp_input_aliases_used',
68
+ InputKeys: '$mcp_input_keys',
67
69
  Intent: '$mcp_intent',
68
70
  IntentSource: '$mcp_intent_source',
69
71
  ListedToolNames: '$mcp_listed_tool_names',
@@ -1,7 +1,7 @@
1
1
  const INACTIVITY_TIMEOUT_IN_MINUTES = 30;
2
2
  const DEFAULT_CONTEXT_PARAMETER_DESCRIPTION = 'Explain in 15-25 words, in third person, why this tool is called and how it supports the user\'s goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer\'s recent orders to investigate a billing issue and help support determine the appropriate resolution."';
3
3
  const DEFAULT_MODEL_PARAMETER_DESCRIPTION = 'The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.';
4
- const DEFAULT_CONVERSATION_ID_DESCRIPTION = "Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it.";
4
+ const DEFAULT_CONVERSATION_ID_DESCRIPTION = "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.";
5
5
  const POSTHOG_MCP_ANALYTICS_SOURCE = 'posthog_mcp_analytics';
6
6
  const POSTHOG_MCP_LIB_NAME = 'posthog-node-mcp';
7
7
  const PostHogMCPAnalyticsEvent = {
@@ -35,6 +35,8 @@ const PostHogMCPAnalyticsProperty = {
35
35
  FeedbackTool: '$mcp_feedback_tool',
36
36
  FeedbackType: '$mcp_feedback_type',
37
37
  IsError: '$mcp_is_error',
38
+ InputAliasesUsed: '$mcp_input_aliases_used',
39
+ InputKeys: '$mcp_input_keys',
38
40
  Intent: '$mcp_intent',
39
41
  IntentSource: '$mcp_intent_source',
40
42
  ListedToolNames: '$mcp_listed_tool_names',
@@ -1 +1 @@
1
- {"version":3,"file":"instrument-highlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-highlevel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,sBAAsB,EAIvB,MAAM,UAAU,CAAA;AAmBjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAuRxC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CA+BhG"}
1
+ {"version":3,"file":"instrument-highlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-highlevel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,sBAAsB,EAIvB,MAAM,UAAU,CAAA;AAmBjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAwRxC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CA+BhG"}
@@ -203,6 +203,7 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
203
203
  extra,
204
204
  execute: (downstreamRequest)=>originalCallToolHandler(downstreamRequest, extra),
205
205
  parameterOwnership: registeredTool ? (0, external_analytics_parameters_js_namespaceObject.getAnalyticsParameterOwnership)(registeredTool.inputSchema, registeredTool.outputSchema) : void 0,
206
+ inputSchema: registeredTool?.inputSchema,
206
207
  takeCapturedError: ()=>{
207
208
  const captured = extra?.__mcp_analytics_error;
208
209
  if (extra) extra.__mcp_analytics_error = void 0;
@@ -171,6 +171,7 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
171
171
  extra,
172
172
  execute: (downstreamRequest)=>originalCallToolHandler(downstreamRequest, extra),
173
173
  parameterOwnership: registeredTool ? getAnalyticsParameterOwnership(registeredTool.inputSchema, registeredTool.outputSchema) : void 0,
174
+ inputSchema: registeredTool?.inputSchema,
174
175
  takeCapturedError: ()=>{
175
176
  const captured = extra?.__mcp_analytics_error;
176
177
  if (extra) extra.__mcp_analytics_error = void 0;
@@ -19,6 +19,7 @@ interface TraceToolCallParams {
19
19
  execute: ToolExecutor;
20
20
  /** Optional schema-derived ownership override for adapters with direct registry access. */
21
21
  parameterOwnership?: AnalyticsParameterOwnership;
22
+ inputSchema?: unknown;
22
23
  /**
23
24
  * Event type to capture. Defaults to a tool call; the `get_more_tools` virtual
24
25
  * tool passes `mcpMissingCapability` and `send_feedback` passes
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"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"}
@@ -59,16 +59,34 @@ const external_session_token_js_namespaceObject = require("./session-token.js");
59
59
  const external_feedback_js_namespaceObject = require("./feedback.js");
60
60
  const external_tools_js_namespaceObject = require("./tools.js");
61
61
  const external_tracing_helpers_js_namespaceObject = require("./tracing-helpers.js");
62
+ const external_tool_input_js_namespaceObject = require("./tool-input.js");
63
+ function resolveToolSchemaSessionId(data, extra) {
64
+ const token = (0, external_session_token_js_namespaceObject.decodeSessionId)((0, external_session_token_js_namespaceObject.readMcpSessionHeader)((0, external_request_headers_js_namespaceObject.getRequestHeaders)(extra)));
65
+ if (token) return token.sessionId;
66
+ if (extra?.sessionId) return (0, external_session_js_namespaceObject.deriveSessionIdFromMCPSession)(extra.sessionId);
67
+ return data.sessionId;
68
+ }
62
69
  async function captureToolCall(params) {
63
- const { server, data, request, extra, execute, parameterOwnership, eventType, explicitContextIntent, extraEventProperties, omitCapturedParameters, takeCapturedError } = params;
70
+ const { server, data, request, extra, execute, parameterOwnership, inputSchema, eventType, explicitContextIntent, extraEventProperties, omitCapturedParameters, takeCapturedError } = params;
64
71
  const resolvedEventType = eventType ?? external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsCall;
65
72
  const isVirtualAnalyticsTool = resolvedEventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpMissingCapability || resolvedEventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpFeedback;
66
73
  const ownership = getActiveAnalyticsParameterOwnership(data, request.params?.name, parameterOwnership, isVirtualAnalyticsTool);
67
74
  const canCaptureContextIntent = ownership.read.context;
68
75
  const conversation = resolveToolConversation(ownership.read.conversationId, request.params?.arguments, extra);
69
76
  const downstreamRequest = cloneRequestWithoutOwnedAnalyticsArguments(request, ownership.strip);
77
+ const schemaSessionId = resolveToolSchemaSessionId(data, extra);
70
78
  const startTime = new Date();
71
79
  const preparedEvent = await prepareToolCallEvent(server, data, request, downstreamRequest, extra, startTime, conversation, ownership, resolvedEventType, canCaptureContextIntent);
80
+ if (preparedEvent && resolvedEventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsCall) {
81
+ const sessionSchemas = (preparedEvent.event.sessionId ? data.toolInputSchemas.get(preparedEvent.event.sessionId) : void 0) ?? data.toolInputSchemas.get(schemaSessionId);
82
+ const schema = inputSchema ?? sessionSchemas?.get(request.params?.name ?? '');
83
+ preparedEvent.event.properties = {
84
+ ...preparedEvent.event.properties,
85
+ ...(0, external_tool_input_js_namespaceObject.getToolInputProperties)(request.params?.arguments ?? {}, schema, {
86
+ shouldRecordInputKey: data.options.shouldRecordInputKey
87
+ })
88
+ };
89
+ }
72
90
  if (preparedEvent && explicitContextIntent) (0, external_intent_js_namespaceObject.setExplicitContextIntent)(preparedEvent.event, explicitContextIntent);
73
91
  if (preparedEvent && extraEventProperties) preparedEvent.event.properties = {
74
92
  ...preparedEvent.event.properties,
@@ -386,7 +404,14 @@ async function getTracedToolsList(server, originalListToolsHandler, request, ext
386
404
  let tools = [
387
405
  ...originalResponse.tools || []
388
406
  ];
389
- if (data) cacheToolAnalyticsParameterOwnership(data.toolAnalyticsParameterOwnership, tools);
407
+ if (data) {
408
+ cacheToolAnalyticsParameterOwnership(data.toolAnalyticsParameterOwnership, tools);
409
+ if (event.sessionId) {
410
+ const sessionSchemas = data.toolInputSchemas.get(event.sessionId) ?? new Map();
411
+ for (const tool of tools)if (tool?.name) sessionSchemas.set(tool.name, tool.inputSchema);
412
+ data.toolInputSchemas.set(event.sessionId, sessionSchemas);
413
+ }
414
+ }
390
415
  if (data && (0, external_context_parameters_js_namespaceObject.isContextEnabled)(data.options.context)) tools = (0, external_context_parameters_js_namespaceObject.addContextParameterToTools)(tools, (0, external_context_parameters_js_namespaceObject.getContextDescription)(data.options.context), data.logger);
391
416
  if (data) {
392
417
  const isFirstPage = request.params?.cursor == null;
@@ -13,21 +13,39 @@ import { getServerTrackingData, handleIdentify, setServerTrackingData, withIdent
13
13
  import { buildCapturedMcpParameters } from "./mcp-payloads.mjs";
14
14
  import { readRequestHandlerMethod } from "./mcp-sdk-compat.mjs";
15
15
  import { getRequestHeaders } from "./request-headers.mjs";
16
- import { getSessionId, getSessionInfo, isModernEraRequest, newSessionId } from "./session.mjs";
16
+ import { deriveSessionIdFromMCPSession, getSessionId, getSessionInfo, isModernEraRequest, newSessionId } from "./session.mjs";
17
17
  import { decodeSessionId, encodeSessionId, readMcpSessionHeader, writeSessionIdToTransport } from "./session-token.mjs";
18
18
  import { SEND_FEEDBACK_TOOL_NAME, getFeedbackToolDescriptor, resolveCollectFeedbackOptions } from "./feedback.mjs";
19
19
  import { getReportMissingToolDescriptor, resolveMissingCapabilityToolName } from "./tools.mjs";
20
20
  import { applyResolvedMetadata, isToolResultError } from "./tracing-helpers.mjs";
21
+ import { getToolInputProperties } from "./tool-input.mjs";
22
+ function resolveToolSchemaSessionId(data, extra) {
23
+ const token = decodeSessionId(readMcpSessionHeader(getRequestHeaders(extra)));
24
+ if (token) return token.sessionId;
25
+ if (extra?.sessionId) return deriveSessionIdFromMCPSession(extra.sessionId);
26
+ return data.sessionId;
27
+ }
21
28
  async function captureToolCall(params) {
22
- const { server, data, request, extra, execute, parameterOwnership, eventType, explicitContextIntent, extraEventProperties, omitCapturedParameters, takeCapturedError } = params;
29
+ const { server, data, request, extra, execute, parameterOwnership, inputSchema, eventType, explicitContextIntent, extraEventProperties, omitCapturedParameters, takeCapturedError } = params;
23
30
  const resolvedEventType = eventType ?? MCPAnalyticsEventType.mcpToolsCall;
24
31
  const isVirtualAnalyticsTool = resolvedEventType === MCPAnalyticsEventType.mcpMissingCapability || resolvedEventType === MCPAnalyticsEventType.mcpFeedback;
25
32
  const ownership = getActiveAnalyticsParameterOwnership(data, request.params?.name, parameterOwnership, isVirtualAnalyticsTool);
26
33
  const canCaptureContextIntent = ownership.read.context;
27
34
  const conversation = resolveToolConversation(ownership.read.conversationId, request.params?.arguments, extra);
28
35
  const downstreamRequest = cloneRequestWithoutOwnedAnalyticsArguments(request, ownership.strip);
36
+ const schemaSessionId = resolveToolSchemaSessionId(data, extra);
29
37
  const startTime = new Date();
30
38
  const preparedEvent = await prepareToolCallEvent(server, data, request, downstreamRequest, extra, startTime, conversation, ownership, resolvedEventType, canCaptureContextIntent);
39
+ if (preparedEvent && resolvedEventType === MCPAnalyticsEventType.mcpToolsCall) {
40
+ const sessionSchemas = (preparedEvent.event.sessionId ? data.toolInputSchemas.get(preparedEvent.event.sessionId) : void 0) ?? data.toolInputSchemas.get(schemaSessionId);
41
+ const schema = inputSchema ?? sessionSchemas?.get(request.params?.name ?? '');
42
+ preparedEvent.event.properties = {
43
+ ...preparedEvent.event.properties,
44
+ ...getToolInputProperties(request.params?.arguments ?? {}, schema, {
45
+ shouldRecordInputKey: data.options.shouldRecordInputKey
46
+ })
47
+ };
48
+ }
31
49
  if (preparedEvent && explicitContextIntent) setExplicitContextIntent(preparedEvent.event, explicitContextIntent);
32
50
  if (preparedEvent && extraEventProperties) preparedEvent.event.properties = {
33
51
  ...preparedEvent.event.properties,
@@ -345,7 +363,14 @@ async function getTracedToolsList(server, originalListToolsHandler, request, ext
345
363
  let tools = [
346
364
  ...originalResponse.tools || []
347
365
  ];
348
- if (data) cacheToolAnalyticsParameterOwnership(data.toolAnalyticsParameterOwnership, tools);
366
+ if (data) {
367
+ cacheToolAnalyticsParameterOwnership(data.toolAnalyticsParameterOwnership, tools);
368
+ if (event.sessionId) {
369
+ const sessionSchemas = data.toolInputSchemas.get(event.sessionId) ?? new Map();
370
+ for (const tool of tools)if (tool?.name) sessionSchemas.set(tool.name, tool.inputSchema);
371
+ data.toolInputSchemas.set(event.sessionId, sessionSchemas);
372
+ }
373
+ }
349
374
  if (data && isContextEnabled(data.options.context)) tools = addContextParameterToTools(tools, getContextDescription(data.options.context), data.logger);
350
375
  if (data) {
351
376
  const isFirstPage = request.params?.cursor == null;
@@ -1,19 +1,20 @@
1
1
  import type { CompatibleRequestHandlerExtra, MCPAnalyticsData, MCPRequestLike, MCPServerLike, SessionInfo, UserIdentity } from '../types';
2
2
  /**
3
- * Bounded LRU cache for session identities, capped at `maxSize` entries so a
4
- * long-lived server can't accumulate identities for unboundedly many sessions.
5
- * One instance lives on each server's tracking data — it is NOT shared across
6
- * server instances, so identities never bleed between servers.
3
+ * Bounded LRU cache, capped at `maxSize` entries so a long-lived server cannot
4
+ * accumulate state for unboundedly many sessions. One instance lives on each
5
+ * server's tracking data and is never shared across server instances.
7
6
  */
8
- export declare class IdentityCache {
7
+ export declare class BoundedCache<T> {
9
8
  private readonly _cache;
10
9
  private readonly _maxSize;
11
10
  constructor(maxSize?: number);
12
- get(sessionId: string): UserIdentity | undefined;
13
- set(sessionId: string, identity: UserIdentity): void;
14
- has(sessionId: string): boolean;
11
+ get(key: string): T | undefined;
12
+ set(key: string, value: T): void;
13
+ has(key: string): boolean;
15
14
  size(): number;
16
15
  }
16
+ export declare class IdentityCache extends BoundedCache<UserIdentity> {
17
+ }
17
18
  export declare function getServerTrackingData(server: MCPServerLike): MCPAnalyticsData | undefined;
18
19
  export declare function setServerTrackingData(server: MCPServerLike, data: MCPAnalyticsData): void;
19
20
  export declare function areIdentitiesEqual(a: UserIdentity, b: UserIdentity): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,WAAW,EACX,YAAY,EACb,MAAM,UAAU,CAAA;AAMjB;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IAEjC,YAAY,OAAO,SAAO,EAEzB;IAED,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAS/C;IAED,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAWnD;IAED,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE9B;IAED,IAAI,IAAI,MAAM,CAEb;CACF;AAID,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAEzF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAEzF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CA4B5E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY,CAapG;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,kBAAkB,EAAE,WAAW,EAC/B,KAAK,CAAC,EAAE,6BAA6B;AACrC;;;;;GAKG;AACH,uBAAuB,UAAQ,GAC9B,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAuDnC;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,WAAW,CAOtG;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAUzC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,WAAW,EACX,YAAY,EACb,MAAM,UAAU,CAAA;AAMjB;;;;GAIG;AACH,qBAAa,YAAY,CAAC,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IAEjC,YAAY,OAAO,SAAO,EAEzB;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAS9B;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAW/B;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExB;IAED,IAAI,IAAI,MAAM,CAEb;CACF;AAED,qBAAa,aAAc,SAAQ,YAAY,CAAC,YAAY,CAAC;CAAG;AAIhE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAEzF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAEzF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CA4B5E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY,CAapG;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,kBAAkB,EAAE,WAAW,EAC/B,KAAK,CAAC,EAAE,6BAA6B;AACrC;;;;;GAKG;AACH,uBAAuB,UAAQ,GAC9B,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAuDnC;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,WAAW,CAOtG;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAUzC"}
@@ -28,6 +28,7 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
+ BoundedCache: ()=>BoundedCache,
31
32
  IdentityCache: ()=>IdentityCache,
32
33
  areIdentitiesEqual: ()=>areIdentitiesEqual,
33
34
  getServerTrackingData: ()=>getServerTrackingData,
@@ -41,33 +42,35 @@ const external_event_types_js_namespaceObject = require("./event-types.js");
41
42
  const external_capture_js_namespaceObject = require("./capture.js");
42
43
  const external_client_identity_js_namespaceObject = require("./client-identity.js");
43
44
  const external_transport_identity_js_namespaceObject = require("./transport-identity.js");
44
- class IdentityCache {
45
+ class BoundedCache {
45
46
  constructor(maxSize = 1000){
46
47
  this._cache = new Map();
47
48
  this._maxSize = maxSize;
48
49
  }
49
- get(sessionId) {
50
- const identity = this._cache.get(sessionId);
51
- if (void 0 === identity) return;
52
- this._cache.delete(sessionId);
53
- this._cache.set(sessionId, identity);
54
- return identity;
50
+ get(key) {
51
+ const value = this._cache.get(key);
52
+ if (void 0 === value) return;
53
+ this._cache.delete(key);
54
+ this._cache.set(key, value);
55
+ return value;
55
56
  }
56
- set(sessionId, identity) {
57
- this._cache.delete(sessionId);
57
+ set(key, value) {
58
+ this._cache.delete(key);
58
59
  if (this._cache.size >= this._maxSize) {
59
60
  const oldestKey = this._cache.keys().next().value;
60
61
  if (void 0 !== oldestKey) this._cache.delete(oldestKey);
61
62
  }
62
- this._cache.set(sessionId, identity);
63
+ this._cache.set(key, value);
63
64
  }
64
- has(sessionId) {
65
- return this._cache.has(sessionId);
65
+ has(key) {
66
+ return this._cache.has(key);
66
67
  }
67
68
  size() {
68
69
  return this._cache.size;
69
70
  }
70
71
  }
72
+ class IdentityCache extends BoundedCache {
73
+ }
71
74
  const _serverTracking = new WeakMap();
72
75
  function getServerTrackingData(server) {
73
76
  return _serverTracking.get(server);
@@ -168,6 +171,7 @@ function getRequestResourceName(request) {
168
171
  }
169
172
  return 'Unknown';
170
173
  }
174
+ exports.BoundedCache = __webpack_exports__.BoundedCache;
171
175
  exports.IdentityCache = __webpack_exports__.IdentityCache;
172
176
  exports.areIdentitiesEqual = __webpack_exports__.areIdentitiesEqual;
173
177
  exports.getServerTrackingData = __webpack_exports__.getServerTrackingData;
@@ -177,6 +181,7 @@ exports.resolveEventProperties = __webpack_exports__.resolveEventProperties;
177
181
  exports.setServerTrackingData = __webpack_exports__.setServerTrackingData;
178
182
  exports.withIdentity = __webpack_exports__.withIdentity;
179
183
  for(var __rspack_i in __webpack_exports__)if (-1 === [
184
+ "BoundedCache",
180
185
  "IdentityCache",
181
186
  "areIdentitiesEqual",
182
187
  "getServerTrackingData",
@@ -2,33 +2,35 @@ import { MCPAnalyticsEventType } from "./event-types.mjs";
2
2
  import { captureEvent } from "./capture.mjs";
3
3
  import { stampClientIdentity } from "./client-identity.mjs";
4
4
  import { stampTransportIdentity } from "./transport-identity.mjs";
5
- class IdentityCache {
5
+ class BoundedCache {
6
6
  constructor(maxSize = 1000){
7
7
  this._cache = new Map();
8
8
  this._maxSize = maxSize;
9
9
  }
10
- get(sessionId) {
11
- const identity = this._cache.get(sessionId);
12
- if (void 0 === identity) return;
13
- this._cache.delete(sessionId);
14
- this._cache.set(sessionId, identity);
15
- return identity;
10
+ get(key) {
11
+ const value = this._cache.get(key);
12
+ if (void 0 === value) return;
13
+ this._cache.delete(key);
14
+ this._cache.set(key, value);
15
+ return value;
16
16
  }
17
- set(sessionId, identity) {
18
- this._cache.delete(sessionId);
17
+ set(key, value) {
18
+ this._cache.delete(key);
19
19
  if (this._cache.size >= this._maxSize) {
20
20
  const oldestKey = this._cache.keys().next().value;
21
21
  if (void 0 !== oldestKey) this._cache.delete(oldestKey);
22
22
  }
23
- this._cache.set(sessionId, identity);
23
+ this._cache.set(key, value);
24
24
  }
25
- has(sessionId) {
26
- return this._cache.has(sessionId);
25
+ has(key) {
26
+ return this._cache.has(key);
27
27
  }
28
28
  size() {
29
29
  return this._cache.size;
30
30
  }
31
31
  }
32
+ class IdentityCache extends BoundedCache {
33
+ }
32
34
  const _serverTracking = new WeakMap();
33
35
  function getServerTrackingData(server) {
34
36
  return _serverTracking.get(server);
@@ -129,4 +131,4 @@ function getRequestResourceName(request) {
129
131
  }
130
132
  return 'Unknown';
131
133
  }
132
- export { IdentityCache, areIdentitiesEqual, getServerTrackingData, handleIdentify, mergeIdentities, resolveEventProperties, setServerTrackingData, withIdentity };
134
+ export { BoundedCache, IdentityCache, areIdentitiesEqual, getServerTrackingData, handleIdentify, mergeIdentities, resolveEventProperties, setServerTrackingData, withIdentity };
@@ -29,6 +29,13 @@ export declare function hasToolFunction(tool: unknown): tool is RegisteredTool;
29
29
  export declare function createWrappedTool(originalTool: RegisteredTool, wrappedFunction: ToolCallback): RegisteredTool;
30
30
  export declare function isZ4Schema(schema: unknown): boolean;
31
31
  export declare function isZodRawShapeCompat(schema: unknown): schema is Record<string, unknown>;
32
+ /**
33
+ * Follows Zod wrappers to the schema that parses the caller's input: v3 effects
34
+ * (refine, transform, preprocess) and pipelines, v4 pipes (which include
35
+ * transforms), and optional, nullable, default, catch, and readonly wrappers.
36
+ * A v4 `z.preprocess` is a pipe whose input side is the transform, so its output side is followed.
37
+ */
38
+ export declare function unwrapInputSchema(schema: unknown): unknown;
32
39
  export declare function getObjectShape(schema: unknown): Record<string, unknown> | undefined;
33
40
  /**
34
41
  * Reads the method name a `setRequestHandler` registration is for.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-sdk-compat.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-sdk-compat.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAK5D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,CAAA;AAEpD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAQlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CAKxE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAMrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,GAAG,cAAc,CAM7G;AAyBD,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAKnD;AAaD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA6BnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOnF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAkCxD"}
1
+ {"version":3,"file":"mcp-sdk-compat.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-sdk-compat.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAK5D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,CAAA;AAEpD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAQlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CAKxE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAMrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,GAAG,cAAc,CAM7G;AAyBD,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAKnD;AAaD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGtF;AAkBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAY1D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA6BnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOnF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAkCxD"}
@@ -56,7 +56,22 @@ function isZodTypeLike(value) {
56
56
  return !!value && 'object' == typeof value && 'parse' in value && 'function' == typeof value.parse && 'safeParse' in value && 'function' == typeof value.safeParse;
57
57
  }
58
58
  function isZodRawShapeCompat(schema) {
59
- return !!schema && 'object' == typeof schema && Object.values(schema).some(isZodTypeLike);
59
+ return !!schema && 'object' == typeof schema && !isZodTypeLike(schema) && Object.values(schema).some(isZodTypeLike);
60
+ }
61
+ const MAX_UNWRAP_DEPTH = 8;
62
+ function zodDef(schema) {
63
+ return isZ4Schema(schema) ? schema._zod?.def : schema._def;
64
+ }
65
+ function unwrapInputSchema(schema) {
66
+ let current = schema;
67
+ for(let depth = 0; depth < MAX_UNWRAP_DEPTH && isZodTypeLike(current); depth++){
68
+ const def = zodDef(current);
69
+ const pipeInput = def?.in !== void 0 && zodDef(def.in)?.type === 'transform' ? def.out : def?.in;
70
+ const inner = def?.schema ?? pipeInput ?? def?.innerType;
71
+ if (!inner) break;
72
+ current = inner;
73
+ }
74
+ return current;
60
75
  }
61
76
  function getObjectShape(schema) {
62
77
  if (!schema || 'object' != typeof schema) return;
@@ -107,7 +122,8 @@ __webpack_require__.d(__webpack_exports__, {
107
122
  hasToolFunction: ()=>hasToolFunction,
108
123
  isZ4Schema: ()=>isZ4Schema,
109
124
  isZodRawShapeCompat: ()=>isZodRawShapeCompat,
110
- readRequestHandlerMethod: ()=>readRequestHandlerMethod
125
+ readRequestHandlerMethod: ()=>readRequestHandlerMethod,
126
+ unwrapInputSchema: ()=>unwrapInputSchema
111
127
  });
112
128
  exports.createWrappedTool = __webpack_exports__.createWrappedTool;
113
129
  exports.getLiteralValue = __webpack_exports__.getLiteralValue;
@@ -118,6 +134,7 @@ exports.hasToolFunction = __webpack_exports__.hasToolFunction;
118
134
  exports.isZ4Schema = __webpack_exports__.isZ4Schema;
119
135
  exports.isZodRawShapeCompat = __webpack_exports__.isZodRawShapeCompat;
120
136
  exports.readRequestHandlerMethod = __webpack_exports__.readRequestHandlerMethod;
137
+ exports.unwrapInputSchema = __webpack_exports__.unwrapInputSchema;
121
138
  for(var __rspack_i in __webpack_exports__)if (-1 === [
122
139
  "createWrappedTool",
123
140
  "getLiteralValue",
@@ -127,7 +144,8 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
127
144
  "hasToolFunction",
128
145
  "isZ4Schema",
129
146
  "isZodRawShapeCompat",
130
- "readRequestHandlerMethod"
147
+ "readRequestHandlerMethod",
148
+ "unwrapInputSchema"
131
149
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
132
150
  Object.defineProperty(exports, '__esModule', {
133
151
  value: true
@@ -27,7 +27,22 @@ function isZodTypeLike(value) {
27
27
  return !!value && 'object' == typeof value && 'parse' in value && 'function' == typeof value.parse && 'safeParse' in value && 'function' == typeof value.safeParse;
28
28
  }
29
29
  function isZodRawShapeCompat(schema) {
30
- return !!schema && 'object' == typeof schema && Object.values(schema).some(isZodTypeLike);
30
+ return !!schema && 'object' == typeof schema && !isZodTypeLike(schema) && Object.values(schema).some(isZodTypeLike);
31
+ }
32
+ const MAX_UNWRAP_DEPTH = 8;
33
+ function zodDef(schema) {
34
+ return isZ4Schema(schema) ? schema._zod?.def : schema._def;
35
+ }
36
+ function unwrapInputSchema(schema) {
37
+ let current = schema;
38
+ for(let depth = 0; depth < MAX_UNWRAP_DEPTH && isZodTypeLike(current); depth++){
39
+ const def = zodDef(current);
40
+ const pipeInput = def?.in !== void 0 && zodDef(def.in)?.type === 'transform' ? def.out : def?.in;
41
+ const inner = def?.schema ?? pipeInput ?? def?.innerType;
42
+ if (!inner) break;
43
+ current = inner;
44
+ }
45
+ return current;
31
46
  }
32
47
  function getObjectShape(schema) {
33
48
  if (!schema || 'object' != typeof schema) return;
@@ -69,4 +84,4 @@ function getLiteralValue(schema) {
69
84
  const directValue = schema.value;
70
85
  if (void 0 !== directValue) return directValue;
71
86
  }
72
- export { createWrappedTool, getLiteralValue, getObjectShape, getToolFunction, getToolFunctionKey, hasToolFunction, isZ4Schema, isZodRawShapeCompat, readRequestHandlerMethod };
87
+ export { createWrappedTool, getLiteralValue, getObjectShape, getToolFunction, getToolFunctionKey, hasToolFunction, isZ4Schema, isZodRawShapeCompat, readRequestHandlerMethod, unwrapInputSchema };
@@ -0,0 +1,9 @@
1
+ import type { JsonRecord, ToolInputOptions } from '../types';
2
+ /**
3
+ * Describe the original arguments without reading their values.
4
+ * Pass a server-owned JSON Schema or Zod object schema, never a schema from the caller.
5
+ * By default unknown names become `[redacted]` because an argument name can contain private data;
6
+ * `shouldRecordInputKey` replaces that rule.
7
+ */
8
+ export declare function getToolInputProperties(input: unknown, inputSchema?: unknown, options?: ToolInputOptions): JsonRecord;
9
+ //# sourceMappingURL=tool-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-input.d.ts","sourceRoot":"","sources":["../../src/extensions/tool-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,UAAU,EAA0B,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAqDnG;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAgCpH"}