@posthog/mcp 0.5.1 → 0.7.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.
- package/dist/extensions/constants.d.ts +1 -0
- package/dist/extensions/constants.d.ts.map +1 -1
- package/dist/extensions/constants.js +4 -0
- package/dist/extensions/constants.mjs +2 -1
- package/dist/extensions/lib-identity.d.ts +19 -0
- package/dist/extensions/lib-identity.d.ts.map +1 -0
- package/dist/extensions/lib-identity.js +41 -0
- package/dist/extensions/lib-identity.mjs +7 -0
- package/dist/extensions/posthog-mcp.d.ts.map +1 -1
- package/dist/extensions/posthog-mcp.js +2 -0
- package/dist/extensions/posthog-mcp.mjs +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.mjs +2 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +4 -4
- package/src/extensions/constants.ts +6 -0
- package/src/extensions/lib-identity.ts +25 -0
- package/src/extensions/posthog-mcp.ts +3 -0
- package/src/index.ts +6 -0
- package/src/version.ts +1 -1
|
@@ -2,6 +2,7 @@ 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
3
|
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
4
|
export declare const POSTHOG_MCP_ANALYTICS_SOURCE = "posthog_mcp_analytics";
|
|
5
|
+
export declare const POSTHOG_MCP_LIB_NAME = "posthog-node-mcp";
|
|
5
6
|
export declare const PostHogMCPAnalyticsEvent: {
|
|
6
7
|
readonly Custom: "$mcp_custom";
|
|
7
8
|
readonly Exception: "$exception";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/extensions/constants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,6BAA6B,KAAK,CAAA;AAE/C,eAAO,MAAM,qCAAqC,2hBAAyhB,CAAA;AAE3kB,eAAO,MAAM,mCAAmC,4LACsI,CAAA;AAEtL,eAAO,MAAM,4BAA4B,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/extensions/constants.ts"],"names":[],"mappings":"AAIA,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;;;;;;;;;;;;;;;;;;;CAmB9B,CAAA;AAEV,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,OAAO,2BAA2B,CAAC,CAAA"}
|
|
@@ -28,6 +28,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
28
28
|
DEFAULT_CONVERSATION_ID_DESCRIPTION: ()=>DEFAULT_CONVERSATION_ID_DESCRIPTION,
|
|
29
29
|
INACTIVITY_TIMEOUT_IN_MINUTES: ()=>INACTIVITY_TIMEOUT_IN_MINUTES,
|
|
30
30
|
POSTHOG_MCP_ANALYTICS_SOURCE: ()=>POSTHOG_MCP_ANALYTICS_SOURCE,
|
|
31
|
+
POSTHOG_MCP_LIB_NAME: ()=>POSTHOG_MCP_LIB_NAME,
|
|
31
32
|
PostHogMCPAnalyticsEvent: ()=>PostHogMCPAnalyticsEvent,
|
|
32
33
|
PostHogMCPAnalyticsProperty: ()=>PostHogMCPAnalyticsProperty
|
|
33
34
|
});
|
|
@@ -35,6 +36,7 @@ const INACTIVITY_TIMEOUT_IN_MINUTES = 30;
|
|
|
35
36
|
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.\"";
|
|
36
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.";
|
|
37
38
|
const POSTHOG_MCP_ANALYTICS_SOURCE = 'posthog_mcp_analytics';
|
|
39
|
+
const POSTHOG_MCP_LIB_NAME = 'posthog-node-mcp';
|
|
38
40
|
const PostHogMCPAnalyticsEvent = {
|
|
39
41
|
Custom: '$mcp_custom',
|
|
40
42
|
Exception: '$exception',
|
|
@@ -72,6 +74,7 @@ exports.DEFAULT_CONTEXT_PARAMETER_DESCRIPTION = __webpack_exports__.DEFAULT_CONT
|
|
|
72
74
|
exports.DEFAULT_CONVERSATION_ID_DESCRIPTION = __webpack_exports__.DEFAULT_CONVERSATION_ID_DESCRIPTION;
|
|
73
75
|
exports.INACTIVITY_TIMEOUT_IN_MINUTES = __webpack_exports__.INACTIVITY_TIMEOUT_IN_MINUTES;
|
|
74
76
|
exports.POSTHOG_MCP_ANALYTICS_SOURCE = __webpack_exports__.POSTHOG_MCP_ANALYTICS_SOURCE;
|
|
77
|
+
exports.POSTHOG_MCP_LIB_NAME = __webpack_exports__.POSTHOG_MCP_LIB_NAME;
|
|
75
78
|
exports.PostHogMCPAnalyticsEvent = __webpack_exports__.PostHogMCPAnalyticsEvent;
|
|
76
79
|
exports.PostHogMCPAnalyticsProperty = __webpack_exports__.PostHogMCPAnalyticsProperty;
|
|
77
80
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
@@ -79,6 +82,7 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
|
79
82
|
"DEFAULT_CONVERSATION_ID_DESCRIPTION",
|
|
80
83
|
"INACTIVITY_TIMEOUT_IN_MINUTES",
|
|
81
84
|
"POSTHOG_MCP_ANALYTICS_SOURCE",
|
|
85
|
+
"POSTHOG_MCP_LIB_NAME",
|
|
82
86
|
"PostHogMCPAnalyticsEvent",
|
|
83
87
|
"PostHogMCPAnalyticsProperty"
|
|
84
88
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
@@ -2,6 +2,7 @@ const INACTIVITY_TIMEOUT_IN_MINUTES = 30;
|
|
|
2
2
|
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
3
|
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
4
|
const POSTHOG_MCP_ANALYTICS_SOURCE = 'posthog_mcp_analytics';
|
|
5
|
+
const POSTHOG_MCP_LIB_NAME = 'posthog-node-mcp';
|
|
5
6
|
const PostHogMCPAnalyticsEvent = {
|
|
6
7
|
Custom: '$mcp_custom',
|
|
7
8
|
Exception: '$exception',
|
|
@@ -35,4 +36,4 @@ const PostHogMCPAnalyticsProperty = {
|
|
|
35
36
|
ToolDescription: "$mcp_tool_description",
|
|
36
37
|
ToolName: '$mcp_tool_name'
|
|
37
38
|
};
|
|
38
|
-
export { DEFAULT_CONTEXT_PARAMETER_DESCRIPTION, DEFAULT_CONVERSATION_ID_DESCRIPTION, INACTIVITY_TIMEOUT_IN_MINUTES, POSTHOG_MCP_ANALYTICS_SOURCE, PostHogMCPAnalyticsEvent, PostHogMCPAnalyticsProperty };
|
|
39
|
+
export { DEFAULT_CONTEXT_PARAMETER_DESCRIPTION, DEFAULT_CONVERSATION_ID_DESCRIPTION, INACTIVITY_TIMEOUT_IN_MINUTES, POSTHOG_MCP_ANALYTICS_SOURCE, POSTHOG_MCP_LIB_NAME, PostHogMCPAnalyticsEvent, PostHogMCPAnalyticsProperty };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PostHog } from 'posthog-node';
|
|
2
|
+
/**
|
|
3
|
+
* Make `client` report `@posthog/mcp`'s identity as the standard PostHog `$lib`
|
|
4
|
+
* / `$lib_version` on every event it sends.
|
|
5
|
+
*
|
|
6
|
+
* posthog-node stamps `$lib` / `$lib_version` from `getLibraryId()` /
|
|
7
|
+
* `getLibraryVersion()` and spreads them *last* when building the payload, so
|
|
8
|
+
* they can't be overridden per-event via the captured properties (nor via
|
|
9
|
+
* `before_send`, which runs earlier). Overriding the two methods is the only
|
|
10
|
+
* lever. Shared by {@link PostHogMCP} (which calls this in its constructor) and
|
|
11
|
+
* `instrument()` (which applies it to the host-supplied client) so both emit
|
|
12
|
+
* paths report identical lib metadata.
|
|
13
|
+
*
|
|
14
|
+
* Because `$lib` is a client-level property, this relabels *every* event the
|
|
15
|
+
* client sends as `posthog-node-mcp`, not just `$mcp_*` events — expected for a
|
|
16
|
+
* dedicated MCP-analytics client.
|
|
17
|
+
*/
|
|
18
|
+
export declare function applyMcpLibIdentity(client: PostHog): void;
|
|
19
|
+
//# sourceMappingURL=lib-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib-identity.d.ts","sourceRoot":"","sources":["../../src/extensions/lib-identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAK3C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAGzD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
applyMcpLibIdentity: ()=>applyMcpLibIdentity
|
|
28
|
+
});
|
|
29
|
+
const external_version_js_namespaceObject = require("../version.js");
|
|
30
|
+
const external_constants_js_namespaceObject = require("./constants.js");
|
|
31
|
+
function applyMcpLibIdentity(client) {
|
|
32
|
+
client.getLibraryId = ()=>external_constants_js_namespaceObject.POSTHOG_MCP_LIB_NAME;
|
|
33
|
+
client.getLibraryVersion = ()=>external_version_js_namespaceObject.version;
|
|
34
|
+
}
|
|
35
|
+
exports.applyMcpLibIdentity = __webpack_exports__.applyMcpLibIdentity;
|
|
36
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
37
|
+
"applyMcpLibIdentity"
|
|
38
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
39
|
+
Object.defineProperty(exports, '__esModule', {
|
|
40
|
+
value: true
|
|
41
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { version } from "../version.mjs";
|
|
2
|
+
import { POSTHOG_MCP_LIB_NAME } from "./constants.mjs";
|
|
3
|
+
function applyMcpLibIdentity(client) {
|
|
4
|
+
client.getLibraryId = ()=>POSTHOG_MCP_LIB_NAME;
|
|
5
|
+
client.getLibraryVersion = ()=>version;
|
|
6
|
+
}
|
|
7
|
+
export { applyMcpLibIdentity };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posthog-mcp.d.ts","sourceRoot":"","sources":["../../src/extensions/posthog-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,KAAK,EACV,qBAAqB,EAIrB,4BAA4B,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,UAAU,CAAA;AACjB,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"posthog-mcp.d.ts","sourceRoot":"","sources":["../../src/extensions/posthog-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,KAAK,EACV,qBAAqB,EAIrB,4BAA4B,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,UAAU,CAAA;AACjB,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAA;AAQ7B;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,UAAW,SAAQ,OAAO;;gBAWzB,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB;IAO3D,8FAA8F;IAC9F,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAgBhD,iEAAiE;IACjE,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAUpD;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAalD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,eAAe,CAAC,KAAK,SAAS,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,GAAE,sBAA2B,GAAG,KAAK,EAAE;IAYnH;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB;IAW/E;;;;OAIG;IACH,wBAAwB,CAAC,IAAI,EAAE,4BAA4B,GAAG,IAAI;CAkBnE"}
|
|
@@ -30,6 +30,7 @@ const external_posthog_node_namespaceObject = require("posthog-node");
|
|
|
30
30
|
const external_context_parameters_js_namespaceObject = require("./context-parameters.js");
|
|
31
31
|
const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
32
32
|
const external_exceptions_js_namespaceObject = require("./exceptions.js");
|
|
33
|
+
const external_lib_identity_js_namespaceObject = require("./lib-identity.js");
|
|
33
34
|
const external_logger_js_namespaceObject = require("./logger.js");
|
|
34
35
|
const external_sink_js_namespaceObject = require("./sink.js");
|
|
35
36
|
const external_tools_js_namespaceObject = require("./tools.js");
|
|
@@ -39,6 +40,7 @@ class PostHogMCP extends external_posthog_node_namespaceObject.PostHog {
|
|
|
39
40
|
constructor(apiKey, options = {}){
|
|
40
41
|
super(apiKey, options), this.#sink = new external_sink_js_namespaceObject.McpEventSink(this);
|
|
41
42
|
this.#missingCapabilityToolName = options.missingCapabilityToolName ?? external_tools_js_namespaceObject.GET_MORE_TOOLS_NAME;
|
|
43
|
+
(0, external_lib_identity_js_namespaceObject.applyMcpLibIdentity)(this);
|
|
42
44
|
}
|
|
43
45
|
captureToolCall(data) {
|
|
44
46
|
const event = baseEvent(external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsCall, data);
|
|
@@ -2,6 +2,7 @@ import { PostHog } from "posthog-node";
|
|
|
2
2
|
import { addContextParameterToTools, getContextDescription, isContextEnabled } from "./context-parameters.mjs";
|
|
3
3
|
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
4
4
|
import { captureException } from "./exceptions.mjs";
|
|
5
|
+
import { applyMcpLibIdentity } from "./lib-identity.mjs";
|
|
5
6
|
import { log } from "./logger.mjs";
|
|
6
7
|
import { McpEventSink } from "./sink.mjs";
|
|
7
8
|
import { GET_MORE_TOOLS_NAME, getReportMissingToolDescriptor } from "./tools.mjs";
|
|
@@ -11,6 +12,7 @@ class PostHogMCP extends PostHog {
|
|
|
11
12
|
constructor(apiKey, options = {}){
|
|
12
13
|
super(apiKey, options), this.#sink = new McpEventSink(this);
|
|
13
14
|
this.#missingCapabilityToolName = options.missingCapabilityToolName ?? GET_MORE_TOOLS_NAME;
|
|
15
|
+
applyMcpLibIdentity(this);
|
|
14
16
|
}
|
|
15
17
|
captureToolCall(data) {
|
|
16
18
|
const event = baseEvent(MCPAnalyticsEventType.mcpToolsCall, data);
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAQ3C,OAAO,EAAE,6BAA6B,EAAgC,MAAM,sBAAsB,CAAA;AAGlG,OAAO,KAAK,EAGV,YAAY,EAEZ,mBAAmB,EAGpB,MAAM,SAAS,CAAA;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAkCtG;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,iBAAS,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAKjH;AAmFD,OAAO,EAAE,6BAA6B,EAAE,CAAA;AACxC,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAI/C,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC3D,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,4BAA4B,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,SAAS,CAAA;AAChB,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -41,6 +41,7 @@ const event_types_js_namespaceObject = require("./extensions/event-types.js");
|
|
|
41
41
|
const internal_js_namespaceObject = require("./extensions/internal.js");
|
|
42
42
|
const logger_js_namespaceObject = require("./extensions/logger.js");
|
|
43
43
|
const capture_js_namespaceObject = require("./extensions/capture.js");
|
|
44
|
+
const lib_identity_js_namespaceObject = require("./extensions/lib-identity.js");
|
|
44
45
|
const session_js_namespaceObject = require("./extensions/session.js");
|
|
45
46
|
const instrument_lowlevel_js_namespaceObject = require("./extensions/instrument-lowlevel.js");
|
|
46
47
|
const instrument_highlevel_js_namespaceObject = require("./extensions/instrument-highlevel.js");
|
|
@@ -58,6 +59,7 @@ function instrument(server, posthog, options = {}) {
|
|
|
58
59
|
(0, logger_js_namespaceObject.log)('instrument() - Server already instrumented, skipping initialization');
|
|
59
60
|
return createAnalyticsHandle(lowLevelServer);
|
|
60
61
|
}
|
|
62
|
+
if (posthog) (0, lib_identity_js_namespaceObject.applyMcpLibIdentity)(posthog);
|
|
61
63
|
const sink = posthog ? new sink_js_namespaceObject.McpEventSink(posthog) : void 0;
|
|
62
64
|
const mcpAnalyticsData = buildTrackingData(lowLevelServer, options, sink);
|
|
63
65
|
(0, internal_js_namespaceObject.setServerTrackingData)(lowLevelServer, mcpAnalyticsData);
|
package/dist/index.mjs
CHANGED
|
@@ -4,6 +4,7 @@ import { MCPAnalyticsEventType } from "./extensions/event-types.mjs";
|
|
|
4
4
|
import { IdentityCache, getServerTrackingData, setServerTrackingData } from "./extensions/internal.mjs";
|
|
5
5
|
import { log, setLogger } from "./extensions/logger.mjs";
|
|
6
6
|
import { captureEvent } from "./extensions/capture.mjs";
|
|
7
|
+
import { applyMcpLibIdentity } from "./extensions/lib-identity.mjs";
|
|
7
8
|
import { deriveSessionIdFromMCPSession, getSessionInfo, newSessionId } from "./extensions/session.mjs";
|
|
8
9
|
import { instrumentLowLevelServer } from "./extensions/instrument-lowlevel.mjs";
|
|
9
10
|
import { instrumentHighLevelServer } from "./extensions/instrument-highlevel.mjs";
|
|
@@ -21,6 +22,7 @@ function instrument(server, posthog, options = {}) {
|
|
|
21
22
|
log('instrument() - Server already instrumented, skipping initialization');
|
|
22
23
|
return createAnalyticsHandle(lowLevelServer);
|
|
23
24
|
}
|
|
25
|
+
if (posthog) applyMcpLibIdentity(posthog);
|
|
24
26
|
const sink = posthog ? new McpEventSink(posthog) : void 0;
|
|
25
27
|
const mcpAnalyticsData = buildTrackingData(lowLevelServer, options, sink);
|
|
26
28
|
setServerTrackingData(lowLevelServer, mcpAnalyticsData);
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "0.
|
|
1
|
+
export declare const version = "0.7.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -26,7 +26,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
27
|
version: ()=>version
|
|
28
28
|
});
|
|
29
|
-
const version = '0.
|
|
29
|
+
const version = '0.7.0';
|
|
30
30
|
exports.version = __webpack_exports__.version;
|
|
31
31
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
32
32
|
"version"
|
package/dist/version.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const version = '0.
|
|
1
|
+
const version = '0.7.0';
|
|
2
2
|
export { version };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@posthog/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"bugs": {
|
|
5
5
|
"url": "https://github.com/PostHog/posthog-js/issues"
|
|
6
6
|
},
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"module": "dist/index.mjs",
|
|
29
29
|
"types": "dist/index.d.ts",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@posthog/core": "^1.
|
|
31
|
+
"@posthog/core": "^1.39.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@babel/preset-env": "^7.27.1",
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"@types/node": "^20.0.0",
|
|
40
40
|
"jest": "29.7.0",
|
|
41
41
|
"zod": "^3.25.0",
|
|
42
|
-
"posthog-
|
|
43
|
-
"
|
|
42
|
+
"@posthog-tooling/tsconfig-base": "1.1.1",
|
|
43
|
+
"posthog-node": "^5.39.0"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"@modelcontextprotocol/sdk": ">=1.26.0",
|
|
@@ -11,6 +11,12 @@ export const DEFAULT_CONVERSATION_ID_DESCRIPTION =
|
|
|
11
11
|
|
|
12
12
|
export const POSTHOG_MCP_ANALYTICS_SOURCE = 'posthog_mcp_analytics'
|
|
13
13
|
|
|
14
|
+
// The `$lib` identity stamped on every event @posthog/mcp sends. posthog-node
|
|
15
|
+
// would otherwise report itself (`posthog-node`, the transport SDK); we override
|
|
16
|
+
// `getLibraryId()` so MCP events self-identify the same way every other PostHog
|
|
17
|
+
// SDK does. See `applyMcpLibIdentity` in `./lib-identity`.
|
|
18
|
+
export const POSTHOG_MCP_LIB_NAME = 'posthog-node-mcp'
|
|
19
|
+
|
|
14
20
|
// All PostHog-owned event names start with `$` per the PostHog convention.
|
|
15
21
|
// Non-`$` names would be treated as customer-defined events and confuse the schema.
|
|
16
22
|
export const PostHogMCPAnalyticsEvent = {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { PostHog } from 'posthog-node'
|
|
2
|
+
|
|
3
|
+
import { version } from '../version'
|
|
4
|
+
import { POSTHOG_MCP_LIB_NAME } from './constants'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Make `client` report `@posthog/mcp`'s identity as the standard PostHog `$lib`
|
|
8
|
+
* / `$lib_version` on every event it sends.
|
|
9
|
+
*
|
|
10
|
+
* posthog-node stamps `$lib` / `$lib_version` from `getLibraryId()` /
|
|
11
|
+
* `getLibraryVersion()` and spreads them *last* when building the payload, so
|
|
12
|
+
* they can't be overridden per-event via the captured properties (nor via
|
|
13
|
+
* `before_send`, which runs earlier). Overriding the two methods is the only
|
|
14
|
+
* lever. Shared by {@link PostHogMCP} (which calls this in its constructor) and
|
|
15
|
+
* `instrument()` (which applies it to the host-supplied client) so both emit
|
|
16
|
+
* paths report identical lib metadata.
|
|
17
|
+
*
|
|
18
|
+
* Because `$lib` is a client-level property, this relabels *every* event the
|
|
19
|
+
* client sends as `posthog-node-mcp`, not just `$mcp_*` events — expected for a
|
|
20
|
+
* dedicated MCP-analytics client.
|
|
21
|
+
*/
|
|
22
|
+
export function applyMcpLibIdentity(client: PostHog): void {
|
|
23
|
+
client.getLibraryId = () => POSTHOG_MCP_LIB_NAME
|
|
24
|
+
client.getLibraryVersion = () => version
|
|
25
|
+
}
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
} from './context-parameters'
|
|
20
20
|
import { MCPAnalyticsEventType } from './event-types'
|
|
21
21
|
import { captureException } from './exceptions'
|
|
22
|
+
import { applyMcpLibIdentity } from './lib-identity'
|
|
22
23
|
import { log } from './logger'
|
|
23
24
|
import { McpEventSink } from './sink'
|
|
24
25
|
import { GET_MORE_TOOLS_NAME, getReportMissingToolDescriptor } from './tools'
|
|
@@ -84,6 +85,8 @@ export class PostHogMCP extends PostHog {
|
|
|
84
85
|
constructor(apiKey: string, options: PostHogMCPOptions = {}) {
|
|
85
86
|
super(apiKey, options)
|
|
86
87
|
this.#missingCapabilityToolName = options.missingCapabilityToolName ?? GET_MORE_TOOLS_NAME
|
|
88
|
+
// Report `$lib: 'posthog-node-mcp'` instead of the inherited `posthog-node`.
|
|
89
|
+
applyMcpLibIdentity(this)
|
|
87
90
|
}
|
|
88
91
|
|
|
89
92
|
/** Capture a tool invocation. Emits `$mcp_tool_call` (+ an `$exception` sibling on error). */
|
package/src/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { MCPAnalyticsEventType } from './extensions/event-types'
|
|
|
9
9
|
import { IdentityCache, getServerTrackingData, setServerTrackingData } from './extensions/internal'
|
|
10
10
|
import { log, setLogger } from './extensions/logger'
|
|
11
11
|
import { captureEvent } from './extensions/capture'
|
|
12
|
+
import { applyMcpLibIdentity } from './extensions/lib-identity'
|
|
12
13
|
import { deriveSessionIdFromMCPSession, getSessionInfo, newSessionId } from './extensions/session'
|
|
13
14
|
import { instrumentLowLevelServer } from './extensions/instrument-lowlevel'
|
|
14
15
|
import { instrumentHighLevelServer } from './extensions/instrument-highlevel'
|
|
@@ -65,6 +66,11 @@ function instrument(server: unknown, posthog: PostHog, options: MCPAnalyticsOpti
|
|
|
65
66
|
return createAnalyticsHandle(lowLevelServer)
|
|
66
67
|
}
|
|
67
68
|
|
|
69
|
+
if (posthog) {
|
|
70
|
+
// Report `$lib: 'posthog-node-mcp'` on this client's events instead of the
|
|
71
|
+
// inherited `posthog-node`. Relabels every event the client sends.
|
|
72
|
+
applyMcpLibIdentity(posthog)
|
|
73
|
+
}
|
|
68
74
|
const sink = posthog ? new McpEventSink(posthog) : undefined
|
|
69
75
|
const mcpAnalyticsData = buildTrackingData(lowLevelServer, options, sink)
|
|
70
76
|
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '0.
|
|
1
|
+
export const version = '0.7.0'
|