@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.
Files changed (96) hide show
  1. package/README.md +1 -0
  2. package/package.json +13 -6
  3. package/src/auth/session/index.d.ts +1 -0
  4. package/src/auth/session/index.js +3 -1
  5. package/src/auth/session/index.js.map +1 -1
  6. package/src/auth/session/vercel-kv-session.store.d.ts +96 -0
  7. package/src/auth/session/vercel-kv-session.store.js +216 -0
  8. package/src/auth/session/vercel-kv-session.store.js.map +1 -0
  9. package/src/common/decorators/front-mcp.decorator.js +14 -17
  10. package/src/common/decorators/front-mcp.decorator.js.map +1 -1
  11. package/src/common/metadata/front-mcp.metadata.d.ts +705 -23
  12. package/src/common/metadata/front-mcp.metadata.js +1 -0
  13. package/src/common/metadata/front-mcp.metadata.js.map +1 -1
  14. package/src/common/metadata/prompt.metadata.d.ts +4 -0
  15. package/src/common/metadata/resource.metadata.d.ts +8 -0
  16. package/src/common/metadata/tool-ui.metadata.d.ts +2 -2
  17. package/src/common/metadata/tool-ui.metadata.js +1 -1
  18. package/src/common/metadata/tool-ui.metadata.js.map +1 -1
  19. package/src/common/metadata/tool.metadata.d.ts +4 -0
  20. package/src/common/schemas/http-output.schema.d.ts +24 -6
  21. package/src/common/tokens/front-mcp.tokens.js +1 -0
  22. package/src/common/tokens/front-mcp.tokens.js.map +1 -1
  23. package/src/common/types/options/redis.options.d.ts +173 -5
  24. package/src/common/types/options/redis.options.js +157 -11
  25. package/src/common/types/options/redis.options.js.map +1 -1
  26. package/src/common/types/options/server-info.options.d.ts +4 -0
  27. package/src/common/types/options/transport.options.d.ts +68 -4
  28. package/src/common/utils/global-config.utils.d.ts +36 -0
  29. package/src/common/utils/global-config.utils.js +44 -0
  30. package/src/common/utils/global-config.utils.js.map +1 -0
  31. package/src/common/utils/index.d.ts +1 -0
  32. package/src/common/utils/index.js +1 -0
  33. package/src/common/utils/index.js.map +1 -1
  34. package/src/completion/flows/complete.flow.d.ts +6 -8
  35. package/src/errors/index.d.ts +1 -1
  36. package/src/errors/index.js +2 -1
  37. package/src/errors/index.js.map +1 -1
  38. package/src/errors/mcp.error.d.ts +9 -0
  39. package/src/errors/mcp.error.js +19 -1
  40. package/src/errors/mcp.error.js.map +1 -1
  41. package/src/front-mcp/front-mcp.providers.d.ts +208 -0
  42. package/src/front-mcp/index.d.ts +1 -0
  43. package/src/front-mcp/index.js +3 -0
  44. package/src/front-mcp/index.js.map +1 -1
  45. package/src/index.d.ts +1 -1
  46. package/src/index.js +2 -1
  47. package/src/index.js.map +1 -1
  48. package/src/logging/flows/set-level.flow.d.ts +6 -8
  49. package/src/prompt/flows/get-prompt.flow.d.ts +14 -8
  50. package/src/prompt/flows/prompts-list.flow.d.ts +8 -7
  51. package/src/resource/flows/read-resource.flow.d.ts +8 -9
  52. package/src/resource/flows/resource-templates-list.flow.d.ts +8 -7
  53. package/src/resource/flows/resources-list.flow.d.ts +8 -7
  54. package/src/resource/flows/subscribe-resource.flow.d.ts +6 -8
  55. package/src/resource/flows/unsubscribe-resource.flow.d.ts +6 -8
  56. package/src/store/adapters/store.vercel-kv.adapter.d.ts +86 -0
  57. package/src/store/adapters/store.vercel-kv.adapter.js +155 -0
  58. package/src/store/adapters/store.vercel-kv.adapter.js.map +1 -0
  59. package/src/store/index.d.ts +2 -0
  60. package/src/store/index.js +2 -0
  61. package/src/store/index.js.map +1 -1
  62. package/src/store/store.factory.d.ts +86 -0
  63. package/src/store/store.factory.js +194 -0
  64. package/src/store/store.factory.js.map +1 -0
  65. package/src/tool/flows/call-tool.flow.d.ts +18 -9
  66. package/src/tool/flows/call-tool.flow.js +2 -2
  67. package/src/tool/flows/call-tool.flow.js.map +1 -1
  68. package/src/tool/flows/tools-list.flow.d.ts +9 -8
  69. package/src/tool/flows/tools-list.flow.js +2 -2
  70. package/src/tool/flows/tools-list.flow.js.map +1 -1
  71. package/src/tool/ui/index.d.ts +4 -4
  72. package/src/tool/ui/index.js +4 -4
  73. package/src/tool/ui/index.js.map +1 -1
  74. package/src/tool/ui/platform-adapters.d.ts +2 -2
  75. package/src/tool/ui/platform-adapters.js +3 -3
  76. package/src/tool/ui/platform-adapters.js.map +1 -1
  77. package/src/tool/ui/template-helpers.d.ts +5 -7
  78. package/src/tool/ui/template-helpers.js +9 -26
  79. package/src/tool/ui/template-helpers.js.map +1 -1
  80. package/src/tool/ui/ui-resource.handler.d.ts +1 -1
  81. package/src/tool/ui/ui-resource.handler.js +5 -5
  82. package/src/tool/ui/ui-resource.handler.js.map +1 -1
  83. package/src/transport/mcp-handlers/complete-request.handler.d.ts +4 -15
  84. package/src/transport/mcp-handlers/get-prompt-request.handler.d.ts +5 -15
  85. package/src/transport/mcp-handlers/index.d.ts +67 -195
  86. package/src/transport/mcp-handlers/list-prompts-request.handler.d.ts +5 -15
  87. package/src/transport/mcp-handlers/list-resource-templates-request.handler.d.ts +5 -15
  88. package/src/transport/mcp-handlers/list-resources-request.handler.d.ts +5 -15
  89. package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +5 -15
  90. package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +3 -14
  91. package/src/transport/mcp-handlers/read-resource-request.handler.d.ts +4 -15
  92. package/src/transport/mcp-handlers/subscribe-request.handler.d.ts +3 -14
  93. package/src/transport/mcp-handlers/unsubscribe-request.handler.d.ts +3 -14
  94. package/src/transport/transport.registry.d.ts +5 -1
  95. package/src/transport/transport.registry.js +52 -23
  96. 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").$loose>>;
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").$loose>>;
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").$loose>>;
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").$loose>>;
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").$loose>>;
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").$loose>>;
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").$loose>>;
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").$loose>>;
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").$loose>>;
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").$loose>;
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").$loose>>;
11
+ }, import("zod/v4/core").$strip>>;
16
12
  }, import("zod/v4/core").$loose>>;
17
13
  uri: import("zod").ZodString;
18
- }, import("zod/v4/core").$loose>;
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").$loose>>;
16
+ }, import("zod/v4/core").$strip>>;
21
17
  }, import("zod/v4/core").$loose>>;
22
18
  uri: import("zod").ZodString;
23
- }, import("zod/v4/core").$loose>;
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").$loose>>;
16
+ }, import("zod/v4/core").$strip>>;
21
17
  }, import("zod/v4/core").$loose>>;
22
18
  uri: import("zod").ZodString;
23
- }, import("zod/v4/core").$loose>;
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
- * Redis session store for transport persistence
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 session_1 = require("../auth/session");
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
- * Redis session store for transport persistence
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 Redis session store if persistence is enabled
56
+ // Initialize session store if persistence is enabled (Redis or Vercel KV)
53
57
  if (persistenceConfig?.enabled && persistenceConfig.redis) {
54
- this.sessionStore = new session_1.RedisSessionStore({
55
- host: persistenceConfig.redis.host,
56
- port: persistenceConfig.redis.port,
57
- password: persistenceConfig.redis.password,
58
- db: persistenceConfig.redis.db,
59
- tls: persistenceConfig.redis.tls,
60
- // Note: Uses 'mcp:transport:' prefix (not 'mcp:session:') to separate transport
61
- // persistence data from authentication session data in the auth module
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
- }, this.scope.logger.child('RedisSessionStore'));
65
- this.scope.logger.info('[TransportService] Redis session store initialized for transport persistence');
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
- // Validate Redis connection if session store is configured
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
- this.scope.logger.error('[TransportService] Failed to connect to Redis - session persistence disabled');
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
- await this.sessionStore.disconnect().catch(() => void 0);
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] Redis connection validated successfully');
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 Redis connection if it was created
88
- if (this.sessionStore) {
89
- await this.sessionStore.disconnect();
90
- this.scope.logger.info('[TransportService] Redis session store disconnected');
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) {