mcp-server-framework 1.0.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/CHANGELOG.md +174 -0
- package/LICENSE-GPL.md +219 -0
- package/LICENSE.md +187 -0
- package/README.md +439 -0
- package/build/config/config-cache.d.ts +120 -0
- package/build/config/config-cache.d.ts.map +1 -0
- package/build/config/config-cache.js +310 -0
- package/build/config/config-cache.js.map +1 -0
- package/build/config/env.d.ts +476 -0
- package/build/config/env.d.ts.map +1 -0
- package/build/config/env.js +441 -0
- package/build/config/env.js.map +1 -0
- package/build/config/extensions.d.ts +107 -0
- package/build/config/extensions.d.ts.map +1 -0
- package/build/config/extensions.js +152 -0
- package/build/config/extensions.js.map +1 -0
- package/build/config/file/index.d.ts +8 -0
- package/build/config/file/index.d.ts.map +1 -0
- package/build/config/file/index.js +10 -0
- package/build/config/file/index.js.map +1 -0
- package/build/config/file/loader.d.ts +31 -0
- package/build/config/file/loader.d.ts.map +1 -0
- package/build/config/file/loader.js +313 -0
- package/build/config/file/loader.js.map +1 -0
- package/build/config/file/schema.d.ts +583 -0
- package/build/config/file/schema.d.ts.map +1 -0
- package/build/config/file/schema.js +388 -0
- package/build/config/file/schema.js.map +1 -0
- package/build/config/index.d.ts +15 -0
- package/build/config/index.d.ts.map +1 -0
- package/build/config/index.js +27 -0
- package/build/config/index.js.map +1 -0
- package/build/config/startup-warnings.d.ts +46 -0
- package/build/config/startup-warnings.d.ts.map +1 -0
- package/build/config/startup-warnings.js +61 -0
- package/build/config/startup-warnings.js.map +1 -0
- package/build/connection/connection-state.d.ts +196 -0
- package/build/connection/connection-state.d.ts.map +1 -0
- package/build/connection/connection-state.js +426 -0
- package/build/connection/connection-state.js.map +1 -0
- package/build/connection/core/base.d.ts +43 -0
- package/build/connection/core/base.d.ts.map +1 -0
- package/build/connection/core/base.js +82 -0
- package/build/connection/core/base.js.map +1 -0
- package/build/connection/core/constants.d.ts +121 -0
- package/build/connection/core/constants.d.ts.map +1 -0
- package/build/connection/core/constants.js +151 -0
- package/build/connection/core/constants.js.map +1 -0
- package/build/connection/core/index.d.ts +13 -0
- package/build/connection/core/index.d.ts.map +1 -0
- package/build/connection/core/index.js +14 -0
- package/build/connection/core/index.js.map +1 -0
- package/build/connection/core/types.d.ts +102 -0
- package/build/connection/core/types.d.ts.map +1 -0
- package/build/connection/core/types.js +31 -0
- package/build/connection/core/types.js.map +1 -0
- package/build/connection/index.d.ts +19 -0
- package/build/connection/index.d.ts.map +1 -0
- package/build/connection/index.js +22 -0
- package/build/connection/index.js.map +1 -0
- package/build/connection/types.d.ts +125 -0
- package/build/connection/types.d.ts.map +1 -0
- package/build/connection/types.js +39 -0
- package/build/connection/types.js.map +1 -0
- package/build/errors/categories/auth.d.ts +59 -0
- package/build/errors/categories/auth.d.ts.map +1 -0
- package/build/errors/categories/auth.js +111 -0
- package/build/errors/categories/auth.js.map +1 -0
- package/build/errors/categories/connection.d.ts +70 -0
- package/build/errors/categories/connection.d.ts.map +1 -0
- package/build/errors/categories/connection.js +120 -0
- package/build/errors/categories/connection.js.map +1 -0
- package/build/errors/categories/index.d.ts +14 -0
- package/build/errors/categories/index.d.ts.map +1 -0
- package/build/errors/categories/index.js +20 -0
- package/build/errors/categories/index.js.map +1 -0
- package/build/errors/categories/operation.d.ts +83 -0
- package/build/errors/categories/operation.d.ts.map +1 -0
- package/build/errors/categories/operation.js +149 -0
- package/build/errors/categories/operation.js.map +1 -0
- package/build/errors/categories/protocol.d.ts +68 -0
- package/build/errors/categories/protocol.d.ts.map +1 -0
- package/build/errors/categories/protocol.js +135 -0
- package/build/errors/categories/protocol.js.map +1 -0
- package/build/errors/categories/session.d.ts +50 -0
- package/build/errors/categories/session.d.ts.map +1 -0
- package/build/errors/categories/session.js +97 -0
- package/build/errors/categories/session.js.map +1 -0
- package/build/errors/categories/system.d.ts +95 -0
- package/build/errors/categories/system.d.ts.map +1 -0
- package/build/errors/categories/system.js +190 -0
- package/build/errors/categories/system.js.map +1 -0
- package/build/errors/categories/transport.d.ts +70 -0
- package/build/errors/categories/transport.d.ts.map +1 -0
- package/build/errors/categories/transport.js +148 -0
- package/build/errors/categories/transport.js.map +1 -0
- package/build/errors/categories/validation.d.ts +140 -0
- package/build/errors/categories/validation.d.ts.map +1 -0
- package/build/errors/categories/validation.js +311 -0
- package/build/errors/categories/validation.js.map +1 -0
- package/build/errors/core/base.d.ts +103 -0
- package/build/errors/core/base.d.ts.map +1 -0
- package/build/errors/core/base.js +219 -0
- package/build/errors/core/base.js.map +1 -0
- package/build/errors/core/constants.d.ts +40 -0
- package/build/errors/core/constants.d.ts.map +1 -0
- package/build/errors/core/constants.js +49 -0
- package/build/errors/core/constants.js.map +1 -0
- package/build/errors/core/error-codes.d.ts +72 -0
- package/build/errors/core/error-codes.d.ts.map +1 -0
- package/build/errors/core/error-codes.js +88 -0
- package/build/errors/core/error-codes.js.map +1 -0
- package/build/errors/core/http.d.ts +69 -0
- package/build/errors/core/http.d.ts.map +1 -0
- package/build/errors/core/http.js +106 -0
- package/build/errors/core/http.js.map +1 -0
- package/build/errors/core/index.d.ts +23 -0
- package/build/errors/core/index.d.ts.map +1 -0
- package/build/errors/core/index.js +41 -0
- package/build/errors/core/index.js.map +1 -0
- package/build/errors/core/json-rpc.d.ts +69 -0
- package/build/errors/core/json-rpc.d.ts.map +1 -0
- package/build/errors/core/json-rpc.js +79 -0
- package/build/errors/core/json-rpc.js.map +1 -0
- package/build/errors/core/messages.d.ts +51 -0
- package/build/errors/core/messages.d.ts.map +1 -0
- package/build/errors/core/messages.js +59 -0
- package/build/errors/core/messages.js.map +1 -0
- package/build/errors/core/types.d.ts +80 -0
- package/build/errors/core/types.d.ts.map +1 -0
- package/build/errors/core/types.js +10 -0
- package/build/errors/core/types.js.map +1 -0
- package/build/errors/factory.d.ts +199 -0
- package/build/errors/factory.d.ts.map +1 -0
- package/build/errors/factory.js +244 -0
- package/build/errors/factory.js.map +1 -0
- package/build/errors/index.d.ts +35 -0
- package/build/errors/index.d.ts.map +1 -0
- package/build/errors/index.js +67 -0
- package/build/errors/index.js.map +1 -0
- package/build/index.d.ts +93 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +107 -0
- package/build/index.js.map +1 -0
- package/build/logger/core/constants.d.ts +143 -0
- package/build/logger/core/constants.d.ts.map +1 -0
- package/build/logger/core/constants.js +206 -0
- package/build/logger/core/constants.js.map +1 -0
- package/build/logger/core/context.d.ts +170 -0
- package/build/logger/core/context.d.ts.map +1 -0
- package/build/logger/core/context.js +237 -0
- package/build/logger/core/context.js.map +1 -0
- package/build/logger/core/errors.d.ts +101 -0
- package/build/logger/core/errors.d.ts.map +1 -0
- package/build/logger/core/errors.js +128 -0
- package/build/logger/core/errors.js.map +1 -0
- package/build/logger/core/format.d.ts +40 -0
- package/build/logger/core/format.d.ts.map +1 -0
- package/build/logger/core/format.js +47 -0
- package/build/logger/core/format.js.map +1 -0
- package/build/logger/core/index.d.ts +19 -0
- package/build/logger/core/index.d.ts.map +1 -0
- package/build/logger/core/index.js +47 -0
- package/build/logger/core/index.js.map +1 -0
- package/build/logger/core/trace-context.d.ts +51 -0
- package/build/logger/core/trace-context.d.ts.map +1 -0
- package/build/logger/core/trace-context.js +42 -0
- package/build/logger/core/trace-context.js.map +1 -0
- package/build/logger/core/types.d.ts +233 -0
- package/build/logger/core/types.d.ts.map +1 -0
- package/build/logger/core/types.js +10 -0
- package/build/logger/core/types.js.map +1 -0
- package/build/logger/factory.d.ts +150 -0
- package/build/logger/factory.d.ts.map +1 -0
- package/build/logger/factory.js +236 -0
- package/build/logger/factory.js.map +1 -0
- package/build/logger/formatters/index.d.ts +12 -0
- package/build/logger/formatters/index.d.ts.map +1 -0
- package/build/logger/formatters/index.js +15 -0
- package/build/logger/formatters/index.js.map +1 -0
- package/build/logger/formatters/json-formatter.d.ts +54 -0
- package/build/logger/formatters/json-formatter.d.ts.map +1 -0
- package/build/logger/formatters/json-formatter.js +80 -0
- package/build/logger/formatters/json-formatter.js.map +1 -0
- package/build/logger/formatters/schema.d.ts +230 -0
- package/build/logger/formatters/schema.d.ts.map +1 -0
- package/build/logger/formatters/schema.js +278 -0
- package/build/logger/formatters/schema.js.map +1 -0
- package/build/logger/formatters/text-formatter.d.ts +50 -0
- package/build/logger/formatters/text-formatter.d.ts.map +1 -0
- package/build/logger/formatters/text-formatter.js +93 -0
- package/build/logger/formatters/text-formatter.js.map +1 -0
- package/build/logger/index.d.ts +39 -0
- package/build/logger/index.d.ts.map +1 -0
- package/build/logger/index.js +43 -0
- package/build/logger/index.js.map +1 -0
- package/build/logger/logger.d.ts +278 -0
- package/build/logger/logger.d.ts.map +1 -0
- package/build/logger/logger.js +459 -0
- package/build/logger/logger.js.map +1 -0
- package/build/logger/mcp-logger.d.ts +177 -0
- package/build/logger/mcp-logger.d.ts.map +1 -0
- package/build/logger/mcp-logger.js +294 -0
- package/build/logger/mcp-logger.js.map +1 -0
- package/build/logger/scrubbing/index.d.ts +14 -0
- package/build/logger/scrubbing/index.d.ts.map +1 -0
- package/build/logger/scrubbing/index.js +16 -0
- package/build/logger/scrubbing/index.js.map +1 -0
- package/build/logger/scrubbing/injection-guard.d.ts +69 -0
- package/build/logger/scrubbing/injection-guard.d.ts.map +1 -0
- package/build/logger/scrubbing/injection-guard.js +102 -0
- package/build/logger/scrubbing/injection-guard.js.map +1 -0
- package/build/logger/scrubbing/secret-scrubber.d.ts +72 -0
- package/build/logger/scrubbing/secret-scrubber.d.ts.map +1 -0
- package/build/logger/scrubbing/secret-scrubber.js +177 -0
- package/build/logger/scrubbing/secret-scrubber.js.map +1 -0
- package/build/logger/writers/base-writer.d.ts +45 -0
- package/build/logger/writers/base-writer.d.ts.map +1 -0
- package/build/logger/writers/base-writer.js +41 -0
- package/build/logger/writers/base-writer.js.map +1 -0
- package/build/logger/writers/composite-writer.d.ts +83 -0
- package/build/logger/writers/composite-writer.d.ts.map +1 -0
- package/build/logger/writers/composite-writer.js +121 -0
- package/build/logger/writers/composite-writer.js.map +1 -0
- package/build/logger/writers/console-writer.d.ts +59 -0
- package/build/logger/writers/console-writer.d.ts.map +1 -0
- package/build/logger/writers/console-writer.js +73 -0
- package/build/logger/writers/console-writer.js.map +1 -0
- package/build/logger/writers/file-writer.d.ts +160 -0
- package/build/logger/writers/file-writer.d.ts.map +1 -0
- package/build/logger/writers/file-writer.js +345 -0
- package/build/logger/writers/file-writer.js.map +1 -0
- package/build/logger/writers/index.d.ts +15 -0
- package/build/logger/writers/index.d.ts.map +1 -0
- package/build/logger/writers/index.js +19 -0
- package/build/logger/writers/index.js.map +1 -0
- package/build/mcp/capabilities/apps/define-app.d.ts +68 -0
- package/build/mcp/capabilities/apps/define-app.d.ts.map +1 -0
- package/build/mcp/capabilities/apps/define-app.js +127 -0
- package/build/mcp/capabilities/apps/define-app.js.map +1 -0
- package/build/mcp/capabilities/apps/index.d.ts +10 -0
- package/build/mcp/capabilities/apps/index.d.ts.map +1 -0
- package/build/mcp/capabilities/apps/index.js +10 -0
- package/build/mcp/capabilities/apps/index.js.map +1 -0
- package/build/mcp/capabilities/capabilities.d.ts +24 -0
- package/build/mcp/capabilities/capabilities.d.ts.map +1 -0
- package/build/mcp/capabilities/capabilities.js +50 -0
- package/build/mcp/capabilities/capabilities.js.map +1 -0
- package/build/mcp/capabilities/index.d.ts +17 -0
- package/build/mcp/capabilities/index.d.ts.map +1 -0
- package/build/mcp/capabilities/index.js +20 -0
- package/build/mcp/capabilities/index.js.map +1 -0
- package/build/mcp/capabilities/prompts/define-prompt.d.ts +95 -0
- package/build/mcp/capabilities/prompts/define-prompt.d.ts.map +1 -0
- package/build/mcp/capabilities/prompts/define-prompt.js +109 -0
- package/build/mcp/capabilities/prompts/define-prompt.js.map +1 -0
- package/build/mcp/capabilities/prompts/index.d.ts +10 -0
- package/build/mcp/capabilities/prompts/index.d.ts.map +1 -0
- package/build/mcp/capabilities/prompts/index.js +10 -0
- package/build/mcp/capabilities/prompts/index.js.map +1 -0
- package/build/mcp/capabilities/registry/base-registry.d.ts +95 -0
- package/build/mcp/capabilities/registry/base-registry.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/base-registry.js +149 -0
- package/build/mcp/capabilities/registry/base-registry.js.map +1 -0
- package/build/mcp/capabilities/registry/index.d.ts +16 -0
- package/build/mcp/capabilities/registry/index.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/index.js +34 -0
- package/build/mcp/capabilities/registry/index.js.map +1 -0
- package/build/mcp/capabilities/registry/prompt-registry.d.ts +116 -0
- package/build/mcp/capabilities/registry/prompt-registry.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/prompt-registry.js +232 -0
- package/build/mcp/capabilities/registry/prompt-registry.js.map +1 -0
- package/build/mcp/capabilities/registry/reset.d.ts +30 -0
- package/build/mcp/capabilities/registry/reset.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/reset.js +48 -0
- package/build/mcp/capabilities/registry/reset.js.map +1 -0
- package/build/mcp/capabilities/registry/resource-registry.d.ts +152 -0
- package/build/mcp/capabilities/registry/resource-registry.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/resource-registry.js +430 -0
- package/build/mcp/capabilities/registry/resource-registry.js.map +1 -0
- package/build/mcp/capabilities/registry/scope-enforcement.d.ts +48 -0
- package/build/mcp/capabilities/registry/scope-enforcement.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/scope-enforcement.js +62 -0
- package/build/mcp/capabilities/registry/scope-enforcement.js.map +1 -0
- package/build/mcp/capabilities/registry/task-tool-registry.d.ts +96 -0
- package/build/mcp/capabilities/registry/task-tool-registry.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/task-tool-registry.js +190 -0
- package/build/mcp/capabilities/registry/task-tool-registry.js.map +1 -0
- package/build/mcp/capabilities/registry/tool-registry.d.ts +100 -0
- package/build/mcp/capabilities/registry/tool-registry.d.ts.map +1 -0
- package/build/mcp/capabilities/registry/tool-registry.js +242 -0
- package/build/mcp/capabilities/registry/tool-registry.js.map +1 -0
- package/build/mcp/capabilities/resources/define-resource.d.ts +103 -0
- package/build/mcp/capabilities/resources/define-resource.d.ts.map +1 -0
- package/build/mcp/capabilities/resources/define-resource.js +137 -0
- package/build/mcp/capabilities/resources/define-resource.js.map +1 -0
- package/build/mcp/capabilities/resources/index.d.ts +10 -0
- package/build/mcp/capabilities/resources/index.d.ts.map +1 -0
- package/build/mcp/capabilities/resources/index.js +10 -0
- package/build/mcp/capabilities/resources/index.js.map +1 -0
- package/build/mcp/capabilities/server-capabilities.d.ts +33 -0
- package/build/mcp/capabilities/server-capabilities.d.ts.map +1 -0
- package/build/mcp/capabilities/server-capabilities.js +16 -0
- package/build/mcp/capabilities/server-capabilities.js.map +1 -0
- package/build/mcp/capabilities/tasks/define-task.d.ts +75 -0
- package/build/mcp/capabilities/tasks/define-task.d.ts.map +1 -0
- package/build/mcp/capabilities/tasks/define-task.js +93 -0
- package/build/mcp/capabilities/tasks/define-task.js.map +1 -0
- package/build/mcp/capabilities/tasks/index.d.ts +11 -0
- package/build/mcp/capabilities/tasks/index.d.ts.map +1 -0
- package/build/mcp/capabilities/tasks/index.js +11 -0
- package/build/mcp/capabilities/tasks/index.js.map +1 -0
- package/build/mcp/capabilities/tools/define-tool.d.ts +62 -0
- package/build/mcp/capabilities/tools/define-tool.d.ts.map +1 -0
- package/build/mcp/capabilities/tools/define-tool.js +73 -0
- package/build/mcp/capabilities/tools/define-tool.js.map +1 -0
- package/build/mcp/capabilities/tools/index.d.ts +10 -0
- package/build/mcp/capabilities/tools/index.d.ts.map +1 -0
- package/build/mcp/capabilities/tools/index.js +10 -0
- package/build/mcp/capabilities/tools/index.js.map +1 -0
- package/build/mcp/handlers/index.d.ts +19 -0
- package/build/mcp/handlers/index.d.ts.map +1 -0
- package/build/mcp/handlers/index.js +26 -0
- package/build/mcp/handlers/index.js.map +1 -0
- package/build/mcp/handlers/ping.d.ts +27 -0
- package/build/mcp/handlers/ping.d.ts.map +1 -0
- package/build/mcp/handlers/ping.js +61 -0
- package/build/mcp/handlers/ping.js.map +1 -0
- package/build/mcp/handlers/progress.d.ts +41 -0
- package/build/mcp/handlers/progress.d.ts.map +1 -0
- package/build/mcp/handlers/progress.js +79 -0
- package/build/mcp/handlers/progress.js.map +1 -0
- package/build/mcp/index.d.ts +28 -0
- package/build/mcp/index.d.ts.map +1 -0
- package/build/mcp/index.js +34 -0
- package/build/mcp/index.js.map +1 -0
- package/build/mcp/responses/helpers.d.ts +146 -0
- package/build/mcp/responses/helpers.d.ts.map +1 -0
- package/build/mcp/responses/helpers.js +197 -0
- package/build/mcp/responses/helpers.js.map +1 -0
- package/build/mcp/responses/index.d.ts +9 -0
- package/build/mcp/responses/index.d.ts.map +1 -0
- package/build/mcp/responses/index.js +12 -0
- package/build/mcp/responses/index.js.map +1 -0
- package/build/mcp/types/context.d.ts +371 -0
- package/build/mcp/types/context.d.ts.map +1 -0
- package/build/mcp/types/context.js +17 -0
- package/build/mcp/types/context.js.map +1 -0
- package/build/mcp/types/definition.d.ts +727 -0
- package/build/mcp/types/definition.d.ts.map +1 -0
- package/build/mcp/types/definition.js +29 -0
- package/build/mcp/types/definition.js.map +1 -0
- package/build/mcp/types/handler.d.ts +58 -0
- package/build/mcp/types/handler.d.ts.map +1 -0
- package/build/mcp/types/handler.js +10 -0
- package/build/mcp/types/handler.js.map +1 -0
- package/build/mcp/types/index.d.ts +21 -0
- package/build/mcp/types/index.d.ts.map +1 -0
- package/build/mcp/types/index.js +18 -0
- package/build/mcp/types/index.js.map +1 -0
- package/build/mcp/types/response.d.ts +79 -0
- package/build/mcp/types/response.d.ts.map +1 -0
- package/build/mcp/types/response.js +10 -0
- package/build/mcp/types/response.js.map +1 -0
- package/build/server/auth/auth-context.d.ts +52 -0
- package/build/server/auth/auth-context.d.ts.map +1 -0
- package/build/server/auth/auth-context.js +45 -0
- package/build/server/auth/auth-context.js.map +1 -0
- package/build/server/auth/guards.d.ts +72 -0
- package/build/server/auth/guards.d.ts.map +1 -0
- package/build/server/auth/guards.js +103 -0
- package/build/server/auth/guards.js.map +1 -0
- package/build/server/auth/index.d.ts +21 -0
- package/build/server/auth/index.d.ts.map +1 -0
- package/build/server/auth/index.js +20 -0
- package/build/server/auth/index.js.map +1 -0
- package/build/server/auth/oidc-discovery.d.ts +68 -0
- package/build/server/auth/oidc-discovery.d.ts.map +1 -0
- package/build/server/auth/oidc-discovery.js +234 -0
- package/build/server/auth/oidc-discovery.js.map +1 -0
- package/build/server/auth/oidc-provider.d.ts +96 -0
- package/build/server/auth/oidc-provider.d.ts.map +1 -0
- package/build/server/auth/oidc-provider.js +126 -0
- package/build/server/auth/oidc-provider.js.map +1 -0
- package/build/server/auth/types.d.ts +204 -0
- package/build/server/auth/types.d.ts.map +1 -0
- package/build/server/auth/types.js +29 -0
- package/build/server/auth/types.js.map +1 -0
- package/build/server/auth/upstream-provider.d.ts +161 -0
- package/build/server/auth/upstream-provider.d.ts.map +1 -0
- package/build/server/auth/upstream-provider.js +411 -0
- package/build/server/auth/upstream-provider.js.map +1 -0
- package/build/server/builder/constants.d.ts +45 -0
- package/build/server/builder/constants.d.ts.map +1 -0
- package/build/server/builder/constants.js +54 -0
- package/build/server/builder/constants.js.map +1 -0
- package/build/server/builder/index.d.ts +24 -0
- package/build/server/builder/index.d.ts.map +1 -0
- package/build/server/builder/index.js +25 -0
- package/build/server/builder/index.js.map +1 -0
- package/build/server/builder/primitive-collector.d.ts +24 -0
- package/build/server/builder/primitive-collector.d.ts.map +1 -0
- package/build/server/builder/primitive-collector.js +89 -0
- package/build/server/builder/primitive-collector.js.map +1 -0
- package/build/server/builder/server-builder.d.ts +53 -0
- package/build/server/builder/server-builder.d.ts.map +1 -0
- package/build/server/builder/server-builder.js +132 -0
- package/build/server/builder/server-builder.js.map +1 -0
- package/build/server/builder/types.d.ts +93 -0
- package/build/server/builder/types.d.ts.map +1 -0
- package/build/server/builder/types.js +25 -0
- package/build/server/builder/types.js.map +1 -0
- package/build/server/builder/validation.d.ts +36 -0
- package/build/server/builder/validation.d.ts.map +1 -0
- package/build/server/builder/validation.js +44 -0
- package/build/server/builder/validation.js.map +1 -0
- package/build/server/create-server.d.ts +57 -0
- package/build/server/create-server.d.ts.map +1 -0
- package/build/server/create-server.js +104 -0
- package/build/server/create-server.js.map +1 -0
- package/build/server/http/express-app.d.ts +103 -0
- package/build/server/http/express-app.d.ts.map +1 -0
- package/build/server/http/express-app.js +391 -0
- package/build/server/http/express-app.js.map +1 -0
- package/build/server/http/http-server.d.ts +67 -0
- package/build/server/http/http-server.d.ts.map +1 -0
- package/build/server/http/http-server.js +188 -0
- package/build/server/http/http-server.js.map +1 -0
- package/build/server/http/http-transport.d.ts +33 -0
- package/build/server/http/http-transport.d.ts.map +1 -0
- package/build/server/http/http-transport.js +84 -0
- package/build/server/http/http-transport.js.map +1 -0
- package/build/server/http/index.d.ts +15 -0
- package/build/server/http/index.d.ts.map +1 -0
- package/build/server/http/index.js +11 -0
- package/build/server/http/index.js.map +1 -0
- package/build/server/index.d.ts +25 -0
- package/build/server/index.d.ts.map +1 -0
- package/build/server/index.js +41 -0
- package/build/server/index.js.map +1 -0
- package/build/server/lifecycle.d.ts +114 -0
- package/build/server/lifecycle.d.ts.map +1 -0
- package/build/server/lifecycle.js +30 -0
- package/build/server/lifecycle.js.map +1 -0
- package/build/server/middleware/bearer-auth.d.ts +43 -0
- package/build/server/middleware/bearer-auth.d.ts.map +1 -0
- package/build/server/middleware/bearer-auth.js +75 -0
- package/build/server/middleware/bearer-auth.js.map +1 -0
- package/build/server/middleware/custom-header-auth.d.ts +40 -0
- package/build/server/middleware/custom-header-auth.d.ts.map +1 -0
- package/build/server/middleware/custom-header-auth.js +90 -0
- package/build/server/middleware/custom-header-auth.js.map +1 -0
- package/build/server/middleware/dns-rebinding.d.ts +25 -0
- package/build/server/middleware/dns-rebinding.d.ts.map +1 -0
- package/build/server/middleware/dns-rebinding.js +94 -0
- package/build/server/middleware/dns-rebinding.js.map +1 -0
- package/build/server/middleware/index.d.ts +69 -0
- package/build/server/middleware/index.d.ts.map +1 -0
- package/build/server/middleware/index.js +68 -0
- package/build/server/middleware/index.js.map +1 -0
- package/build/server/middleware/logging.d.ts +21 -0
- package/build/server/middleware/logging.d.ts.map +1 -0
- package/build/server/middleware/logging.js +36 -0
- package/build/server/middleware/logging.js.map +1 -0
- package/build/server/middleware/oauth-router.d.ts +50 -0
- package/build/server/middleware/oauth-router.d.ts.map +1 -0
- package/build/server/middleware/oauth-router.js +53 -0
- package/build/server/middleware/oauth-router.js.map +1 -0
- package/build/server/middleware/protocol-version.d.ts +13 -0
- package/build/server/middleware/protocol-version.d.ts.map +1 -0
- package/build/server/middleware/protocol-version.js +48 -0
- package/build/server/middleware/protocol-version.js.map +1 -0
- package/build/server/middleware/rate-limit.d.ts +47 -0
- package/build/server/middleware/rate-limit.d.ts.map +1 -0
- package/build/server/middleware/rate-limit.js +109 -0
- package/build/server/middleware/rate-limit.js.map +1 -0
- package/build/server/middleware/trust-proxy.d.ts +37 -0
- package/build/server/middleware/trust-proxy.d.ts.map +1 -0
- package/build/server/middleware/trust-proxy.js +154 -0
- package/build/server/middleware/trust-proxy.js.map +1 -0
- package/build/server/option-overrides.d.ts +25 -0
- package/build/server/option-overrides.d.ts.map +1 -0
- package/build/server/option-overrides.js +85 -0
- package/build/server/option-overrides.js.map +1 -0
- package/build/server/routes/health.d.ts +87 -0
- package/build/server/routes/health.d.ts.map +1 -0
- package/build/server/routes/health.js +183 -0
- package/build/server/routes/health.js.map +1 -0
- package/build/server/routes/index.d.ts +16 -0
- package/build/server/routes/index.d.ts.map +1 -0
- package/build/server/routes/index.js +18 -0
- package/build/server/routes/index.js.map +1 -0
- package/build/server/routes/metrics.d.ts +40 -0
- package/build/server/routes/metrics.d.ts.map +1 -0
- package/build/server/routes/metrics.js +81 -0
- package/build/server/routes/metrics.js.map +1 -0
- package/build/server/routes/oauth-router.d.ts +50 -0
- package/build/server/routes/oauth-router.d.ts.map +1 -0
- package/build/server/routes/oauth-router.js +53 -0
- package/build/server/routes/oauth-router.js.map +1 -0
- package/build/server/routes/readiness-status.d.ts +25 -0
- package/build/server/routes/readiness-status.d.ts.map +1 -0
- package/build/server/routes/readiness-status.js +27 -0
- package/build/server/routes/readiness-status.js.map +1 -0
- package/build/server/routes/sse-router.d.ts +43 -0
- package/build/server/routes/sse-router.d.ts.map +1 -0
- package/build/server/routes/sse-router.js +92 -0
- package/build/server/routes/sse-router.js.map +1 -0
- package/build/server/routes/streamable-http-router.d.ts +36 -0
- package/build/server/routes/streamable-http-router.d.ts.map +1 -0
- package/build/server/routes/streamable-http-router.js +59 -0
- package/build/server/routes/streamable-http-router.js.map +1 -0
- package/build/server/server-instance.d.ts +185 -0
- package/build/server/server-instance.d.ts.map +1 -0
- package/build/server/server-instance.js +615 -0
- package/build/server/server-instance.js.map +1 -0
- package/build/server/server-options.d.ts +411 -0
- package/build/server/server-options.d.ts.map +1 -0
- package/build/server/server-options.js +17 -0
- package/build/server/server-options.js.map +1 -0
- package/build/server/session/in-memory-store.d.ts +128 -0
- package/build/server/session/in-memory-store.d.ts.map +1 -0
- package/build/server/session/in-memory-store.js +312 -0
- package/build/server/session/in-memory-store.js.map +1 -0
- package/build/server/session/index.d.ts +43 -0
- package/build/server/session/index.d.ts.map +1 -0
- package/build/server/session/index.js +47 -0
- package/build/server/session/index.js.map +1 -0
- package/build/server/session/mcp-session.d.ts +210 -0
- package/build/server/session/mcp-session.d.ts.map +1 -0
- package/build/server/session/mcp-session.js +428 -0
- package/build/server/session/mcp-session.js.map +1 -0
- package/build/server/session/session-factory.d.ts +119 -0
- package/build/server/session/session-factory.d.ts.map +1 -0
- package/build/server/session/session-factory.js +131 -0
- package/build/server/session/session-factory.js.map +1 -0
- package/build/server/session/session-housekeeper.d.ts +100 -0
- package/build/server/session/session-housekeeper.d.ts.map +1 -0
- package/build/server/session/session-housekeeper.js +217 -0
- package/build/server/session/session-housekeeper.js.map +1 -0
- package/build/server/session/session-manager.d.ts +227 -0
- package/build/server/session/session-manager.d.ts.map +1 -0
- package/build/server/session/session-manager.js +282 -0
- package/build/server/session/session-manager.js.map +1 -0
- package/build/server/session/session-store.d.ts +95 -0
- package/build/server/session/session-store.d.ts.map +1 -0
- package/build/server/session/session-store.js +13 -0
- package/build/server/session/session-store.js.map +1 -0
- package/build/server/session/session.d.ts +132 -0
- package/build/server/session/session.d.ts.map +1 -0
- package/build/server/session/session.js +61 -0
- package/build/server/session/session.js.map +1 -0
- package/build/server/transport/constants.d.ts +85 -0
- package/build/server/transport/constants.d.ts.map +1 -0
- package/build/server/transport/constants.js +103 -0
- package/build/server/transport/constants.js.map +1 -0
- package/build/server/transport/index.d.ts +21 -0
- package/build/server/transport/index.d.ts.map +1 -0
- package/build/server/transport/index.js +28 -0
- package/build/server/transport/index.js.map +1 -0
- package/build/server/transport/sse/handler.d.ts +46 -0
- package/build/server/transport/sse/handler.d.ts.map +1 -0
- package/build/server/transport/sse/handler.js +189 -0
- package/build/server/transport/sse/handler.js.map +1 -0
- package/build/server/transport/sse/index.d.ts +15 -0
- package/build/server/transport/sse/index.d.ts.map +1 -0
- package/build/server/transport/sse/index.js +14 -0
- package/build/server/transport/sse/index.js.map +1 -0
- package/build/server/transport/sse/transport.d.ts +94 -0
- package/build/server/transport/sse/transport.d.ts.map +1 -0
- package/build/server/transport/sse/transport.js +175 -0
- package/build/server/transport/sse/transport.js.map +1 -0
- package/build/server/transport/stdio-transport.d.ts +23 -0
- package/build/server/transport/stdio-transport.d.ts.map +1 -0
- package/build/server/transport/stdio-transport.js +59 -0
- package/build/server/transport/stdio-transport.js.map +1 -0
- package/build/server/transport/streamable-http/index.d.ts +9 -0
- package/build/server/transport/streamable-http/index.d.ts.map +1 -0
- package/build/server/transport/streamable-http/index.js +9 -0
- package/build/server/transport/streamable-http/index.js.map +1 -0
- package/build/server/transport/streamable-http/stateful-handler.d.ts +41 -0
- package/build/server/transport/streamable-http/stateful-handler.d.ts.map +1 -0
- package/build/server/transport/streamable-http/stateful-handler.js +264 -0
- package/build/server/transport/streamable-http/stateful-handler.js.map +1 -0
- package/build/server/transport/streamable-http/stateless-handler.d.ts +28 -0
- package/build/server/transport/streamable-http/stateless-handler.d.ts.map +1 -0
- package/build/server/transport/streamable-http/stateless-handler.js +81 -0
- package/build/server/transport/streamable-http/stateless-handler.js.map +1 -0
- package/build/server/transport/streamable-http/transport.d.ts +110 -0
- package/build/server/transport/streamable-http/transport.d.ts.map +1 -0
- package/build/server/transport/streamable-http/transport.js +118 -0
- package/build/server/transport/streamable-http/transport.js.map +1 -0
- package/build/server/transport/transport-context.d.ts +67 -0
- package/build/server/transport/transport-context.d.ts.map +1 -0
- package/build/server/transport/transport-context.js +38 -0
- package/build/server/transport/transport-context.js.map +1 -0
- package/build/server/transport/types.d.ts +56 -0
- package/build/server/transport/types.d.ts.map +1 -0
- package/build/server/transport/types.js +11 -0
- package/build/server/transport/types.js.map +1 -0
- package/build/server/transport-options.d.ts +248 -0
- package/build/server/transport-options.d.ts.map +1 -0
- package/build/server/transport-options.js +18 -0
- package/build/server/transport-options.js.map +1 -0
- package/build/server/types.d.ts +172 -0
- package/build/server/types.d.ts.map +1 -0
- package/build/server/types.js +9 -0
- package/build/server/types.js.map +1 -0
- package/build/telemetry/connection-telemetry-bridge.d.ts +30 -0
- package/build/telemetry/connection-telemetry-bridge.d.ts.map +1 -0
- package/build/telemetry/connection-telemetry-bridge.js +54 -0
- package/build/telemetry/connection-telemetry-bridge.js.map +1 -0
- package/build/telemetry/core/config.d.ts +38 -0
- package/build/telemetry/core/config.d.ts.map +1 -0
- package/build/telemetry/core/config.js +54 -0
- package/build/telemetry/core/config.js.map +1 -0
- package/build/telemetry/core/constants.d.ts +183 -0
- package/build/telemetry/core/constants.d.ts.map +1 -0
- package/build/telemetry/core/constants.js +207 -0
- package/build/telemetry/core/constants.js.map +1 -0
- package/build/telemetry/core/diag-logger.d.ts +35 -0
- package/build/telemetry/core/diag-logger.d.ts.map +1 -0
- package/build/telemetry/core/diag-logger.js +54 -0
- package/build/telemetry/core/diag-logger.js.map +1 -0
- package/build/telemetry/core/index.d.ts +12 -0
- package/build/telemetry/core/index.d.ts.map +1 -0
- package/build/telemetry/core/index.js +32 -0
- package/build/telemetry/core/index.js.map +1 -0
- package/build/telemetry/core/types.d.ts +106 -0
- package/build/telemetry/core/types.d.ts.map +1 -0
- package/build/telemetry/core/types.js +10 -0
- package/build/telemetry/core/types.js.map +1 -0
- package/build/telemetry/index.d.ts +59 -0
- package/build/telemetry/index.d.ts.map +1 -0
- package/build/telemetry/index.js +79 -0
- package/build/telemetry/index.js.map +1 -0
- package/build/telemetry/metrics.d.ts +127 -0
- package/build/telemetry/metrics.d.ts.map +1 -0
- package/build/telemetry/metrics.js +337 -0
- package/build/telemetry/metrics.js.map +1 -0
- package/build/telemetry/sdk.d.ts +110 -0
- package/build/telemetry/sdk.d.ts.map +1 -0
- package/build/telemetry/sdk.js +547 -0
- package/build/telemetry/sdk.js.map +1 -0
- package/build/telemetry/tracing.d.ts +78 -0
- package/build/telemetry/tracing.d.ts.map +1 -0
- package/build/telemetry/tracing.js +257 -0
- package/build/telemetry/tracing.js.map +1 -0
- package/build/utils/env-helpers.d.ts +46 -0
- package/build/utils/env-helpers.d.ts.map +1 -0
- package/build/utils/env-helpers.js +54 -0
- package/build/utils/env-helpers.js.map +1 -0
- package/build/utils/index.d.ts +14 -0
- package/build/utils/index.d.ts.map +1 -0
- package/build/utils/index.js +19 -0
- package/build/utils/index.js.map +1 -0
- package/build/utils/sensitive-keys.d.ts +48 -0
- package/build/utils/sensitive-keys.d.ts.map +1 -0
- package/build/utils/sensitive-keys.js +131 -0
- package/build/utils/sensitive-keys.js.map +1 -0
- package/build/utils/string-helpers.d.ts +126 -0
- package/build/utils/string-helpers.d.ts.map +1 -0
- package/build/utils/string-helpers.js +189 -0
- package/build/utils/string-helpers.js.map +1 -0
- package/build/utils/validation.d.ts +84 -0
- package/build/utils/validation.d.ts.map +1 -0
- package/build/utils/validation.js +111 -0
- package/build/utils/validation.js.map +1 -0
- package/build/utils/zod-helpers.d.ts +92 -0
- package/build/utils/zod-helpers.d.ts.map +1 -0
- package/build/utils/zod-helpers.js +120 -0
- package/build/utils/zod-helpers.js.map +1 -0
- package/package.json +133 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSE Request Handler
|
|
3
|
+
*
|
|
4
|
+
* Manages SSE session lifecycle — connection setup, message routing,
|
|
5
|
+
* and cleanup. Parallel to the StreamableHttpTransport's role for
|
|
6
|
+
* the modern Streamable HTTP transport.
|
|
7
|
+
*
|
|
8
|
+
* This handler encapsulates all session management so the SSE router
|
|
9
|
+
* remains a thin routing layer.
|
|
10
|
+
*
|
|
11
|
+
* @module server/transport/sse/handler
|
|
12
|
+
*/
|
|
13
|
+
import { SseTransport } from "./transport.js";
|
|
14
|
+
import { createJsonRpcError, JsonRpcErrorCode, HttpStatus, TransportErrorMessage } from "../../../errors/index.js";
|
|
15
|
+
import { logger as baseLogger } from "../../../logger/index.js";
|
|
16
|
+
import { TRANSPORT_LOG_COMPONENTS, SESSION_ID_DISPLAY_LENGTH } from "../constants.js";
|
|
17
|
+
import { SESSION_CLOSE_REASONS } from "../../session/index.js";
|
|
18
|
+
const logger = baseLogger.child({ component: TRANSPORT_LOG_COMPONENTS.SSE });
|
|
19
|
+
/** @internal Log messages for SSE request handler */
|
|
20
|
+
const LogMessages = {
|
|
21
|
+
// Connection lifecycle
|
|
22
|
+
SESSION_LIMIT_REACHED: "Session limit reached, rejecting SSE connection",
|
|
23
|
+
SESSION_CREATE_FAILED: "Failed to create SSE session (capacity reached)",
|
|
24
|
+
SESSION_CREATED: "SSE session created: %s",
|
|
25
|
+
SESSION_CLOSED: "SSE session closed: %s",
|
|
26
|
+
SESSION_CONNECTION_ERROR: "MCP session connection error for session %s: %s",
|
|
27
|
+
STREAM_CONNECTED: "SSE stream connected for session: %s",
|
|
28
|
+
CONNECTION_SETUP_ERROR: "Error setting up SSE connection: %s",
|
|
29
|
+
// Message handling
|
|
30
|
+
POST_REJECTED_NO_SESSION_PARAM: "SSE POST %s rejected: missing sessionId query param",
|
|
31
|
+
POST_REJECTED_SESSION_NOT_FOUND: "SSE POST %s rejected: session not found [%s]",
|
|
32
|
+
POST_MESSAGE: "SSE POST %s [%s] method=%s",
|
|
33
|
+
POST_ERROR: "Error handling SSE POST for session %s: %s",
|
|
34
|
+
};
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// SSE Request Handler
|
|
37
|
+
// ============================================================================
|
|
38
|
+
/**
|
|
39
|
+
* Handles SSE transport session lifecycle and message routing.
|
|
40
|
+
*
|
|
41
|
+
* Manages session creation, connection setup, and message dispatching
|
|
42
|
+
* for the legacy HTTP+SSE transport (deprecated protocol 2024-11-05).
|
|
43
|
+
*/
|
|
44
|
+
export class SseRequestHandler {
|
|
45
|
+
sessionFactory;
|
|
46
|
+
sessionManager;
|
|
47
|
+
constructor(sessionFactory, sessionManager) {
|
|
48
|
+
this.sessionFactory = sessionFactory;
|
|
49
|
+
this.sessionManager = sessionManager;
|
|
50
|
+
}
|
|
51
|
+
// ==========================================================================
|
|
52
|
+
// Connection Handler
|
|
53
|
+
// ==========================================================================
|
|
54
|
+
/**
|
|
55
|
+
* Handle an SSE connection (shared logic for /mcp and /sse endpoints).
|
|
56
|
+
*
|
|
57
|
+
* Creates an SSE stream and connects the MCP server to it.
|
|
58
|
+
* The messageEndpoint parameter determines where clients should POST messages to.
|
|
59
|
+
*
|
|
60
|
+
* Note: mcpServer.connect() automatically calls transport.start() internally,
|
|
61
|
+
* which sends the 'endpoint' SSE event with the message URL containing the sessionId.
|
|
62
|
+
*
|
|
63
|
+
* NOTE: This function requires real SSE connections for full test coverage.
|
|
64
|
+
*/
|
|
65
|
+
/* v8 ignore start - SSE requires real SSE connections for testing */
|
|
66
|
+
async handleConnection(req, res, messageEndpoint) {
|
|
67
|
+
// Check session limits: global capacity AND per-transport (SSE) limit.
|
|
68
|
+
// Both checks must pass before starting the SSE stream to avoid sending
|
|
69
|
+
// SSE headers and then immediately rejecting the session in create().
|
|
70
|
+
if (!this.sessionManager.hasCapacity() || !this.sessionManager.hasCapacityForTransport("sse")) {
|
|
71
|
+
logger.warn(LogMessages.SESSION_LIMIT_REACHED);
|
|
72
|
+
res
|
|
73
|
+
.status(HttpStatus.SERVICE_UNAVAILABLE)
|
|
74
|
+
.json(createJsonRpcError(JsonRpcErrorCode.SERVER_ERROR, TransportErrorMessage.TOO_MANY_SESSIONS));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
// Create our custom SSE transport
|
|
79
|
+
const transport = new SseTransport(messageEndpoint, res);
|
|
80
|
+
// Start the transport first (sends endpoint event with sessionId)
|
|
81
|
+
await transport.start();
|
|
82
|
+
// Get the sessionId that was sent to the client in the endpoint event
|
|
83
|
+
const sessionId = transport.sessionId;
|
|
84
|
+
// Create MCP session instance
|
|
85
|
+
const mcpSession = this.sessionFactory();
|
|
86
|
+
// IMPORTANT: Create unified session BEFORE connecting MCP session!
|
|
87
|
+
const session = this.sessionManager.create({
|
|
88
|
+
id: sessionId,
|
|
89
|
+
transportType: "sse",
|
|
90
|
+
transport,
|
|
91
|
+
mcpSession,
|
|
92
|
+
});
|
|
93
|
+
if (!session) {
|
|
94
|
+
logger.warn(LogMessages.SESSION_CREATE_FAILED);
|
|
95
|
+
// After transport.start(), SSE headers are already sent — cannot send JSON error.
|
|
96
|
+
// Close the transport; the client will detect the disconnection.
|
|
97
|
+
if (!res.headersSent) {
|
|
98
|
+
res
|
|
99
|
+
.status(HttpStatus.SERVICE_UNAVAILABLE)
|
|
100
|
+
.json(createJsonRpcError(JsonRpcErrorCode.SERVER_ERROR, TransportErrorMessage.TOO_MANY_SESSIONS));
|
|
101
|
+
}
|
|
102
|
+
await transport.close();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
logger.debug(LogMessages.SESSION_CREATED, sessionId);
|
|
106
|
+
// Guard against duplicate close (transport.onclose + req.on('close') fire independently)
|
|
107
|
+
let closed = false;
|
|
108
|
+
const closeOnce = () => {
|
|
109
|
+
if (closed)
|
|
110
|
+
return;
|
|
111
|
+
closed = true;
|
|
112
|
+
logger.debug(LogMessages.SESSION_CLOSED, sessionId);
|
|
113
|
+
void this.sessionManager.close(sessionId, SESSION_CLOSE_REASONS.CLIENT_DISCONNECT).catch((err) => {
|
|
114
|
+
logger.warn("Error closing session on client disconnect: %s", err instanceof Error ? err.message : String(err));
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
// Handle cleanup when connection closes
|
|
118
|
+
transport.onclose = closeOnce;
|
|
119
|
+
// Also handle request close/error
|
|
120
|
+
req.on("close", closeOnce);
|
|
121
|
+
// Connect MCP session to transport
|
|
122
|
+
// Note: This is intentionally NOT awaited because connect() may block
|
|
123
|
+
// waiting for the initialize message from the client.
|
|
124
|
+
mcpSession.sdk.connect(transport).catch((err) => {
|
|
125
|
+
logger.error(LogMessages.SESSION_CONNECTION_ERROR, sessionId, err);
|
|
126
|
+
void this.sessionManager.close(sessionId, SESSION_CLOSE_REASONS.ERROR).catch((closeErr) => {
|
|
127
|
+
logger.warn("Error closing session after connection failure: %s", closeErr instanceof Error ? closeErr.message : String(closeErr));
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
logger.debug(LogMessages.STREAM_CONNECTED, sessionId);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
logger.error(LogMessages.CONNECTION_SETUP_ERROR, error);
|
|
134
|
+
if (!res.headersSent) {
|
|
135
|
+
res
|
|
136
|
+
.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
|
137
|
+
.json(createJsonRpcError(JsonRpcErrorCode.INTERNAL_ERROR, TransportErrorMessage.INTERNAL_ERROR));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/* v8 ignore stop */
|
|
142
|
+
// ==========================================================================
|
|
143
|
+
// Message Handler
|
|
144
|
+
// ==========================================================================
|
|
145
|
+
/**
|
|
146
|
+
* Handle an incoming POST message for an SSE session.
|
|
147
|
+
*
|
|
148
|
+
* Looks up the session by query parameter, validates it, and delegates
|
|
149
|
+
* the message to the session's SseTransport.
|
|
150
|
+
*/
|
|
151
|
+
/* v8 ignore start - SSE session handling */
|
|
152
|
+
async handleMessage(req, res, endpoint) {
|
|
153
|
+
const rawSessionId = req.query.sessionId;
|
|
154
|
+
const sessionId = typeof rawSessionId === "string" ? rawSessionId : undefined;
|
|
155
|
+
if (!sessionId) {
|
|
156
|
+
logger.warn(LogMessages.POST_REJECTED_NO_SESSION_PARAM, endpoint);
|
|
157
|
+
res
|
|
158
|
+
.status(HttpStatus.BAD_REQUEST)
|
|
159
|
+
.json(createJsonRpcError(JsonRpcErrorCode.SERVER_ERROR, TransportErrorMessage.SESSION_ID_QUERY_REQUIRED));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const session = this.sessionManager.get(sessionId);
|
|
163
|
+
if (!session || session.transport.type !== "sse") {
|
|
164
|
+
logger.warn(LogMessages.POST_REJECTED_SESSION_NOT_FOUND, endpoint, sessionId.substring(0, SESSION_ID_DISPLAY_LENGTH));
|
|
165
|
+
res
|
|
166
|
+
.status(HttpStatus.NOT_FOUND)
|
|
167
|
+
.json(createJsonRpcError(JsonRpcErrorCode.SESSION_NOT_FOUND, TransportErrorMessage.SESSION_NOT_FOUND));
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
// Update session activity timestamp (idle timeout tracking)
|
|
171
|
+
this.sessionManager.touch(sessionId);
|
|
172
|
+
try {
|
|
173
|
+
const method = req.body?.method || "unknown";
|
|
174
|
+
logger.debug(LogMessages.POST_MESSAGE, endpoint, sessionId.substring(0, SESSION_ID_DISPLAY_LENGTH), method);
|
|
175
|
+
// @transport-downcast — Sessions in this handler are exclusively created with SSE transport
|
|
176
|
+
const transport = session.transport.instance;
|
|
177
|
+
await transport.handlePostMessage(req, res, req.body);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
logger.error(LogMessages.POST_ERROR, sessionId, error);
|
|
181
|
+
if (!res.headersSent) {
|
|
182
|
+
res
|
|
183
|
+
.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
|
184
|
+
.json(createJsonRpcError(JsonRpcErrorCode.INTERNAL_ERROR, TransportErrorMessage.INTERNAL_ERROR));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../../src/server/transport/sse/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSE Transport Module
|
|
3
|
+
*
|
|
4
|
+
* Legacy HTTP+SSE Transport (deprecated protocol 2024-11-05)
|
|
5
|
+
* Still supported for backwards compatibility with older MCP clients.
|
|
6
|
+
*
|
|
7
|
+
* - **SseTransport** — Custom SSE transport implementation (SDK Transport interface)
|
|
8
|
+
* - **SseRequestHandler** — Session lifecycle and message routing
|
|
9
|
+
*
|
|
10
|
+
* @module server/transport/sse
|
|
11
|
+
*/
|
|
12
|
+
export { SseRequestHandler } from "./handler.js";
|
|
13
|
+
export { SseTransport } from "./transport.js";
|
|
14
|
+
export type { FlushableResponse } from "./transport.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/transport/sse/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSE Transport Module
|
|
3
|
+
*
|
|
4
|
+
* Legacy HTTP+SSE Transport (deprecated protocol 2024-11-05)
|
|
5
|
+
* Still supported for backwards compatibility with older MCP clients.
|
|
6
|
+
*
|
|
7
|
+
* - **SseTransport** — Custom SSE transport implementation (SDK Transport interface)
|
|
8
|
+
* - **SseRequestHandler** — Session lifecycle and message routing
|
|
9
|
+
*
|
|
10
|
+
* @module server/transport/sse
|
|
11
|
+
*/
|
|
12
|
+
export { SseRequestHandler } from "./handler.js";
|
|
13
|
+
export { SseTransport } from "./transport.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/transport/sse/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSE Transport Implementation
|
|
3
|
+
*
|
|
4
|
+
* This is a custom implementation of the deprecated HTTP+SSE transport
|
|
5
|
+
* from MCP protocol version 2024-11-05. It provides backwards compatibility
|
|
6
|
+
* for older MCP clients that don't support the modern Streamable HTTP transport.
|
|
7
|
+
*
|
|
8
|
+
* Protocol Flow:
|
|
9
|
+
* 1. Client connects via GET to SSE endpoint
|
|
10
|
+
* 2. Server sends 'endpoint' event with URL for POSTing messages (includes sessionId)
|
|
11
|
+
* 3. Client POSTs JSON-RPC messages to that URL
|
|
12
|
+
* 4. Server responds via the SSE stream
|
|
13
|
+
*
|
|
14
|
+
* This replaces the deprecated SSEServerTransport from @modelcontextprotocol/sdk
|
|
15
|
+
* with a clean, maintainable implementation.
|
|
16
|
+
*
|
|
17
|
+
* @module server/transport/sse/transport
|
|
18
|
+
*/
|
|
19
|
+
import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
|
|
20
|
+
import type { JSONRPCMessage } from "@modelcontextprotocol/sdk/types.js";
|
|
21
|
+
import type { Response, Request } from "express";
|
|
22
|
+
/**
|
|
23
|
+
* Response object that may have a flush method added by middleware.
|
|
24
|
+
* Some Express middleware (like compression) add this method.
|
|
25
|
+
*/
|
|
26
|
+
export interface FlushableResponse extends Response {
|
|
27
|
+
flush?: () => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Custom SSE Transport for backwards compatibility with MCP 2024-11-05 clients.
|
|
31
|
+
*
|
|
32
|
+
* Implements the Transport interface from the MCP SDK without using
|
|
33
|
+
* the deprecated SSEServerTransport class.
|
|
34
|
+
*/
|
|
35
|
+
export declare class SseTransport implements Transport {
|
|
36
|
+
private _sessionId;
|
|
37
|
+
private _res;
|
|
38
|
+
private _messageEndpoint;
|
|
39
|
+
private _started;
|
|
40
|
+
private _closed;
|
|
41
|
+
onclose?: () => void;
|
|
42
|
+
onerror?: (error: Error) => void;
|
|
43
|
+
onmessage?: (message: JSONRPCMessage) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Creates a new SSE Transport
|
|
46
|
+
*
|
|
47
|
+
* @param messageEndpoint - The endpoint path where clients should POST messages
|
|
48
|
+
* (e.g., '/mcp/message' or '/sse/message')
|
|
49
|
+
* @param res - Express Response object for the SSE stream
|
|
50
|
+
*/
|
|
51
|
+
constructor(messageEndpoint: string, res: Response);
|
|
52
|
+
/**
|
|
53
|
+
* Get the session ID for this transport
|
|
54
|
+
*/
|
|
55
|
+
get sessionId(): string;
|
|
56
|
+
/**
|
|
57
|
+
* Start the SSE transport.
|
|
58
|
+
*
|
|
59
|
+
* Sets up SSE headers and sends the 'endpoint' event with the message URL.
|
|
60
|
+
* This method is idempotent - calling it multiple times has no effect after
|
|
61
|
+
* the first call. This is necessary because mcpServer.connect() calls start()
|
|
62
|
+
* internally, but we need to call it before connect() to send the endpoint event.
|
|
63
|
+
*/
|
|
64
|
+
start(): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Send a JSON-RPC message to the client via SSE
|
|
67
|
+
*/
|
|
68
|
+
send(message: JSONRPCMessage): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Close the transport
|
|
71
|
+
*/
|
|
72
|
+
close(): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Handle an incoming POST message from the client.
|
|
75
|
+
*
|
|
76
|
+
* This should be called by the Express route handler when a POST
|
|
77
|
+
* is received at the message endpoint.
|
|
78
|
+
*
|
|
79
|
+
* @param req - Express Request object
|
|
80
|
+
* @param res - Express Response object for the POST response
|
|
81
|
+
* @param body - Parsed JSON-RPC message body
|
|
82
|
+
*/
|
|
83
|
+
handlePostMessage(req: Request, res: Response, body: JSONRPCMessage): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Send an SSE event to the client
|
|
86
|
+
*/
|
|
87
|
+
private _sendSseEvent;
|
|
88
|
+
/**
|
|
89
|
+
* Flushes the response buffer if the response supports it.
|
|
90
|
+
* Some middleware (like compression) add a flush method to the response.
|
|
91
|
+
*/
|
|
92
|
+
private _flushResponse;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/server/transport/sse/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAMjD;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAUD;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,SAAS;IAC5C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAE9C;;;;;;OAMG;gBACS,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ;IAMlD;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;;;;;OAOG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B5B;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;;;;;;;;OASG;IACG,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BzF;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;;OAGG;IACH,OAAO,CAAC,cAAc;CAOvB"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSE Transport Implementation
|
|
3
|
+
*
|
|
4
|
+
* This is a custom implementation of the deprecated HTTP+SSE transport
|
|
5
|
+
* from MCP protocol version 2024-11-05. It provides backwards compatibility
|
|
6
|
+
* for older MCP clients that don't support the modern Streamable HTTP transport.
|
|
7
|
+
*
|
|
8
|
+
* Protocol Flow:
|
|
9
|
+
* 1. Client connects via GET to SSE endpoint
|
|
10
|
+
* 2. Server sends 'endpoint' event with URL for POSTing messages (includes sessionId)
|
|
11
|
+
* 3. Client POSTs JSON-RPC messages to that URL
|
|
12
|
+
* 4. Server responds via the SSE stream
|
|
13
|
+
*
|
|
14
|
+
* This replaces the deprecated SSEServerTransport from @modelcontextprotocol/sdk
|
|
15
|
+
* with a clean, maintainable implementation.
|
|
16
|
+
*
|
|
17
|
+
* @module server/transport/sse/transport
|
|
18
|
+
*/
|
|
19
|
+
import { randomUUID } from "node:crypto";
|
|
20
|
+
import { HttpStatus, TransportError, TransportErrorMessage } from "../../../errors/index.js";
|
|
21
|
+
import { logger as baseLogger } from "../../../logger/index.js";
|
|
22
|
+
import { TRANSPORT_LOG_COMPONENTS, SSE_EVENTS, SESSION_ID_DISPLAY_LENGTH } from "../constants.js";
|
|
23
|
+
const logger = baseLogger.child({ component: TRANSPORT_LOG_COMPONENTS.SSE });
|
|
24
|
+
/** @internal Log messages for SSE transport */
|
|
25
|
+
const LogMessages = {
|
|
26
|
+
MESSAGE_REJECTED_CLOSED: "Message rejected: transport closed (session=%s)",
|
|
27
|
+
MESSAGE_PROCESSING_ERROR: "Error processing message (session=%s): %s",
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Custom SSE Transport for backwards compatibility with MCP 2024-11-05 clients.
|
|
31
|
+
*
|
|
32
|
+
* Implements the Transport interface from the MCP SDK without using
|
|
33
|
+
* the deprecated SSEServerTransport class.
|
|
34
|
+
*/
|
|
35
|
+
export class SseTransport {
|
|
36
|
+
_sessionId;
|
|
37
|
+
_res;
|
|
38
|
+
_messageEndpoint;
|
|
39
|
+
_started = false;
|
|
40
|
+
_closed = false;
|
|
41
|
+
onclose;
|
|
42
|
+
onerror;
|
|
43
|
+
onmessage;
|
|
44
|
+
/**
|
|
45
|
+
* Creates a new SSE Transport
|
|
46
|
+
*
|
|
47
|
+
* @param messageEndpoint - The endpoint path where clients should POST messages
|
|
48
|
+
* (e.g., '/mcp/message' or '/sse/message')
|
|
49
|
+
* @param res - Express Response object for the SSE stream
|
|
50
|
+
*/
|
|
51
|
+
constructor(messageEndpoint, res) {
|
|
52
|
+
this._sessionId = randomUUID();
|
|
53
|
+
this._messageEndpoint = messageEndpoint;
|
|
54
|
+
this._res = res;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the session ID for this transport
|
|
58
|
+
*/
|
|
59
|
+
get sessionId() {
|
|
60
|
+
return this._sessionId;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Start the SSE transport.
|
|
64
|
+
*
|
|
65
|
+
* Sets up SSE headers and sends the 'endpoint' event with the message URL.
|
|
66
|
+
* This method is idempotent - calling it multiple times has no effect after
|
|
67
|
+
* the first call. This is necessary because mcpServer.connect() calls start()
|
|
68
|
+
* internally, but we need to call it before connect() to send the endpoint event.
|
|
69
|
+
*/
|
|
70
|
+
async start() {
|
|
71
|
+
// Idempotent: if already started, just return silently
|
|
72
|
+
// This is needed because mcpServer.connect() calls start() internally
|
|
73
|
+
if (this._started) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (this._closed) {
|
|
77
|
+
throw TransportError.closed();
|
|
78
|
+
}
|
|
79
|
+
this._started = true;
|
|
80
|
+
// Set SSE headers
|
|
81
|
+
this._res.setHeader("Content-Type", "text/event-stream");
|
|
82
|
+
this._res.setHeader("Cache-Control", "no-cache, no-transform");
|
|
83
|
+
this._res.setHeader("Connection", "keep-alive");
|
|
84
|
+
this._res.setHeader("X-Accel-Buffering", "no"); // Disable nginx buffering
|
|
85
|
+
this._res.flushHeaders();
|
|
86
|
+
// Send the endpoint event with the message URL
|
|
87
|
+
// This tells the client where to POST messages
|
|
88
|
+
const query = new URLSearchParams({ sessionId: this._sessionId });
|
|
89
|
+
const endpointUrl = `${this._messageEndpoint}?${query.toString()}`;
|
|
90
|
+
this._sendSseEvent(SSE_EVENTS.ENDPOINT, endpointUrl);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Send a JSON-RPC message to the client via SSE
|
|
94
|
+
*/
|
|
95
|
+
async send(message) {
|
|
96
|
+
if (this._closed) {
|
|
97
|
+
throw TransportError.closed();
|
|
98
|
+
}
|
|
99
|
+
if (!this._started) {
|
|
100
|
+
throw TransportError.notStarted();
|
|
101
|
+
}
|
|
102
|
+
this._sendSseEvent(SSE_EVENTS.MESSAGE, JSON.stringify(message));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Close the transport
|
|
106
|
+
*/
|
|
107
|
+
async close() {
|
|
108
|
+
if (this._closed)
|
|
109
|
+
return;
|
|
110
|
+
this._closed = true;
|
|
111
|
+
// End the SSE stream
|
|
112
|
+
if (!this._res.writableEnded) {
|
|
113
|
+
this._res.end();
|
|
114
|
+
}
|
|
115
|
+
this.onclose?.();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Handle an incoming POST message from the client.
|
|
119
|
+
*
|
|
120
|
+
* This should be called by the Express route handler when a POST
|
|
121
|
+
* is received at the message endpoint.
|
|
122
|
+
*
|
|
123
|
+
* @param req - Express Request object
|
|
124
|
+
* @param res - Express Response object for the POST response
|
|
125
|
+
* @param body - Parsed JSON-RPC message body
|
|
126
|
+
*/
|
|
127
|
+
async handlePostMessage(req, res, body) {
|
|
128
|
+
if (this._closed) {
|
|
129
|
+
logger.warn(LogMessages.MESSAGE_REJECTED_CLOSED, this._sessionId.substring(0, SESSION_ID_DISPLAY_LENGTH));
|
|
130
|
+
res.status(HttpStatus.BAD_REQUEST).json({ error: TransportErrorMessage.TRANSPORT_CLOSED });
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// Notify the MCP server of the incoming message
|
|
134
|
+
try {
|
|
135
|
+
this.onmessage?.(body);
|
|
136
|
+
// For requests (with id), send 202 Accepted - response will come via SSE
|
|
137
|
+
// For notifications (no id), send 204 No Content
|
|
138
|
+
if ("id" in body && body.id !== undefined) {
|
|
139
|
+
res.status(HttpStatus.ACCEPTED).json({ status: "accepted" });
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
res.status(HttpStatus.NO_CONTENT).end();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
147
|
+
logger.error(LogMessages.MESSAGE_PROCESSING_ERROR, this._sessionId.substring(0, SESSION_ID_DISPLAY_LENGTH), err.message);
|
|
148
|
+
this.onerror?.(err);
|
|
149
|
+
res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({ error: TransportErrorMessage.INTERNAL_ERROR });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Send an SSE event to the client
|
|
154
|
+
*/
|
|
155
|
+
_sendSseEvent(event, data) {
|
|
156
|
+
if (this._res.writableEnded)
|
|
157
|
+
return;
|
|
158
|
+
this._res.write(`event: ${event}\n`);
|
|
159
|
+
this._res.write(`data: ${data}\n\n`);
|
|
160
|
+
// Flush to ensure immediate delivery (some Express middleware add flush)
|
|
161
|
+
this._flushResponse();
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Flushes the response buffer if the response supports it.
|
|
165
|
+
* Some middleware (like compression) add a flush method to the response.
|
|
166
|
+
*/
|
|
167
|
+
_flushResponse() {
|
|
168
|
+
// @express-api — Compression middleware adds flush() at runtime; not in Express Response type
|
|
169
|
+
const res = this._res;
|
|
170
|
+
if (typeof res.flush === "function") {
|
|
171
|
+
res.flush();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/server/transport/sse/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stdio Transport
|
|
3
|
+
*
|
|
4
|
+
* Starts a stdio transport for single-client CLI usage.
|
|
5
|
+
* Creates one McpSession, registers it with the SessionManager,
|
|
6
|
+
* and connects it to stdin/stdout.
|
|
7
|
+
*
|
|
8
|
+
* @module server/transport/stdio-transport
|
|
9
|
+
*/
|
|
10
|
+
import type { TransportHandle, SessionFactory } from "./types.js";
|
|
11
|
+
import type { SessionManager } from "../session/index.js";
|
|
12
|
+
/**
|
|
13
|
+
* Starts a stdio transport for single-client CLI usage.
|
|
14
|
+
*
|
|
15
|
+
* Creates a single McpSession, registers it with the SessionManager,
|
|
16
|
+
* and connects it to stdin/stdout via the SDK's StdioServerTransport.
|
|
17
|
+
*
|
|
18
|
+
* @param sessionFactory - Factory to create McpSession instances
|
|
19
|
+
* @param sessionManager - Session manager for lifecycle tracking
|
|
20
|
+
* @returns TransportHandle for shutdown and runtime info
|
|
21
|
+
*/
|
|
22
|
+
export declare function startStdioTransport(sessionFactory: SessionFactory, sessionManager: SessionManager): Promise<TransportHandle>;
|
|
23
|
+
//# sourceMappingURL=stdio-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../../src/server/transport/stdio-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAiB,cAAc,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAc1D;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,eAAe,CAAC,CAkC1B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stdio Transport
|
|
3
|
+
*
|
|
4
|
+
* Starts a stdio transport for single-client CLI usage.
|
|
5
|
+
* Creates one McpSession, registers it with the SessionManager,
|
|
6
|
+
* and connects it to stdin/stdout.
|
|
7
|
+
*
|
|
8
|
+
* @module server/transport/stdio-transport
|
|
9
|
+
*/
|
|
10
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
11
|
+
import { logger as baseLogger } from "../../logger/index.js";
|
|
12
|
+
const logger = baseLogger.child({ component: "StdioTransport" });
|
|
13
|
+
const LogMessages = {
|
|
14
|
+
CONNECTING: "Connecting stdio transport...",
|
|
15
|
+
CONNECTED: "Stdio transport connected",
|
|
16
|
+
};
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Stdio Transport Function
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Starts a stdio transport for single-client CLI usage.
|
|
22
|
+
*
|
|
23
|
+
* Creates a single McpSession, registers it with the SessionManager,
|
|
24
|
+
* and connects it to stdin/stdout via the SDK's StdioServerTransport.
|
|
25
|
+
*
|
|
26
|
+
* @param sessionFactory - Factory to create McpSession instances
|
|
27
|
+
* @param sessionManager - Session manager for lifecycle tracking
|
|
28
|
+
* @returns TransportHandle for shutdown and runtime info
|
|
29
|
+
*/
|
|
30
|
+
export async function startStdioTransport(sessionFactory, sessionManager) {
|
|
31
|
+
logger.debug(LogMessages.CONNECTING);
|
|
32
|
+
const startedAt = new Date();
|
|
33
|
+
const session = sessionFactory();
|
|
34
|
+
const transport = new StdioServerTransport();
|
|
35
|
+
const created = sessionManager.create({
|
|
36
|
+
transportType: "stdio",
|
|
37
|
+
transport,
|
|
38
|
+
mcpSession: session,
|
|
39
|
+
});
|
|
40
|
+
if (!created) {
|
|
41
|
+
throw new Error("Failed to create stdio session — session capacity reached");
|
|
42
|
+
}
|
|
43
|
+
await session.sdk.connect(transport);
|
|
44
|
+
logger.debug(LogMessages.CONNECTED);
|
|
45
|
+
return {
|
|
46
|
+
async shutdown() {
|
|
47
|
+
// No transport-level resources to close for stdio.
|
|
48
|
+
// Session cleanup is handled by McpServerInstance.stop().
|
|
49
|
+
},
|
|
50
|
+
info() {
|
|
51
|
+
return {
|
|
52
|
+
state: "running",
|
|
53
|
+
startedAt,
|
|
54
|
+
mode: "stdio",
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=stdio-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-transport.js","sourceRoot":"","sources":["../../../src/server/transport/stdio-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAIjF,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAEjE,MAAM,WAAW,GAAG;IAClB,UAAU,EAAE,+BAA+B;IAC3C,SAAS,EAAE,2BAA2B;CAC9B,CAAC;AAEX,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,cAA8B,EAC9B,cAA8B;IAE9B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAErC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC;QACpC,aAAa,EAAE,OAAO;QACtB,SAAS;QACT,UAAU,EAAE,OAAO;KACpB,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAEpC,OAAO;QACL,KAAK,CAAC,QAAQ;YACZ,mDAAmD;YACnD,0DAA0D;QAC5D,CAAC;QAED,IAAI;YACF,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,SAAS;gBACT,IAAI,EAAE,OAAO;aACd,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streamable HTTP Transport
|
|
3
|
+
*
|
|
4
|
+
* MCP Streamable HTTP Transport implementation (2025-03-26 specification).
|
|
5
|
+
*
|
|
6
|
+
* @module server/transport/streamable-http
|
|
7
|
+
*/
|
|
8
|
+
export { StreamableHttpTransport, type StreamableHttpTransportOptions } from "./transport.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/transport/streamable-http/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAAE,KAAK,8BAA8B,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streamable HTTP Transport
|
|
3
|
+
*
|
|
4
|
+
* MCP Streamable HTTP Transport implementation (2025-03-26 specification).
|
|
5
|
+
*
|
|
6
|
+
* @module server/transport/streamable-http
|
|
7
|
+
*/
|
|
8
|
+
export { StreamableHttpTransport } from "./transport.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/transport/streamable-http/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAAuC,MAAM,gBAAgB,CAAC"}
|