@posthog/mcp 0.25.2 → 1.0.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 (77) hide show
  1. package/README.md +7 -4
  2. package/dist/extensions/analytics-parameters.d.ts +2 -2
  3. package/dist/extensions/analytics-parameters.d.ts.map +1 -1
  4. package/dist/extensions/analytics-parameters.js +9 -8
  5. package/dist/extensions/analytics-parameters.mjs +9 -8
  6. package/dist/extensions/capture.js +1 -1
  7. package/dist/extensions/capture.mjs +1 -1
  8. package/dist/extensions/constants.d.ts +2 -1
  9. package/dist/extensions/constants.d.ts.map +1 -1
  10. package/dist/extensions/constants.js +3 -2
  11. package/dist/extensions/constants.mjs +3 -2
  12. package/dist/extensions/context-parameters.d.ts.map +1 -1
  13. package/dist/extensions/context-parameters.js +1 -1
  14. package/dist/extensions/context-parameters.mjs +1 -1
  15. package/dist/extensions/event-types.d.ts +1 -0
  16. package/dist/extensions/event-types.d.ts.map +1 -1
  17. package/dist/extensions/event-types.js +2 -1
  18. package/dist/extensions/event-types.mjs +2 -1
  19. package/dist/extensions/feedback.d.ts.map +1 -1
  20. package/dist/extensions/feedback.js +2 -5
  21. package/dist/extensions/feedback.mjs +2 -5
  22. package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
  23. package/dist/extensions/instrument-highlevel.js +15 -3
  24. package/dist/extensions/instrument-highlevel.mjs +16 -4
  25. package/dist/extensions/instrument-lowlevel.js +19 -6
  26. package/dist/extensions/instrument-lowlevel.mjs +19 -6
  27. package/dist/extensions/instrumentation.d.ts +5 -0
  28. package/dist/extensions/instrumentation.d.ts.map +1 -1
  29. package/dist/extensions/instrumentation.js +29 -5
  30. package/dist/extensions/instrumentation.mjs +29 -5
  31. package/dist/extensions/model-parameters.d.ts +1 -1
  32. package/dist/extensions/model-parameters.d.ts.map +1 -1
  33. package/dist/extensions/model-parameters.js +1 -1
  34. package/dist/extensions/model-parameters.mjs +1 -1
  35. package/dist/extensions/posthog-events.d.ts.map +1 -1
  36. package/dist/extensions/posthog-events.js +3 -2
  37. package/dist/extensions/posthog-events.mjs +3 -2
  38. package/dist/extensions/posthog-mcp.d.ts +8 -1
  39. package/dist/extensions/posthog-mcp.d.ts.map +1 -1
  40. package/dist/extensions/posthog-mcp.js +7 -1
  41. package/dist/extensions/posthog-mcp.mjs +8 -2
  42. package/dist/extensions/sanitization.d.ts.map +1 -1
  43. package/dist/extensions/sanitization.js +2 -1
  44. package/dist/extensions/sanitization.mjs +2 -1
  45. package/dist/extensions/tools.d.ts +11 -0
  46. package/dist/extensions/tools.d.ts.map +1 -1
  47. package/dist/extensions/tools.js +10 -5
  48. package/dist/extensions/tools.mjs +8 -6
  49. package/dist/extensions/truncation.js +1 -1
  50. package/dist/extensions/truncation.mjs +1 -1
  51. package/dist/index.d.ts +1 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/types.d.ts +10 -2
  54. package/dist/types.d.ts.map +1 -1
  55. package/dist/version.d.ts +1 -1
  56. package/dist/version.d.ts.map +1 -1
  57. package/dist/version.js +1 -1
  58. package/dist/version.mjs +1 -1
  59. package/package.json +3 -3
  60. package/src/extensions/analytics-parameters.ts +7 -11
  61. package/src/extensions/capture.ts +1 -1
  62. package/src/extensions/constants.ts +2 -1
  63. package/src/extensions/context-parameters.ts +1 -0
  64. package/src/extensions/event-types.ts +1 -0
  65. package/src/extensions/feedback.ts +2 -10
  66. package/src/extensions/instrument-highlevel.ts +29 -4
  67. package/src/extensions/instrument-lowlevel.ts +14 -8
  68. package/src/extensions/instrumentation.ts +60 -8
  69. package/src/extensions/model-parameters.ts +2 -1
  70. package/src/extensions/posthog-events.ts +5 -1
  71. package/src/extensions/posthog-mcp.ts +18 -2
  72. package/src/extensions/sanitization.ts +7 -2
  73. package/src/extensions/tools.ts +13 -10
  74. package/src/extensions/truncation.ts +1 -1
  75. package/src/index.ts +1 -0
  76. package/src/types.ts +11 -2
  77. package/src/version.ts +1 -1
package/README.md CHANGED
@@ -8,6 +8,10 @@ SDK usage examples and code snippets live in the official documentation so they
8
8
 
9
9
  - [MCP analytics docs](https://posthog.com/docs/mcp-analytics)
10
10
 
11
+ ## Versioning
12
+
13
+ From 1.0.0, `@posthog/mcp` follows semver for its API and for the events it sends. A minor or patch release doesn't rename or remove a `$mcp_*` event or property, change its type, or change which requests send an event, so saved insights keep working across upgrades. It may add events and properties, and redact more of a captured value. The rules come from the [MCP analytics spec](https://github.com/PostHog/sdk-specs/blob/main/openspec/specs/mcp-analytics/spec.md), section "Event schema stability".
14
+
11
15
  ## Stateless & multi-pod servers
12
16
 
13
17
  On stateless deployments the SDK mints the `Mcp-Session-Id` response header at `initialize`
@@ -184,9 +188,8 @@ enabled by default. Missing-capability reporting and feedback collection remain
184
188
  instrument(server, posthog, { captureModel: false, enableConversationId: false })
185
189
  ```
186
190
 
187
- Model capture adds a required `llm_model` argument to compatible tool schemas. Dispatch never
188
- enforces it, so servers keep working; strict-schema clients see the new field. Set
189
- `captureModel: false` to leave schemas untouched. Conversation correlation adds an optional
191
+ Model capture adds an optional `llm_model` argument to compatible tool schemas. Strict-schema
192
+ clients see the new field. Set `captureModel: false` to leave schemas untouched. Conversation correlation adds an optional
190
193
  `conversation_id` argument and returns a handle in eligible tool results. Clients must echo that
191
194
  handle to group later calls; calls without it mint new handles. Set `enableConversationId: false`
192
195
  to retain transport-based session grouping and unchanged response content. Custom `PostHogMCP`
@@ -227,7 +230,7 @@ Omit `serverBuild` when the deployment does not provide a reliable value.
227
230
 
228
231
  `captureModel` is **on** by default. The SDK records the best model id visible to the
229
232
  server as `$mcp_llm_model`. Recognized client metadata wins with source `client_metadata`. Otherwise,
230
- the SDK injects a required `llm_model` parameter and records the answer with source `self_reported`.
233
+ the SDK injects an optional `llm_model` parameter and records the answer with source `self_reported`.
231
234
 
232
235
  MCP does not standardize or attest model identity. Client metadata and self-report are both
233
236
  unverified. Use the value to spot degradation across models, never for billing or access control.
@@ -18,7 +18,7 @@ export interface AnalyticsInjectableTool {
18
18
  [key: string]: unknown;
19
19
  }
20
20
  /**
21
- * Adds a required string parameter to a tool's JSON Schema. Called AFTER the MCP
21
+ * Adds a string parameter to a tool's JSON Schema. Called AFTER the MCP
22
22
  * SDK has converted Zod schemas to JSON Schema, so only JSON Schema needs
23
23
  * handling.
24
24
  *
@@ -30,7 +30,7 @@ export interface AnalyticsInjectableTool {
30
30
  * - Tools that already declare the parameter — it is theirs, not ours
31
31
  * - Complex schemas (oneOf/allOf/anyOf/$ref) that can't safely gain properties
32
32
  */
33
- export declare function addAnalyticsParameterToTool<TTool extends AnalyticsInjectableTool>(tool: TTool, parameterName: string, description: string, injectionLabel: string, logger?: LoggerFn): TTool;
33
+ export declare function addAnalyticsParameterToTool<TTool extends AnalyticsInjectableTool>(tool: TTool, parameterName: string, description: string, injectionLabel: string, required: boolean, logger?: LoggerFn): TTool;
34
34
  export declare function analyticsOwnsParameter(inputSchema: unknown, parameterName: string): boolean;
35
35
  export declare function getAnalyticsParameterOwnership(inputSchema: unknown, outputSchema?: unknown): AnalyticsParameterOwnership;
36
36
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-parameters.d.ts","sourceRoot":"","sources":["../../src/extensions/analytics-parameters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAA;AAC3D,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAiB7C,MAAM,WAAW,6BAA6B;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,6BAA6B,GAAG,SAAS,EACjD,aAAa,EAAE,MAAM,GACpB,OAAO,CAET;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,6BAA6B,GAAG,SAAS,EACjD,aAAa,EAAE,MAAM,GACpB,OAAO,CAIT;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,SAAS,uBAAuB,EAC/E,IAAI,EAAE,KAAK,EACX,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,MAAM,GAAE,QAAc,GACrB,KAAK,CAqDP;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAyB3F;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,OAAO,EACpB,YAAY,CAAC,EAAE,OAAO,GACrB,2BAA2B,CAO7B;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,IAAI,CAAC,2BAA2B,EAAE,SAAS,GAAG,gBAAgB,GAAG,UAAU,CAAC,GACtF,OAAO,CAeT"}
1
+ {"version":3,"file":"analytics-parameters.d.ts","sourceRoot":"","sources":["../../src/extensions/analytics-parameters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAA;AAC3D,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAiB7C,MAAM,WAAW,6BAA6B;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,6BAA6B,GAAG,SAAS,EACjD,aAAa,EAAE,MAAM,GACpB,OAAO,CAET;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,6BAA6B,GAAG,SAAS,EACjD,aAAa,EAAE,MAAM,GACpB,OAAO,CAIT;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,SAAS,uBAAuB,EAC/E,IAAI,EAAE,KAAK,EACX,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,OAAO,EACjB,MAAM,GAAE,QAAc,GACrB,KAAK,CAgDP;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAyB3F;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,OAAO,EACpB,YAAY,CAAC,EAAE,OAAO,GACrB,2BAA2B,CAO7B;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,IAAI,CAAC,2BAA2B,EAAE,SAAS,GAAG,gBAAgB,GAAG,UAAU,CAAC,GACtF,OAAO,CAeT"}
@@ -56,7 +56,7 @@ function hasAnalyticsParameter(schema, parameterName) {
56
56
  function canInjectAnalyticsParameter(schema, parameterName) {
57
57
  return !hasAnalyticsParameter(schema, parameterName) && !schema?.$ref && !schema?.oneOf && !schema?.allOf && !schema?.anyOf;
58
58
  }
59
- function addAnalyticsParameterToTool(tool, parameterName, description, injectionLabel, logger = external_logger_js_namespaceObject.log) {
59
+ function addAnalyticsParameterToTool(tool, parameterName, description, injectionLabel, required, logger = external_logger_js_namespaceObject.log) {
60
60
  const modifiedTool = {
61
61
  ...tool
62
62
  };
@@ -68,8 +68,7 @@ function addAnalyticsParameterToTool(tool, parameterName, description, injection
68
68
  }
69
69
  if (!modifiedTool.inputSchema) modifiedTool.inputSchema = {
70
70
  type: 'object',
71
- properties: {},
72
- required: []
71
+ properties: {}
73
72
  };
74
73
  modifiedTool.inputSchema = JSON.parse(JSON.stringify(modifiedTool.inputSchema));
75
74
  const inputSchema = modifiedTool.inputSchema;
@@ -79,11 +78,13 @@ function addAnalyticsParameterToTool(tool, parameterName, description, injection
79
78
  type: 'string',
80
79
  description
81
80
  };
82
- if (Array.isArray(inputSchema.required)) {
83
- if (!inputSchema.required.includes(parameterName)) inputSchema.required.push(parameterName);
84
- } else inputSchema.required = [
85
- parameterName
86
- ];
81
+ if (required) {
82
+ const existing = Array.isArray(inputSchema.required) ? inputSchema.required : [];
83
+ if (!existing.includes(parameterName)) inputSchema.required = [
84
+ ...existing,
85
+ parameterName
86
+ ];
87
+ }
87
88
  return modifiedTool;
88
89
  }
89
90
  function analyticsOwnsParameter(inputSchema, parameterName) {
@@ -19,7 +19,7 @@ function hasAnalyticsParameter(schema, parameterName) {
19
19
  function canInjectAnalyticsParameter(schema, parameterName) {
20
20
  return !hasAnalyticsParameter(schema, parameterName) && !schema?.$ref && !schema?.oneOf && !schema?.allOf && !schema?.anyOf;
21
21
  }
22
- function addAnalyticsParameterToTool(tool, parameterName, description, injectionLabel, logger = log) {
22
+ function addAnalyticsParameterToTool(tool, parameterName, description, injectionLabel, required, logger = log) {
23
23
  const modifiedTool = {
24
24
  ...tool
25
25
  };
@@ -31,8 +31,7 @@ function addAnalyticsParameterToTool(tool, parameterName, description, injection
31
31
  }
32
32
  if (!modifiedTool.inputSchema) modifiedTool.inputSchema = {
33
33
  type: 'object',
34
- properties: {},
35
- required: []
34
+ properties: {}
36
35
  };
37
36
  modifiedTool.inputSchema = JSON.parse(JSON.stringify(modifiedTool.inputSchema));
38
37
  const inputSchema = modifiedTool.inputSchema;
@@ -42,11 +41,13 @@ function addAnalyticsParameterToTool(tool, parameterName, description, injection
42
41
  type: 'string',
43
42
  description
44
43
  };
45
- if (Array.isArray(inputSchema.required)) {
46
- if (!inputSchema.required.includes(parameterName)) inputSchema.required.push(parameterName);
47
- } else inputSchema.required = [
48
- parameterName
49
- ];
44
+ if (required) {
45
+ const existing = Array.isArray(inputSchema.required) ? inputSchema.required : [];
46
+ if (!existing.includes(parameterName)) inputSchema.required = [
47
+ ...existing,
48
+ parameterName
49
+ ];
50
+ }
50
51
  return modifiedTool;
51
52
  }
52
53
  function analyticsOwnsParameter(inputSchema, parameterName) {
@@ -39,7 +39,7 @@ function captureEvent(server, eventInput, logger, requestAttribution) {
39
39
  const sink = data.sink;
40
40
  if (!sink) return;
41
41
  const sessionInfo = requestAttribution ?? (0, external_session_js_namespaceObject.getSessionInfo)(server, data, eventInput.sessionId);
42
- const duration = eventInput.duration || (eventInput.timestamp ? Date.now() - eventInput.timestamp.getTime() : void 0);
42
+ const duration = eventInput.duration ?? (eventInput.timestamp ? Date.now() - eventInput.timestamp.getTime() : void 0);
43
43
  const fullEvent = {
44
44
  id: eventInput.id || '',
45
45
  sessionId: eventInput.sessionId || data.sessionId,
@@ -7,7 +7,7 @@ function captureEvent(server, eventInput, logger, requestAttribution) {
7
7
  const sink = data.sink;
8
8
  if (!sink) return;
9
9
  const sessionInfo = requestAttribution ?? getSessionInfo(server, data, eventInput.sessionId);
10
- const duration = eventInput.duration || (eventInput.timestamp ? Date.now() - eventInput.timestamp.getTime() : void 0);
10
+ const duration = eventInput.duration ?? (eventInput.timestamp ? Date.now() - eventInput.timestamp.getTime() : void 0);
11
11
  const fullEvent = {
12
12
  id: eventInput.id || '',
13
13
  sessionId: eventInput.sessionId || data.sessionId,
@@ -1,5 +1,5 @@
1
1
  export declare const INACTIVITY_TIMEOUT_IN_MINUTES = 30;
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.\"";
2
+ export declare const DEFAULT_CONTEXT_PARAMETER_DESCRIPTION = "A few words on why you are calling this tool, for the server developer's analytics. Describe people and things by role, such as \"a customer\". Do not quote the user or include names, emails, or other personal details.";
3
3
  export declare const DEFAULT_MODEL_PARAMETER_DESCRIPTION = "The model identifier you are running as, for example \"claude-opus-4-8\" or \"gpt-5.2\". Pass \"unknown\" if you are not certain. Recorded for the server developer's analytics.";
4
4
  export declare const DEFAULT_CONVERSATION_ID_DESCRIPTION = "The conversation_id this server returned earlier in this conversation, unchanged, including after later user messages. Omit it if you have none. Recorded for the server developer's analytics.";
5
5
  export declare const POSTHOG_MCP_ANALYTICS_SOURCE = "posthog_mcp_analytics";
@@ -18,6 +18,7 @@ export declare const PostHogMCPAnalyticsEvent: {
18
18
  readonly ResourcesList: '$mcp_resources_list';
19
19
  readonly ToolCall: '$mcp_tool_call';
20
20
  readonly ToolsList: '$mcp_tools_list';
21
+ readonly UnknownTool: '$mcp_unknown_tool';
21
22
  };
22
23
  export type PostHogMCPAnalyticsEvent = (typeof PostHogMCPAnalyticsEvent)[keyof typeof PostHogMCPAnalyticsEvent];
23
24
  export declare const PostHogMCPAnalyticsProperty: {
@@ -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,qLAA+K,CAAA;AAE/N,eAAO,MAAM,mCAAmC,oMACmJ,CAAA;AAEnM,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;IACzB,2DAA2D;aAC3D,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,SAAS,EAAE,gBAAgB;aAC3B,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,WAAW,EAAE,mBAAmB;aAChC,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,+NAA6N,CAAA;AAE/Q,eAAO,MAAM,mCAAmC,qLAA+K,CAAA;AAE/N,eAAO,MAAM,mCAAmC,oMACmJ,CAAA;AAEnM,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;IACzB,2DAA2D;aAC3D,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;aAC5B,WAAW,EAAE,mBAAmB;CACxB,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,SAAS,EAAE,gBAAgB;aAC3B,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,WAAW,EAAE,mBAAmB;aAChC,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"}
@@ -28,7 +28,7 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  const INACTIVITY_TIMEOUT_IN_MINUTES = 30;
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."';
31
+ const DEFAULT_CONTEXT_PARAMETER_DESCRIPTION = 'A few words on why you are calling this tool, for the server developer\'s analytics. Describe people and things by role, such as "a customer". Do not quote the user or include names, emails, or other personal details.';
32
32
  const DEFAULT_MODEL_PARAMETER_DESCRIPTION = 'The model identifier you are running as, for example "claude-opus-4-8" or "gpt-5.2". Pass "unknown" if you are not certain. Recorded for the server developer\'s analytics.';
33
33
  const DEFAULT_CONVERSATION_ID_DESCRIPTION = "The conversation_id this server returned earlier in this conversation, unchanged, including after later user messages. Omit it if you have none. Recorded for the server developer's analytics.";
34
34
  const POSTHOG_MCP_ANALYTICS_SOURCE = 'posthog_mcp_analytics';
@@ -45,7 +45,8 @@ const PostHogMCPAnalyticsEvent = {
45
45
  ResourceRead: '$mcp_resource_read',
46
46
  ResourcesList: '$mcp_resources_list',
47
47
  ToolCall: '$mcp_tool_call',
48
- ToolsList: '$mcp_tools_list'
48
+ ToolsList: '$mcp_tools_list',
49
+ UnknownTool: '$mcp_unknown_tool'
49
50
  };
50
51
  const PostHogMCPAnalyticsProperty = {
51
52
  ClientName: '$mcp_client_name',
@@ -1,5 +1,5 @@
1
1
  const INACTIVITY_TIMEOUT_IN_MINUTES = 30;
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."';
2
+ const DEFAULT_CONTEXT_PARAMETER_DESCRIPTION = 'A few words on why you are calling this tool, for the server developer\'s analytics. Describe people and things by role, such as "a customer". Do not quote the user or include names, emails, or other personal details.';
3
3
  const DEFAULT_MODEL_PARAMETER_DESCRIPTION = 'The model identifier you are running as, for example "claude-opus-4-8" or "gpt-5.2". Pass "unknown" if you are not certain. Recorded for the server developer\'s analytics.';
4
4
  const DEFAULT_CONVERSATION_ID_DESCRIPTION = "The conversation_id this server returned earlier in this conversation, unchanged, including after later user messages. Omit it if you have none. Recorded for the server developer's analytics.";
5
5
  const POSTHOG_MCP_ANALYTICS_SOURCE = 'posthog_mcp_analytics';
@@ -16,7 +16,8 @@ const PostHogMCPAnalyticsEvent = {
16
16
  ResourceRead: '$mcp_resource_read',
17
17
  ResourcesList: '$mcp_resources_list',
18
18
  ToolCall: '$mcp_tool_call',
19
- ToolsList: '$mcp_tools_list'
19
+ ToolsList: '$mcp_tools_list',
20
+ UnknownTool: '$mcp_unknown_tool'
20
21
  };
21
22
  const PostHogMCPAnalyticsProperty = {
22
23
  ClientName: '$mcp_client_name',
@@ -1 +1 @@
1
- {"version":3,"file":"context-parameters.d.ts","sourceRoot":"","sources":["../../src/extensions/context-parameters.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAA+B,KAAK,6BAA6B,EAAE,MAAM,wBAAwB,CAAA;AAExG,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7C,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,OAAO,CAEjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAEjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,qBAAqB,EAC3E,IAAI,EAAE,KAAK,EACX,0BAA0B,CAAC,EAAE,MAAM,EACnC,MAAM,GAAE,QAAc,GACrB,KAAK,CAQP;AAED,wBAAgB,0BAA0B,CAAC,KAAK,SAAS,qBAAqB,EAC5E,KAAK,EAAE,KAAK,EAAE,EACd,0BAA0B,CAAC,EAAE,MAAM,EACnC,MAAM,GAAE,QAAc,GACrB,KAAK,EAAE,CAET"}
1
+ {"version":3,"file":"context-parameters.d.ts","sourceRoot":"","sources":["../../src/extensions/context-parameters.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAA+B,KAAK,6BAA6B,EAAE,MAAM,wBAAwB,CAAA;AAExG,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7C,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,OAAO,CAEjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAEjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,qBAAqB,EAC3E,IAAI,EAAE,KAAK,EACX,0BAA0B,CAAC,EAAE,MAAM,EACnC,MAAM,GAAE,QAAc,GACrB,KAAK,CASP;AAED,wBAAgB,0BAA0B,CAAC,KAAK,SAAS,qBAAqB,EAC5E,KAAK,EAAE,KAAK,EAAE,EACd,0BAA0B,CAAC,EAAE,MAAM,EACnC,MAAM,GAAE,QAAc,GACrB,KAAK,EAAE,CAET"}
@@ -43,7 +43,7 @@ function getContextDescription(context) {
43
43
  return 'object' == typeof context ? context.description : void 0;
44
44
  }
45
45
  function addContextParameterToTool(tool, contextDescriptionOverride, logger = external_logger_js_namespaceObject.log) {
46
- return (0, external_analytics_parameters_js_namespaceObject.addAnalyticsParameterToTool)(tool, 'context', contextDescriptionOverride || external_constants_js_namespaceObject.DEFAULT_CONTEXT_PARAMETER_DESCRIPTION, 'context', logger);
46
+ return (0, external_analytics_parameters_js_namespaceObject.addAnalyticsParameterToTool)(tool, 'context', contextDescriptionOverride || external_constants_js_namespaceObject.DEFAULT_CONTEXT_PARAMETER_DESCRIPTION, 'context', true, logger);
47
47
  }
48
48
  function addContextParameterToTools(tools, contextDescriptionOverride, logger = external_logger_js_namespaceObject.log) {
49
49
  return tools.map((tool)=>addContextParameterToTool(tool, contextDescriptionOverride, logger));
@@ -8,7 +8,7 @@ function getContextDescription(context) {
8
8
  return 'object' == typeof context ? context.description : void 0;
9
9
  }
10
10
  function addContextParameterToTool(tool, contextDescriptionOverride, logger = log) {
11
- return addAnalyticsParameterToTool(tool, 'context', contextDescriptionOverride || DEFAULT_CONTEXT_PARAMETER_DESCRIPTION, 'context', logger);
11
+ return addAnalyticsParameterToTool(tool, 'context', contextDescriptionOverride || DEFAULT_CONTEXT_PARAMETER_DESCRIPTION, 'context', true, logger);
12
12
  }
13
13
  function addContextParameterToTools(tools, contextDescriptionOverride, logger = log) {
14
14
  return tools.map((tool)=>addContextParameterToTool(tool, contextDescriptionOverride, logger));
@@ -16,6 +16,7 @@ export declare const MCPAnalyticsEventType: {
16
16
  readonly mcpResourcesRead: 'mcp:resources/read';
17
17
  readonly mcpToolsCall: 'mcp:tools/call';
18
18
  readonly mcpToolsList: 'mcp:tools/list';
19
+ readonly mcpUnknownTool: 'mcp:unknown_tool';
19
20
  };
20
21
  export type MCPAnalyticsEventType = (typeof MCPAnalyticsEventType)[keyof typeof MCPAnalyticsEventType];
21
22
  //# sourceMappingURL=event-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-types.d.ts","sourceRoot":"","sources":["../../src/extensions/event-types.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB;aAChC,MAAM,EAAE,gBAAgB;aACxB,WAAW,EAAE,cAAc;aAC3B,oBAAoB,EAAE,wBAAwB;aAC9C,aAAa,EAAE,gBAAgB;aAC/B,aAAa,EAAE,iBAAiB;aAChC,cAAc,EAAE,kBAAkB;aAClC,gBAAgB,EAAE,oBAAoB;aACtC,gBAAgB,EAAE,oBAAoB;aACtC,YAAY,EAAE,gBAAgB;aAC9B,YAAY,EAAE,gBAAgB;CACtB,CAAA;AAEV,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAA"}
1
+ {"version":3,"file":"event-types.d.ts","sourceRoot":"","sources":["../../src/extensions/event-types.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB;aAChC,MAAM,EAAE,gBAAgB;aACxB,WAAW,EAAE,cAAc;aAC3B,oBAAoB,EAAE,wBAAwB;aAC9C,aAAa,EAAE,gBAAgB;aAC/B,aAAa,EAAE,iBAAiB;aAChC,cAAc,EAAE,kBAAkB;aAClC,gBAAgB,EAAE,oBAAoB;aACtC,gBAAgB,EAAE,oBAAoB;aACtC,YAAY,EAAE,gBAAgB;aAC9B,YAAY,EAAE,gBAAgB;aAC9B,cAAc,EAAE,kBAAkB;CAC1B,CAAA;AAEV,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAA"}
@@ -37,7 +37,8 @@ const MCPAnalyticsEventType = {
37
37
  mcpResourcesList: 'mcp:resources/list',
38
38
  mcpResourcesRead: 'mcp:resources/read',
39
39
  mcpToolsCall: 'mcp:tools/call',
40
- mcpToolsList: 'mcp:tools/list'
40
+ mcpToolsList: 'mcp:tools/list',
41
+ mcpUnknownTool: 'mcp:unknown_tool'
41
42
  };
42
43
  __webpack_require__.d(__webpack_exports__, {}, {
43
44
  MCPAnalyticsEventType: MCPAnalyticsEventType
@@ -8,6 +8,7 @@ const MCPAnalyticsEventType = {
8
8
  mcpResourcesList: 'mcp:resources/list',
9
9
  mcpResourcesRead: 'mcp:resources/read',
10
10
  mcpToolsCall: 'mcp:tools/call',
11
- mcpToolsList: 'mcp:tools/list'
11
+ mcpToolsList: 'mcp:tools/list',
12
+ mcpUnknownTool: 'mcp:unknown_tool'
12
13
  };
13
14
  export { MCPAnalyticsEventType };
@@ -1 +1 @@
1
- {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/extensions/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAEtB,cAAc,EAGd,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,UAAU,EACX,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAI7C,eAAO,MAAM,uBAAuB,EAAG,eAAwB,CAAA;AAoF/D,KAAK,sBAAsB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAEtE,4FAA4F;AAC5F,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,qBAAqB,GAAG,SAAS,GACxC,sBAAsB,GAAG,SAAS,CAKpC;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,sBAA2B,GAAG,sBAAsB,CA6CtG;AAkCD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,GAAE,sBAA2B,GACnC,cAAc,CAoBhB;AAED,iEAAiE;AACjE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAElE;AAuCD,uFAAuF;AACvF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU,CAqC/E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,wBAAwB,CAS7D;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,sBAA2B,EACpC,MAAM,GAAE,QAAc,GACrB,OAAO,CAAC,wBAAwB,CAAC,CAiBnC"}
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/extensions/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAEtB,cAAc,EAGd,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,UAAU,EACX,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAK7C,eAAO,MAAM,uBAAuB,EAAG,eAAwB,CAAA;AAoF/D,KAAK,sBAAsB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAEtE,4FAA4F;AAC5F,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,qBAAqB,GAAG,SAAS,GACxC,sBAAsB,GAAG,SAAS,CAKpC;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,sBAA2B,GAAG,sBAAsB,CAoCtG;AAkCD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,GAAE,sBAA2B,GACnC,cAAc,CAoBhB;AAED,iEAAiE;AACjE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAElE;AAuCD,uFAAuF;AACvF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU,CAqC/E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,wBAAwB,CAS7D;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,sBAA2B,EACpC,MAAM,GAAE,QAAc,GACrB,OAAO,CAAC,wBAAwB,CAAC,CAiBnC"}
@@ -40,6 +40,7 @@ __webpack_require__.d(__webpack_exports__, {
40
40
  const external_constants_js_namespaceObject = require("./constants.js");
41
41
  const external_logger_js_namespaceObject = require("./logger.js");
42
42
  const external_mcp_payloads_js_namespaceObject = require("./mcp-payloads.js");
43
+ const external_tools_js_namespaceObject = require("./tools.js");
43
44
  const external_truncation_js_namespaceObject = require("./truncation.js");
44
45
  const SEND_FEEDBACK_TOOL_NAME = 'send_feedback';
45
46
  const FEEDBACK_TYPES = [
@@ -131,11 +132,7 @@ function getFeedbackToolDescriptor(options = {}) {
131
132
  ]
132
133
  },
133
134
  annotations: {
134
- title: 'Send feedback',
135
- readOnlyHint: true,
136
- openWorldHint: true,
137
- idempotentHint: true,
138
- destructiveHint: false
135
+ ...external_tools_js_namespaceObject.VIRTUAL_TOOL_ANNOTATIONS
139
136
  }
140
137
  };
141
138
  }
@@ -1,6 +1,7 @@
1
1
  import { PostHogMCPAnalyticsProperty } from "./constants.mjs";
2
2
  import { log } from "./logger.mjs";
3
3
  import { sanitizeFreeText, sanitizeFreeTextValue } from "./mcp-payloads.mjs";
4
+ import { VIRTUAL_TOOL_ANNOTATIONS } from "./tools.mjs";
4
5
  import { TRUNCATION_SUFFIX } from "./truncation.mjs";
5
6
  const SEND_FEEDBACK_TOOL_NAME = 'send_feedback';
6
7
  const FEEDBACK_TYPES = [
@@ -92,11 +93,7 @@ function getFeedbackToolDescriptor(options = {}) {
92
93
  ]
93
94
  },
94
95
  annotations: {
95
- title: 'Send feedback',
96
- readOnlyHint: true,
97
- openWorldHint: true,
98
- idempotentHint: true,
99
- destructiveHint: false
96
+ ...VIRTUAL_TOOL_ANNOTATIONS
100
97
  }
101
98
  };
102
99
  }
@@ -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;AAwRxC,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;AA6RxC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAgChG"}
@@ -155,7 +155,7 @@ function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInpu
155
155
  wrappedTool[MCP_ANALYTICS_PROCESSED] = true;
156
156
  return wrappedTool;
157
157
  }
158
- async function handleToolCallRequest(highLevelServer, server, originalCallToolHandler, request, extra, logger) {
158
+ async function handleToolCallRequest(highLevelServer, server, originalCallToolHandler, request, extra, logger, registryDispatches) {
159
159
  const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
160
160
  if (!data) {
161
161
  logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
@@ -195,7 +195,7 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
195
195
  execute: async ()=>(0, external_feedback_js_namespaceObject.handleFeedback)(report, feedbackOptions, data.logger)
196
196
  });
197
197
  }
198
- const registeredTool = toolName ? highLevelServer._registeredTools[toolName] : void 0;
198
+ const registeredTool = toolName && Object.prototype.hasOwnProperty.call(highLevelServer._registeredTools, toolName) ? highLevelServer._registeredTools[toolName] : void 0;
199
199
  return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
200
200
  server,
201
201
  data,
@@ -204,6 +204,7 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
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
206
  inputSchema: registeredTool?.inputSchema,
207
+ isUnknownTool: !!toolName && !registeredTool && registryDispatches(),
207
208
  takeCapturedError: ()=>{
208
209
  const captured = extra?.__mcp_analytics_error;
209
210
  if (extra) extra.__mcp_analytics_error = void 0;
@@ -215,10 +216,11 @@ function instrumentHighLevelServer(server, logger) {
215
216
  try {
216
217
  const lowLevelServer = server.server;
217
218
  const mcpAnalyticsData = (0, external_internal_js_namespaceObject.getServerTrackingData)(lowLevelServer);
219
+ const registryDispatches = trackRegistryDispatch(server);
218
220
  const handlers = {
219
221
  initialize: (trackedServer, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleInitializeRequest)(trackedServer, originalHandler, request, extra, logger),
220
222
  'tools/list': (trackedServer, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleListToolsRequest)(trackedServer, originalHandler, request, extra, logger),
221
- 'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra, logger),
223
+ 'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra, logger, registryDispatches),
222
224
  'resources/list': (0, external_instrumentation_js_namespaceObject.traceResourceRequest)(external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesList, logger),
223
225
  'resources/templates/list': (0, external_instrumentation_js_namespaceObject.traceResourceRequest)(external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesList, logger),
224
226
  'resources/read': (0, external_instrumentation_js_namespaceObject.traceResourceRequest)(external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesRead, logger)
@@ -234,6 +236,16 @@ function instrumentHighLevelServer(server, logger) {
234
236
  logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
235
237
  }
236
238
  }
239
+ function trackRegistryDispatch(server) {
240
+ const lowLevelServer = server.server;
241
+ let replaced = false;
242
+ const setRequestHandler = lowLevelServer.setRequestHandler.bind(lowLevelServer);
243
+ lowLevelServer.setRequestHandler = (...args)=>{
244
+ if (server._toolHandlersInitialized && 'tools/call' === (0, external_mcp_sdk_compat_js_namespaceObject.readRequestHandlerMethod)(args[0])) replaced = true;
245
+ return setRequestHandler(...args);
246
+ };
247
+ return ()=>true === server._toolHandlersInitialized && !replaced;
248
+ }
237
249
  function seedToolDescriptionsFromRegistry(cache, tools) {
238
250
  for (const [name, tool] of Object.entries(tools))if ('string' == typeof tool?.description) cache.set(name, tool.description);
239
251
  }
@@ -4,7 +4,7 @@ import { isContextEnabled } from "./context-parameters.mjs";
4
4
  import { isCaptureModelEnabled } from "./model-parameters.mjs";
5
5
  import { MCPAnalyticsEventType } from "./event-types.mjs";
6
6
  import { getServerTrackingData } from "./internal.mjs";
7
- import { createWrappedTool, getToolFunction, hasToolFunction } from "./mcp-sdk-compat.mjs";
7
+ import { createWrappedTool, getToolFunction, hasToolFunction, readRequestHandlerMethod } from "./mcp-sdk-compat.mjs";
8
8
  import { getReportMissingToolDescriptor, handleReportMissing, resolveMissingCapabilityToolName } from "./tools.mjs";
9
9
  import { captureToolCall, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, readToolMetaCategory, traceResourceRequest } from "./instrumentation.mjs";
10
10
  import { getContextArgument } from "./tracing-helpers.mjs";
@@ -123,7 +123,7 @@ function addTracingToToolCallbackInternal(tool, toolName, server, getCurrentInpu
123
123
  wrappedTool[MCP_ANALYTICS_PROCESSED] = true;
124
124
  return wrappedTool;
125
125
  }
126
- async function handleToolCallRequest(highLevelServer, server, originalCallToolHandler, request, extra, logger) {
126
+ async function handleToolCallRequest(highLevelServer, server, originalCallToolHandler, request, extra, logger, registryDispatches) {
127
127
  const data = getServerTrackingData(server);
128
128
  if (!data) {
129
129
  logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
@@ -163,7 +163,7 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
163
163
  execute: async ()=>handleFeedback(report, feedbackOptions, data.logger)
164
164
  });
165
165
  }
166
- const registeredTool = toolName ? highLevelServer._registeredTools[toolName] : void 0;
166
+ const registeredTool = toolName && Object.prototype.hasOwnProperty.call(highLevelServer._registeredTools, toolName) ? highLevelServer._registeredTools[toolName] : void 0;
167
167
  return await captureToolCall({
168
168
  server,
169
169
  data,
@@ -172,6 +172,7 @@ async function handleToolCallRequest(highLevelServer, server, originalCallToolHa
172
172
  execute: (downstreamRequest)=>originalCallToolHandler(downstreamRequest, extra),
173
173
  parameterOwnership: registeredTool ? getAnalyticsParameterOwnership(registeredTool.inputSchema, registeredTool.outputSchema) : void 0,
174
174
  inputSchema: registeredTool?.inputSchema,
175
+ isUnknownTool: !!toolName && !registeredTool && registryDispatches(),
175
176
  takeCapturedError: ()=>{
176
177
  const captured = extra?.__mcp_analytics_error;
177
178
  if (extra) extra.__mcp_analytics_error = void 0;
@@ -183,10 +184,11 @@ function instrumentHighLevelServer(server, logger) {
183
184
  try {
184
185
  const lowLevelServer = server.server;
185
186
  const mcpAnalyticsData = getServerTrackingData(lowLevelServer);
187
+ const registryDispatches = trackRegistryDispatch(server);
186
188
  const handlers = {
187
189
  initialize: (trackedServer, originalHandler, request, extra)=>handleInitializeRequest(trackedServer, originalHandler, request, extra, logger),
188
190
  'tools/list': (trackedServer, originalHandler, request, extra)=>handleListToolsRequest(trackedServer, originalHandler, request, extra, logger),
189
- 'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra, logger),
191
+ 'tools/call': (trackedServer, originalHandler, request, extra)=>handleToolCallRequest(server, trackedServer, originalHandler, request, extra, logger, registryDispatches),
190
192
  'resources/list': traceResourceRequest(MCPAnalyticsEventType.mcpResourcesList, logger),
191
193
  'resources/templates/list': traceResourceRequest(MCPAnalyticsEventType.mcpResourcesList, logger),
192
194
  'resources/read': traceResourceRequest(MCPAnalyticsEventType.mcpResourcesRead, logger)
@@ -202,6 +204,16 @@ function instrumentHighLevelServer(server, logger) {
202
204
  logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
203
205
  }
204
206
  }
207
+ function trackRegistryDispatch(server) {
208
+ const lowLevelServer = server.server;
209
+ let replaced = false;
210
+ const setRequestHandler = lowLevelServer.setRequestHandler.bind(lowLevelServer);
211
+ lowLevelServer.setRequestHandler = (...args)=>{
212
+ if (server._toolHandlersInitialized && 'tools/call' === readRequestHandlerMethod(args[0])) replaced = true;
213
+ return setRequestHandler(...args);
214
+ };
215
+ return ()=>true === server._toolHandlersInitialized && !replaced;
216
+ }
205
217
  function seedToolDescriptionsFromRegistry(cache, tools) {
206
218
  for (const [name, tool] of Object.entries(tools))if ('string' == typeof tool?.description) cache.set(name, tool.description);
207
219
  }
@@ -99,7 +99,9 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
99
99
  execute: async ()=>(0, external_feedback_js_namespaceObject.handleFeedback)(report, feedbackOptions, data.logger)
100
100
  });
101
101
  }
102
- const originalTool = resolveOriginalTool(data, toolName);
102
+ const lookup = lookUpOriginalTool(data, toolName);
103
+ const originalTool = lookup.registered ? lookup.tool : void 0;
104
+ const hasDispatcher = void 0 !== originalCallToolHandler && originalCallToolHandler !== unknownToolHandler;
103
105
  return await (0, external_instrumentation_js_namespaceObject.captureToolCall)({
104
106
  server,
105
107
  data,
@@ -107,16 +109,27 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
107
109
  extra,
108
110
  execute: (downstreamRequest)=>runOriginalToolHandler(originalCallToolHandler, downstreamRequest, extra),
109
111
  parameterOwnership: originalTool && !(toolName && data.toolAnalyticsParameterOwnership.has(toolName)) ? (0, external_analytics_parameters_js_namespaceObject.getAnalyticsParameterOwnership)(originalTool.inputSchema) : void 0,
110
- inputSchema: originalTool?.inputSchema
112
+ inputSchema: originalTool?.inputSchema,
113
+ isUnknownTool: !!toolName && (!hasDispatcher || false === lookup.registered)
111
114
  });
112
115
  }
113
- function resolveOriginalTool(data, toolName) {
114
- if (!toolName || !data.options.resolveOriginalTool) return;
116
+ function lookUpOriginalTool(data, toolName) {
117
+ if (!toolName || !data.options.resolveOriginalTool) return {
118
+ registered: void 0
119
+ };
115
120
  try {
116
- return data.options.resolveOriginalTool(toolName) ?? void 0;
121
+ const tool = data.options.resolveOriginalTool(toolName);
122
+ return tool ? {
123
+ registered: true,
124
+ tool
125
+ } : {
126
+ registered: false
127
+ };
117
128
  } catch (error) {
118
129
  data.logger(`Warning: resolveOriginalTool failed for tool ${toolName} - ${error}`);
119
- return;
130
+ return {
131
+ registered: void 0
132
+ };
120
133
  }
121
134
  }
122
135
  function runOriginalToolHandler(handler, request, extra) {
@@ -67,7 +67,9 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
67
67
  execute: async ()=>handleFeedback(report, feedbackOptions, data.logger)
68
68
  });
69
69
  }
70
- const originalTool = resolveOriginalTool(data, toolName);
70
+ const lookup = lookUpOriginalTool(data, toolName);
71
+ const originalTool = lookup.registered ? lookup.tool : void 0;
72
+ const hasDispatcher = void 0 !== originalCallToolHandler && originalCallToolHandler !== unknownToolHandler;
71
73
  return await captureToolCall({
72
74
  server,
73
75
  data,
@@ -75,16 +77,27 @@ async function handleToolCallRequest(server, originalCallToolHandler, request, e
75
77
  extra,
76
78
  execute: (downstreamRequest)=>runOriginalToolHandler(originalCallToolHandler, downstreamRequest, extra),
77
79
  parameterOwnership: originalTool && !(toolName && data.toolAnalyticsParameterOwnership.has(toolName)) ? getAnalyticsParameterOwnership(originalTool.inputSchema) : void 0,
78
- inputSchema: originalTool?.inputSchema
80
+ inputSchema: originalTool?.inputSchema,
81
+ isUnknownTool: !!toolName && (!hasDispatcher || false === lookup.registered)
79
82
  });
80
83
  }
81
- function resolveOriginalTool(data, toolName) {
82
- if (!toolName || !data.options.resolveOriginalTool) return;
84
+ function lookUpOriginalTool(data, toolName) {
85
+ if (!toolName || !data.options.resolveOriginalTool) return {
86
+ registered: void 0
87
+ };
83
88
  try {
84
- return data.options.resolveOriginalTool(toolName) ?? void 0;
89
+ const tool = data.options.resolveOriginalTool(toolName);
90
+ return tool ? {
91
+ registered: true,
92
+ tool
93
+ } : {
94
+ registered: false
95
+ };
85
96
  } catch (error) {
86
97
  data.logger(`Warning: resolveOriginalTool failed for tool ${toolName} - ${error}`);
87
- return;
98
+ return {
99
+ registered: void 0
100
+ };
88
101
  }
89
102
  }
90
103
  function runOriginalToolHandler(handler, request, extra) {
@@ -52,6 +52,11 @@ interface TraceToolCallParams {
52
52
  * read it here to capture the real stack rather than the result envelope.
53
53
  */
54
54
  takeCapturedError?: () => unknown;
55
+ /**
56
+ * The SDK knows the server has no tool by this name, so a rejected call is
57
+ * recorded as `$mcp_unknown_tool`, not as a tool call.
58
+ */
59
+ isUnknownTool?: boolean;
55
60
  }
56
61
  /**
57
62
  * The shared tool-call lifecycle: resolve conversation id, build + enrich the
@@ -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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"}