@posthog/mcp 0.11.7 → 0.13.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 (93) hide show
  1. package/README.md +51 -2
  2. package/dist/extensions/analytics-parameters.d.ts +22 -2
  3. package/dist/extensions/analytics-parameters.d.ts.map +1 -1
  4. package/dist/extensions/analytics-parameters.js +53 -10
  5. package/dist/extensions/analytics-parameters.mjs +37 -1
  6. package/dist/extensions/capture.d.ts.map +1 -1
  7. package/dist/extensions/capture.js +14 -8
  8. package/dist/extensions/capture.mjs +2 -0
  9. package/dist/extensions/client-identity.js +18 -14
  10. package/dist/extensions/compatibility.js +16 -12
  11. package/dist/extensions/constants.d.ts +3 -0
  12. package/dist/extensions/constants.d.ts.map +1 -1
  13. package/dist/extensions/constants.js +28 -18
  14. package/dist/extensions/constants.mjs +5 -2
  15. package/dist/extensions/context-parameters.d.ts +2 -2
  16. package/dist/extensions/context-parameters.d.ts.map +1 -1
  17. package/dist/extensions/context-parameters.js +14 -38
  18. package/dist/extensions/context-parameters.mjs +2 -30
  19. package/dist/extensions/conversation-id.js +18 -14
  20. package/dist/extensions/detect.js +23 -19
  21. package/dist/extensions/event-types.js +15 -11
  22. package/dist/extensions/exceptions.js +12 -8
  23. package/dist/extensions/headers.js +16 -12
  24. package/dist/extensions/ids.js +12 -8
  25. package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
  26. package/dist/extensions/instrument-highlevel.js +16 -9
  27. package/dist/extensions/instrument-highlevel.mjs +5 -2
  28. package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
  29. package/dist/extensions/instrument-lowlevel.js +13 -8
  30. package/dist/extensions/instrument-lowlevel.mjs +2 -1
  31. package/dist/extensions/instrumentation.d.ts +16 -0
  32. package/dist/extensions/instrumentation.d.ts.map +1 -1
  33. package/dist/extensions/instrumentation.js +31 -14
  34. package/dist/extensions/instrumentation.mjs +11 -1
  35. package/dist/extensions/intent.js +14 -10
  36. package/dist/extensions/internal.js +17 -13
  37. package/dist/extensions/lib-identity.js +12 -8
  38. package/dist/extensions/logger.js +17 -13
  39. package/dist/extensions/mcp-payloads.js +16 -12
  40. package/dist/extensions/mcp-sdk-compat.js +23 -19
  41. package/dist/extensions/model-parameters.d.ts +48 -0
  42. package/dist/extensions/model-parameters.d.ts.map +1 -0
  43. package/dist/extensions/model-parameters.js +84 -0
  44. package/dist/extensions/model-parameters.mjs +31 -0
  45. package/dist/extensions/output-instructions.js +15 -11
  46. package/dist/extensions/posthog-events.js +14 -8
  47. package/dist/extensions/posthog-events.mjs +2 -0
  48. package/dist/extensions/posthog-mcp.d.ts +23 -12
  49. package/dist/extensions/posthog-mcp.d.ts.map +1 -1
  50. package/dist/extensions/posthog-mcp.js +49 -11
  51. package/dist/extensions/posthog-mcp.mjs +37 -3
  52. package/dist/extensions/request-headers.js +15 -11
  53. package/dist/extensions/sanitization.d.ts +2 -2
  54. package/dist/extensions/sanitization.d.ts.map +1 -1
  55. package/dist/extensions/sanitization.js +13 -8
  56. package/dist/extensions/sanitization.mjs +1 -0
  57. package/dist/extensions/session-token.js +17 -13
  58. package/dist/extensions/session-token.mjs +2 -2
  59. package/dist/extensions/session.js +16 -12
  60. package/dist/extensions/sink.js +14 -10
  61. package/dist/extensions/tools.js +15 -11
  62. package/dist/extensions/tracing-helpers.js +15 -11
  63. package/dist/extensions/transport-identity.js +15 -11
  64. package/dist/extensions/truncation.d.ts.map +1 -1
  65. package/dist/extensions/truncation.js +22 -16
  66. package/dist/extensions/truncation.mjs +1 -0
  67. package/dist/index.d.ts +1 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +22 -18
  70. package/dist/index.mjs +7 -7
  71. package/dist/types.d.ts +55 -4
  72. package/dist/types.d.ts.map +1 -1
  73. package/dist/types.js +2 -2
  74. package/dist/types.mjs +1 -0
  75. package/dist/version.d.ts +1 -1
  76. package/dist/version.js +15 -11
  77. package/dist/version.mjs +1 -1
  78. package/package.json +28 -11
  79. package/src/extensions/analytics-parameters.ts +88 -2
  80. package/src/extensions/capture.ts +4 -0
  81. package/src/extensions/constants.ts +4 -0
  82. package/src/extensions/context-parameters.ts +10 -59
  83. package/src/extensions/instrument-highlevel.ts +4 -0
  84. package/src/extensions/instrument-lowlevel.ts +2 -0
  85. package/src/extensions/instrumentation.ts +51 -0
  86. package/src/extensions/model-parameters.ts +98 -0
  87. package/src/extensions/posthog-events.ts +8 -0
  88. package/src/extensions/posthog-mcp.ts +84 -12
  89. package/src/extensions/sanitization.ts +6 -2
  90. package/src/extensions/truncation.ts +3 -0
  91. package/src/index.ts +3 -0
  92. package/src/types.ts +55 -4
  93. package/src/version.ts +1 -1
package/README.md CHANGED
@@ -137,9 +137,10 @@ cannot tell that it is yours, its value is recorded as `$mcp_intent`. It never l
137
137
  and it is capped at 2048 characters. Two ways out, both one line:
138
138
 
139
139
  ```ts
140
- instrument(server, posthog, { context: false }) // no injection, no capture
140
+ instrument(server, posthog, { context: false }) // no injection, no capture
141
141
 
142
- instrument(server, posthog, { // keep it, drop the property
142
+ instrument(server, posthog, {
143
+ // keep it, drop the property
143
144
  beforeSend: (event) => {
144
145
  delete event.properties.$mcp_intent
145
146
  return event
@@ -149,6 +150,54 @@ instrument(server, posthog, { // keep it, dr
149
150
 
150
151
  `intentFallback` is the third option: supply the intent yourself when the agent did not send one.
151
152
 
153
+ ### What `$mcp_llm_model` records, and when it stays empty
154
+
155
+ `captureModel` is **off** by default. Turn it on and the SDK adds a required `llm_model` parameter to
156
+ every tool it advertises — including the `get_more_tools` virtual tool — asks the agent which model
157
+ it runs as, and records the answer as `$mcp_llm_model` with `$mcp_llm_model_source = "self_reported"`.
158
+
159
+ The value is self-reported and unverified, exactly like `clientInfo` in the MCP spec. Use it to spot
160
+ degradation across models ("does our MCP get worse on model X?"), never for billing or access
161
+ control. An agent that answers `unknown` is recorded as nothing rather than as a model called
162
+ "unknown".
163
+
164
+ Unlike `context`, this option degrades to **silence** rather than to a kept argument. Both the strip
165
+ and the capture require the SDK to have confirmed the parameter is its own:
166
+
167
+ - `instrument(server)` on a high-level `McpServer` resolves ownership for your registered tools per
168
+ request from the live tool registry, so those work even on a fresh instance.
169
+ - The `get_more_tools` virtual tool works on any instance and on either server type: the SDK writes
170
+ that descriptor itself, so what it declares is known without a listing.
171
+ - Instrumenting a low-level `Server` learns ownership of **your** tools while serving `tools/list`.
172
+ On a server that builds a fresh instance per HTTP request — `createMcpHandler`, or
173
+ `@rekog/mcp-nest` in its stateless mode — the instance handling a `tools/call` never served one,
174
+ so for those tools it neither strips `llm_model` nor records `$mcp_llm_model`. Nothing breaks and
175
+ no wrong value is stored; the property is simply absent while agents still pay a token for the
176
+ extra field.
177
+
178
+ As with `context`, what matters is instance lifetime rather than statelessness: a transport-stateless
179
+ server (`sessionIdGenerator: undefined`) that keeps one long-lived server object learns ownership
180
+ from the first `tools/list` and keeps it.
181
+
182
+ For a custom dispatcher, enable the same option on `PostHogMCP`. Its `prepareToolList()` helper
183
+ injects the field and records ownership by tool name; `prepareToolCall()` returns `llmModel` and
184
+ `llmModelSource` while removing the SDK-owned argument before dispatch. Pass both fields to
185
+ `captureToolCall()`. Pass the original tool descriptor on each call so this also works when
186
+ `tools/list` and `tools/call` reach different server replicas:
187
+
188
+ ```ts
189
+ const posthog = new PostHogMCP(process.env.POSTHOG_PROJECT_TOKEN, { captureModel: true })
190
+
191
+ const tools = posthog.prepareToolList(serverTools)
192
+ const originalTool = serverTools.find((tool) => tool.name === toolName)
193
+ const { args, llmModel, llmModelSource } = posthog.prepareToolCall(toolName, rawArgs, { originalTool })
194
+ const result = await dispatch(toolName, args)
195
+
196
+ posthog.captureToolCall({ toolName, llmModel, llmModelSource, isError: false })
197
+ ```
198
+
199
+ A persistent single-process dispatcher can omit `originalTool` after it has prepared its tool list.
200
+
152
201
  ### If you switched to `instrument(server.server)`
153
202
 
154
203
  Before v2 support landed, the compatibility gate rejected high-level v2 servers, and the usual
@@ -1,4 +1,5 @@
1
1
  import type { AnalyticsParameterOwnership } from '../types';
2
+ import { type LoggerFn } from './logger';
2
3
  export interface AnalyticsInjectableJsonSchema {
3
4
  $ref?: unknown;
4
5
  additionalProperties?: boolean;
@@ -11,12 +12,31 @@ export interface AnalyticsInjectableJsonSchema {
11
12
  }
12
13
  export declare function hasAnalyticsParameter(schema: AnalyticsInjectableJsonSchema | undefined, parameterName: string): boolean;
13
14
  export declare function canInjectAnalyticsParameter(schema: AnalyticsInjectableJsonSchema | undefined, parameterName: string): boolean;
15
+ export interface AnalyticsInjectableTool {
16
+ inputSchema?: AnalyticsInjectableJsonSchema;
17
+ name?: string;
18
+ [key: string]: unknown;
19
+ }
20
+ /**
21
+ * Adds a required string parameter to a tool's JSON Schema. Called AFTER the MCP
22
+ * SDK has converted Zod schemas to JSON Schema, so only JSON Schema needs
23
+ * handling.
24
+ *
25
+ * Shared by every analytics parameter we inject (`context`, `llm_model`) so
26
+ * schema ownership, cloning, and required-field behavior cannot drift between
27
+ * them. `injectionLabel` only names the feature in the skip warnings.
28
+ *
29
+ * Skips injection (with a warning) for:
30
+ * - Tools that already declare the parameter — it is theirs, not ours
31
+ * - Complex schemas (oneOf/allOf/anyOf/$ref) that can't safely gain properties
32
+ */
33
+ export declare function addAnalyticsParameterToTool<TTool extends AnalyticsInjectableTool>(tool: TTool, parameterName: string, description: string, injectionLabel: string, logger?: LoggerFn): TTool;
14
34
  export declare function analyticsOwnsParameter(inputSchema: unknown, parameterName: string): boolean;
15
35
  export declare function getAnalyticsParameterOwnership(inputSchema: unknown, outputSchema?: unknown): AnalyticsParameterOwnership;
16
36
  /**
17
37
  * Removes the arguments we injected, leaving the host's own. Input-side only, so
18
- * it takes just those two flags rather than the whole ownership record — callers
38
+ * it takes just those flags rather than the whole ownership record — callers
19
39
  * that have no output-schema context should not have to invent a value for it.
20
40
  */
21
- export declare function stripOwnedAnalyticsArguments(args: unknown, ownership: Pick<AnalyticsParameterOwnership, 'context' | 'conversationId'>): unknown;
41
+ export declare function stripOwnedAnalyticsArguments(args: unknown, ownership: Pick<AnalyticsParameterOwnership, 'context' | 'conversationId' | 'llmModel'>): unknown;
22
42
  //# sourceMappingURL=analytics-parameters.d.ts.map
@@ -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;AAiB3D,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,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,CAM7B;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,IAAI,CAAC,2BAA2B,EAAE,SAAS,GAAG,gBAAgB,CAAC,GACzE,OAAO,CAWT"}
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,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
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
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -13,7 +17,7 @@ var __webpack_require__ = {};
13
17
  })();
14
18
  (()=>{
15
19
  __webpack_require__.r = (exports1)=>{
16
- if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
21
  value: 'Module'
18
22
  });
19
23
  Object.defineProperty(exports1, '__esModule', {
@@ -24,12 +28,14 @@ var __webpack_require__ = {};
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
30
  __webpack_require__.d(__webpack_exports__, {
27
- hasAnalyticsParameter: ()=>hasAnalyticsParameter,
31
+ addAnalyticsParameterToTool: ()=>addAnalyticsParameterToTool,
28
32
  analyticsOwnsParameter: ()=>analyticsOwnsParameter,
29
- getAnalyticsParameterOwnership: ()=>getAnalyticsParameterOwnership,
30
33
  canInjectAnalyticsParameter: ()=>canInjectAnalyticsParameter,
34
+ getAnalyticsParameterOwnership: ()=>getAnalyticsParameterOwnership,
35
+ hasAnalyticsParameter: ()=>hasAnalyticsParameter,
31
36
  stripOwnedAnalyticsArguments: ()=>stripOwnedAnalyticsArguments
32
37
  });
38
+ const external_logger_js_namespaceObject = require("./logger.js");
33
39
  const external_mcp_sdk_compat_js_namespaceObject = require("./mcp-sdk-compat.js");
34
40
  const external_output_instructions_js_namespaceObject = require("./output-instructions.js");
35
41
  const JSON_SCHEMA_KEYWORDS = [
@@ -50,6 +56,36 @@ function hasAnalyticsParameter(schema, parameterName) {
50
56
  function canInjectAnalyticsParameter(schema, parameterName) {
51
57
  return !hasAnalyticsParameter(schema, parameterName) && !schema?.$ref && !schema?.oneOf && !schema?.allOf && !schema?.anyOf;
52
58
  }
59
+ function addAnalyticsParameterToTool(tool, parameterName, description, injectionLabel, logger = external_logger_js_namespaceObject.log) {
60
+ const modifiedTool = {
61
+ ...tool
62
+ };
63
+ const toolName = tool.name || 'unknown';
64
+ const schema = modifiedTool.inputSchema;
65
+ if (!canInjectAnalyticsParameter(schema, parameterName)) {
66
+ logger(hasAnalyticsParameter(schema, parameterName) ? `WARN: Tool "${toolName}" already has '${parameterName}' parameter. Skipping ${injectionLabel} injection.` : `WARN: Tool "${toolName}" has complex schema (oneOf/allOf/anyOf/$ref). Skipping ${injectionLabel} injection.`);
67
+ return modifiedTool;
68
+ }
69
+ if (!modifiedTool.inputSchema) modifiedTool.inputSchema = {
70
+ type: 'object',
71
+ properties: {},
72
+ required: []
73
+ };
74
+ modifiedTool.inputSchema = JSON.parse(JSON.stringify(modifiedTool.inputSchema));
75
+ const inputSchema = modifiedTool.inputSchema;
76
+ if (!inputSchema.properties) inputSchema.properties = {};
77
+ if (false === inputSchema.additionalProperties) inputSchema.additionalProperties = void 0;
78
+ inputSchema.properties[parameterName] = {
79
+ type: 'string',
80
+ description
81
+ };
82
+ if (Array.isArray(inputSchema.required)) {
83
+ if (!inputSchema.required.includes(parameterName)) inputSchema.required.push(parameterName);
84
+ } else inputSchema.required = [
85
+ parameterName
86
+ ];
87
+ return modifiedTool;
88
+ }
53
89
  function analyticsOwnsParameter(inputSchema, parameterName) {
54
90
  if (!inputSchema || 'object' != typeof inputSchema) return canInjectAnalyticsParameter(void 0, parameterName);
55
91
  if ((0, external_mcp_sdk_compat_js_namespaceObject.isZodRawShapeCompat)(inputSchema)) return canInjectAnalyticsParameter({
@@ -68,6 +104,7 @@ function getAnalyticsParameterOwnership(inputSchema, outputSchema) {
68
104
  return {
69
105
  context: analyticsOwnsParameter(inputSchema, 'context'),
70
106
  conversationId: analyticsOwnsParameter(inputSchema, 'conversation_id'),
107
+ llmModel: analyticsOwnsParameter(inputSchema, 'llm_model'),
71
108
  outputInstructions: (0, external_output_instructions_js_namespaceObject.canDeclareOutputInstructions)(outputSchema)
72
109
  };
73
110
  }
@@ -81,20 +118,26 @@ function stripOwnedAnalyticsArguments(args, ownership) {
81
118
  const { conversation_id: _conversationId, ...rest } = cleanedArgs;
82
119
  cleanedArgs = rest;
83
120
  }
121
+ if (ownership.llmModel && cleanedArgs && 'object' == typeof cleanedArgs && 'llm_model' in cleanedArgs) {
122
+ const { llm_model: _llmModel, ...rest } = cleanedArgs;
123
+ cleanedArgs = rest;
124
+ }
84
125
  return cleanedArgs;
85
126
  }
127
+ exports.addAnalyticsParameterToTool = __webpack_exports__.addAnalyticsParameterToTool;
86
128
  exports.analyticsOwnsParameter = __webpack_exports__.analyticsOwnsParameter;
87
129
  exports.canInjectAnalyticsParameter = __webpack_exports__.canInjectAnalyticsParameter;
88
130
  exports.getAnalyticsParameterOwnership = __webpack_exports__.getAnalyticsParameterOwnership;
89
131
  exports.hasAnalyticsParameter = __webpack_exports__.hasAnalyticsParameter;
90
132
  exports.stripOwnedAnalyticsArguments = __webpack_exports__.stripOwnedAnalyticsArguments;
91
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
133
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
134
+ "addAnalyticsParameterToTool",
92
135
  "analyticsOwnsParameter",
93
136
  "canInjectAnalyticsParameter",
94
137
  "getAnalyticsParameterOwnership",
95
138
  "hasAnalyticsParameter",
96
139
  "stripOwnedAnalyticsArguments"
97
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
140
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
98
141
  Object.defineProperty(exports, '__esModule', {
99
142
  value: true
100
143
  });
@@ -1,3 +1,4 @@
1
+ import { log } from "./logger.mjs";
1
2
  import { getObjectShape, isZodRawShapeCompat } from "./mcp-sdk-compat.mjs";
2
3
  import { canDeclareOutputInstructions } from "./output-instructions.mjs";
3
4
  const JSON_SCHEMA_KEYWORDS = [
@@ -18,6 +19,36 @@ function hasAnalyticsParameter(schema, parameterName) {
18
19
  function canInjectAnalyticsParameter(schema, parameterName) {
19
20
  return !hasAnalyticsParameter(schema, parameterName) && !schema?.$ref && !schema?.oneOf && !schema?.allOf && !schema?.anyOf;
20
21
  }
22
+ function addAnalyticsParameterToTool(tool, parameterName, description, injectionLabel, logger = log) {
23
+ const modifiedTool = {
24
+ ...tool
25
+ };
26
+ const toolName = tool.name || 'unknown';
27
+ const schema = modifiedTool.inputSchema;
28
+ if (!canInjectAnalyticsParameter(schema, parameterName)) {
29
+ logger(hasAnalyticsParameter(schema, parameterName) ? `WARN: Tool "${toolName}" already has '${parameterName}' parameter. Skipping ${injectionLabel} injection.` : `WARN: Tool "${toolName}" has complex schema (oneOf/allOf/anyOf/$ref). Skipping ${injectionLabel} injection.`);
30
+ return modifiedTool;
31
+ }
32
+ if (!modifiedTool.inputSchema) modifiedTool.inputSchema = {
33
+ type: 'object',
34
+ properties: {},
35
+ required: []
36
+ };
37
+ modifiedTool.inputSchema = JSON.parse(JSON.stringify(modifiedTool.inputSchema));
38
+ const inputSchema = modifiedTool.inputSchema;
39
+ if (!inputSchema.properties) inputSchema.properties = {};
40
+ if (false === inputSchema.additionalProperties) inputSchema.additionalProperties = void 0;
41
+ inputSchema.properties[parameterName] = {
42
+ type: 'string',
43
+ description
44
+ };
45
+ if (Array.isArray(inputSchema.required)) {
46
+ if (!inputSchema.required.includes(parameterName)) inputSchema.required.push(parameterName);
47
+ } else inputSchema.required = [
48
+ parameterName
49
+ ];
50
+ return modifiedTool;
51
+ }
21
52
  function analyticsOwnsParameter(inputSchema, parameterName) {
22
53
  if (!inputSchema || 'object' != typeof inputSchema) return canInjectAnalyticsParameter(void 0, parameterName);
23
54
  if (isZodRawShapeCompat(inputSchema)) return canInjectAnalyticsParameter({
@@ -36,6 +67,7 @@ function getAnalyticsParameterOwnership(inputSchema, outputSchema) {
36
67
  return {
37
68
  context: analyticsOwnsParameter(inputSchema, 'context'),
38
69
  conversationId: analyticsOwnsParameter(inputSchema, 'conversation_id'),
70
+ llmModel: analyticsOwnsParameter(inputSchema, 'llm_model'),
39
71
  outputInstructions: canDeclareOutputInstructions(outputSchema)
40
72
  };
41
73
  }
@@ -49,6 +81,10 @@ function stripOwnedAnalyticsArguments(args, ownership) {
49
81
  const { conversation_id: _conversationId, ...rest } = cleanedArgs;
50
82
  cleanedArgs = rest;
51
83
  }
84
+ if (ownership.llmModel && cleanedArgs && 'object' == typeof cleanedArgs && 'llm_model' in cleanedArgs) {
85
+ const { llm_model: _llmModel, ...rest } = cleanedArgs;
86
+ cleanedArgs = rest;
87
+ }
52
88
  return cleanedArgs;
53
89
  }
54
- export { analyticsOwnsParameter, canInjectAnalyticsParameter, getAnalyticsParameterOwnership, hasAnalyticsParameter, stripOwnedAnalyticsArguments };
90
+ export { addAnalyticsParameterToTool, analyticsOwnsParameter, canInjectAnalyticsParameter, getAnalyticsParameterOwnership, hasAnalyticsParameter, stripOwnedAnalyticsArguments };
@@ -1 +1 @@
1
- {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/extensions/capture.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGxC;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,QAAQ,EACpB,MAAM,EAAE,QAAQ,EAChB,kBAAkB,CAAC,EAAE,WAAW,GAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CA0E3B"}
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/extensions/capture.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGxC;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,QAAQ,EACpB,MAAM,EAAE,QAAQ,EAChB,kBAAkB,CAAC,EAAE,WAAW,GAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CA8E3B"}
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
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
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -13,7 +17,7 @@ var __webpack_require__ = {};
13
17
  })();
14
18
  (()=>{
15
19
  __webpack_require__.r = (exports1)=>{
16
- if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
21
  value: 'Module'
18
22
  });
19
23
  Object.defineProperty(exports1, '__esModule', {
@@ -64,6 +68,8 @@ function captureEvent(server, eventInput, logger, requestAttribution) {
64
68
  response: eventInput.response,
65
69
  userIntent: eventInput.userIntent,
66
70
  userIntentSource: eventInput.userIntentSource,
71
+ llmModel: eventInput.llmModel,
72
+ llmModelSource: eventInput.llmModelSource,
67
73
  isError: eventInput.isError,
68
74
  error: eventInput.error,
69
75
  errorType: eventInput.errorType,
@@ -76,9 +82,9 @@ function captureEvent(server, eventInput, logger, requestAttribution) {
76
82
  });
77
83
  }
78
84
  exports.captureEvent = __webpack_exports__.captureEvent;
79
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
85
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
80
86
  "captureEvent"
81
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
87
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
82
88
  Object.defineProperty(exports, '__esModule', {
83
89
  value: true
84
90
  });
@@ -36,6 +36,8 @@ function captureEvent(server, eventInput, logger, requestAttribution) {
36
36
  response: eventInput.response,
37
37
  userIntent: eventInput.userIntent,
38
38
  userIntentSource: eventInput.userIntentSource,
39
+ llmModel: eventInput.llmModel,
40
+ llmModelSource: eventInput.llmModelSource,
39
41
  isError: eventInput.isError,
40
42
  error: eventInput.error,
41
43
  errorType: eventInput.errorType,
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
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
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -13,7 +17,7 @@ var __webpack_require__ = {};
13
17
  })();
14
18
  (()=>{
15
19
  __webpack_require__.r = (exports1)=>{
16
- if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
21
  value: 'Module'
18
22
  });
19
23
  Object.defineProperty(exports1, '__esModule', {
@@ -24,15 +28,15 @@ var __webpack_require__ = {};
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
30
  __webpack_require__.d(__webpack_exports__, {
27
- readMetaClientInfo: ()=>readMetaClientInfo,
28
- readHeaderProtocolVersion: ()=>readHeaderProtocolVersion,
31
+ META_CLIENT_INFO_KEY: ()=>META_CLIENT_INFO_KEY,
29
32
  META_PROTOCOL_VERSION_KEY: ()=>META_PROTOCOL_VERSION_KEY,
30
33
  PROTOCOL_VERSION_HEADER: ()=>PROTOCOL_VERSION_HEADER,
31
- stampClientIdentity: ()=>stampClientIdentity,
32
- resolveClientIdentity: ()=>resolveClientIdentity,
33
- readServerClientIdentity: ()=>readServerClientIdentity,
34
34
  readEnvelopeClientInfo: ()=>readEnvelopeClientInfo,
35
- META_CLIENT_INFO_KEY: ()=>META_CLIENT_INFO_KEY
35
+ readHeaderProtocolVersion: ()=>readHeaderProtocolVersion,
36
+ readMetaClientInfo: ()=>readMetaClientInfo,
37
+ readServerClientIdentity: ()=>readServerClientIdentity,
38
+ resolveClientIdentity: ()=>resolveClientIdentity,
39
+ stampClientIdentity: ()=>stampClientIdentity
36
40
  });
37
41
  const external_detect_js_namespaceObject = require("./detect.js");
38
42
  const external_headers_js_namespaceObject = require("./headers.js");
@@ -125,7 +129,7 @@ exports.readMetaClientInfo = __webpack_exports__.readMetaClientInfo;
125
129
  exports.readServerClientIdentity = __webpack_exports__.readServerClientIdentity;
126
130
  exports.resolveClientIdentity = __webpack_exports__.resolveClientIdentity;
127
131
  exports.stampClientIdentity = __webpack_exports__.stampClientIdentity;
128
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
132
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
129
133
  "META_CLIENT_INFO_KEY",
130
134
  "META_PROTOCOL_VERSION_KEY",
131
135
  "PROTOCOL_VERSION_HEADER",
@@ -135,7 +139,7 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
135
139
  "readServerClientIdentity",
136
140
  "resolveClientIdentity",
137
141
  "stampClientIdentity"
138
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
142
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
139
143
  Object.defineProperty(exports, '__esModule', {
140
144
  value: true
141
145
  });
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
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
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -13,7 +17,7 @@ var __webpack_require__ = {};
13
17
  })();
14
18
  (()=>{
15
19
  __webpack_require__.r = (exports1)=>{
16
- if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
21
  value: 'Module'
18
22
  });
19
23
  Object.defineProperty(exports1, '__esModule', {
@@ -24,11 +28,11 @@ var __webpack_require__ = {};
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
30
  __webpack_require__.d(__webpack_exports__, {
27
- isLowLevelServer: ()=>isLowLevelServer,
28
- isHighLevelServer: ()=>isHighLevelServer,
29
- logCompatibilityWarning: ()=>logCompatibilityWarning,
31
+ getMCPCompatibleErrorMessage: ()=>getMCPCompatibleErrorMessage,
30
32
  isCompatibleServerType: ()=>isCompatibleServerType,
31
- getMCPCompatibleErrorMessage: ()=>getMCPCompatibleErrorMessage
33
+ isHighLevelServer: ()=>isHighLevelServer,
34
+ isLowLevelServer: ()=>isLowLevelServer,
35
+ logCompatibilityWarning: ()=>logCompatibilityWarning
32
36
  });
33
37
  const external_detect_js_namespaceObject = require("./detect.js");
34
38
  function logCompatibilityWarning(logger) {
@@ -96,13 +100,13 @@ exports.isCompatibleServerType = __webpack_exports__.isCompatibleServerType;
96
100
  exports.isHighLevelServer = __webpack_exports__.isHighLevelServer;
97
101
  exports.isLowLevelServer = __webpack_exports__.isLowLevelServer;
98
102
  exports.logCompatibilityWarning = __webpack_exports__.logCompatibilityWarning;
99
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
103
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
100
104
  "getMCPCompatibleErrorMessage",
101
105
  "isCompatibleServerType",
102
106
  "isHighLevelServer",
103
107
  "isLowLevelServer",
104
108
  "logCompatibilityWarning"
105
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
109
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
106
110
  Object.defineProperty(exports, '__esModule', {
107
111
  value: true
108
112
  });
@@ -1,5 +1,6 @@
1
1
  export declare const INACTIVITY_TIMEOUT_IN_MINUTES = 30;
2
2
  export declare const DEFAULT_CONTEXT_PARAMETER_DESCRIPTION = "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"";
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.";
3
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
5
  export declare const POSTHOG_MCP_ANALYTICS_SOURCE = "posthog_mcp_analytics";
5
6
  export declare const POSTHOG_MCP_LIB_NAME = "posthog-node-mcp";
@@ -29,6 +30,8 @@ export declare const PostHogMCPAnalyticsProperty: {
29
30
  readonly Intent: "$mcp_intent";
30
31
  readonly IntentSource: "$mcp_intent_source";
31
32
  readonly ListedToolNames: "$mcp_listed_tool_names";
33
+ readonly LlmModel: "$mcp_llm_model";
34
+ readonly LlmModelSource: "$mcp_llm_model_source";
32
35
  readonly Parameters: "$mcp_parameters";
33
36
  readonly ProtocolVersion: "$mcp_protocol_version";
34
37
  readonly ResourceName: "$mcp_resource_name";
@@ -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,2hBAAyhB,CAAA;AAE3kB,eAAO,MAAM,mCAAmC,4LACsI,CAAA;AAEtL,eAAO,MAAM,4BAA4B,0BAA0B,CAAA;AAMnE,eAAO,MAAM,oBAAoB,qBAAqB,CAAA;AAItD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;CAY3B,CAAA;AAEV,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAA;AAE/G,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;CAwB9B,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,2hBAAyhB,CAAA;AAE3kB,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;;;;;;;;;;;;CAY3B,CAAA;AAEV,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAA;AAE/G,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B9B,CAAA;AAEV,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,OAAO,2BAA2B,CAAC,CAAA"}
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
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
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -13,7 +17,7 @@ var __webpack_require__ = {};
13
17
  })();
14
18
  (()=>{
15
19
  __webpack_require__.r = (exports1)=>{
16
- if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
21
  value: 'Module'
18
22
  });
19
23
  Object.defineProperty(exports1, '__esModule', {
@@ -23,18 +27,10 @@ var __webpack_require__ = {};
23
27
  })();
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
- __webpack_require__.d(__webpack_exports__, {
27
- DEFAULT_CONTEXT_PARAMETER_DESCRIPTION: ()=>DEFAULT_CONTEXT_PARAMETER_DESCRIPTION,
28
- DEFAULT_CONVERSATION_ID_DESCRIPTION: ()=>DEFAULT_CONVERSATION_ID_DESCRIPTION,
29
- INACTIVITY_TIMEOUT_IN_MINUTES: ()=>INACTIVITY_TIMEOUT_IN_MINUTES,
30
- POSTHOG_MCP_ANALYTICS_SOURCE: ()=>POSTHOG_MCP_ANALYTICS_SOURCE,
31
- POSTHOG_MCP_LIB_NAME: ()=>POSTHOG_MCP_LIB_NAME,
32
- PostHogMCPAnalyticsEvent: ()=>PostHogMCPAnalyticsEvent,
33
- PostHogMCPAnalyticsProperty: ()=>PostHogMCPAnalyticsProperty
34
- });
35
30
  const INACTIVITY_TIMEOUT_IN_MINUTES = 30;
36
31
  const DEFAULT_CONTEXT_PARAMETER_DESCRIPTION = "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"";
37
- 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.";
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.";
38
34
  const POSTHOG_MCP_ANALYTICS_SOURCE = 'posthog_mcp_analytics';
39
35
  const POSTHOG_MCP_LIB_NAME = 'posthog-node-mcp';
40
36
  const PostHogMCPAnalyticsEvent = {
@@ -62,6 +58,8 @@ const PostHogMCPAnalyticsProperty = {
62
58
  Intent: '$mcp_intent',
63
59
  IntentSource: '$mcp_intent_source',
64
60
  ListedToolNames: '$mcp_listed_tool_names',
61
+ LlmModel: '$mcp_llm_model',
62
+ LlmModelSource: '$mcp_llm_model_source',
65
63
  Parameters: '$mcp_parameters',
66
64
  ProtocolVersion: '$mcp_protocol_version',
67
65
  ResourceName: '$mcp_resource_name',
@@ -75,22 +73,34 @@ const PostHogMCPAnalyticsProperty = {
75
73
  ToolName: '$mcp_tool_name',
76
74
  VendorClient: '$mcp_vendor_client'
77
75
  };
76
+ __webpack_require__.d(__webpack_exports__, {}, {
77
+ DEFAULT_CONTEXT_PARAMETER_DESCRIPTION: DEFAULT_CONTEXT_PARAMETER_DESCRIPTION,
78
+ DEFAULT_CONVERSATION_ID_DESCRIPTION: DEFAULT_CONVERSATION_ID_DESCRIPTION,
79
+ DEFAULT_MODEL_PARAMETER_DESCRIPTION: DEFAULT_MODEL_PARAMETER_DESCRIPTION,
80
+ INACTIVITY_TIMEOUT_IN_MINUTES: INACTIVITY_TIMEOUT_IN_MINUTES,
81
+ POSTHOG_MCP_ANALYTICS_SOURCE: POSTHOG_MCP_ANALYTICS_SOURCE,
82
+ POSTHOG_MCP_LIB_NAME: POSTHOG_MCP_LIB_NAME,
83
+ PostHogMCPAnalyticsEvent: PostHogMCPAnalyticsEvent,
84
+ PostHogMCPAnalyticsProperty: PostHogMCPAnalyticsProperty
85
+ });
78
86
  exports.DEFAULT_CONTEXT_PARAMETER_DESCRIPTION = __webpack_exports__.DEFAULT_CONTEXT_PARAMETER_DESCRIPTION;
79
87
  exports.DEFAULT_CONVERSATION_ID_DESCRIPTION = __webpack_exports__.DEFAULT_CONVERSATION_ID_DESCRIPTION;
88
+ exports.DEFAULT_MODEL_PARAMETER_DESCRIPTION = __webpack_exports__.DEFAULT_MODEL_PARAMETER_DESCRIPTION;
80
89
  exports.INACTIVITY_TIMEOUT_IN_MINUTES = __webpack_exports__.INACTIVITY_TIMEOUT_IN_MINUTES;
81
90
  exports.POSTHOG_MCP_ANALYTICS_SOURCE = __webpack_exports__.POSTHOG_MCP_ANALYTICS_SOURCE;
82
91
  exports.POSTHOG_MCP_LIB_NAME = __webpack_exports__.POSTHOG_MCP_LIB_NAME;
83
92
  exports.PostHogMCPAnalyticsEvent = __webpack_exports__.PostHogMCPAnalyticsEvent;
84
93
  exports.PostHogMCPAnalyticsProperty = __webpack_exports__.PostHogMCPAnalyticsProperty;
85
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
94
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
86
95
  "DEFAULT_CONTEXT_PARAMETER_DESCRIPTION",
87
96
  "DEFAULT_CONVERSATION_ID_DESCRIPTION",
97
+ "DEFAULT_MODEL_PARAMETER_DESCRIPTION",
88
98
  "INACTIVITY_TIMEOUT_IN_MINUTES",
89
99
  "POSTHOG_MCP_ANALYTICS_SOURCE",
90
100
  "POSTHOG_MCP_LIB_NAME",
91
101
  "PostHogMCPAnalyticsEvent",
92
102
  "PostHogMCPAnalyticsProperty"
93
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
103
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
94
104
  Object.defineProperty(exports, '__esModule', {
95
105
  value: true
96
106
  });