@frontmcp/sdk 0.6.0 → 0.6.1
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/README.md +1 -0
- package/package.json +13 -6
- package/src/auth/session/index.d.ts +1 -0
- package/src/auth/session/index.js +3 -1
- package/src/auth/session/index.js.map +1 -1
- package/src/auth/session/vercel-kv-session.store.d.ts +96 -0
- package/src/auth/session/vercel-kv-session.store.js +216 -0
- package/src/auth/session/vercel-kv-session.store.js.map +1 -0
- package/src/common/decorators/front-mcp.decorator.js +14 -17
- package/src/common/decorators/front-mcp.decorator.js.map +1 -1
- package/src/common/metadata/front-mcp.metadata.d.ts +705 -23
- package/src/common/metadata/front-mcp.metadata.js +1 -0
- package/src/common/metadata/front-mcp.metadata.js.map +1 -1
- package/src/common/metadata/prompt.metadata.d.ts +4 -0
- package/src/common/metadata/resource.metadata.d.ts +8 -0
- package/src/common/metadata/tool-ui.metadata.d.ts +2 -2
- package/src/common/metadata/tool-ui.metadata.js +1 -1
- package/src/common/metadata/tool-ui.metadata.js.map +1 -1
- package/src/common/metadata/tool.metadata.d.ts +4 -0
- package/src/common/schemas/http-output.schema.d.ts +24 -6
- package/src/common/tokens/front-mcp.tokens.js +1 -0
- package/src/common/tokens/front-mcp.tokens.js.map +1 -1
- package/src/common/types/options/redis.options.d.ts +173 -5
- package/src/common/types/options/redis.options.js +157 -11
- package/src/common/types/options/redis.options.js.map +1 -1
- package/src/common/types/options/server-info.options.d.ts +4 -0
- package/src/common/types/options/transport.options.d.ts +68 -4
- package/src/common/utils/global-config.utils.d.ts +36 -0
- package/src/common/utils/global-config.utils.js +44 -0
- package/src/common/utils/global-config.utils.js.map +1 -0
- package/src/common/utils/index.d.ts +1 -0
- package/src/common/utils/index.js +1 -0
- package/src/common/utils/index.js.map +1 -1
- package/src/completion/flows/complete.flow.d.ts +6 -8
- package/src/errors/index.d.ts +1 -1
- package/src/errors/index.js +2 -1
- package/src/errors/index.js.map +1 -1
- package/src/errors/mcp.error.d.ts +9 -0
- package/src/errors/mcp.error.js +19 -1
- package/src/errors/mcp.error.js.map +1 -1
- package/src/front-mcp/front-mcp.providers.d.ts +208 -0
- package/src/front-mcp/index.d.ts +1 -0
- package/src/front-mcp/index.js +3 -0
- package/src/front-mcp/index.js.map +1 -1
- package/src/index.d.ts +1 -1
- package/src/index.js +2 -1
- package/src/index.js.map +1 -1
- package/src/logging/flows/set-level.flow.d.ts +6 -8
- package/src/prompt/flows/get-prompt.flow.d.ts +14 -8
- package/src/prompt/flows/prompts-list.flow.d.ts +8 -7
- package/src/resource/flows/read-resource.flow.d.ts +8 -9
- package/src/resource/flows/resource-templates-list.flow.d.ts +8 -7
- package/src/resource/flows/resources-list.flow.d.ts +8 -7
- package/src/resource/flows/subscribe-resource.flow.d.ts +6 -8
- package/src/resource/flows/unsubscribe-resource.flow.d.ts +6 -8
- package/src/store/adapters/store.vercel-kv.adapter.d.ts +86 -0
- package/src/store/adapters/store.vercel-kv.adapter.js +155 -0
- package/src/store/adapters/store.vercel-kv.adapter.js.map +1 -0
- package/src/store/index.d.ts +2 -0
- package/src/store/index.js +2 -0
- package/src/store/index.js.map +1 -1
- package/src/store/store.factory.d.ts +86 -0
- package/src/store/store.factory.js +194 -0
- package/src/store/store.factory.js.map +1 -0
- package/src/tool/flows/call-tool.flow.d.ts +18 -9
- package/src/tool/flows/call-tool.flow.js +2 -2
- package/src/tool/flows/call-tool.flow.js.map +1 -1
- package/src/tool/flows/tools-list.flow.d.ts +9 -8
- package/src/tool/flows/tools-list.flow.js +2 -2
- package/src/tool/flows/tools-list.flow.js.map +1 -1
- package/src/tool/ui/index.d.ts +4 -4
- package/src/tool/ui/index.js +4 -4
- package/src/tool/ui/index.js.map +1 -1
- package/src/tool/ui/platform-adapters.d.ts +2 -2
- package/src/tool/ui/platform-adapters.js +3 -3
- package/src/tool/ui/platform-adapters.js.map +1 -1
- package/src/tool/ui/template-helpers.d.ts +5 -7
- package/src/tool/ui/template-helpers.js +9 -26
- package/src/tool/ui/template-helpers.js.map +1 -1
- package/src/tool/ui/ui-resource.handler.d.ts +1 -1
- package/src/tool/ui/ui-resource.handler.js +5 -5
- package/src/tool/ui/ui-resource.handler.js.map +1 -1
- package/src/transport/mcp-handlers/complete-request.handler.d.ts +4 -15
- package/src/transport/mcp-handlers/get-prompt-request.handler.d.ts +5 -15
- package/src/transport/mcp-handlers/index.d.ts +67 -195
- package/src/transport/mcp-handlers/list-prompts-request.handler.d.ts +5 -15
- package/src/transport/mcp-handlers/list-resource-templates-request.handler.d.ts +5 -15
- package/src/transport/mcp-handlers/list-resources-request.handler.d.ts +5 -15
- package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +5 -15
- package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +3 -14
- package/src/transport/mcp-handlers/read-resource-request.handler.d.ts +4 -15
- package/src/transport/mcp-handlers/subscribe-request.handler.d.ts +3 -14
- package/src/transport/mcp-handlers/unsubscribe-request.handler.d.ts +3 -14
- package/src/transport/transport.registry.d.ts +5 -1
- package/src/transport/transport.registry.js +52 -23
- package/src/transport/transport.registry.js.map +1 -1
|
@@ -3,34 +3,23 @@ import { McpHandlerOptions } from './mcp-handlers.types';
|
|
|
3
3
|
export default function ListPromptsRequestHandler({ scope }: McpHandlerOptions): {
|
|
4
4
|
requestSchema: import("zod").ZodObject<{
|
|
5
5
|
params: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
6
|
-
task: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
7
|
-
ttl: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodNumber, import("zod").ZodNull]>>;
|
|
8
|
-
pollInterval: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
9
|
-
}, import("zod/v4/core").$loose>>;
|
|
10
6
|
_meta: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
11
7
|
progressToken: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>;
|
|
12
8
|
"io.modelcontextprotocol/related-task": import("zod").ZodOptional<import("zod").ZodObject<{
|
|
13
9
|
taskId: import("zod").ZodString;
|
|
14
|
-
}, import("zod/v4/core").$
|
|
10
|
+
}, import("zod/v4/core").$strip>>;
|
|
15
11
|
}, import("zod/v4/core").$loose>>;
|
|
16
12
|
cursor: import("zod").ZodOptional<import("zod").ZodString>;
|
|
17
|
-
}, import("zod/v4/core").$
|
|
13
|
+
}, import("zod/v4/core").$strip>>;
|
|
18
14
|
method: import("zod").ZodLiteral<"prompts/list">;
|
|
19
15
|
}, import("zod/v4/core").$strip>;
|
|
20
16
|
handler: (request: ListPromptsRequest, ctx: import("./mcp-handlers.types").McpRequestHandler<{
|
|
21
17
|
method: "prompts/list";
|
|
22
18
|
params?: {
|
|
23
|
-
[x: string]: unknown;
|
|
24
|
-
task?: {
|
|
25
|
-
[x: string]: unknown;
|
|
26
|
-
ttl?: number | null | undefined;
|
|
27
|
-
pollInterval?: number | undefined;
|
|
28
|
-
} | undefined;
|
|
29
19
|
_meta?: {
|
|
30
20
|
[x: string]: unknown;
|
|
31
21
|
progressToken?: string | number | undefined;
|
|
32
22
|
"io.modelcontextprotocol/related-task"?: {
|
|
33
|
-
[x: string]: unknown;
|
|
34
23
|
taskId: string;
|
|
35
24
|
} | undefined;
|
|
36
25
|
} | undefined;
|
|
@@ -42,8 +31,8 @@ export default function ListPromptsRequestHandler({ scope }: McpHandlerOptions):
|
|
|
42
31
|
[x: string]: unknown;
|
|
43
32
|
_meta?: {
|
|
44
33
|
[x: string]: unknown;
|
|
34
|
+
progressToken?: string | number | undefined;
|
|
45
35
|
"io.modelcontextprotocol/related-task"?: {
|
|
46
|
-
[x: string]: unknown;
|
|
47
36
|
taskId: string;
|
|
48
37
|
} | undefined;
|
|
49
38
|
} | undefined;
|
|
@@ -65,13 +54,14 @@ export default function ListPromptsRequestHandler({ scope }: McpHandlerOptions):
|
|
|
65
54
|
src: string;
|
|
66
55
|
mimeType?: string | undefined;
|
|
67
56
|
sizes?: string[] | undefined;
|
|
57
|
+
theme?: "light" | "dark" | undefined;
|
|
68
58
|
}[] | undefined;
|
|
69
59
|
title?: string | undefined;
|
|
70
60
|
}[];
|
|
71
61
|
_meta?: {
|
|
72
62
|
[x: string]: unknown;
|
|
63
|
+
progressToken?: string | number | undefined;
|
|
73
64
|
"io.modelcontextprotocol/related-task"?: {
|
|
74
|
-
[x: string]: unknown;
|
|
75
65
|
taskId: string;
|
|
76
66
|
} | undefined;
|
|
77
67
|
} | undefined;
|
|
@@ -3,34 +3,23 @@ import { McpHandlerOptions } from './mcp-handlers.types';
|
|
|
3
3
|
export default function listResourceTemplatesRequestHandler({ scope }: McpHandlerOptions): {
|
|
4
4
|
requestSchema: import("zod").ZodObject<{
|
|
5
5
|
params: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
6
|
-
task: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
7
|
-
ttl: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodNumber, import("zod").ZodNull]>>;
|
|
8
|
-
pollInterval: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
9
|
-
}, import("zod/v4/core").$loose>>;
|
|
10
6
|
_meta: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
11
7
|
progressToken: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>;
|
|
12
8
|
"io.modelcontextprotocol/related-task": import("zod").ZodOptional<import("zod").ZodObject<{
|
|
13
9
|
taskId: import("zod").ZodString;
|
|
14
|
-
}, import("zod/v4/core").$
|
|
10
|
+
}, import("zod/v4/core").$strip>>;
|
|
15
11
|
}, import("zod/v4/core").$loose>>;
|
|
16
12
|
cursor: import("zod").ZodOptional<import("zod").ZodString>;
|
|
17
|
-
}, import("zod/v4/core").$
|
|
13
|
+
}, import("zod/v4/core").$strip>>;
|
|
18
14
|
method: import("zod").ZodLiteral<"resources/templates/list">;
|
|
19
15
|
}, import("zod/v4/core").$strip>;
|
|
20
16
|
handler: (request: ListResourceTemplatesRequest, ctx: import("./mcp-handlers.types").McpRequestHandler<{
|
|
21
17
|
method: "resources/templates/list";
|
|
22
18
|
params?: {
|
|
23
|
-
[x: string]: unknown;
|
|
24
|
-
task?: {
|
|
25
|
-
[x: string]: unknown;
|
|
26
|
-
ttl?: number | null | undefined;
|
|
27
|
-
pollInterval?: number | undefined;
|
|
28
|
-
} | undefined;
|
|
29
19
|
_meta?: {
|
|
30
20
|
[x: string]: unknown;
|
|
31
21
|
progressToken?: string | number | undefined;
|
|
32
22
|
"io.modelcontextprotocol/related-task"?: {
|
|
33
|
-
[x: string]: unknown;
|
|
34
23
|
taskId: string;
|
|
35
24
|
} | undefined;
|
|
36
25
|
} | undefined;
|
|
@@ -42,8 +31,8 @@ export default function listResourceTemplatesRequestHandler({ scope }: McpHandle
|
|
|
42
31
|
[x: string]: unknown;
|
|
43
32
|
_meta?: {
|
|
44
33
|
[x: string]: unknown;
|
|
34
|
+
progressToken?: string | number | undefined;
|
|
45
35
|
"io.modelcontextprotocol/related-task"?: {
|
|
46
|
-
[x: string]: unknown;
|
|
47
36
|
taskId: string;
|
|
48
37
|
} | undefined;
|
|
49
38
|
} | undefined;
|
|
@@ -67,13 +56,14 @@ export default function listResourceTemplatesRequestHandler({ scope }: McpHandle
|
|
|
67
56
|
src: string;
|
|
68
57
|
mimeType?: string | undefined;
|
|
69
58
|
sizes?: string[] | undefined;
|
|
59
|
+
theme?: "light" | "dark" | undefined;
|
|
70
60
|
}[] | undefined;
|
|
71
61
|
title?: string | undefined;
|
|
72
62
|
}[];
|
|
73
63
|
_meta?: {
|
|
74
64
|
[x: string]: unknown;
|
|
65
|
+
progressToken?: string | number | undefined;
|
|
75
66
|
"io.modelcontextprotocol/related-task"?: {
|
|
76
|
-
[x: string]: unknown;
|
|
77
67
|
taskId: string;
|
|
78
68
|
} | undefined;
|
|
79
69
|
} | undefined;
|
|
@@ -3,34 +3,23 @@ import { McpHandlerOptions } from './mcp-handlers.types';
|
|
|
3
3
|
export default function listResourcesRequestHandler({ scope }: McpHandlerOptions): {
|
|
4
4
|
requestSchema: import("zod").ZodObject<{
|
|
5
5
|
params: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
6
|
-
task: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
7
|
-
ttl: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodNumber, import("zod").ZodNull]>>;
|
|
8
|
-
pollInterval: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
9
|
-
}, import("zod/v4/core").$loose>>;
|
|
10
6
|
_meta: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
11
7
|
progressToken: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>;
|
|
12
8
|
"io.modelcontextprotocol/related-task": import("zod").ZodOptional<import("zod").ZodObject<{
|
|
13
9
|
taskId: import("zod").ZodString;
|
|
14
|
-
}, import("zod/v4/core").$
|
|
10
|
+
}, import("zod/v4/core").$strip>>;
|
|
15
11
|
}, import("zod/v4/core").$loose>>;
|
|
16
12
|
cursor: import("zod").ZodOptional<import("zod").ZodString>;
|
|
17
|
-
}, import("zod/v4/core").$
|
|
13
|
+
}, import("zod/v4/core").$strip>>;
|
|
18
14
|
method: import("zod").ZodLiteral<"resources/list">;
|
|
19
15
|
}, import("zod/v4/core").$strip>;
|
|
20
16
|
handler: (request: ListResourcesRequest, ctx: import("./mcp-handlers.types").McpRequestHandler<{
|
|
21
17
|
method: "resources/list";
|
|
22
18
|
params?: {
|
|
23
|
-
[x: string]: unknown;
|
|
24
|
-
task?: {
|
|
25
|
-
[x: string]: unknown;
|
|
26
|
-
ttl?: number | null | undefined;
|
|
27
|
-
pollInterval?: number | undefined;
|
|
28
|
-
} | undefined;
|
|
29
19
|
_meta?: {
|
|
30
20
|
[x: string]: unknown;
|
|
31
21
|
progressToken?: string | number | undefined;
|
|
32
22
|
"io.modelcontextprotocol/related-task"?: {
|
|
33
|
-
[x: string]: unknown;
|
|
34
23
|
taskId: string;
|
|
35
24
|
} | undefined;
|
|
36
25
|
} | undefined;
|
|
@@ -42,8 +31,8 @@ export default function listResourcesRequestHandler({ scope }: McpHandlerOptions
|
|
|
42
31
|
[x: string]: unknown;
|
|
43
32
|
_meta?: {
|
|
44
33
|
[x: string]: unknown;
|
|
34
|
+
progressToken?: string | number | undefined;
|
|
45
35
|
"io.modelcontextprotocol/related-task"?: {
|
|
46
|
-
[x: string]: unknown;
|
|
47
36
|
taskId: string;
|
|
48
37
|
} | undefined;
|
|
49
38
|
} | undefined;
|
|
@@ -67,13 +56,14 @@ export default function listResourcesRequestHandler({ scope }: McpHandlerOptions
|
|
|
67
56
|
src: string;
|
|
68
57
|
mimeType?: string | undefined;
|
|
69
58
|
sizes?: string[] | undefined;
|
|
59
|
+
theme?: "light" | "dark" | undefined;
|
|
70
60
|
}[] | undefined;
|
|
71
61
|
title?: string | undefined;
|
|
72
62
|
}[];
|
|
73
63
|
_meta?: {
|
|
74
64
|
[x: string]: unknown;
|
|
65
|
+
progressToken?: string | number | undefined;
|
|
75
66
|
"io.modelcontextprotocol/related-task"?: {
|
|
76
|
-
[x: string]: unknown;
|
|
77
67
|
taskId: string;
|
|
78
68
|
} | undefined;
|
|
79
69
|
} | undefined;
|
|
@@ -3,34 +3,23 @@ import { McpHandlerOptions } from './mcp-handlers.types';
|
|
|
3
3
|
export default function ListToolsRequestHandler({ scope, }: McpHandlerOptions): {
|
|
4
4
|
requestSchema: import("zod").ZodObject<{
|
|
5
5
|
params: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
6
|
-
task: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
7
|
-
ttl: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodNumber, import("zod").ZodNull]>>;
|
|
8
|
-
pollInterval: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
9
|
-
}, import("zod/v4/core").$loose>>;
|
|
10
6
|
_meta: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
11
7
|
progressToken: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>;
|
|
12
8
|
"io.modelcontextprotocol/related-task": import("zod").ZodOptional<import("zod").ZodObject<{
|
|
13
9
|
taskId: import("zod").ZodString;
|
|
14
|
-
}, import("zod/v4/core").$
|
|
10
|
+
}, import("zod/v4/core").$strip>>;
|
|
15
11
|
}, import("zod/v4/core").$loose>>;
|
|
16
12
|
cursor: import("zod").ZodOptional<import("zod").ZodString>;
|
|
17
|
-
}, import("zod/v4/core").$
|
|
13
|
+
}, import("zod/v4/core").$strip>>;
|
|
18
14
|
method: import("zod").ZodLiteral<"tools/list">;
|
|
19
15
|
}, import("zod/v4/core").$strip>;
|
|
20
16
|
handler: (request: ListToolsRequest, ctx: import("./mcp-handlers.types").McpRequestHandler<{
|
|
21
17
|
method: "tools/list";
|
|
22
18
|
params?: {
|
|
23
|
-
[x: string]: unknown;
|
|
24
|
-
task?: {
|
|
25
|
-
[x: string]: unknown;
|
|
26
|
-
ttl?: number | null | undefined;
|
|
27
|
-
pollInterval?: number | undefined;
|
|
28
|
-
} | undefined;
|
|
29
19
|
_meta?: {
|
|
30
20
|
[x: string]: unknown;
|
|
31
21
|
progressToken?: string | number | undefined;
|
|
32
22
|
"io.modelcontextprotocol/related-task"?: {
|
|
33
|
-
[x: string]: unknown;
|
|
34
23
|
taskId: string;
|
|
35
24
|
} | undefined;
|
|
36
25
|
} | undefined;
|
|
@@ -42,8 +31,8 @@ export default function ListToolsRequestHandler({ scope, }: McpHandlerOptions):
|
|
|
42
31
|
[x: string]: unknown;
|
|
43
32
|
_meta?: {
|
|
44
33
|
[x: string]: unknown;
|
|
34
|
+
progressToken?: string | number | undefined;
|
|
45
35
|
"io.modelcontextprotocol/related-task"?: {
|
|
46
|
-
[x: string]: unknown;
|
|
47
36
|
taskId: string;
|
|
48
37
|
} | undefined;
|
|
49
38
|
} | undefined;
|
|
@@ -80,13 +69,14 @@ export default function ListToolsRequestHandler({ scope, }: McpHandlerOptions):
|
|
|
80
69
|
src: string;
|
|
81
70
|
mimeType?: string | undefined;
|
|
82
71
|
sizes?: string[] | undefined;
|
|
72
|
+
theme?: "light" | "dark" | undefined;
|
|
83
73
|
}[] | undefined;
|
|
84
74
|
title?: string | undefined;
|
|
85
75
|
}[];
|
|
86
76
|
_meta?: {
|
|
87
77
|
[x: string]: unknown;
|
|
78
|
+
progressToken?: string | number | undefined;
|
|
88
79
|
"io.modelcontextprotocol/related-task"?: {
|
|
89
|
-
[x: string]: unknown;
|
|
90
80
|
taskId: string;
|
|
91
81
|
} | undefined;
|
|
92
82
|
} | undefined;
|
|
@@ -9,15 +9,11 @@ export default function LoggingSetLevelRequestHandler({ scope }: McpHandlerOptio
|
|
|
9
9
|
requestSchema: import("zod").ZodObject<{
|
|
10
10
|
method: import("zod").ZodLiteral<"logging/setLevel">;
|
|
11
11
|
params: import("zod").ZodObject<{
|
|
12
|
-
task: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
13
|
-
ttl: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodNumber, import("zod").ZodNull]>>;
|
|
14
|
-
pollInterval: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
15
|
-
}, import("zod/v4/core").$loose>>;
|
|
16
12
|
_meta: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
17
13
|
progressToken: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>;
|
|
18
14
|
"io.modelcontextprotocol/related-task": import("zod").ZodOptional<import("zod").ZodObject<{
|
|
19
15
|
taskId: import("zod").ZodString;
|
|
20
|
-
}, import("zod/v4/core").$
|
|
16
|
+
}, import("zod/v4/core").$strip>>;
|
|
21
17
|
}, import("zod/v4/core").$loose>>;
|
|
22
18
|
level: import("zod").ZodEnum<{
|
|
23
19
|
error: "error";
|
|
@@ -29,23 +25,16 @@ export default function LoggingSetLevelRequestHandler({ scope }: McpHandlerOptio
|
|
|
29
25
|
alert: "alert";
|
|
30
26
|
emergency: "emergency";
|
|
31
27
|
}>;
|
|
32
|
-
}, import("zod/v4/core").$
|
|
28
|
+
}, import("zod/v4/core").$strip>;
|
|
33
29
|
}, import("zod/v4/core").$strip>;
|
|
34
30
|
handler: (request: SetLevelRequest, ctx: import("./mcp-handlers.types").McpRequestHandler<{
|
|
35
31
|
method: "logging/setLevel";
|
|
36
32
|
params: {
|
|
37
|
-
[x: string]: unknown;
|
|
38
33
|
level: "error" | "debug" | "info" | "warning" | "notice" | "critical" | "alert" | "emergency";
|
|
39
|
-
task?: {
|
|
40
|
-
[x: string]: unknown;
|
|
41
|
-
ttl?: number | null | undefined;
|
|
42
|
-
pollInterval?: number | undefined;
|
|
43
|
-
} | undefined;
|
|
44
34
|
_meta?: {
|
|
45
35
|
[x: string]: unknown;
|
|
46
36
|
progressToken?: string | number | undefined;
|
|
47
37
|
"io.modelcontextprotocol/related-task"?: {
|
|
48
|
-
[x: string]: unknown;
|
|
49
38
|
taskId: string;
|
|
50
39
|
} | undefined;
|
|
51
40
|
} | undefined;
|
|
@@ -56,8 +45,8 @@ export default function LoggingSetLevelRequestHandler({ scope }: McpHandlerOptio
|
|
|
56
45
|
[x: string]: unknown;
|
|
57
46
|
_meta?: {
|
|
58
47
|
[x: string]: unknown;
|
|
48
|
+
progressToken?: string | number | undefined;
|
|
59
49
|
"io.modelcontextprotocol/related-task"?: {
|
|
60
|
-
[x: string]: unknown;
|
|
61
50
|
taskId: string;
|
|
62
51
|
} | undefined;
|
|
63
52
|
} | undefined;
|
|
@@ -4,34 +4,23 @@ export default function readResourceRequestHandler({ scope }: McpHandlerOptions)
|
|
|
4
4
|
requestSchema: import("zod").ZodObject<{
|
|
5
5
|
method: import("zod").ZodLiteral<"resources/read">;
|
|
6
6
|
params: import("zod").ZodObject<{
|
|
7
|
-
task: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
8
|
-
ttl: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodNumber, import("zod").ZodNull]>>;
|
|
9
|
-
pollInterval: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
10
|
-
}, import("zod/v4/core").$loose>>;
|
|
11
7
|
_meta: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
12
8
|
progressToken: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>;
|
|
13
9
|
"io.modelcontextprotocol/related-task": import("zod").ZodOptional<import("zod").ZodObject<{
|
|
14
10
|
taskId: import("zod").ZodString;
|
|
15
|
-
}, import("zod/v4/core").$
|
|
11
|
+
}, import("zod/v4/core").$strip>>;
|
|
16
12
|
}, import("zod/v4/core").$loose>>;
|
|
17
13
|
uri: import("zod").ZodString;
|
|
18
|
-
}, import("zod/v4/core").$
|
|
14
|
+
}, import("zod/v4/core").$strip>;
|
|
19
15
|
}, import("zod/v4/core").$strip>;
|
|
20
16
|
handler: (request: ReadResourceRequest, ctx: import("./mcp-handlers.types").McpRequestHandler<{
|
|
21
17
|
method: "resources/read";
|
|
22
18
|
params: {
|
|
23
|
-
[x: string]: unknown;
|
|
24
19
|
uri: string;
|
|
25
|
-
task?: {
|
|
26
|
-
[x: string]: unknown;
|
|
27
|
-
ttl?: number | null | undefined;
|
|
28
|
-
pollInterval?: number | undefined;
|
|
29
|
-
} | undefined;
|
|
30
20
|
_meta?: {
|
|
31
21
|
[x: string]: unknown;
|
|
32
22
|
progressToken?: string | number | undefined;
|
|
33
23
|
"io.modelcontextprotocol/related-task"?: {
|
|
34
|
-
[x: string]: unknown;
|
|
35
24
|
taskId: string;
|
|
36
25
|
} | undefined;
|
|
37
26
|
} | undefined;
|
|
@@ -42,8 +31,8 @@ export default function readResourceRequestHandler({ scope }: McpHandlerOptions)
|
|
|
42
31
|
[x: string]: unknown;
|
|
43
32
|
_meta?: {
|
|
44
33
|
[x: string]: unknown;
|
|
34
|
+
progressToken?: string | number | undefined;
|
|
45
35
|
"io.modelcontextprotocol/related-task"?: {
|
|
46
|
-
[x: string]: unknown;
|
|
47
36
|
taskId: string;
|
|
48
37
|
} | undefined;
|
|
49
38
|
} | undefined;
|
|
@@ -63,8 +52,8 @@ export default function readResourceRequestHandler({ scope }: McpHandlerOptions)
|
|
|
63
52
|
})[];
|
|
64
53
|
_meta?: {
|
|
65
54
|
[x: string]: unknown;
|
|
55
|
+
progressToken?: string | number | undefined;
|
|
66
56
|
"io.modelcontextprotocol/related-task"?: {
|
|
67
|
-
[x: string]: unknown;
|
|
68
57
|
taskId: string;
|
|
69
58
|
} | undefined;
|
|
70
59
|
} | undefined;
|
|
@@ -9,34 +9,23 @@ export default function SubscribeRequestHandler({ scope }: McpHandlerOptions): {
|
|
|
9
9
|
requestSchema: import("zod").ZodObject<{
|
|
10
10
|
method: import("zod").ZodLiteral<"resources/subscribe">;
|
|
11
11
|
params: import("zod").ZodObject<{
|
|
12
|
-
task: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
13
|
-
ttl: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodNumber, import("zod").ZodNull]>>;
|
|
14
|
-
pollInterval: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
15
|
-
}, import("zod/v4/core").$loose>>;
|
|
16
12
|
_meta: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
17
13
|
progressToken: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>;
|
|
18
14
|
"io.modelcontextprotocol/related-task": import("zod").ZodOptional<import("zod").ZodObject<{
|
|
19
15
|
taskId: import("zod").ZodString;
|
|
20
|
-
}, import("zod/v4/core").$
|
|
16
|
+
}, import("zod/v4/core").$strip>>;
|
|
21
17
|
}, import("zod/v4/core").$loose>>;
|
|
22
18
|
uri: import("zod").ZodString;
|
|
23
|
-
}, import("zod/v4/core").$
|
|
19
|
+
}, import("zod/v4/core").$strip>;
|
|
24
20
|
}, import("zod/v4/core").$strip>;
|
|
25
21
|
handler: (request: SubscribeRequest, ctx: import("./mcp-handlers.types").McpRequestHandler<{
|
|
26
22
|
method: "resources/subscribe";
|
|
27
23
|
params: {
|
|
28
|
-
[x: string]: unknown;
|
|
29
24
|
uri: string;
|
|
30
|
-
task?: {
|
|
31
|
-
[x: string]: unknown;
|
|
32
|
-
ttl?: number | null | undefined;
|
|
33
|
-
pollInterval?: number | undefined;
|
|
34
|
-
} | undefined;
|
|
35
25
|
_meta?: {
|
|
36
26
|
[x: string]: unknown;
|
|
37
27
|
progressToken?: string | number | undefined;
|
|
38
28
|
"io.modelcontextprotocol/related-task"?: {
|
|
39
|
-
[x: string]: unknown;
|
|
40
29
|
taskId: string;
|
|
41
30
|
} | undefined;
|
|
42
31
|
} | undefined;
|
|
@@ -47,8 +36,8 @@ export default function SubscribeRequestHandler({ scope }: McpHandlerOptions): {
|
|
|
47
36
|
[x: string]: unknown;
|
|
48
37
|
_meta?: {
|
|
49
38
|
[x: string]: unknown;
|
|
39
|
+
progressToken?: string | number | undefined;
|
|
50
40
|
"io.modelcontextprotocol/related-task"?: {
|
|
51
|
-
[x: string]: unknown;
|
|
52
41
|
taskId: string;
|
|
53
42
|
} | undefined;
|
|
54
43
|
} | undefined;
|
|
@@ -9,34 +9,23 @@ export default function UnsubscribeRequestHandler({ scope }: McpHandlerOptions):
|
|
|
9
9
|
requestSchema: import("zod").ZodObject<{
|
|
10
10
|
method: import("zod").ZodLiteral<"resources/unsubscribe">;
|
|
11
11
|
params: import("zod").ZodObject<{
|
|
12
|
-
task: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
13
|
-
ttl: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodNumber, import("zod").ZodNull]>>;
|
|
14
|
-
pollInterval: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
15
|
-
}, import("zod/v4/core").$loose>>;
|
|
16
12
|
_meta: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
17
13
|
progressToken: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>;
|
|
18
14
|
"io.modelcontextprotocol/related-task": import("zod").ZodOptional<import("zod").ZodObject<{
|
|
19
15
|
taskId: import("zod").ZodString;
|
|
20
|
-
}, import("zod/v4/core").$
|
|
16
|
+
}, import("zod/v4/core").$strip>>;
|
|
21
17
|
}, import("zod/v4/core").$loose>>;
|
|
22
18
|
uri: import("zod").ZodString;
|
|
23
|
-
}, import("zod/v4/core").$
|
|
19
|
+
}, import("zod/v4/core").$strip>;
|
|
24
20
|
}, import("zod/v4/core").$strip>;
|
|
25
21
|
handler: (request: UnsubscribeRequest, ctx: import("./mcp-handlers.types").McpRequestHandler<{
|
|
26
22
|
method: "resources/unsubscribe";
|
|
27
23
|
params: {
|
|
28
|
-
[x: string]: unknown;
|
|
29
24
|
uri: string;
|
|
30
|
-
task?: {
|
|
31
|
-
[x: string]: unknown;
|
|
32
|
-
ttl?: number | null | undefined;
|
|
33
|
-
pollInterval?: number | undefined;
|
|
34
|
-
} | undefined;
|
|
35
25
|
_meta?: {
|
|
36
26
|
[x: string]: unknown;
|
|
37
27
|
progressToken?: string | number | undefined;
|
|
38
28
|
"io.modelcontextprotocol/related-task"?: {
|
|
39
|
-
[x: string]: unknown;
|
|
40
29
|
taskId: string;
|
|
41
30
|
} | undefined;
|
|
42
31
|
} | undefined;
|
|
@@ -47,8 +36,8 @@ export default function UnsubscribeRequestHandler({ scope }: McpHandlerOptions):
|
|
|
47
36
|
[x: string]: unknown;
|
|
48
37
|
_meta?: {
|
|
49
38
|
[x: string]: unknown;
|
|
39
|
+
progressToken?: string | number | undefined;
|
|
50
40
|
"io.modelcontextprotocol/related-task"?: {
|
|
51
|
-
[x: string]: unknown;
|
|
52
41
|
taskId: string;
|
|
53
42
|
} | undefined;
|
|
54
43
|
} | undefined;
|
|
@@ -19,7 +19,7 @@ export declare class TransportService {
|
|
|
19
19
|
private readonly sessionHistory;
|
|
20
20
|
private readonly MAX_SESSION_HISTORY;
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Session store for transport persistence (Redis or Vercel KV)
|
|
23
23
|
* Used to persist session metadata across server restarts
|
|
24
24
|
*/
|
|
25
25
|
private sessionStore?;
|
|
@@ -27,6 +27,10 @@ export declare class TransportService {
|
|
|
27
27
|
* Transport persistence configuration
|
|
28
28
|
*/
|
|
29
29
|
private persistenceConfig?;
|
|
30
|
+
/**
|
|
31
|
+
* Pending store configuration for async initialization
|
|
32
|
+
*/
|
|
33
|
+
private pendingStoreConfig?;
|
|
30
34
|
/**
|
|
31
35
|
* Mutex map for preventing concurrent transport creation for the same key.
|
|
32
36
|
* Key: JSON-encoded {t: type, h: tokenHash, s: sessionId}, Value: Promise that resolves when creation completes
|
|
@@ -9,7 +9,7 @@ const transport_local_1 = require("./transport.local");
|
|
|
9
9
|
const handle_streamable_http_flow_1 = tslib_1.__importDefault(require("./flows/handle.streamable-http.flow"));
|
|
10
10
|
const handle_sse_flow_1 = tslib_1.__importDefault(require("./flows/handle.sse.flow"));
|
|
11
11
|
const handle_stateless_http_flow_1 = tslib_1.__importDefault(require("./flows/handle.stateless-http.flow"));
|
|
12
|
-
const
|
|
12
|
+
const store_1 = require("../store");
|
|
13
13
|
const authorization_class_1 = require("../auth/authorization/authorization.class");
|
|
14
14
|
class TransportService {
|
|
15
15
|
ready;
|
|
@@ -28,7 +28,7 @@ class TransportService {
|
|
|
28
28
|
sessionHistory = new Map();
|
|
29
29
|
MAX_SESSION_HISTORY = 10000;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Session store for transport persistence (Redis or Vercel KV)
|
|
32
32
|
* Used to persist session metadata across server restarts
|
|
33
33
|
*/
|
|
34
34
|
sessionStore;
|
|
@@ -36,6 +36,10 @@ class TransportService {
|
|
|
36
36
|
* Transport persistence configuration
|
|
37
37
|
*/
|
|
38
38
|
persistenceConfig;
|
|
39
|
+
/**
|
|
40
|
+
* Pending store configuration for async initialization
|
|
41
|
+
*/
|
|
42
|
+
pendingStoreConfig;
|
|
39
43
|
/**
|
|
40
44
|
* Mutex map for preventing concurrent transport creation for the same key.
|
|
41
45
|
* Key: JSON-encoded {t: type, h: tokenHash, s: sessionId}, Value: Promise that resolves when creation completes
|
|
@@ -49,45 +53,70 @@ class TransportService {
|
|
|
49
53
|
if (this.distributed && !this.bus) {
|
|
50
54
|
throw new Error('TransportRegistry: distributed=true requires a TransportBus implementation.');
|
|
51
55
|
}
|
|
52
|
-
// Initialize
|
|
56
|
+
// Initialize session store if persistence is enabled (Redis or Vercel KV)
|
|
53
57
|
if (persistenceConfig?.enabled && persistenceConfig.redis) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
keyPrefix: persistenceConfig.redis.keyPrefix ?? 'mcp:transport:',
|
|
58
|
+
// Use factory to create appropriate session store based on provider
|
|
59
|
+
const redisConfig = persistenceConfig.redis;
|
|
60
|
+
const providerType = 'provider' in redisConfig ? redisConfig.provider : 'redis';
|
|
61
|
+
// Override keyPrefix for transport persistence (separate from auth sessions)
|
|
62
|
+
// Cast to RedisOptions since we're modifying the config
|
|
63
|
+
this.pendingStoreConfig = {
|
|
64
|
+
...redisConfig,
|
|
65
|
+
keyPrefix: redisConfig.keyPrefix ?? 'mcp:transport:',
|
|
63
66
|
defaultTtlMs: persistenceConfig.defaultTtlMs ?? 3600000, // 1 hour default
|
|
64
|
-
}
|
|
65
|
-
this.scope.logger.info(
|
|
67
|
+
};
|
|
68
|
+
this.scope.logger.info(`[TransportService] ${providerType} session store will be initialized for transport persistence`);
|
|
66
69
|
}
|
|
67
70
|
this.ready = this.initialize();
|
|
68
71
|
}
|
|
69
72
|
async initialize() {
|
|
70
|
-
//
|
|
73
|
+
// Create session store if configuration is pending
|
|
74
|
+
if (this.pendingStoreConfig) {
|
|
75
|
+
try {
|
|
76
|
+
const store = await (0, store_1.createSessionStore)(this.pendingStoreConfig, this.scope.logger.child('SessionStore'));
|
|
77
|
+
// Cast to our extended type (both RedisSessionStore and VercelKvSessionStore have ping/disconnect)
|
|
78
|
+
this.sessionStore = store;
|
|
79
|
+
this.pendingStoreConfig = undefined;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
this.scope.logger.error('[TransportService] Failed to create session store - session persistence disabled', {
|
|
83
|
+
error: error.message,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Validate connection if session store is configured
|
|
71
88
|
if (this.sessionStore) {
|
|
72
|
-
const isConnected = await this.sessionStore.ping();
|
|
89
|
+
const isConnected = this.sessionStore.ping ? await this.sessionStore.ping() : true;
|
|
73
90
|
if (!isConnected) {
|
|
74
|
-
|
|
91
|
+
const providerType = this.persistenceConfig?.redis && 'provider' in this.persistenceConfig.redis
|
|
92
|
+
? this.persistenceConfig.redis.provider
|
|
93
|
+
: 'redis';
|
|
94
|
+
this.scope.logger.error(`[TransportService] Failed to connect to ${providerType} - session persistence disabled`);
|
|
75
95
|
// Nullify sessionStore to prevent silent failures on all subsequent operations
|
|
76
96
|
// This ensures clean graceful degradation - sessions will only persist in memory
|
|
77
|
-
|
|
97
|
+
if (this.sessionStore.disconnect) {
|
|
98
|
+
await this.sessionStore.disconnect().catch(() => void 0);
|
|
99
|
+
}
|
|
78
100
|
this.sessionStore = undefined;
|
|
79
101
|
}
|
|
80
102
|
else {
|
|
81
|
-
this.scope.logger.info('[TransportService]
|
|
103
|
+
this.scope.logger.info('[TransportService] Session store connection validated successfully');
|
|
82
104
|
}
|
|
83
105
|
}
|
|
84
106
|
await this.scope.registryFlows(handle_streamable_http_flow_1.default, handle_sse_flow_1.default, handle_stateless_http_flow_1.default);
|
|
85
107
|
}
|
|
86
108
|
async destroy() {
|
|
87
|
-
// Close
|
|
88
|
-
if (this.sessionStore) {
|
|
89
|
-
|
|
90
|
-
|
|
109
|
+
// Close session store connection if it was created
|
|
110
|
+
if (this.sessionStore && this.sessionStore.disconnect) {
|
|
111
|
+
try {
|
|
112
|
+
await this.sessionStore.disconnect();
|
|
113
|
+
this.scope.logger.info('[TransportService] Session store disconnected');
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
this.scope.logger.warn('[TransportService] Error disconnecting session store', {
|
|
117
|
+
error: error.message,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
91
120
|
}
|
|
92
121
|
}
|
|
93
122
|
async getTransporter(type, token, sessionId) {
|