@posthog/mcp 0.7.0 → 0.9.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/LICENSE +2 -2
- package/README.md +51 -0
- package/dist/extensions/capture.d.ts.map +1 -1
- package/dist/extensions/capture.js +1 -0
- package/dist/extensions/capture.mjs +1 -0
- package/dist/extensions/compatibility.d.ts.map +1 -1
- package/dist/extensions/constants.d.ts +2 -0
- package/dist/extensions/constants.d.ts.map +1 -1
- package/dist/extensions/constants.js +2 -0
- package/dist/extensions/constants.mjs +2 -0
- package/dist/extensions/context-parameters.d.ts.map +1 -1
- package/dist/extensions/conversation-id.d.ts.map +1 -1
- package/dist/extensions/event-types.d.ts.map +1 -1
- package/dist/extensions/exceptions.d.ts.map +1 -1
- package/dist/extensions/ids.d.ts.map +1 -1
- package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
- package/dist/extensions/instrumentation.d.ts.map +1 -1
- package/dist/extensions/instrumentation.js +39 -3
- package/dist/extensions/instrumentation.mjs +41 -5
- package/dist/extensions/intent.d.ts.map +1 -1
- package/dist/extensions/internal.d.ts.map +1 -1
- package/dist/extensions/logger.d.ts.map +1 -1
- package/dist/extensions/mcp-payloads.d.ts.map +1 -1
- package/dist/extensions/mcp-sdk-compat.d.ts.map +1 -1
- package/dist/extensions/posthog-events.d.ts.map +1 -1
- package/dist/extensions/posthog-events.js +6 -0
- package/dist/extensions/posthog-events.mjs +6 -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/extensions/sanitization.d.ts.map +1 -1
- package/dist/extensions/session-token.d.ts +46 -0
- package/dist/extensions/session-token.d.ts.map +1 -0
- package/dist/extensions/session-token.js +122 -0
- package/dist/extensions/session-token.mjs +76 -0
- package/dist/extensions/session.d.ts +5 -4
- package/dist/extensions/session.d.ts.map +1 -1
- package/dist/extensions/session.js +25 -33
- package/dist/extensions/session.mjs +22 -27
- package/dist/extensions/sink.d.ts.map +1 -1
- package/dist/extensions/tools.d.ts.map +1 -1
- package/dist/extensions/tracing-helpers.d.ts.map +1 -1
- package/dist/extensions/truncation.d.ts.map +1 -1
- package/dist/extensions/truncation.js +1 -0
- package/dist/extensions/truncation.mjs +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -2
- package/dist/index.mjs +2 -1
- package/dist/types.d.ts +32 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +3 -3
- package/src/extensions/capture.ts +11 -3
- package/src/extensions/compatibility.ts +4 -3
- package/src/extensions/constants.ts +6 -3
- package/src/extensions/context-parameters.ts +4 -3
- package/src/extensions/conversation-id.ts +4 -3
- package/src/extensions/event-types.ts +4 -3
- package/src/extensions/exceptions.ts +4 -3
- package/src/extensions/ids.ts +4 -3
- package/src/extensions/instrument-highlevel.ts +4 -3
- package/src/extensions/instrument-lowlevel.ts +4 -3
- package/src/extensions/instrumentation.ts +85 -9
- package/src/extensions/intent.ts +4 -3
- package/src/extensions/internal.ts +4 -3
- package/src/extensions/logger.ts +4 -3
- package/src/extensions/mcp-payloads.ts +4 -3
- package/src/extensions/mcp-sdk-compat.ts +4 -3
- package/src/extensions/posthog-events.ts +19 -3
- package/src/extensions/posthog-mcp.ts +2 -0
- package/src/extensions/sanitization.ts +4 -3
- package/src/extensions/session-token.ts +168 -0
- package/src/extensions/session.ts +42 -40
- package/src/extensions/sink.ts +4 -3
- package/src/extensions/tools.ts +4 -3
- package/src/extensions/tracing-helpers.ts +4 -3
- package/src/extensions/truncation.ts +5 -3
- package/src/index.ts +14 -4
- package/src/types.ts +38 -5
- package/src/version.ts +1 -1
package/LICENSE
CHANGED
|
@@ -327,12 +327,12 @@ SOFTWARE.
|
|
|
327
327
|
|
|
328
328
|
---
|
|
329
329
|
|
|
330
|
-
Some files in this codebase contain code from MCPCat/mcpcat-typescript-sdk.
|
|
330
|
+
Some files in this codebase contain code from agentcathq/agentcat-typescript-sdk (formerly MCPCat/mcpcat-typescript-sdk).
|
|
331
331
|
In such cases it is explicitly stated in the file header. This license only applies to the relevant code in such cases.
|
|
332
332
|
|
|
333
333
|
MIT License
|
|
334
334
|
|
|
335
|
-
Copyright (c) 2025 MCPcat
|
|
335
|
+
Copyright (c) 2025 AgentCat, Inc. (formerly MCPcat)
|
|
336
336
|
|
|
337
337
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
338
338
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -8,6 +8,57 @@ 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
|
+
## Stateless & multi-pod servers
|
|
12
|
+
|
|
13
|
+
On stateless deployments the SDK mints the `Mcp-Session-Id` response header at `initialize`
|
|
14
|
+
as a token carrying the session id and client name/version. Clients replay the header on
|
|
15
|
+
every request, so any pod keeps `$session_id` and `$mcp_client_name`/`$mcp_client_version`
|
|
16
|
+
stable with no server-side store.
|
|
17
|
+
|
|
18
|
+
### Streamable HTTP: set `enableJsonResponse: true`
|
|
19
|
+
|
|
20
|
+
The token is minted onto the `Mcp-Session-Id` **response** header from inside the `initialize`
|
|
21
|
+
handler, so it only reaches the client when the transport builds the response **after** the
|
|
22
|
+
handler runs — i.e. **JSON mode**. In **SSE (streaming) mode** `StreamableHTTPServerTransport`
|
|
23
|
+
flushes the response headers **before** the handler runs, so the minted header never lands and
|
|
24
|
+
behavior silently falls back to a session-per-request. This is a property of the transport, so
|
|
25
|
+
it applies to **every** Streamable-HTTP host — set `enableJsonResponse: true` (and use a fresh
|
|
26
|
+
transport per request):
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
// @modelcontextprotocol/sdk
|
|
30
|
+
new StreamableHTTPServerTransport({ sessionIdGenerator: undefined, enableJsonResponse: true })
|
|
31
|
+
|
|
32
|
+
// Cloudflare agents / createMcpHandler (SSE is the default)
|
|
33
|
+
createMcpHandler(server, { enableJsonResponse: true })
|
|
34
|
+
|
|
35
|
+
// @rekog/mcp-nest
|
|
36
|
+
McpModule.forRoot({ streamableHttp: { enableJsonResponse: true } })
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### If you must stream (SSE)
|
|
40
|
+
|
|
41
|
+
Set the header yourself at the HTTP layer with the exported `encodeSessionId` (read `clientInfo`
|
|
42
|
+
from the `initialize` body) — the SDK decodes it either way:
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { MCP_SESSION_HEADER, encodeSessionId, newSessionId } from '@posthog/mcp'
|
|
46
|
+
|
|
47
|
+
// after parsing the POST body, before flushing headers:
|
|
48
|
+
if (body?.method === 'initialize' && !req.headers[MCP_SESSION_HEADER]) {
|
|
49
|
+
res.setHeader(
|
|
50
|
+
MCP_SESSION_HEADER,
|
|
51
|
+
encodeSessionId({
|
|
52
|
+
sessionId: newSessionId(),
|
|
53
|
+
clientName: body.params?.clientInfo?.name,
|
|
54
|
+
clientVersion: body.params?.clientInfo?.version,
|
|
55
|
+
})
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Details: [docs/ARCHITECTURE.md §4](./docs/ARCHITECTURE.md).
|
|
61
|
+
|
|
11
62
|
## Developing locally
|
|
12
63
|
|
|
13
64
|
To test local changes in a consumer app (e.g. a dummy MCP server), symlink **both**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/extensions/capture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/extensions/capture.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAMvD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CA2DnG"}
|
|
@@ -64,6 +64,7 @@ function captureEvent(server, eventInput) {
|
|
|
64
64
|
userIntentSource: eventInput.userIntentSource,
|
|
65
65
|
isError: eventInput.isError,
|
|
66
66
|
error: eventInput.error,
|
|
67
|
+
errorType: eventInput.errorType,
|
|
67
68
|
conversationId: eventInput.conversationId,
|
|
68
69
|
properties: eventInput.properties
|
|
69
70
|
};
|
|
@@ -36,6 +36,7 @@ function captureEvent(server, eventInput) {
|
|
|
36
36
|
userIntentSource: eventInput.userIntentSource,
|
|
37
37
|
isError: eventInput.isError,
|
|
38
38
|
error: eventInput.error,
|
|
39
|
+
errorType: eventInput.errorType,
|
|
39
40
|
conversationId: eventInput.conversationId,
|
|
40
41
|
properties: eventInput.properties
|
|
41
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../../src/extensions/compatibility.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../../src/extensions/compatibility.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAGrE,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE3C;;;;;;;;;;;GAWG;AAGH,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,YAAY,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAIpG;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,YAAY,CAExE;AAGD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,GAAG,sBAAsB,CAgC9F;AAsDD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAanE"}
|
|
@@ -22,6 +22,8 @@ export declare const PostHogMCPAnalyticsProperty: {
|
|
|
22
22
|
readonly ClientVersion: "$mcp_client_version";
|
|
23
23
|
readonly ConversationId: "$mcp_conversation_id";
|
|
24
24
|
readonly DurationMs: "$mcp_duration_ms";
|
|
25
|
+
readonly ErrorMessage: "$mcp_error_message";
|
|
26
|
+
readonly ErrorType: "$mcp_error_type";
|
|
25
27
|
readonly IsError: "$mcp_is_error";
|
|
26
28
|
readonly Intent: "$mcp_intent";
|
|
27
29
|
readonly IntentSource: "$mcp_intent_source";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/extensions/constants.ts"],"names":[],"mappings":"
|
|
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;;;;;;;;;;;;;;;;;;;;;CAqB9B,CAAA;AAEV,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,OAAO,2BAA2B,CAAC,CAAA"}
|
|
@@ -55,6 +55,8 @@ const PostHogMCPAnalyticsProperty = {
|
|
|
55
55
|
ClientVersion: '$mcp_client_version',
|
|
56
56
|
ConversationId: '$mcp_conversation_id',
|
|
57
57
|
DurationMs: '$mcp_duration_ms',
|
|
58
|
+
ErrorMessage: '$mcp_error_message',
|
|
59
|
+
ErrorType: '$mcp_error_type',
|
|
58
60
|
IsError: '$mcp_is_error',
|
|
59
61
|
Intent: '$mcp_intent',
|
|
60
62
|
IntentSource: '$mcp_intent_source',
|
|
@@ -21,6 +21,8 @@ const PostHogMCPAnalyticsProperty = {
|
|
|
21
21
|
ClientVersion: '$mcp_client_version',
|
|
22
22
|
ConversationId: '$mcp_conversation_id',
|
|
23
23
|
DurationMs: '$mcp_duration_ms',
|
|
24
|
+
ErrorMessage: '$mcp_error_message',
|
|
25
|
+
ErrorType: '$mcp_error_type',
|
|
24
26
|
IsError: '$mcp_is_error',
|
|
25
27
|
Intent: '$mcp_intent',
|
|
26
28
|
IntentSource: '$mcp_intent_source',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-parameters.d.ts","sourceRoot":"","sources":["../../src/extensions/context-parameters.ts"],"names":[],"mappings":"
|
|
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;AAInD,UAAU,UAAU;IAClB,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,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,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,GAClC,KAAK,CAgEP;AAED,wBAAgB,0BAA0B,CAAC,KAAK,SAAS,qBAAqB,EAC5E,KAAK,EAAE,KAAK,EAAE,EACd,0BAA0B,CAAC,EAAE,MAAM,GAClC,KAAK,EAAE,CAQT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-id.d.ts","sourceRoot":"","sources":["../../src/extensions/conversation-id.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"conversation-id.d.ts","sourceRoot":"","sources":["../../src/extensions/conversation-id.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,0BAA0B,oBAAoB,CAAA;AAE3D,UAAU,UAAU;IAClB,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,MAAM,WAAW,4BAA4B;IAC3C,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,4BAA4B,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,CA2CtG;AAED,wBAAgB,wBAAwB,CAAC,KAAK,SAAS,4BAA4B,EACjF,KAAK,EAAE,KAAK,EAAE,EACd,yBAAyB,GAAE,MAA4B,GACtD,KAAK,EAAE,CAOT;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACrD;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,yBAAyB,GAAE,MAA4B,GACtD,wBAAwB,CAS1B;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAS1E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUvE;AAED,wBAAgB,iCAAiC,CAC/C,QAAQ,SAAS;IAAE,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAAE,EAC3E,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAe7B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAM1D;AAED,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,MAAM,GAAG;IACrE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAKA;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAS/F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-types.d.ts","sourceRoot":"","sources":["../../src/extensions/event-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-types.d.ts","sourceRoot":"","sources":["../../src/extensions/event-types.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;CAWxB,CAAA;AAEV,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exceptions.d.ts","sourceRoot":"","sources":["../../src/extensions/exceptions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"exceptions.d.ts","sourceRoot":"","sources":["../../src/extensions/exceptions.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,eAAe,CAAA;AA8BlE;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAAC,eAAe,CAMlF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/extensions/ids.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/extensions/ids.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,KAAK,CAAA;AAEhD,wBAAgB,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAElE;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument-highlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-highlevel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instrument-highlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-highlevel.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAiC,sBAAsB,EAAiC,MAAM,UAAU,CAAA;AAqPpH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAwB9E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument-lowlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-lowlevel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instrument-lowlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-lowlevel.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAiD,aAAa,EAAE,MAAM,UAAU,CAAA;AAmB5F;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAGd,MAAM,UAAU,CAAA;AAWjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAYrD;;;;;;GAMG;AAEH,KAAK,iBAAiB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,6BAA6B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAE7G;;;;GAIG;AACH,KAAK,YAAY,GAAG,CAAC,iBAAiB,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAE3E,UAAU,mBAAmB;IAC3B,MAAM,EAAE,aAAa,CAAA;IACrB,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,EAAE,cAAc,CAAA;IACvB,KAAK,CAAC,EAAE,6BAA6B,CAAA;IACrC,OAAO,EAAE,YAAY,CAAA;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,qBAAqB,CAAA;IACjC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAA;CAClC;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuCnF;AAgHD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,MAAM,EAAE,aAAa,EACrB,eAAe,EAAE,iBAAiB,EAClC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,6BAA6B,GAAG,SAAS,KAC7C,OAAO,CAAC,OAAO,CAAC,CAAA;AAErB;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAqBvG;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,aAAa,EACrB,wBAAwB,EAAE,iBAAiB,EAC3C,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAwC9C;AAwDD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CASnH;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGtE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CAUjH;AAqED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,aAAa,EACrB,yBAAyB,EAAE,iBAAiB,EAC5C,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,OAAO,CAAC,CA4BlB"}
|
|
@@ -43,6 +43,7 @@ const external_logger_js_namespaceObject = require("./logger.js");
|
|
|
43
43
|
const external_mcp_payloads_js_namespaceObject = require("./mcp-payloads.js");
|
|
44
44
|
const external_mcp_sdk_compat_js_namespaceObject = require("./mcp-sdk-compat.js");
|
|
45
45
|
const external_session_js_namespaceObject = require("./session.js");
|
|
46
|
+
const external_session_token_js_namespaceObject = require("./session-token.js");
|
|
46
47
|
const external_tools_js_namespaceObject = require("./tools.js");
|
|
47
48
|
const external_tracing_helpers_js_namespaceObject = require("./tracing-helpers.js");
|
|
48
49
|
async function captureToolCall(params) {
|
|
@@ -65,7 +66,7 @@ async function captureToolCall(params) {
|
|
|
65
66
|
}
|
|
66
67
|
async function prepareToolCallEvent(server, data, request, downstreamRequest, extra, startTime, conversation, eventType) {
|
|
67
68
|
try {
|
|
68
|
-
const sessionId = (0, external_session_js_namespaceObject.
|
|
69
|
+
const sessionId = (0, external_session_js_namespaceObject.getSessionId)(server, extra);
|
|
69
70
|
await (0, external_internal_js_namespaceObject.handleIdentify)(server, data, sessionId, request, extra);
|
|
70
71
|
const toolName = request.params?.name;
|
|
71
72
|
const event = {
|
|
@@ -137,7 +138,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
137
138
|
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
138
139
|
const startTime = new Date();
|
|
139
140
|
const event = {
|
|
140
|
-
sessionId: (0, external_session_js_namespaceObject.
|
|
141
|
+
sessionId: (0, external_session_js_namespaceObject.getSessionId)(server, extra),
|
|
141
142
|
parameters: (0, external_mcp_payloads_js_namespaceObject.buildCapturedMcpParameters)(request),
|
|
142
143
|
eventType: external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsList,
|
|
143
144
|
timestamp: startTime
|
|
@@ -217,13 +218,48 @@ function cacheToolCategories(cache, tools) {
|
|
|
217
218
|
if (category) cache.set(tool.name, category);
|
|
218
219
|
}
|
|
219
220
|
}
|
|
221
|
+
function mintStatelessSessionOnInitialize(server, data, request, extra) {
|
|
222
|
+
try {
|
|
223
|
+
const headers = extra?.requestInfo?.headers;
|
|
224
|
+
if (!headers || 'object' != typeof headers) return;
|
|
225
|
+
if ((0, external_session_token_js_namespaceObject.readMcpSessionHeader)(headers)) return;
|
|
226
|
+
const transport = server.transport;
|
|
227
|
+
if (!transport || extra?.sessionId || transport.sessionId) return;
|
|
228
|
+
const sessionId = (0, external_session_js_namespaceObject.newSessionId)();
|
|
229
|
+
const clientInfo = readInitializeClientInfo(request);
|
|
230
|
+
const token = (0, external_session_token_js_namespaceObject.encodeSessionId)({
|
|
231
|
+
sessionId,
|
|
232
|
+
clientName: clientInfo?.name,
|
|
233
|
+
clientVersion: clientInfo?.version
|
|
234
|
+
});
|
|
235
|
+
if (!(0, external_session_token_js_namespaceObject.writeSessionIdToTransport)(transport, token)) return;
|
|
236
|
+
data.sessionId = sessionId;
|
|
237
|
+
data.sessionSource = 'token';
|
|
238
|
+
data.sessionInfo.clientName = clientInfo?.name;
|
|
239
|
+
data.sessionInfo.clientVersion = clientInfo?.version;
|
|
240
|
+
data.lastActivity = new Date();
|
|
241
|
+
(0, external_internal_js_namespaceObject.setServerTrackingData)(server, data);
|
|
242
|
+
} catch (error) {
|
|
243
|
+
(0, external_logger_js_namespaceObject.log)(`Warning: PostHog MCP analytics failed to mint a stateless session id - ${error}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
function readInitializeClientInfo(request) {
|
|
247
|
+
const clientInfo = request.params?.clientInfo;
|
|
248
|
+
if (!clientInfo || 'object' != typeof clientInfo) return;
|
|
249
|
+
const { name, version } = clientInfo;
|
|
250
|
+
return {
|
|
251
|
+
name: 'string' == typeof name ? name : void 0,
|
|
252
|
+
version: 'string' == typeof version ? version : void 0
|
|
253
|
+
};
|
|
254
|
+
}
|
|
220
255
|
async function handleInitializeRequest(server, originalInitializeHandler, request, extra) {
|
|
221
256
|
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
222
257
|
if (!data) {
|
|
223
258
|
(0, external_logger_js_namespaceObject.log)('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
224
259
|
return await originalInitializeHandler(request, extra);
|
|
225
260
|
}
|
|
226
|
-
|
|
261
|
+
mintStatelessSessionOnInitialize(server, data, request, extra);
|
|
262
|
+
const sessionId = (0, external_session_js_namespaceObject.getSessionId)(server, extra);
|
|
227
263
|
await (0, external_internal_js_namespaceObject.handleIdentify)(server, data, sessionId, request, extra);
|
|
228
264
|
const event = {
|
|
229
265
|
sessionId,
|
|
@@ -4,11 +4,12 @@ import { captureEvent } from "./capture.mjs";
|
|
|
4
4
|
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
5
5
|
import { captureException } from "./exceptions.mjs";
|
|
6
6
|
import { resolveToolCallIntent, setEventIntent, setExplicitContextIntent } from "./intent.mjs";
|
|
7
|
-
import { getServerTrackingData, handleIdentify } from "./internal.mjs";
|
|
7
|
+
import { getServerTrackingData, handleIdentify, setServerTrackingData } from "./internal.mjs";
|
|
8
8
|
import { log } from "./logger.mjs";
|
|
9
9
|
import { buildCapturedMcpParameters } from "./mcp-payloads.mjs";
|
|
10
10
|
import { getLiteralValue, getObjectShape } from "./mcp-sdk-compat.mjs";
|
|
11
|
-
import {
|
|
11
|
+
import { getSessionId, newSessionId } from "./session.mjs";
|
|
12
|
+
import { encodeSessionId, readMcpSessionHeader, writeSessionIdToTransport } from "./session-token.mjs";
|
|
12
13
|
import { getReportMissingToolDescriptor, resolveMissingCapabilityToolName } from "./tools.mjs";
|
|
13
14
|
import { applyResolvedMetadata, isToolResultError } from "./tracing-helpers.mjs";
|
|
14
15
|
async function captureToolCall(params) {
|
|
@@ -31,7 +32,7 @@ async function captureToolCall(params) {
|
|
|
31
32
|
}
|
|
32
33
|
async function prepareToolCallEvent(server, data, request, downstreamRequest, extra, startTime, conversation, eventType) {
|
|
33
34
|
try {
|
|
34
|
-
const sessionId =
|
|
35
|
+
const sessionId = getSessionId(server, extra);
|
|
35
36
|
await handleIdentify(server, data, sessionId, request, extra);
|
|
36
37
|
const toolName = request.params?.name;
|
|
37
38
|
const event = {
|
|
@@ -103,7 +104,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
103
104
|
const data = getServerTrackingData(server);
|
|
104
105
|
const startTime = new Date();
|
|
105
106
|
const event = {
|
|
106
|
-
sessionId:
|
|
107
|
+
sessionId: getSessionId(server, extra),
|
|
107
108
|
parameters: buildCapturedMcpParameters(request),
|
|
108
109
|
eventType: MCPAnalyticsEventType.mcpToolsList,
|
|
109
110
|
timestamp: startTime
|
|
@@ -183,13 +184,48 @@ function cacheToolCategories(cache, tools) {
|
|
|
183
184
|
if (category) cache.set(tool.name, category);
|
|
184
185
|
}
|
|
185
186
|
}
|
|
187
|
+
function mintStatelessSessionOnInitialize(server, data, request, extra) {
|
|
188
|
+
try {
|
|
189
|
+
const headers = extra?.requestInfo?.headers;
|
|
190
|
+
if (!headers || 'object' != typeof headers) return;
|
|
191
|
+
if (readMcpSessionHeader(headers)) return;
|
|
192
|
+
const transport = server.transport;
|
|
193
|
+
if (!transport || extra?.sessionId || transport.sessionId) return;
|
|
194
|
+
const sessionId = newSessionId();
|
|
195
|
+
const clientInfo = readInitializeClientInfo(request);
|
|
196
|
+
const token = encodeSessionId({
|
|
197
|
+
sessionId,
|
|
198
|
+
clientName: clientInfo?.name,
|
|
199
|
+
clientVersion: clientInfo?.version
|
|
200
|
+
});
|
|
201
|
+
if (!writeSessionIdToTransport(transport, token)) return;
|
|
202
|
+
data.sessionId = sessionId;
|
|
203
|
+
data.sessionSource = 'token';
|
|
204
|
+
data.sessionInfo.clientName = clientInfo?.name;
|
|
205
|
+
data.sessionInfo.clientVersion = clientInfo?.version;
|
|
206
|
+
data.lastActivity = new Date();
|
|
207
|
+
setServerTrackingData(server, data);
|
|
208
|
+
} catch (error) {
|
|
209
|
+
log(`Warning: PostHog MCP analytics failed to mint a stateless session id - ${error}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function readInitializeClientInfo(request) {
|
|
213
|
+
const clientInfo = request.params?.clientInfo;
|
|
214
|
+
if (!clientInfo || 'object' != typeof clientInfo) return;
|
|
215
|
+
const { name, version } = clientInfo;
|
|
216
|
+
return {
|
|
217
|
+
name: 'string' == typeof name ? name : void 0,
|
|
218
|
+
version: 'string' == typeof version ? version : void 0
|
|
219
|
+
};
|
|
220
|
+
}
|
|
186
221
|
async function handleInitializeRequest(server, originalInitializeHandler, request, extra) {
|
|
187
222
|
const data = getServerTrackingData(server);
|
|
188
223
|
if (!data) {
|
|
189
224
|
log('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
190
225
|
return await originalInitializeHandler(request, extra);
|
|
191
226
|
}
|
|
192
|
-
|
|
227
|
+
mintStatelessSessionOnInitialize(server, data, request, extra);
|
|
228
|
+
const sessionId = getSessionId(server, extra);
|
|
193
229
|
await handleIdentify(server, data, sessionId, request, extra);
|
|
194
230
|
const event = {
|
|
195
231
|
sessionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/extensions/intent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/extensions/intent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,EACd,QAAQ,EACT,MAAM,UAAU,CAAA;AAIjB,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,wBAAwB,CAAA;CACjC;AAkCD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAOhC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAO3F;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAQ/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,YAAY,EACb,MAAM,UAAU,CAAA;AAKjB;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,OAAO,SAAO;IAI1B,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAWhD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAapD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B,IAAI,IAAI,MAAM;CAGf;AAID,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAEzF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAEzF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CA4B5E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY,CAapG;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAUzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/extensions/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/extensions/logger.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;AAIhD,wBAAgB,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAE5D;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAQzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-payloads.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-payloads.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-payloads.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-payloads.ts"],"names":[],"mappings":"AAaA,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAiBzC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA0B7D;AA6BD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAiBvE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-sdk-compat.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-sdk-compat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-sdk-compat.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-sdk-compat.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAK5D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,CAAA;AAEpD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAQlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CAKxE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAMrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,GAAG,cAAc,CAM7G;AAyBD,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAKnD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA6BnF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAkCxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posthog-events.d.ts","sourceRoot":"","sources":["../../src/extensions/posthog-events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"posthog-events.d.ts","sourceRoot":"","sources":["../../src/extensions/posthog-events.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAyBrC,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,MAAM,WAAW,gCAAgC;IAC/C,2FAA2F;IAC3F,0BAA0B,CAAC,EAAE,OAAO,CAAA;CACrC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,gCAAqC,GAC7C,mBAAmB,EAAE,CAQvB"}
|
|
@@ -101,6 +101,12 @@ function addCommonEventProperties(event, properties) {
|
|
|
101
101
|
if (event.userIntent) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.Intent] = event.userIntent;
|
|
102
102
|
if (event.userIntentSource) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.IntentSource] = event.userIntentSource;
|
|
103
103
|
if (void 0 !== event.isError) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.IsError] = event.isError;
|
|
104
|
+
if (event.isError) {
|
|
105
|
+
const firstException = event.error?.$exception_list?.[0];
|
|
106
|
+
const errorType = event.errorType ?? firstException?.type;
|
|
107
|
+
if (errorType) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ErrorType] = errorType;
|
|
108
|
+
if (firstException?.value) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ErrorMessage] = firstException.value;
|
|
109
|
+
}
|
|
104
110
|
if (void 0 !== event.parameters) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.Parameters] = event.parameters;
|
|
105
111
|
if (void 0 !== event.response) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.Response] = event.response;
|
|
106
112
|
if (event.identifyActorData && Object.keys(event.identifyActorData).length > 0) properties.$set = {
|
|
@@ -73,6 +73,12 @@ function addCommonEventProperties(event, properties) {
|
|
|
73
73
|
if (event.userIntent) properties[PostHogMCPAnalyticsProperty.Intent] = event.userIntent;
|
|
74
74
|
if (event.userIntentSource) properties[PostHogMCPAnalyticsProperty.IntentSource] = event.userIntentSource;
|
|
75
75
|
if (void 0 !== event.isError) properties[PostHogMCPAnalyticsProperty.IsError] = event.isError;
|
|
76
|
+
if (event.isError) {
|
|
77
|
+
const firstException = event.error?.$exception_list?.[0];
|
|
78
|
+
const errorType = event.errorType ?? firstException?.type;
|
|
79
|
+
if (errorType) properties[PostHogMCPAnalyticsProperty.ErrorType] = errorType;
|
|
80
|
+
if (firstException?.value) properties[PostHogMCPAnalyticsProperty.ErrorMessage] = firstException.value;
|
|
81
|
+
}
|
|
76
82
|
if (void 0 !== event.parameters) properties[PostHogMCPAnalyticsProperty.Parameters] = event.parameters;
|
|
77
83
|
if (void 0 !== event.response) properties[PostHogMCPAnalyticsProperty.Response] = event.response;
|
|
78
84
|
if (event.identifyActorData && Object.keys(event.identifyActorData).length > 0) properties.$set = {
|
|
@@ -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;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;
|
|
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;IAiBhD,iEAAiE;IACjE,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAUpD;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAclD;;;;;;;;;;;;;;;;;;;;;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"}
|
|
@@ -51,6 +51,7 @@ class PostHogMCP extends external_posthog_node_namespaceObject.PostHog {
|
|
|
51
51
|
event.response = data.response;
|
|
52
52
|
event.duration = data.durationMs;
|
|
53
53
|
event.isError = data.isError;
|
|
54
|
+
event.errorType = data.errorType;
|
|
54
55
|
applyIntent(event, data.intent, data.intentSource);
|
|
55
56
|
if (data.isError) event.error = (0, external_exceptions_js_namespaceObject.captureException)(data.error ?? `Tool ${data.toolName} returned an error`);
|
|
56
57
|
this.#emit(event);
|
|
@@ -71,6 +72,7 @@ class PostHogMCP extends external_posthog_node_namespaceObject.PostHog {
|
|
|
71
72
|
event.response = data.response;
|
|
72
73
|
event.duration = data.durationMs;
|
|
73
74
|
event.isError = data.isError;
|
|
75
|
+
event.errorType = data.errorType;
|
|
74
76
|
if (data.isError) event.error = (0, external_exceptions_js_namespaceObject.captureException)(data.error ?? 'tools/list failed');
|
|
75
77
|
this.#emit(event);
|
|
76
78
|
}
|
|
@@ -23,6 +23,7 @@ class PostHogMCP extends PostHog {
|
|
|
23
23
|
event.response = data.response;
|
|
24
24
|
event.duration = data.durationMs;
|
|
25
25
|
event.isError = data.isError;
|
|
26
|
+
event.errorType = data.errorType;
|
|
26
27
|
applyIntent(event, data.intent, data.intentSource);
|
|
27
28
|
if (data.isError) event.error = captureException(data.error ?? `Tool ${data.toolName} returned an error`);
|
|
28
29
|
this.#emit(event);
|
|
@@ -43,6 +44,7 @@ class PostHogMCP extends PostHog {
|
|
|
43
44
|
event.response = data.response;
|
|
44
45
|
event.duration = data.durationMs;
|
|
45
46
|
event.isError = data.isError;
|
|
47
|
+
event.errorType = data.errorType;
|
|
46
48
|
if (data.isError) event.error = captureException(data.error ?? 'tools/list failed');
|
|
47
49
|
this.#emit(event);
|
|
48
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitization.d.ts","sourceRoot":"","sources":["../../src/extensions/sanitization.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sanitization.d.ts","sourceRoot":"","sources":["../../src/extensions/sanitization.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAS/C;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAmBrE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-encoded session tokens for stateless / multi-pod MCP servers.
|
|
3
|
+
*
|
|
4
|
+
* A stateless server keeps nothing between requests, so every request starts a
|
|
5
|
+
* new session and the client name/version (only sent at `initialize`) is lost.
|
|
6
|
+
* The one value clients replay on every request is the `Mcp-Session-Id` header.
|
|
7
|
+
* So at `initialize` we mint that header as a token carrying the session id and
|
|
8
|
+
* client identity — any pod can read them back from the header alone.
|
|
9
|
+
*
|
|
10
|
+
* The token is unsigned: it holds only what the client already self-reports.
|
|
11
|
+
*/
|
|
12
|
+
export declare const MCP_SESSION_HEADER = "mcp-session-id";
|
|
13
|
+
/** What a session token carries. */
|
|
14
|
+
export interface SessionTokenPayload {
|
|
15
|
+
/** PostHog session id (`ses_…`) → `$session_id`. */
|
|
16
|
+
sessionId: string;
|
|
17
|
+
/** MCP client name → `$mcp_client_name`. */
|
|
18
|
+
clientName?: string;
|
|
19
|
+
/** MCP client version → `$mcp_client_version`. */
|
|
20
|
+
clientVersion?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Encodes a session token for the `Mcp-Session-Id` response header. Also
|
|
24
|
+
* exported for SSE servers, which flush headers before handlers run and so
|
|
25
|
+
* must set the header themselves at the HTTP layer.
|
|
26
|
+
*/
|
|
27
|
+
export declare function encodeSessionId(payload: SessionTokenPayload): string;
|
|
28
|
+
/**
|
|
29
|
+
* Decodes an `Mcp-Session-Id` value into a token payload. Returns `null` for
|
|
30
|
+
* anything that isn't one of our tokens (transport UUIDs, JWTs, garbage) and
|
|
31
|
+
* never throws.
|
|
32
|
+
*/
|
|
33
|
+
export declare function decodeSessionId(value: unknown): SessionTokenPayload | null;
|
|
34
|
+
/**
|
|
35
|
+
* Reads the `mcp-session-id` header off `extra.requestInfo.headers`. The SDK
|
|
36
|
+
* transports lowercase header keys; the fallback scan covers hand-built extras.
|
|
37
|
+
*/
|
|
38
|
+
export declare function readMcpSessionHeader(headers: unknown): string | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Puts a minted token on the transport so it goes out as the `Mcp-Session-Id`
|
|
41
|
+
* response header. The Node transport's `sessionId` is a getter backed by an
|
|
42
|
+
* inner web-standard transport, so verify the write by reading back and fall
|
|
43
|
+
* back to writing the inner one. Returns whether the write stuck; never throws.
|
|
44
|
+
*/
|
|
45
|
+
export declare function writeSessionIdToTransport(transport: unknown, token: string): boolean;
|
|
46
|
+
//# sourceMappingURL=session-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-token.d.ts","sourceRoot":"","sources":["../../src/extensions/session-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,kBAAkB,mBAAmB,CAAA;AAElD,oCAAoC;AACpC,MAAM,WAAW,mBAAmB;IAClC,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAUD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAYpE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CA8B1E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgBzE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAsBpF"}
|