@posthog/mcp 0.10.8 → 0.11.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/capture.d.ts.map +1 -1
- package/dist/extensions/capture.js +2 -0
- package/dist/extensions/capture.mjs +2 -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 +3 -1
- package/dist/extensions/constants.mjs +3 -1
- package/dist/extensions/context-parameters.d.ts.map +1 -1
- package/dist/extensions/conversation-id.d.ts +2 -13
- package/dist/extensions/conversation-id.d.ts.map +1 -1
- package/dist/extensions/headers.d.ts +33 -0
- package/dist/extensions/headers.d.ts.map +1 -0
- package/dist/extensions/headers.js +54 -0
- package/dist/extensions/headers.mjs +17 -0
- package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-lowlevel.js +6 -5
- package/dist/extensions/instrument-lowlevel.mjs +7 -6
- package/dist/extensions/instrumentation.d.ts +29 -0
- package/dist/extensions/instrumentation.d.ts.map +1 -1
- package/dist/extensions/instrumentation.js +17 -7
- package/dist/extensions/instrumentation.mjs +15 -8
- package/dist/extensions/internal.d.ts.map +1 -1
- package/dist/extensions/internal.js +2 -0
- package/dist/extensions/internal.mjs +2 -0
- package/dist/extensions/mcp-sdk-compat.d.ts +10 -0
- package/dist/extensions/mcp-sdk-compat.d.ts.map +1 -1
- package/dist/extensions/mcp-sdk-compat.js +11 -2
- package/dist/extensions/mcp-sdk-compat.mjs +7 -1
- package/dist/extensions/output-instructions.d.ts +6 -8
- package/dist/extensions/output-instructions.d.ts.map +1 -1
- package/dist/extensions/posthog-events.js +4 -0
- package/dist/extensions/posthog-events.mjs +4 -0
- package/dist/extensions/posthog-mcp.d.ts.map +1 -1
- package/dist/extensions/posthog-mcp.js +3 -0
- package/dist/extensions/posthog-mcp.mjs +3 -0
- package/dist/extensions/session-token.d.ts.map +1 -1
- package/dist/extensions/session-token.js +5 -14
- package/dist/extensions/session-token.mjs +2 -11
- package/dist/extensions/session.d.ts +4 -3
- package/dist/extensions/session.d.ts.map +1 -1
- package/dist/extensions/sink.d.ts +4 -6
- package/dist/extensions/sink.d.ts.map +1 -1
- package/dist/extensions/tools.d.ts.map +1 -1
- package/dist/extensions/transport-identity.d.ts +59 -0
- package/dist/extensions/transport-identity.d.ts.map +1 -0
- package/dist/extensions/transport-identity.js +63 -0
- package/dist/extensions/transport-identity.mjs +20 -0
- package/dist/extensions/truncation.d.ts.map +1 -1
- package/dist/extensions/truncation.js +2 -0
- package/dist/extensions/truncation.mjs +2 -0
- package/dist/types.d.ts +33 -0
- 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 +1 -1
- package/src/extensions/capture.ts +6 -0
- package/src/extensions/compatibility.ts +0 -9
- package/src/extensions/constants.ts +2 -0
- package/src/extensions/context-parameters.ts +3 -11
- package/src/extensions/conversation-id.ts +5 -17
- package/src/extensions/headers.ts +52 -0
- package/src/extensions/instrument-highlevel.ts +0 -1
- package/src/extensions/instrument-lowlevel.ts +14 -10
- package/src/extensions/instrumentation.ts +82 -46
- package/src/extensions/internal.ts +6 -5
- package/src/extensions/mcp-sdk-compat.ts +18 -0
- package/src/extensions/output-instructions.ts +6 -8
- package/src/extensions/posthog-events.ts +14 -0
- package/src/extensions/posthog-mcp.ts +7 -5
- package/src/extensions/session-token.ts +3 -15
- package/src/extensions/session.ts +21 -35
- package/src/extensions/sink.ts +4 -6
- package/src/extensions/tools.ts +3 -6
- package/src/extensions/transport-identity.ts +94 -0
- package/src/extensions/truncation.ts +4 -0
- package/src/types.ts +33 -0
- package/src/version.ts +1 -1
|
@@ -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,
|
|
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"}
|
|
@@ -50,6 +50,8 @@ function captureEvent(server, eventInput, logger, requestAttribution) {
|
|
|
50
50
|
serverVersion: sessionInfo.serverVersion,
|
|
51
51
|
clientName: eventInput.clientName ?? sessionInfo.clientName,
|
|
52
52
|
clientVersion: eventInput.clientVersion ?? sessionInfo.clientVersion,
|
|
53
|
+
clientUserAgent: eventInput.clientUserAgent,
|
|
54
|
+
vendorClient: eventInput.vendorClient,
|
|
53
55
|
identifyActorGivenId: sessionInfo.identifyActorGivenId,
|
|
54
56
|
identifyActorData: sessionInfo.identifyActorData,
|
|
55
57
|
groups: sessionInfo.identifyActorGroups,
|
|
@@ -22,6 +22,8 @@ function captureEvent(server, eventInput, logger, requestAttribution) {
|
|
|
22
22
|
serverVersion: sessionInfo.serverVersion,
|
|
23
23
|
clientName: eventInput.clientName ?? sessionInfo.clientName,
|
|
24
24
|
clientVersion: eventInput.clientVersion ?? sessionInfo.clientVersion,
|
|
25
|
+
clientUserAgent: eventInput.clientUserAgent,
|
|
26
|
+
vendorClient: eventInput.vendorClient,
|
|
25
27
|
identifyActorGivenId: sessionInfo.identifyActorGivenId,
|
|
26
28
|
identifyActorData: sessionInfo.identifyActorData,
|
|
27
29
|
groups: sessionInfo.identifyActorGroups,
|
|
@@ -1 +1 @@
|
|
|
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;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE3C;;;;;;;;;;;GAWG;
|
|
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;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE3C;;;;;;;;;;;GAWG;AAEH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAI9D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,YAAY,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAIpG;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,YAAY,CAExE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,sBAAsB,CA6BhH;AAoDD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAanE"}
|
|
@@ -19,6 +19,7 @@ export declare const PostHogMCPAnalyticsEvent: {
|
|
|
19
19
|
export type PostHogMCPAnalyticsEvent = (typeof PostHogMCPAnalyticsEvent)[keyof typeof PostHogMCPAnalyticsEvent];
|
|
20
20
|
export declare const PostHogMCPAnalyticsProperty: {
|
|
21
21
|
readonly ClientName: "$mcp_client_name";
|
|
22
|
+
readonly ClientUserAgent: "$mcp_client_user_agent";
|
|
22
23
|
readonly ClientVersion: "$mcp_client_version";
|
|
23
24
|
readonly ConversationId: "$mcp_conversation_id";
|
|
24
25
|
readonly DurationMs: "$mcp_duration_ms";
|
|
@@ -39,6 +40,7 @@ export declare const PostHogMCPAnalyticsProperty: {
|
|
|
39
40
|
readonly ToolCategory: "$mcp_tool_category";
|
|
40
41
|
readonly ToolDescription: "$mcp_tool_description";
|
|
41
42
|
readonly ToolName: "$mcp_tool_name";
|
|
43
|
+
readonly VendorClient: "$mcp_vendor_client";
|
|
42
44
|
};
|
|
43
45
|
export type PostHogMCPAnalyticsProperty = (typeof PostHogMCPAnalyticsProperty)[keyof typeof PostHogMCPAnalyticsProperty];
|
|
44
46
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -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
|
|
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"}
|
|
@@ -52,6 +52,7 @@ const PostHogMCPAnalyticsEvent = {
|
|
|
52
52
|
};
|
|
53
53
|
const PostHogMCPAnalyticsProperty = {
|
|
54
54
|
ClientName: '$mcp_client_name',
|
|
55
|
+
ClientUserAgent: '$mcp_client_user_agent',
|
|
55
56
|
ClientVersion: '$mcp_client_version',
|
|
56
57
|
ConversationId: '$mcp_conversation_id',
|
|
57
58
|
DurationMs: '$mcp_duration_ms',
|
|
@@ -71,7 +72,8 @@ const PostHogMCPAnalyticsProperty = {
|
|
|
71
72
|
Source: '$mcp_source',
|
|
72
73
|
ToolCategory: '$mcp_tool_category',
|
|
73
74
|
ToolDescription: "$mcp_tool_description",
|
|
74
|
-
ToolName: '$mcp_tool_name'
|
|
75
|
+
ToolName: '$mcp_tool_name',
|
|
76
|
+
VendorClient: '$mcp_vendor_client'
|
|
75
77
|
};
|
|
76
78
|
exports.DEFAULT_CONTEXT_PARAMETER_DESCRIPTION = __webpack_exports__.DEFAULT_CONTEXT_PARAMETER_DESCRIPTION;
|
|
77
79
|
exports.DEFAULT_CONVERSATION_ID_DESCRIPTION = __webpack_exports__.DEFAULT_CONVERSATION_ID_DESCRIPTION;
|
|
@@ -18,6 +18,7 @@ const PostHogMCPAnalyticsEvent = {
|
|
|
18
18
|
};
|
|
19
19
|
const PostHogMCPAnalyticsProperty = {
|
|
20
20
|
ClientName: '$mcp_client_name',
|
|
21
|
+
ClientUserAgent: '$mcp_client_user_agent',
|
|
21
22
|
ClientVersion: '$mcp_client_version',
|
|
22
23
|
ConversationId: '$mcp_conversation_id',
|
|
23
24
|
DurationMs: '$mcp_duration_ms',
|
|
@@ -37,6 +38,7 @@ const PostHogMCPAnalyticsProperty = {
|
|
|
37
38
|
Source: '$mcp_source',
|
|
38
39
|
ToolCategory: '$mcp_tool_category',
|
|
39
40
|
ToolDescription: "$mcp_tool_description",
|
|
40
|
-
ToolName: '$mcp_tool_name'
|
|
41
|
+
ToolName: '$mcp_tool_name',
|
|
42
|
+
VendorClient: '$mcp_vendor_client'
|
|
41
43
|
};
|
|
42
44
|
export { DEFAULT_CONTEXT_PARAMETER_DESCRIPTION, DEFAULT_CONVERSATION_ID_DESCRIPTION, INACTIVITY_TIMEOUT_IN_MINUTES, POSTHOG_MCP_ANALYTICS_SOURCE, POSTHOG_MCP_LIB_NAME, PostHogMCPAnalyticsEvent, PostHogMCPAnalyticsProperty };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-parameters.d.ts","sourceRoot":"","sources":["../../src/extensions/context-parameters.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7C,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,OAAO,CAEjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAEjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,qBAAqB,EAC3E,IAAI,EAAE,KAAK,EACX,0BAA0B,CAAC,EAAE,MAAM,EACnC,MAAM,GAAE,QAAc,GACrB,KAAK,
|
|
1
|
+
{"version":3,"file":"context-parameters.d.ts","sourceRoot":"","sources":["../../src/extensions/context-parameters.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7C,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,OAAO,CAEjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAEjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,qBAAqB,EAC3E,IAAI,EAAE,KAAK,EACX,0BAA0B,CAAC,EAAE,MAAM,EACnC,MAAM,GAAE,QAAc,GACrB,KAAK,CAqDP;AAED,wBAAgB,0BAA0B,CAAC,KAAK,SAAS,qBAAqB,EAC5E,KAAK,EAAE,KAAK,EAAE,EACd,0BAA0B,CAAC,EAAE,MAAM,EACnC,MAAM,GAAE,QAAc,GACrB,KAAK,EAAE,CAET"}
|
|
@@ -31,20 +31,9 @@ export type ConversationIdResolution = {
|
|
|
31
31
|
* derivation is deterministic so that two pods agree — which also means two
|
|
32
32
|
* *callers* sending the same string land in the same session. The strings agents
|
|
33
33
|
* invent are not random (`conv-1`, `1`, `session`), so trusting them verbatim
|
|
34
|
-
* would silently merge unrelated conversations, potentially across users.
|
|
35
|
-
*
|
|
36
|
-
* A compliant agent echoes the uuidv7 we minted and is unaffected. Anything else
|
|
37
|
-
* is treated exactly as if the handle were absent: mint, and prompt back. Shape
|
|
34
|
+
* would silently merge unrelated conversations, potentially across users. Shape
|
|
38
35
|
* rather than a registry of issued ids, because a per-request server has no
|
|
39
|
-
* memory of what it minted.
|
|
40
|
-
*
|
|
41
|
-
* This narrows the problem, it does not prove provenance: a caller supplying a
|
|
42
|
-
* well-formed uuidv7 is trusted, so two that pick the *same* one still merge. That
|
|
43
|
-
* residue is far smaller than the case it replaces — an agent ignoring the
|
|
44
|
-
* parameter description reaches for `conv-1` or `1`, not a conforming uuidv7 — and
|
|
45
|
-
* closing it needs a signed handle, i.e. a secret shared by every pod. Worth doing
|
|
46
|
-
* if this ever anchors something security-bearing; `$session_id` is an analytics
|
|
47
|
-
* grouping key, so it does not today.
|
|
36
|
+
* memory of what it minted. Residual risk and why it's accepted: ADR-0004.
|
|
48
37
|
*/
|
|
49
38
|
export declare function resolveConversationId(enabled: boolean, args: unknown): ConversationIdResolution;
|
|
50
39
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-id.d.ts","sourceRoot":"","sources":["../../src/extensions/conversation-id.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7C,eAAO,MAAM,0BAA0B,oBAAoB,CAAA;AAE3D,MAAM,WAAW,4BAA4B;IAC3C,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,4BAA4B,EAChF,IAAI,EAAE,KAAK,EACX,MAAM,GAAE,QAAc,GACrB,KAAK,CA4CP;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,SAAS,4BAA4B,EACjF,KAAK,EAAE,KAAK,EAAE,EACd,MAAM,GAAE,QAAc,GACrB,KAAK,EAAE,CAET;AAQD,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
|
|
1
|
+
{"version":3,"file":"conversation-id.d.ts","sourceRoot":"","sources":["../../src/extensions/conversation-id.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7C,eAAO,MAAM,0BAA0B,oBAAoB,CAAA;AAE3D,MAAM,WAAW,4BAA4B;IAC3C,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,4BAA4B,EAChF,IAAI,EAAE,KAAK,EACX,MAAM,GAAE,QAAc,GACrB,KAAK,CA4CP;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,SAAS,4BAA4B,EACjF,KAAK,EAAE,KAAK,EAAE,EACd,MAAM,GAAE,QAAc,GACrB,KAAK,EAAE,CAET;AAQD,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;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,wBAAwB,CAY/F;AAED;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAK1E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUvE;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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single place this package reads an HTTP request header.
|
|
3
|
+
*
|
|
4
|
+
* The MCP SDK hands us `IsomorphicHeaders` — a plain
|
|
5
|
+
* `Record<string, string | string[] | undefined>`, not a `Headers` instance — so
|
|
6
|
+
* values come out by bracket access rather than `.get()`. MCP SDK v2 plans to
|
|
7
|
+
* pass a real `Headers` object instead; funnelling every read through here keeps
|
|
8
|
+
* that migration a one-function change instead of a hunt for bracket lookups.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Reads one header value out of an `IsomorphicHeaders` bag. `name` must be
|
|
12
|
+
* lower-cased: the HTTP transports build the bag with
|
|
13
|
+
* `Object.fromEntries(req.headers.entries())` and the Fetch spec lower-cases
|
|
14
|
+
* header names. A hand-rolled transport can still hand us mixed-case keys, so a
|
|
15
|
+
* case-insensitive scan backs up the direct lookup.
|
|
16
|
+
*
|
|
17
|
+
* Repeated headers arrive as an array — we take the first entry, since every
|
|
18
|
+
* header we read is single-valued by definition. Returns `undefined` for a
|
|
19
|
+
* missing, non-string, or blank value, and never throws: a malformed header from
|
|
20
|
+
* an untrusted client must not break the request it rode in on.
|
|
21
|
+
*/
|
|
22
|
+
export declare function readHeaderValue(headers: unknown, name: string): string | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Coerces one raw header value into a clean string, or `undefined`.
|
|
25
|
+
*
|
|
26
|
+
* Exported so the custom-dispatcher path can apply the same rules to values a host
|
|
27
|
+
* read off the request itself. Without it the two integration paths emit different
|
|
28
|
+
* properties for the *same* request: a whitespace-only header would survive as a junk
|
|
29
|
+
* value, and a repeated header would reach the wire as an array, because the
|
|
30
|
+
* downstream length cap passes non-strings through untouched.
|
|
31
|
+
*/
|
|
32
|
+
export declare function normalizeHeaderString(value: unknown): string | undefined;
|
|
33
|
+
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/extensions/headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWlF;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOxE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
normalizeHeaderString: ()=>normalizeHeaderString,
|
|
28
|
+
readHeaderValue: ()=>readHeaderValue
|
|
29
|
+
});
|
|
30
|
+
function readHeaderValue(headers, name) {
|
|
31
|
+
if (!headers || 'object' != typeof headers) return;
|
|
32
|
+
const record = headers;
|
|
33
|
+
let value = record[name];
|
|
34
|
+
if (void 0 === value) {
|
|
35
|
+
const key = Object.keys(record).find((k)=>k.toLowerCase() === name);
|
|
36
|
+
value = void 0 === key ? void 0 : record[key];
|
|
37
|
+
}
|
|
38
|
+
return normalizeHeaderString(value);
|
|
39
|
+
}
|
|
40
|
+
function normalizeHeaderString(value) {
|
|
41
|
+
const first = Array.isArray(value) ? value[0] : value;
|
|
42
|
+
if ('string' != typeof first) return;
|
|
43
|
+
const trimmed = first.trim();
|
|
44
|
+
return trimmed.length > 0 ? trimmed : void 0;
|
|
45
|
+
}
|
|
46
|
+
exports.normalizeHeaderString = __webpack_exports__.normalizeHeaderString;
|
|
47
|
+
exports.readHeaderValue = __webpack_exports__.readHeaderValue;
|
|
48
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
49
|
+
"normalizeHeaderString",
|
|
50
|
+
"readHeaderValue"
|
|
51
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
52
|
+
Object.defineProperty(exports, '__esModule', {
|
|
53
|
+
value: true
|
|
54
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
function readHeaderValue(headers, name) {
|
|
2
|
+
if (!headers || 'object' != typeof headers) return;
|
|
3
|
+
const record = headers;
|
|
4
|
+
let value = record[name];
|
|
5
|
+
if (void 0 === value) {
|
|
6
|
+
const key = Object.keys(record).find((k)=>k.toLowerCase() === name);
|
|
7
|
+
value = void 0 === key ? void 0 : record[key];
|
|
8
|
+
}
|
|
9
|
+
return normalizeHeaderString(value);
|
|
10
|
+
}
|
|
11
|
+
function normalizeHeaderString(value) {
|
|
12
|
+
const first = Array.isArray(value) ? value[0] : value;
|
|
13
|
+
if ('string' != typeof first) return;
|
|
14
|
+
const trimmed = first.trim();
|
|
15
|
+
return trimmed.length > 0 ? trimmed : void 0;
|
|
16
|
+
}
|
|
17
|
+
export { normalizeHeaderString, readHeaderValue };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument-highlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-highlevel.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,sBAAsB,EAIvB,MAAM,UAAU,CAAA;AASjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAgQxC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"instrument-highlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-highlevel.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,sBAAsB,EAIvB,MAAM,UAAU,CAAA;AASjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAgQxC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CA0BhG"}
|
|
@@ -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":"AAKA,OAAO,KAAK,EAAiD,aAAa,EAAE,MAAM,UAAU,CAAA;AAG5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAmBxC;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAyBtF"}
|
|
@@ -26,7 +26,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
27
|
instrumentLowLevelServer: ()=>instrumentLowLevelServer
|
|
28
28
|
});
|
|
29
|
-
const types_js_namespaceObject = require("@modelcontextprotocol/sdk/types.js");
|
|
30
29
|
const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
31
30
|
const external_internal_js_namespaceObject = require("./internal.js");
|
|
32
31
|
const external_tools_js_namespaceObject = require("./tools.js");
|
|
@@ -35,20 +34,22 @@ const external_tracing_helpers_js_namespaceObject = require("./tracing-helpers.j
|
|
|
35
34
|
function instrumentLowLevelServer(server, logger) {
|
|
36
35
|
try {
|
|
37
36
|
const hadCallToolHandler = server._requestHandlers.has('tools/call');
|
|
37
|
+
const traceToolCall = (server, originalHandler, request, extra)=>handleToolCallRequest(server, originalHandler, request, extra, logger);
|
|
38
38
|
const handlers = {
|
|
39
39
|
initialize: (server, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleInitializeRequest)(server, originalHandler, request, extra, logger),
|
|
40
40
|
'tools/list': (server, originalHandler, request, extra)=>(0, external_instrumentation_js_namespaceObject.handleListToolsRequest)(server, originalHandler, request, extra, logger),
|
|
41
|
-
'tools/call':
|
|
41
|
+
'tools/call': traceToolCall
|
|
42
42
|
};
|
|
43
43
|
(0, external_instrumentation_js_namespaceObject.patchRequestHandlers)(server, handlers);
|
|
44
|
-
if (!hadCallToolHandler)
|
|
45
|
-
throw new Error(`Unknown tool: ${request.params?.name || 'unknown'}`);
|
|
46
|
-
});
|
|
44
|
+
if (!hadCallToolHandler) (0, external_instrumentation_js_namespaceObject.registerFallbackRequestHandler)(server, 'tools/call', unknownToolHandler, traceToolCall);
|
|
47
45
|
} catch (error) {
|
|
48
46
|
logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
49
47
|
throw error;
|
|
50
48
|
}
|
|
51
49
|
}
|
|
50
|
+
async function unknownToolHandler(request) {
|
|
51
|
+
throw new Error(`Unknown tool: ${request.params?.name || 'unknown'}`);
|
|
52
|
+
}
|
|
52
53
|
async function handleToolCallRequest(server, originalCallToolHandler, request, extra, logger) {
|
|
53
54
|
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
54
55
|
if (!data) {
|
|
@@ -1,26 +1,27 @@
|
|
|
1
|
-
import { CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
2
1
|
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
3
2
|
import { getServerTrackingData } from "./internal.mjs";
|
|
4
3
|
import { handleReportMissing, resolveMissingCapabilityToolName } from "./tools.mjs";
|
|
5
|
-
import { captureToolCall, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers } from "./instrumentation.mjs";
|
|
4
|
+
import { captureToolCall, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, registerFallbackRequestHandler } from "./instrumentation.mjs";
|
|
6
5
|
import { getContextArgument } from "./tracing-helpers.mjs";
|
|
7
6
|
function instrumentLowLevelServer(server, logger) {
|
|
8
7
|
try {
|
|
9
8
|
const hadCallToolHandler = server._requestHandlers.has('tools/call');
|
|
9
|
+
const traceToolCall = (server, originalHandler, request, extra)=>handleToolCallRequest(server, originalHandler, request, extra, logger);
|
|
10
10
|
const handlers = {
|
|
11
11
|
initialize: (server, originalHandler, request, extra)=>handleInitializeRequest(server, originalHandler, request, extra, logger),
|
|
12
12
|
'tools/list': (server, originalHandler, request, extra)=>handleListToolsRequest(server, originalHandler, request, extra, logger),
|
|
13
|
-
'tools/call':
|
|
13
|
+
'tools/call': traceToolCall
|
|
14
14
|
};
|
|
15
15
|
patchRequestHandlers(server, handlers);
|
|
16
|
-
if (!hadCallToolHandler) server
|
|
17
|
-
throw new Error(`Unknown tool: ${request.params?.name || 'unknown'}`);
|
|
18
|
-
});
|
|
16
|
+
if (!hadCallToolHandler) registerFallbackRequestHandler(server, 'tools/call', unknownToolHandler, traceToolCall);
|
|
19
17
|
} catch (error) {
|
|
20
18
|
logger(`Warning: Failed to setup tool call instrumentation - ${error}`);
|
|
21
19
|
throw error;
|
|
22
20
|
}
|
|
23
21
|
}
|
|
22
|
+
async function unknownToolHandler(request) {
|
|
23
|
+
throw new Error(`Unknown tool: ${request.params?.name || 'unknown'}`);
|
|
24
|
+
}
|
|
24
25
|
async function handleToolCallRequest(server, originalCallToolHandler, request, extra, logger) {
|
|
25
26
|
const data = getServerTrackingData(server);
|
|
26
27
|
if (!data) {
|
|
@@ -55,6 +55,35 @@ export declare function captureToolCall(params: TraceToolCallParams): Promise<un
|
|
|
55
55
|
* supplies `request` and `extra` per call.
|
|
56
56
|
*/
|
|
57
57
|
export type HandlerPatch = (server: MCPServerLike, originalHandler: MCPRequestHandler, request: MCPRequestLike, extra: CompatibleRequestHandlerExtra | undefined) => Promise<unknown>;
|
|
58
|
+
/**
|
|
59
|
+
* Registers a synthetic fallback handler for `handlerName`, already wrapped in
|
|
60
|
+
* `patch`, by writing straight into `_requestHandlers` instead of going through
|
|
61
|
+
* `setRequestHandler`.
|
|
62
|
+
*
|
|
63
|
+
* Bypassing the SDK setter is deliberate, on three counts:
|
|
64
|
+
*
|
|
65
|
+
* - **Capability assertion.** `setRequestHandler` refuses a method the server
|
|
66
|
+
* never declared a capability for, so instrumenting a low-level server built
|
|
67
|
+
* without `capabilities.tools` used to throw `Server does not support tools`
|
|
68
|
+
* and leave instrumentation half-applied. Our fallback is not a capability the
|
|
69
|
+
* server offers — it exists only so a call for a tool nobody claims is still
|
|
70
|
+
* captured — so the assertion has nothing to protect here.
|
|
71
|
+
* - **Schema validation.** The setter also wraps the handler in request/result
|
|
72
|
+
* parsing, which a handler that can only ever throw `Unknown tool` never needs.
|
|
73
|
+
* - **Portability.** The setter's first argument is a Zod schema on SDK v1 and a
|
|
74
|
+
* method string on v2; the map key is the same string on both, so this is the
|
|
75
|
+
* one registration form that does not need to know which major it is talking
|
|
76
|
+
* to — and it drops the last runtime `@modelcontextprotocol/sdk` import from
|
|
77
|
+
* the shipped bundle.
|
|
78
|
+
*/
|
|
79
|
+
export declare function registerFallbackRequestHandler(server: MCPServerLike, handlerName: string, fallbackHandler: MCPRequestHandler, patch: HandlerPatch): void;
|
|
80
|
+
/**
|
|
81
|
+
* Applies the `patches` (keyed by method, e.g. `initialize`, `tools/list`) to the
|
|
82
|
+
* handlers already registered, and patches `setRequestHandler` so matching
|
|
83
|
+
* handlers registered later are patched too. The latter is what makes adapters
|
|
84
|
+
* that register handlers post-construction work — e.g. `@rekog/mcp-nest` hands a
|
|
85
|
+
* bare server to instrument() and only then registers its handlers.
|
|
86
|
+
*/
|
|
58
87
|
export declare function patchRequestHandlers(server: MCPServerLike, patches: Record<string, HandlerPatch>): void;
|
|
59
88
|
/**
|
|
60
89
|
* Checks the server's raw listing for a real owner of a candidate virtual tool.
|
|
@@ -1 +1 @@
|
|
|
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,2BAA2B,EAC3B,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAId,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,12 +31,14 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
31
31
|
readToolMetaCategory: ()=>readToolMetaCategory,
|
|
32
32
|
cacheToolCategories: ()=>cacheToolCategories,
|
|
33
33
|
handleListToolsRequest: ()=>handleListToolsRequest,
|
|
34
|
+
registerFallbackRequestHandler: ()=>registerFallbackRequestHandler,
|
|
34
35
|
patchRequestHandlers: ()=>patchRequestHandlers
|
|
35
36
|
});
|
|
36
37
|
const external_analytics_parameters_js_namespaceObject = require("./analytics-parameters.js");
|
|
37
38
|
const external_context_parameters_js_namespaceObject = require("./context-parameters.js");
|
|
38
39
|
const external_conversation_id_js_namespaceObject = require("./conversation-id.js");
|
|
39
40
|
const external_client_identity_js_namespaceObject = require("./client-identity.js");
|
|
41
|
+
const external_transport_identity_js_namespaceObject = require("./transport-identity.js");
|
|
40
42
|
const external_output_instructions_js_namespaceObject = require("./output-instructions.js");
|
|
41
43
|
const external_capture_js_namespaceObject = require("./capture.js");
|
|
42
44
|
const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
@@ -108,6 +110,7 @@ async function prepareToolCallEvent(server, data, request, downstreamRequest, ex
|
|
|
108
110
|
toolDescription: toolName ? data.toolDescriptions.get(toolName) : void 0
|
|
109
111
|
};
|
|
110
112
|
(0, external_client_identity_js_namespaceObject.stampMetaClientInfo)(event, request);
|
|
113
|
+
(0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(event, extra);
|
|
111
114
|
await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
|
|
112
115
|
(0, external_intent_js_namespaceObject.setEventIntent)(event, await (0, external_intent_js_namespaceObject.resolveToolCallIntent)(data, request, ownership.context, extra));
|
|
113
116
|
return {
|
|
@@ -174,6 +177,10 @@ function rememberOriginalRequestHandler(server, handlerName, originalHandler) {
|
|
|
174
177
|
}
|
|
175
178
|
handlers.set(handlerName, originalHandler);
|
|
176
179
|
}
|
|
180
|
+
function registerFallbackRequestHandler(server, handlerName, fallbackHandler, patch) {
|
|
181
|
+
rememberOriginalRequestHandler(server, handlerName, fallbackHandler);
|
|
182
|
+
server._requestHandlers.set(handlerName, (request, extra)=>patch(server, fallbackHandler, request, extra));
|
|
183
|
+
}
|
|
177
184
|
function patchRequestHandlers(server, patches) {
|
|
178
185
|
for (const [handlerName, patch] of Object.entries(patches)){
|
|
179
186
|
const originalHandler = server._requestHandlers.get(handlerName);
|
|
@@ -183,12 +190,11 @@ function patchRequestHandlers(server, patches) {
|
|
|
183
190
|
}
|
|
184
191
|
}
|
|
185
192
|
const originalSetRequestHandler = server.setRequestHandler.bind(server);
|
|
186
|
-
server.setRequestHandler = (
|
|
187
|
-
const
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
const result = originalSetRequestHandler(requestSchema, originalHandler);
|
|
193
|
+
server.setRequestHandler = (...args)=>{
|
|
194
|
+
const handlerName = (0, external_mcp_sdk_compat_js_namespaceObject.readRequestHandlerMethod)(args[0]);
|
|
195
|
+
const patch = void 0 !== handlerName && Object.prototype.hasOwnProperty.call(patches, handlerName) ? patches[handlerName] : void 0;
|
|
196
|
+
if (void 0 === handlerName || !patch) return originalSetRequestHandler(...args);
|
|
197
|
+
const result = originalSetRequestHandler(...args);
|
|
192
198
|
const registeredHandler = server._requestHandlers.get(handlerName);
|
|
193
199
|
if (registeredHandler) {
|
|
194
200
|
rememberOriginalRequestHandler(server, handlerName, registeredHandler);
|
|
@@ -224,6 +230,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
224
230
|
timestamp: startTime
|
|
225
231
|
};
|
|
226
232
|
(0, external_client_identity_js_namespaceObject.stampMetaClientInfo)(event, request);
|
|
233
|
+
(0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(event, extra);
|
|
227
234
|
if (data) await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
|
|
228
235
|
const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger, requestAttribution);
|
|
229
236
|
if (!data) {
|
|
@@ -396,6 +403,7 @@ async function handleInitializeRequest(server, originalInitializeHandler, reques
|
|
|
396
403
|
timestamp: new Date()
|
|
397
404
|
};
|
|
398
405
|
(0, external_client_identity_js_namespaceObject.stampMetaClientInfo)(event, request);
|
|
406
|
+
(0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(event, extra);
|
|
399
407
|
await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
|
|
400
408
|
const result = await originalInitializeHandler(request, extra);
|
|
401
409
|
event.response = result;
|
|
@@ -429,6 +437,7 @@ exports.handleListToolsRequest = __webpack_exports__.handleListToolsRequest;
|
|
|
429
437
|
exports.isToolAdvertised = __webpack_exports__.isToolAdvertised;
|
|
430
438
|
exports.patchRequestHandlers = __webpack_exports__.patchRequestHandlers;
|
|
431
439
|
exports.readToolMetaCategory = __webpack_exports__.readToolMetaCategory;
|
|
440
|
+
exports.registerFallbackRequestHandler = __webpack_exports__.registerFallbackRequestHandler;
|
|
432
441
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
433
442
|
"cacheToolCategories",
|
|
434
443
|
"cacheToolDescriptions",
|
|
@@ -437,7 +446,8 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
|
437
446
|
"handleListToolsRequest",
|
|
438
447
|
"isToolAdvertised",
|
|
439
448
|
"patchRequestHandlers",
|
|
440
|
-
"readToolMetaCategory"
|
|
449
|
+
"readToolMetaCategory",
|
|
450
|
+
"registerFallbackRequestHandler"
|
|
441
451
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
442
452
|
Object.defineProperty(exports, '__esModule', {
|
|
443
453
|
value: true
|
|
@@ -2,6 +2,7 @@ import { getAnalyticsParameterOwnership, stripOwnedAnalyticsArguments } from "./
|
|
|
2
2
|
import { addContextParameterToTools, getContextDescription, isContextEnabled } from "./context-parameters.mjs";
|
|
3
3
|
import { addConversationIdToTools, canInjectConversationIdPromptBack, injectConversationIdPromptBack, resolveConversationId } from "./conversation-id.mjs";
|
|
4
4
|
import { stampMetaClientInfo } from "./client-identity.mjs";
|
|
5
|
+
import { stampTransportIdentity } from "./transport-identity.mjs";
|
|
5
6
|
import { addInstructionsToOutputSchemas, mirrorInstructionsIntoStructuredContent } from "./output-instructions.mjs";
|
|
6
7
|
import { captureEvent } from "./capture.mjs";
|
|
7
8
|
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
@@ -9,7 +10,7 @@ import { captureException } from "./exceptions.mjs";
|
|
|
9
10
|
import { resolveToolCallIntent, setEventIntent, setExplicitContextIntent } from "./intent.mjs";
|
|
10
11
|
import { getServerTrackingData, handleIdentify, setServerTrackingData, withIdentity } from "./internal.mjs";
|
|
11
12
|
import { buildCapturedMcpParameters } from "./mcp-payloads.mjs";
|
|
12
|
-
import {
|
|
13
|
+
import { readRequestHandlerMethod } from "./mcp-sdk-compat.mjs";
|
|
13
14
|
import { getSessionId, getSessionInfo, newSessionId } from "./session.mjs";
|
|
14
15
|
import { encodeSessionId, readMcpSessionHeader, writeSessionIdToTransport } from "./session-token.mjs";
|
|
15
16
|
import { getReportMissingToolDescriptor, resolveMissingCapabilityToolName } from "./tools.mjs";
|
|
@@ -73,6 +74,7 @@ async function prepareToolCallEvent(server, data, request, downstreamRequest, ex
|
|
|
73
74
|
toolDescription: toolName ? data.toolDescriptions.get(toolName) : void 0
|
|
74
75
|
};
|
|
75
76
|
stampMetaClientInfo(event, request);
|
|
77
|
+
stampTransportIdentity(event, extra);
|
|
76
78
|
await applyResolvedMetadata(event, data, request, extra);
|
|
77
79
|
setEventIntent(event, await resolveToolCallIntent(data, request, ownership.context, extra));
|
|
78
80
|
return {
|
|
@@ -139,6 +141,10 @@ function rememberOriginalRequestHandler(server, handlerName, originalHandler) {
|
|
|
139
141
|
}
|
|
140
142
|
handlers.set(handlerName, originalHandler);
|
|
141
143
|
}
|
|
144
|
+
function registerFallbackRequestHandler(server, handlerName, fallbackHandler, patch) {
|
|
145
|
+
rememberOriginalRequestHandler(server, handlerName, fallbackHandler);
|
|
146
|
+
server._requestHandlers.set(handlerName, (request, extra)=>patch(server, fallbackHandler, request, extra));
|
|
147
|
+
}
|
|
142
148
|
function patchRequestHandlers(server, patches) {
|
|
143
149
|
for (const [handlerName, patch] of Object.entries(patches)){
|
|
144
150
|
const originalHandler = server._requestHandlers.get(handlerName);
|
|
@@ -148,12 +154,11 @@ function patchRequestHandlers(server, patches) {
|
|
|
148
154
|
}
|
|
149
155
|
}
|
|
150
156
|
const originalSetRequestHandler = server.setRequestHandler.bind(server);
|
|
151
|
-
server.setRequestHandler = (
|
|
152
|
-
const
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const result = originalSetRequestHandler(requestSchema, originalHandler);
|
|
157
|
+
server.setRequestHandler = (...args)=>{
|
|
158
|
+
const handlerName = readRequestHandlerMethod(args[0]);
|
|
159
|
+
const patch = void 0 !== handlerName && Object.prototype.hasOwnProperty.call(patches, handlerName) ? patches[handlerName] : void 0;
|
|
160
|
+
if (void 0 === handlerName || !patch) return originalSetRequestHandler(...args);
|
|
161
|
+
const result = originalSetRequestHandler(...args);
|
|
157
162
|
const registeredHandler = server._requestHandlers.get(handlerName);
|
|
158
163
|
if (registeredHandler) {
|
|
159
164
|
rememberOriginalRequestHandler(server, handlerName, registeredHandler);
|
|
@@ -189,6 +194,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
189
194
|
timestamp: startTime
|
|
190
195
|
};
|
|
191
196
|
stampMetaClientInfo(event, request);
|
|
197
|
+
stampTransportIdentity(event, extra);
|
|
192
198
|
if (data) await applyResolvedMetadata(event, data, request, extra);
|
|
193
199
|
const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger, requestAttribution);
|
|
194
200
|
if (!data) {
|
|
@@ -361,6 +367,7 @@ async function handleInitializeRequest(server, originalInitializeHandler, reques
|
|
|
361
367
|
timestamp: new Date()
|
|
362
368
|
};
|
|
363
369
|
stampMetaClientInfo(event, request);
|
|
370
|
+
stampTransportIdentity(event, extra);
|
|
364
371
|
await applyResolvedMetadata(event, data, request, extra);
|
|
365
372
|
const result = await originalInitializeHandler(request, extra);
|
|
366
373
|
event.response = result;
|
|
@@ -386,4 +393,4 @@ function readProtocolVersion(result, request) {
|
|
|
386
393
|
const requested = request.params?.protocolVersion;
|
|
387
394
|
return 'string' == typeof requested && requested.length > 0 ? requested : void 0;
|
|
388
395
|
}
|
|
389
|
-
export { cacheToolCategories, cacheToolDescriptions, captureToolCall, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, readToolMetaCategory };
|
|
396
|
+
export { cacheToolCategories, cacheToolDescriptions, captureToolCall, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, readToolMetaCategory, registerFallbackRequestHandler };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,WAAW,EACX,YAAY,EACb,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,WAAW,EACX,YAAY,EACb,MAAM,UAAU,CAAA;AAMjB;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;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;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,kBAAkB,EAAE,WAAW,EAC/B,KAAK,CAAC,EAAE,6BAA6B;AACrC;;;;;GAKG;AACH,uBAAuB,UAAQ,GAC9B,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAuDnC;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,WAAW,CAOtG;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAUzC"}
|
|
@@ -36,6 +36,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
36
36
|
const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
37
37
|
const external_capture_js_namespaceObject = require("./capture.js");
|
|
38
38
|
const external_client_identity_js_namespaceObject = require("./client-identity.js");
|
|
39
|
+
const external_transport_identity_js_namespaceObject = require("./transport-identity.js");
|
|
39
40
|
class IdentityCache {
|
|
40
41
|
constructor(maxSize = 1000){
|
|
41
42
|
this._cache = new Map();
|
|
@@ -110,6 +111,7 @@ async function handleIdentify(server, data, sessionId, request, requestAttributi
|
|
|
110
111
|
timestamp: new Date()
|
|
111
112
|
};
|
|
112
113
|
(0, external_client_identity_js_namespaceObject.stampMetaClientInfo)(identifyEvent, request);
|
|
114
|
+
(0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(identifyEvent, extra);
|
|
113
115
|
try {
|
|
114
116
|
const identityResult = 'function' == typeof data.options.identify ? await data.options.identify(request, extra) : data.options.identify;
|
|
115
117
|
if (identityResult) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
2
2
|
import { captureEvent } from "./capture.mjs";
|
|
3
3
|
import { stampMetaClientInfo } from "./client-identity.mjs";
|
|
4
|
+
import { stampTransportIdentity } from "./transport-identity.mjs";
|
|
4
5
|
class IdentityCache {
|
|
5
6
|
constructor(maxSize = 1000){
|
|
6
7
|
this._cache = new Map();
|
|
@@ -75,6 +76,7 @@ async function handleIdentify(server, data, sessionId, request, requestAttributi
|
|
|
75
76
|
timestamp: new Date()
|
|
76
77
|
};
|
|
77
78
|
stampMetaClientInfo(identifyEvent, request);
|
|
79
|
+
stampTransportIdentity(identifyEvent, extra);
|
|
78
80
|
try {
|
|
79
81
|
const identityResult = 'function' == typeof data.options.identify ? await data.options.identify(request, extra) : data.options.identify;
|
|
80
82
|
if (identityResult) {
|
|
@@ -30,5 +30,15 @@ export declare function createWrappedTool(originalTool: RegisteredTool, wrappedF
|
|
|
30
30
|
export declare function isZ4Schema(schema: unknown): boolean;
|
|
31
31
|
export declare function isZodRawShapeCompat(schema: unknown): schema is Record<string, unknown>;
|
|
32
32
|
export declare function getObjectShape(schema: unknown): Record<string, unknown> | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Reads the method name a `setRequestHandler` registration is for.
|
|
35
|
+
*
|
|
36
|
+
* The two SDK majors disagree on what the first argument is: v1 passes the Zod
|
|
37
|
+
* schema for the request and carries the method as a literal on its shape, v2
|
|
38
|
+
* passes the method string itself. A registration we cannot name is one we
|
|
39
|
+
* cannot match against a patch — which is how a handler registered after
|
|
40
|
+
* `instrument()` on v2 ends up replacing our wrapper instead of being wrapped.
|
|
41
|
+
*/
|
|
42
|
+
export declare function readRequestHandlerMethod(requestSchema: unknown): string | undefined;
|
|
33
43
|
export declare function getLiteralValue(schema: unknown): unknown;
|
|
34
44
|
//# sourceMappingURL=mcp-sdk-compat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-sdk-compat.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-sdk-compat.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAK5D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,CAAA;AAEpD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAQlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CAKxE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAMrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,GAAG,cAAc,CAM7G;AAyBD,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAKnD;AAaD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA6BnF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAkCxD"}
|
|
1
|
+
{"version":3,"file":"mcp-sdk-compat.d.ts","sourceRoot":"","sources":["../../src/extensions/mcp-sdk-compat.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAK5D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,CAAA;AAEpD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAQlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CAKxE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAMrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,GAAG,cAAc,CAM7G;AAyBD,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAKnD;AAaD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA6BnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOnF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAkCxD"}
|