@confluentinc/mcp-confluent 1.2.1 → 1.3.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/README.md +174 -791
- package/assets/oauth-templates/callback-failure.html +22 -0
- package/assets/oauth-templates/callback-success.html +19 -0
- package/assets/oauth-templates/logo.html +91 -0
- package/assets/oauth-templates/styles.html +49 -0
- package/config.example.yaml +149 -0
- package/config.oauth.example.yaml +45 -0
- package/dist/cli.d.ts +59 -12
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +131 -61
- package/dist/cli.js.map +1 -1
- package/dist/config/env-config.d.ts +33 -0
- package/dist/config/env-config.d.ts.map +1 -0
- package/dist/config/env-config.js +473 -0
- package/dist/config/env-config.js.map +1 -0
- package/dist/config/index.d.ts +31 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +76 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/interpolation.d.ts +9 -0
- package/dist/config/interpolation.d.ts.map +1 -0
- package/dist/config/interpolation.js +51 -0
- package/dist/config/interpolation.js.map +1 -0
- package/dist/config/models.d.ts +396 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +401 -0
- package/dist/config/models.js.map +1 -0
- package/dist/config/validation.d.ts +9 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +46 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/confluent/base-client-manager.d.ts +100 -0
- package/dist/confluent/base-client-manager.d.ts.map +1 -0
- package/dist/confluent/base-client-manager.js +188 -0
- package/dist/confluent/base-client-manager.js.map +1 -0
- package/dist/confluent/client-manager.d.ts +42 -94
- package/dist/confluent/client-manager.d.ts.map +1 -1
- package/dist/confluent/client-manager.js +5 -242
- package/dist/confluent/client-manager.js.map +1 -1
- package/dist/confluent/config-telemetry.d.ts +41 -0
- package/dist/confluent/config-telemetry.d.ts.map +1 -0
- package/dist/confluent/config-telemetry.js +17 -0
- package/dist/confluent/config-telemetry.js.map +1 -0
- package/dist/confluent/direct-client-manager.d.ts +43 -0
- package/dist/confluent/direct-client-manager.d.ts.map +1 -0
- package/dist/confluent/direct-client-manager.js +146 -0
- package/dist/confluent/direct-client-manager.js.map +1 -0
- package/dist/confluent/middleware.d.ts +32 -4
- package/dist/confluent/middleware.d.ts.map +1 -1
- package/dist/confluent/middleware.js +46 -2
- package/dist/confluent/middleware.js.map +1 -1
- package/dist/confluent/node-deps.d.ts +32 -39
- package/dist/confluent/node-deps.d.ts.map +1 -1
- package/dist/confluent/node-deps.js +42 -7
- package/dist/confluent/node-deps.js.map +1 -1
- package/dist/confluent/oauth/auth-context.d.ts +94 -0
- package/dist/confluent/oauth/auth-context.d.ts.map +1 -0
- package/dist/confluent/oauth/auth-context.js +323 -0
- package/dist/confluent/oauth/auth-context.js.map +1 -0
- package/dist/confluent/oauth/auth0-config.d.ts +12 -0
- package/dist/confluent/oauth/auth0-config.d.ts.map +1 -0
- package/dist/confluent/oauth/auth0-config.js +43 -0
- package/dist/confluent/oauth/auth0-config.js.map +1 -0
- package/dist/confluent/oauth/callback-pages.d.ts +5 -0
- package/dist/confluent/oauth/callback-pages.d.ts.map +1 -0
- package/dist/confluent/oauth/callback-pages.js +38 -0
- package/dist/confluent/oauth/callback-pages.js.map +1 -0
- package/dist/confluent/oauth/crypto-utils.d.ts +16 -0
- package/dist/confluent/oauth/crypto-utils.d.ts.map +1 -0
- package/dist/confluent/oauth/crypto-utils.js +23 -0
- package/dist/confluent/oauth/crypto-utils.js.map +1 -0
- package/dist/confluent/oauth/errors.d.ts +27 -0
- package/dist/confluent/oauth/errors.d.ts.map +1 -0
- package/dist/confluent/oauth/errors.js +6 -0
- package/dist/confluent/oauth/errors.js.map +1 -0
- package/dist/confluent/oauth/oauth-holder.d.ts +34 -0
- package/dist/confluent/oauth/oauth-holder.d.ts.map +1 -0
- package/dist/confluent/oauth/oauth-holder.js +155 -0
- package/dist/confluent/oauth/oauth-holder.js.map +1 -0
- package/dist/confluent/oauth/pkce-login.d.ts +26 -0
- package/dist/confluent/oauth/pkce-login.d.ts.map +1 -0
- package/dist/confluent/oauth/pkce-login.js +161 -0
- package/dist/confluent/oauth/pkce-login.js.map +1 -0
- package/dist/confluent/oauth/token-chain.d.ts +53 -0
- package/dist/confluent/oauth/token-chain.d.ts.map +1 -0
- package/dist/confluent/oauth/token-chain.js +141 -0
- package/dist/confluent/oauth/token-chain.js.map +1 -0
- package/dist/confluent/oauth/token-lifetimes.d.ts +13 -0
- package/dist/confluent/oauth/token-lifetimes.d.ts.map +1 -0
- package/dist/confluent/oauth/token-lifetimes.js +13 -0
- package/dist/confluent/oauth/token-lifetimes.js.map +1 -0
- package/dist/confluent/oauth/types.d.ts +68 -0
- package/dist/confluent/oauth/types.d.ts.map +1 -0
- package/dist/confluent/oauth/types.js +2 -0
- package/dist/confluent/oauth/types.js.map +1 -0
- package/dist/confluent/oauth-client-manager.d.ts +78 -0
- package/dist/confluent/oauth-client-manager.d.ts.map +1 -0
- package/dist/confluent/oauth-client-manager.js +265 -0
- package/dist/confluent/oauth-client-manager.js.map +1 -0
- package/dist/confluent/oauth-resource-resolvers.d.ts +6 -0
- package/dist/confluent/oauth-resource-resolvers.d.ts.map +1 -0
- package/dist/confluent/oauth-resource-resolvers.js +65 -0
- package/dist/confluent/oauth-resource-resolvers.js.map +1 -0
- package/dist/confluent/telemetry.d.ts +32 -1
- package/dist/confluent/telemetry.d.ts.map +1 -1
- package/dist/confluent/telemetry.js +31 -8
- package/dist/confluent/telemetry.js.map +1 -1
- package/dist/confluent/tools/base-tools.d.ts +108 -34
- package/dist/confluent/tools/base-tools.d.ts.map +1 -1
- package/dist/confluent/tools/base-tools.js +73 -10
- package/dist/confluent/tools/base-tools.js.map +1 -1
- package/dist/confluent/tools/cluster-arg-resolvers.d.ts +75 -0
- package/dist/confluent/tools/cluster-arg-resolvers.d.ts.map +1 -0
- package/dist/confluent/tools/cluster-arg-resolvers.js +127 -0
- package/dist/confluent/tools/cluster-arg-resolvers.js.map +1 -0
- package/dist/confluent/tools/connection-predicates.d.ts +168 -0
- package/dist/confluent/tools/connection-predicates.d.ts.map +1 -0
- package/dist/confluent/tools/connection-predicates.js +273 -0
- package/dist/confluent/tools/connection-predicates.js.map +1 -0
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +3 -5
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js +7 -19
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts +4 -5
- package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js +7 -19
- package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts +4 -5
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.js +7 -19
- package/dist/confluent/tools/handlers/catalog/create-topic-tags.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts +4 -5
- package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/delete-tag.js +7 -19
- package/dist/confluent/tools/handlers/catalog/delete-tag.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/list-tags.d.ts +4 -5
- package/dist/confluent/tools/handlers/catalog/list-tags.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/list-tags.js +7 -23
- package/dist/confluent/tools/handlers/catalog/list-tags.js.map +1 -1
- package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts +4 -5
- package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js +7 -19
- package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js.map +1 -1
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts +3 -5
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js +11 -22
- package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts +21 -0
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.js +22 -0
- package/dist/confluent/tools/handlers/connect/connect-tool-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts +11 -7
- package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/connect/create-connector-handler.js +23 -33
- package/dist/confluent/tools/handlers/connect/create-connector-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts +6 -7
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.js +12 -26
- package/dist/confluent/tools/handlers/connect/delete-connector-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts +6 -7
- package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/connect/list-connectors-handler.js +17 -28
- package/dist/confluent/tools/handlers/connect/list-connectors-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts +6 -7
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.js +12 -26
- package/dist/confluent/tools/handlers/connect/read-connectors-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts +57 -0
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js +122 -0
- package/dist/confluent/tools/handlers/diagnostics/explain-disabled-tools-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts +17 -0
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js +234 -0
- package/dist/confluent/tools/handlers/docs/get-product-doc-page-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts +13 -0
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js +285 -0
- package/dist/confluent/tools/handlers/docs/search-product-docs-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts +3 -5
- package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/environments/list-environments-handler.js +7 -19
- package/dist/confluent/tools/handlers/environments/list-environments-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts +3 -5
- package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/environments/read-environment-handler.js +7 -19
- package/dist/confluent/tools/handlers/environments/read-environment-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts +16 -9
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +18 -12
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +17 -31
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.d.ts +14 -0
- package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.js +15 -0
- package/dist/confluent/tools/handlers/flink/catalog/flink-catalog-tool-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js +17 -31
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +14 -28
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +14 -30
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +14 -38
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js +20 -32
- package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js +9 -24
- package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +9 -23
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +11 -25
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts +2 -2
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts +7 -7
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js +13 -29
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts +2 -2
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts +21 -0
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.js +31 -0
- package/dist/confluent/tools/handlers/flink/flink-tool-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js +9 -23
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +11 -25
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.js +9 -23
- package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts +3 -5
- package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/alter-topic-config.js +22 -29
- package/dist/confluent/tools/handlers/kafka/alter-topic-config.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts +5 -4
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js +25 -17
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts +3 -4
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +52 -15
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts +3 -4
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +26 -8
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts +3 -5
- package/dist/confluent/tools/handlers/kafka/get-topic-config.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/get-topic-config.js +21 -28
- package/dist/confluent/tools/handlers/kafka/get-topic-config.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts +3 -4
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +25 -10
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts +3 -4
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +54 -34
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +4 -5
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +6 -8
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +22 -5
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +88 -52
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts +49 -0
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js +115 -0
- package/dist/confluent/tools/handlers/organizations/list-organizations-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +3 -4
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +13 -18
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts +3 -4
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +13 -7
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts +4 -5
- package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js +7 -19
- package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts +4 -5
- package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js +7 -19
- package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js +16 -22
- package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js +8 -24
- package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js +9 -25
- package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js +8 -24
- package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js +7 -21
- package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js +20 -32
- package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts +25 -0
- package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js +27 -0
- package/dist/confluent/tools/handlers/tableflow/tableflow-tool-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js +16 -22
- package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js +8 -24
- package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js +9 -25
- package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js +8 -24
- package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts +5 -7
- package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js +7 -21
- package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js.map +1 -1
- package/dist/confluent/tools/tool-availability.d.ts +74 -0
- package/dist/confluent/tools/tool-availability.d.ts.map +1 -0
- package/dist/confluent/tools/tool-availability.js +121 -0
- package/dist/confluent/tools/tool-availability.js.map +1 -0
- package/dist/confluent/tools/tool-name.d.ts +5 -1
- package/dist/confluent/tools/tool-name.d.ts.map +1 -1
- package/dist/confluent/tools/tool-name.js +4 -0
- package/dist/confluent/tools/tool-name.js.map +1 -1
- package/dist/confluent/tools/tool-registry.d.ts +18 -0
- package/dist/confluent/tools/tool-registry.d.ts.map +1 -0
- package/dist/confluent/tools/{tool-factory.js → tool-registry.js} +32 -19
- package/dist/confluent/tools/tool-registry.js.map +1 -0
- package/dist/env-schema.d.ts +5 -2
- package/dist/env-schema.d.ts.map +1 -1
- package/dist/env-schema.js +20 -5
- package/dist/env-schema.js.map +1 -1
- package/dist/env.d.ts +16 -7
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +16 -6
- package/dist/env.js.map +1 -1
- package/dist/index.d.ts +74 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +279 -162
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +21 -20
- package/dist/logger.js.map +1 -1
- package/dist/mcp/server.d.ts +29 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +52 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/transports/auth.d.ts +20 -4
- package/dist/mcp/transports/auth.d.ts.map +1 -1
- package/dist/mcp/transports/auth.js +27 -7
- package/dist/mcp/transports/auth.js.map +1 -1
- package/dist/mcp/transports/http.d.ts +8 -2
- package/dist/mcp/transports/http.d.ts.map +1 -1
- package/dist/mcp/transports/http.js +57 -42
- package/dist/mcp/transports/http.js.map +1 -1
- package/dist/mcp/transports/manager.d.ts +23 -9
- package/dist/mcp/transports/manager.d.ts.map +1 -1
- package/dist/mcp/transports/manager.js +27 -24
- package/dist/mcp/transports/manager.js.map +1 -1
- package/dist/mcp/transports/server.d.ts +1 -1
- package/dist/mcp/transports/server.d.ts.map +1 -1
- package/dist/mcp/transports/server.js +17 -5
- package/dist/mcp/transports/server.js.map +1 -1
- package/dist/mcp/transports/session-registry.d.ts +33 -0
- package/dist/mcp/transports/session-registry.d.ts.map +1 -0
- package/dist/mcp/transports/session-registry.js +65 -0
- package/dist/mcp/transports/session-registry.js.map +1 -0
- package/dist/mcp/transports/sse.d.ts +13 -2
- package/dist/mcp/transports/sse.d.ts.map +1 -1
- package/dist/mcp/transports/sse.js +58 -46
- package/dist/mcp/transports/sse.js.map +1 -1
- package/dist/server-runtime.d.ts +28 -0
- package/dist/server-runtime.d.ts.map +1 -0
- package/dist/server-runtime.js +73 -0
- package/dist/server-runtime.js.map +1 -0
- package/package.json +25 -9
- package/dist/confluent/helpers.d.ts +0 -11
- package/dist/confluent/helpers.d.ts.map +0 -1
- package/dist/confluent/helpers.js +0 -17
- package/dist/confluent/helpers.js.map +0 -1
- package/dist/confluent/tools/tool-factory.d.ts +0 -9
- package/dist/confluent/tools/tool-factory.d.ts.map +0 -1
- package/dist/confluent/tools/tool-factory.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import fastifySwagger from "@fastify/swagger";
|
|
2
2
|
import fastifySwaggerUi from "@fastify/swagger-ui";
|
|
3
|
-
import env from "../../env.js";
|
|
4
3
|
import { logger } from "../../logger.js";
|
|
5
|
-
import { createAuthHook } from "../../mcp/transports/auth.js";
|
|
4
|
+
import { CFLT_MCP_API_KEY_HEADER, createAuthHook, } from "../../mcp/transports/auth.js";
|
|
5
|
+
import { pingHandler, pingRequestSchema, pingResponseSchema, } from "../../mcp/transports/ping.js";
|
|
6
6
|
import { default as Fastify, } from "fastify";
|
|
7
7
|
export class HttpServer {
|
|
8
8
|
fastify;
|
|
@@ -18,7 +18,7 @@ export class HttpServer {
|
|
|
18
18
|
this.authConfig = config.auth;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
async prepare() {
|
|
21
|
+
async prepare(config) {
|
|
22
22
|
if (this.isSwaggerConfigured) {
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
@@ -37,7 +37,7 @@ export class HttpServer {
|
|
|
37
37
|
},
|
|
38
38
|
servers: [
|
|
39
39
|
{
|
|
40
|
-
url: `http://${
|
|
40
|
+
url: `http://${config.host}:${config.port}`,
|
|
41
41
|
description: "Local development server",
|
|
42
42
|
},
|
|
43
43
|
],
|
|
@@ -45,7 +45,7 @@ export class HttpServer {
|
|
|
45
45
|
securitySchemes: {
|
|
46
46
|
apiKey: {
|
|
47
47
|
type: "apiKey",
|
|
48
|
-
name:
|
|
48
|
+
name: CFLT_MCP_API_KEY_HEADER,
|
|
49
49
|
in: "header",
|
|
50
50
|
},
|
|
51
51
|
},
|
|
@@ -64,6 +64,18 @@ export class HttpServer {
|
|
|
64
64
|
},
|
|
65
65
|
staticCSP: true,
|
|
66
66
|
});
|
|
67
|
+
// Register /ping at the server level (not per-transport) so HTTP+SSE configurations
|
|
68
|
+
// don't fail at startup with a duplicate-route error
|
|
69
|
+
this.fastify.post("/ping", {
|
|
70
|
+
schema: {
|
|
71
|
+
tags: ["mcp"],
|
|
72
|
+
summary: "JSON-RPC 2.0 ping endpoint",
|
|
73
|
+
body: pingRequestSchema,
|
|
74
|
+
response: {
|
|
75
|
+
200: pingResponseSchema,
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
}, pingHandler());
|
|
67
79
|
this.isSwaggerConfigured = true;
|
|
68
80
|
}
|
|
69
81
|
getInstance() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/transports/server.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/transports/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { Transport as SdkTransport } from "@modelcontextprotocol/sdk/shared/transport.js";
|
|
3
|
+
/** Paired SDK transport + {@link McpServer} representing one MCP session. */
|
|
4
|
+
export interface SessionEntry<T extends SdkTransport = SdkTransport> {
|
|
5
|
+
readonly transport: T;
|
|
6
|
+
readonly server: McpServer;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Registry of {@link SessionEntry} pairs keyed by MCP session id. Multi-client transports need
|
|
10
|
+
* one {@link McpServer} per session because the SDK binds each server to a single transport.
|
|
11
|
+
*
|
|
12
|
+
* {@see https://github.com/modelcontextprotocol/typescript-sdk/blob/main/examples/server/src/simpleStreamableHttp.ts}
|
|
13
|
+
* {@see https://modelcontextprotocol.io/specification/2025-11-25/basic/transports#session-management}
|
|
14
|
+
*/
|
|
15
|
+
export declare class SessionRegistry<T extends SdkTransport = SdkTransport> {
|
|
16
|
+
private readonly sessions;
|
|
17
|
+
set(sessionId: string, entry: SessionEntry<T>): void;
|
|
18
|
+
get(sessionId: string): SessionEntry<T> | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Connects {@linkcode server} to {@linkcode transport}; closes both on rejection. The pair
|
|
21
|
+
* is not in the registry yet at this point (the SDK's {@linkcode T.onsessioninitialized}
|
|
22
|
+
* callback fires later, during {@linkcode T.handleRequest}), so failure here is an orphan
|
|
23
|
+
* cleanup, not a registry mutation.
|
|
24
|
+
*/
|
|
25
|
+
bindServer(server: McpServer, transport: T): Promise<void>;
|
|
26
|
+
/** Closes the {@link SessionEntry} for {@linkcode sessionId} (if any) and removes it. */
|
|
27
|
+
closeAndRemove(sessionId: string): Promise<void>;
|
|
28
|
+
/** Closes every registered transport + server pair and clears the registry. */
|
|
29
|
+
closeAll(): Promise<void>;
|
|
30
|
+
/** Closes both halves of {@linkcode entry}, logging (not propagating) any failures. */
|
|
31
|
+
private closeEntry;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=session-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../../../src/mcp/transports/session-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAG/F,6EAA6E;AAC7E,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY;IACjE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,qBAAa,eAAe,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAE/D,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAIpD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS;IAInD;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAShE,yFAAyF;IACnF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD,+EAA+E;IACzE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ/B,uFAAuF;YACzE,UAAU;CAYzB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { logger } from "../../logger.js";
|
|
2
|
+
/**
|
|
3
|
+
* Registry of {@link SessionEntry} pairs keyed by MCP session id. Multi-client transports need
|
|
4
|
+
* one {@link McpServer} per session because the SDK binds each server to a single transport.
|
|
5
|
+
*
|
|
6
|
+
* {@see https://github.com/modelcontextprotocol/typescript-sdk/blob/main/examples/server/src/simpleStreamableHttp.ts}
|
|
7
|
+
* {@see https://modelcontextprotocol.io/specification/2025-11-25/basic/transports#session-management}
|
|
8
|
+
*/
|
|
9
|
+
export class SessionRegistry {
|
|
10
|
+
sessions = new Map();
|
|
11
|
+
set(sessionId, entry) {
|
|
12
|
+
this.sessions.set(sessionId, entry);
|
|
13
|
+
}
|
|
14
|
+
get(sessionId) {
|
|
15
|
+
return this.sessions.get(sessionId);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Connects {@linkcode server} to {@linkcode transport}; closes both on rejection. The pair
|
|
19
|
+
* is not in the registry yet at this point (the SDK's {@linkcode T.onsessioninitialized}
|
|
20
|
+
* callback fires later, during {@linkcode T.handleRequest}), so failure here is an orphan
|
|
21
|
+
* cleanup, not a registry mutation.
|
|
22
|
+
*/
|
|
23
|
+
async bindServer(server, transport) {
|
|
24
|
+
try {
|
|
25
|
+
await server.connect(transport);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
await this.closeEntry({ transport, server });
|
|
29
|
+
throw err;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Closes the {@link SessionEntry} for {@linkcode sessionId} (if any) and removes it. */
|
|
33
|
+
async closeAndRemove(sessionId) {
|
|
34
|
+
const entry = this.sessions.get(sessionId);
|
|
35
|
+
if (!entry)
|
|
36
|
+
return;
|
|
37
|
+
// delete first so a re-entrant call from `transport.onclose` is a no-op
|
|
38
|
+
this.sessions.delete(sessionId);
|
|
39
|
+
await this.closeEntry(entry);
|
|
40
|
+
}
|
|
41
|
+
/** Closes every registered transport + server pair and clears the registry. */
|
|
42
|
+
async closeAll() {
|
|
43
|
+
const entries = [...this.sessions.values()];
|
|
44
|
+
this.sessions.clear();
|
|
45
|
+
for (const entry of entries) {
|
|
46
|
+
await this.closeEntry(entry);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** Closes both halves of {@linkcode entry}, logging (not propagating) any failures. */
|
|
50
|
+
async closeEntry(entry) {
|
|
51
|
+
try {
|
|
52
|
+
await entry.transport.close();
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
logger.error({ err }, "transport.close() failed during session cleanup");
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
await entry.server.close();
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
logger.error({ err }, "server.close() failed during session cleanup");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=session-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../../../src/mcp/transports/session-registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAQxC;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IACT,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE/D,GAAG,CAAC,SAAiB,EAAE,KAAsB;QAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,MAAiB,EAAE,SAAY;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7C,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,yFAAyF;IACzF,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,wEAAwE;QACxE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,QAAQ;QACZ,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,uFAAuF;IAC/E,KAAK,CAAC,UAAU,CAAC,KAAsB;QAC7C,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,iDAAiD,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,8CAA8C,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -2,13 +2,24 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
2
2
|
import { HttpServer } from "../../mcp/transports/server.js";
|
|
3
3
|
import { Transport } from "../../mcp/transports/types.js";
|
|
4
4
|
export declare class SseTransport implements Transport {
|
|
5
|
-
private
|
|
5
|
+
private serverFactory;
|
|
6
6
|
private httpServer;
|
|
7
7
|
private sseMcpEndpointPath;
|
|
8
8
|
private sseMcpMessageEndpointPath;
|
|
9
9
|
private sessions;
|
|
10
|
-
constructor(
|
|
10
|
+
constructor(serverFactory: () => McpServer, httpServer: HttpServer, sseMcpEndpointPath?: string, sseMcpMessageEndpointPath?: string);
|
|
11
11
|
connect(): Promise<void>;
|
|
12
12
|
disconnect(): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Mints a per-session {@link McpServer} + {@link SSEServerTransport} pair, wires
|
|
15
|
+
* lifecycle callbacks, registers the session, then binds the server. Streamable HTTP gets
|
|
16
|
+
* the sessionId asynchronously via the SDK's {@linkcode onsessioninitialized} callback (which
|
|
17
|
+
* fires inside {@linkcode StreamableHTTPServerTransport.handleRequest}), so it can register
|
|
18
|
+
* lazily and a failed bind leaves no entry. SSE has no such callback — sessionId is known at
|
|
19
|
+
* construction — so we register first and roll back on bind rejection. Without the rollback
|
|
20
|
+
* a fast client could see {@linkcode SSEServerTransport.start}'s endpoint event, POST to
|
|
21
|
+
* {@linkcode sseMcpMessageEndpointPath} and race the {@linkcode sessions.set} call.
|
|
22
|
+
*/
|
|
23
|
+
private createSession;
|
|
13
24
|
}
|
|
14
25
|
//# sourceMappingURL=sse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/mcp/transports/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/mcp/transports/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAkBzD,qBAAa,YAAa,YAAW,SAAS;IAI1C,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,yBAAyB;IANnC,OAAO,CAAC,QAAQ,CAA6C;gBAGnD,aAAa,EAAE,MAAM,SAAS,EAC9B,UAAU,EAAE,UAAU,EACtB,kBAAkB,GAAE,MAAe,EACnC,yBAAyB,GAAE,MAAoB;IAGnD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmFxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;;;;;;;;OASG;YACW,aAAa;CA+C5B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { sdkTransports } from "../../confluent/node-deps.js";
|
|
2
2
|
import { logger } from "../../logger.js";
|
|
3
|
-
import {
|
|
3
|
+
import { SessionRegistry } from "../../mcp/transports/session-registry.js";
|
|
4
4
|
const sseErrorSchema = {
|
|
5
5
|
type: "object",
|
|
6
6
|
properties: {
|
|
@@ -8,13 +8,13 @@ const sseErrorSchema = {
|
|
|
8
8
|
},
|
|
9
9
|
};
|
|
10
10
|
export class SseTransport {
|
|
11
|
-
|
|
11
|
+
serverFactory;
|
|
12
12
|
httpServer;
|
|
13
13
|
sseMcpEndpointPath;
|
|
14
14
|
sseMcpMessageEndpointPath;
|
|
15
|
-
sessions =
|
|
16
|
-
constructor(
|
|
17
|
-
this.
|
|
15
|
+
sessions = new SessionRegistry();
|
|
16
|
+
constructor(serverFactory, httpServer, sseMcpEndpointPath = "/sse", sseMcpMessageEndpointPath = "/messages") {
|
|
17
|
+
this.serverFactory = serverFactory;
|
|
18
18
|
this.httpServer = httpServer;
|
|
19
19
|
this.sseMcpEndpointPath = sseMcpEndpointPath;
|
|
20
20
|
this.sseMcpMessageEndpointPath = sseMcpMessageEndpointPath;
|
|
@@ -30,25 +30,9 @@ export class SseTransport {
|
|
|
30
30
|
400: sseErrorSchema,
|
|
31
31
|
},
|
|
32
32
|
},
|
|
33
|
-
}, async (
|
|
33
|
+
}, async (_request, reply) => {
|
|
34
34
|
try {
|
|
35
|
-
|
|
36
|
-
const transport = new SSEServerTransport(this.sseMcpMessageEndpointPath, reply.raw);
|
|
37
|
-
// Get the session ID from the transport
|
|
38
|
-
const sessionId = transport.sessionId;
|
|
39
|
-
if (!sessionId) {
|
|
40
|
-
throw new Error("Failed to get session ID from transport");
|
|
41
|
-
}
|
|
42
|
-
// Store the session before connecting to ensure it's available for messages
|
|
43
|
-
this.sessions[sessionId] = transport;
|
|
44
|
-
// Set up cleanup on connection close
|
|
45
|
-
reply.raw.on("close", () => {
|
|
46
|
-
logger.info(`SSE connection closed for session ${sessionId}`);
|
|
47
|
-
delete this.sessions[sessionId];
|
|
48
|
-
});
|
|
49
|
-
// Connect the transport to the server
|
|
50
|
-
await this.server.connect(transport);
|
|
51
|
-
logger.info(`New SSE connection established for session ${sessionId}`);
|
|
35
|
+
await this.createSession(reply.raw);
|
|
52
36
|
}
|
|
53
37
|
catch (error) {
|
|
54
38
|
logger.error({ error }, "Failed to establish SSE connection");
|
|
@@ -82,14 +66,13 @@ export class SseTransport {
|
|
|
82
66
|
}, async (request, reply) => {
|
|
83
67
|
try {
|
|
84
68
|
const sessionId = request.query.sessionId;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (!transport) {
|
|
69
|
+
const entry = this.sessions.get(sessionId);
|
|
70
|
+
if (!entry) {
|
|
88
71
|
logger.warn(`No transport found for sessionId: ${sessionId}`);
|
|
89
72
|
reply.code(400).send({ error: "No transport found for sessionId" });
|
|
90
73
|
return;
|
|
91
74
|
}
|
|
92
|
-
await transport.handlePostMessage(request.raw, reply.raw, request.body);
|
|
75
|
+
await entry.transport.handlePostMessage(request.raw, reply.raw, request.body);
|
|
93
76
|
}
|
|
94
77
|
catch (error) {
|
|
95
78
|
logger.error({ error }, "Failed to process SSE message");
|
|
@@ -98,29 +81,58 @@ export class SseTransport {
|
|
|
98
81
|
}
|
|
99
82
|
}
|
|
100
83
|
});
|
|
101
|
-
// POST ping endpoint for health checks
|
|
102
|
-
fastify.post("/ping", {
|
|
103
|
-
schema: {
|
|
104
|
-
tags: ["mcp"],
|
|
105
|
-
summary: "JSON-RPC 2.0 ping endpoint",
|
|
106
|
-
body: pingRequestSchema,
|
|
107
|
-
response: {
|
|
108
|
-
200: pingResponseSchema,
|
|
109
|
-
},
|
|
110
|
-
},
|
|
111
|
-
}, pingHandler());
|
|
112
84
|
logger.info("SSE transport routes registered");
|
|
113
85
|
}
|
|
114
86
|
async disconnect() {
|
|
115
87
|
logger.info("Cleaning up SSE transport sessions...");
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
88
|
+
await this.sessions.closeAll();
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Mints a per-session {@link McpServer} + {@link SSEServerTransport} pair, wires
|
|
92
|
+
* lifecycle callbacks, registers the session, then binds the server. Streamable HTTP gets
|
|
93
|
+
* the sessionId asynchronously via the SDK's {@linkcode onsessioninitialized} callback (which
|
|
94
|
+
* fires inside {@linkcode StreamableHTTPServerTransport.handleRequest}), so it can register
|
|
95
|
+
* lazily and a failed bind leaves no entry. SSE has no such callback — sessionId is known at
|
|
96
|
+
* construction — so we register first and roll back on bind rejection. Without the rollback
|
|
97
|
+
* a fast client could see {@linkcode SSEServerTransport.start}'s endpoint event, POST to
|
|
98
|
+
* {@linkcode sseMcpMessageEndpointPath} and race the {@linkcode sessions.set} call.
|
|
99
|
+
*/
|
|
100
|
+
async createSession(rawResponse) {
|
|
101
|
+
const perSessionServer = this.serverFactory();
|
|
102
|
+
const transport = new sdkTransports.SSEServerTransport(this.sseMcpMessageEndpointPath, rawResponse);
|
|
103
|
+
const sessionId = transport.sessionId;
|
|
104
|
+
if (!sessionId) {
|
|
105
|
+
// SDK's SSEServerTransport always assigns a sessionId in its constructor; this branch is
|
|
106
|
+
// defensive. Close the just-created pair before throwing so we don't leak the McpServer
|
|
107
|
+
// and the SSE response stays detached.
|
|
108
|
+
await transport.close();
|
|
109
|
+
await perSessionServer.close();
|
|
110
|
+
throw new Error("Failed to get session ID from transport");
|
|
111
|
+
}
|
|
112
|
+
// fires on every close path (network drop, server-initiated, etc.) so abandoned sessions
|
|
113
|
+
// don't leak; closeAndRemove is idempotent against the not-yet-registered case
|
|
114
|
+
transport.onclose = () => {
|
|
115
|
+
this.sessions.closeAndRemove(sessionId).catch((err) => {
|
|
116
|
+
logger.error({ err, sessionId }, "Failed to close SSE session on transport.onclose");
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
this.sessions.set(sessionId, {
|
|
120
|
+
transport,
|
|
121
|
+
server: perSessionServer,
|
|
123
122
|
});
|
|
123
|
+
try {
|
|
124
|
+
await this.sessions.bindServer(perSessionServer, transport);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
// bindServer already closed both halves via its internal closeEntry; we still call
|
|
128
|
+
// closeAndRemove here because bindServer doesn't know the registry key and the entry
|
|
129
|
+
// is what makes the session reachable to incoming POSTs. The duplicate close is safe:
|
|
130
|
+
// SDK transport.close() and McpServer.close() are both idempotent.
|
|
131
|
+
await this.sessions.closeAndRemove(sessionId);
|
|
132
|
+
throw err;
|
|
133
|
+
}
|
|
134
|
+
logger.info(`New SSE connection established for session ${sessionId}`);
|
|
135
|
+
return transport;
|
|
124
136
|
}
|
|
125
137
|
}
|
|
126
138
|
//# sourceMappingURL=sse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/mcp/transports/sse.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/mcp/transports/sse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { MCPServerConfiguration } from "./config/index.js";
|
|
2
|
+
import { BaseClientManager } from "./confluent/base-client-manager.js";
|
|
3
|
+
import { OAuthHolder } from "./confluent/oauth/oauth-holder.js";
|
|
4
|
+
/**
|
|
5
|
+
* Aggregate of all runtime state threaded through the server.
|
|
6
|
+
*
|
|
7
|
+
* Carries config and per-connection client managers.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ServerRuntime {
|
|
10
|
+
readonly config: MCPServerConfiguration;
|
|
11
|
+
readonly clientManagers: Record<string, BaseClientManager>;
|
|
12
|
+
/**
|
|
13
|
+
* The active OAuth holder when any connection in the config has `type === "oauth"`.
|
|
14
|
+
* Constructed by {@link ServerRuntime.fromConfig}; `undefined` on api_key paths.
|
|
15
|
+
* Construction is side-effect-free — PKCE runs lazily on the first
|
|
16
|
+
* `holder.ensureLoggedIn()` call, which the MCP tool-call wrapper invokes
|
|
17
|
+
* before any handler that needs Confluent access.
|
|
18
|
+
*/
|
|
19
|
+
readonly oauthHolder: OAuthHolder | undefined;
|
|
20
|
+
constructor(config: MCPServerConfiguration, clientManagers: Record<string, BaseClientManager>, oauthHolder?: OAuthHolder | undefined);
|
|
21
|
+
/**
|
|
22
|
+
* Convenience accessor for the single-connection period.
|
|
23
|
+
* Remove (or make multi-connection-aware) when issue #151 lands.
|
|
24
|
+
*/
|
|
25
|
+
get clientManager(): BaseClientManager;
|
|
26
|
+
static fromConfig(config: MCPServerConfiguration): ServerRuntime;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=server-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-runtime.d.ts","sourceRoot":"","sources":["../src/server-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAG1E,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE;;;;GAIG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC3D;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;gBAG5C,MAAM,EAAE,sBAAsB,EAC9B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACjD,WAAW,GAAE,WAAW,GAAG,SAAqB;IAOlD;;;OAGG;IACH,IAAI,aAAa,IAAI,iBAAiB,CAarC;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,sBAAsB,GAAG,aAAa;CA4CjE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { constructDirectClientManager } from "./confluent/direct-client-manager.js";
|
|
2
|
+
import { OAuthClientManager } from "./confluent/oauth-client-manager.js";
|
|
3
|
+
import { OAuthHolder } from "./confluent/oauth/oauth-holder.js";
|
|
4
|
+
/**
|
|
5
|
+
* Aggregate of all runtime state threaded through the server.
|
|
6
|
+
*
|
|
7
|
+
* Carries config and per-connection client managers.
|
|
8
|
+
*/
|
|
9
|
+
export class ServerRuntime {
|
|
10
|
+
config;
|
|
11
|
+
clientManagers;
|
|
12
|
+
/**
|
|
13
|
+
* The active OAuth holder when any connection in the config has `type === "oauth"`.
|
|
14
|
+
* Constructed by {@link ServerRuntime.fromConfig}; `undefined` on api_key paths.
|
|
15
|
+
* Construction is side-effect-free — PKCE runs lazily on the first
|
|
16
|
+
* `holder.ensureLoggedIn()` call, which the MCP tool-call wrapper invokes
|
|
17
|
+
* before any handler that needs Confluent access.
|
|
18
|
+
*/
|
|
19
|
+
oauthHolder;
|
|
20
|
+
constructor(config, clientManagers, oauthHolder = undefined) {
|
|
21
|
+
this.config = config;
|
|
22
|
+
this.clientManagers = clientManagers;
|
|
23
|
+
this.oauthHolder = oauthHolder;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convenience accessor for the single-connection period.
|
|
27
|
+
* Remove (or make multi-connection-aware) when issue #151 lands.
|
|
28
|
+
*/
|
|
29
|
+
get clientManager() {
|
|
30
|
+
const managers = Object.values(this.clientManagers);
|
|
31
|
+
if (managers.length === 0) {
|
|
32
|
+
throw new Error("ServerRuntime has no client managers");
|
|
33
|
+
}
|
|
34
|
+
if (managers.length > 1) {
|
|
35
|
+
// enforceSingleConnectionOnly() in config/models.ts should prevent this at parse time;
|
|
36
|
+
// this guard is the runtime mirror of that constraint.
|
|
37
|
+
throw new Error("ServerRuntime has multiple client managers; use clientManagers[id] directly");
|
|
38
|
+
}
|
|
39
|
+
return managers[0];
|
|
40
|
+
}
|
|
41
|
+
static fromConfig(config) {
|
|
42
|
+
const oauthConns = Object.values(config.connections).filter((c) => c.type === "oauth");
|
|
43
|
+
if (oauthConns.length > 1) {
|
|
44
|
+
// `enforceSingleConnectionOnly()` already prevents this today; keep the
|
|
45
|
+
// defensive check so that when multi-connection support lands (#151),
|
|
46
|
+
// multi-OAuth is rejected explicitly rather than silently picking one.
|
|
47
|
+
throw new Error(`Multiple OAuth connections defined in configuration; only one is supported`);
|
|
48
|
+
}
|
|
49
|
+
const oauthConn = oauthConns[0];
|
|
50
|
+
const oauthHolder = oauthConn
|
|
51
|
+
? new OAuthHolder(oauthConn.ccloud_env)
|
|
52
|
+
: undefined;
|
|
53
|
+
// Construct a client manager for each connection in the config.
|
|
54
|
+
// (although currently there will only be one, see `enforceSingleConnectionOnly()`)
|
|
55
|
+
// When OAuth is in play, every connection's manager is bearer-auth-backed by
|
|
56
|
+
// the shared holder; otherwise, fall back to the per-connection direct factory.
|
|
57
|
+
const clientManagers = Object.fromEntries(Object.entries(config.connections).map(([id, conn]) => {
|
|
58
|
+
if (oauthHolder && oauthConn) {
|
|
59
|
+
return [
|
|
60
|
+
id,
|
|
61
|
+
new OAuthClientManager(oauthHolder, oauthConn.ccloud_env, oauthConn.kafka_debug),
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
// No OAuth connection found, so every connection is direct.
|
|
65
|
+
if (conn.type !== "direct") {
|
|
66
|
+
throw new Error(`Internal error: connection ${id} is not direct but no OAuth holder was constructed`);
|
|
67
|
+
}
|
|
68
|
+
return [id, constructDirectClientManager(conn)];
|
|
69
|
+
}));
|
|
70
|
+
return new ServerRuntime(config, clientManagers, oauthHolder);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=server-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-runtime.js","sourceRoot":"","sources":["../src/server-runtime.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACf,MAAM,CAAyB;IAC/B,cAAc,CAAoC;IAC3D;;;;;;OAMG;IACM,WAAW,CAA0B;IAE9C,YACE,MAA8B,EAC9B,cAAiD,EACjD,cAAuC,SAAS;QAEhD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,IAAI,aAAa;QACf,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,uFAAuF;YACvF,uDAAuD;YACvD,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,CAAC,CAAE,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,MAA8B;QAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CACzD,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CACtD,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,wEAAwE;YACxE,sEAAsE;YACtE,uEAAuE;YACvE,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,SAAS;YAC3B,CAAC,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC;YACvC,CAAC,CAAC,SAAS,CAAC;QAEd,gEAAgE;QAChE,mFAAmF;QACnF,6EAA6E;QAC7E,gFAAgF;QAChF,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CACvC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;YACpD,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;gBAC7B,OAAO;oBACL,EAAE;oBACF,IAAI,kBAAkB,CACpB,WAAW,EACX,SAAS,CAAC,UAAU,EACpB,SAAS,CAAC,WAAW,CACtB;iBACO,CAAC;YACb,CAAC;YACD,4DAA4D;YAC5D,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,8BAA8B,EAAE,oDAAoD,CACrF,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,EAAE,EAAE,4BAA4B,CAAC,IAAI,CAAC,CAAU,CAAC;QAC3D,CAAC,CAAC,CACH,CAAC;QACF,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;IAChE,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@confluentinc/mcp-confluent",
|
|
3
3
|
"description": "Confluent MCP Server",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.3.0",
|
|
5
5
|
"author": "Confluent Inc.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -25,10 +25,15 @@
|
|
|
25
25
|
"homepage": "https://www.confluent.io/blog/ai-agents-using-anthropic-mcp/",
|
|
26
26
|
"scripts": {
|
|
27
27
|
"dev": "concurrently \"tsc -p tsconfig.build.json --watch\" \"tsc-alias -p tsconfig.build.json --watch\"",
|
|
28
|
-
"test": "vitest run",
|
|
29
|
-
"test:coverage": "
|
|
30
|
-
"test:
|
|
31
|
-
"test:
|
|
28
|
+
"test": "npm run build && vitest run",
|
|
29
|
+
"test:coverage": "npm run test -- --coverage",
|
|
30
|
+
"test:unit": "vitest run --project unit --outputFile.junit=TEST-unit.xml",
|
|
31
|
+
"test:unit:coverage": "npm run test:unit -- --coverage",
|
|
32
|
+
"test:unit:watch": "vitest --project unit",
|
|
33
|
+
"test:integration": "npm run build && vitest run --project integration --outputFile.junit=TEST-integration.xml",
|
|
34
|
+
"test:integration:coverage": "npm run test:integration -- --coverage",
|
|
35
|
+
"test:harness": "vitest run --project harness --reporter=verbose",
|
|
36
|
+
"typecheck": "tsc --noEmit",
|
|
32
37
|
"start": "node dist/index.js --env-file .env",
|
|
33
38
|
"start:http": "node dist/index.js --env-file .env --transport http",
|
|
34
39
|
"start:sse": "node dist/index.js --env-file .env --transport sse",
|
|
@@ -38,8 +43,10 @@
|
|
|
38
43
|
"lint:fix": "eslint . --fix",
|
|
39
44
|
"format": "prettier --write \"**/*.+(js|ts|json)\"",
|
|
40
45
|
"build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
|
|
46
|
+
"generate:openapi-types": "openapi-typescript ./openapi.json -o ./src/confluent/openapi-schema.d.ts --empty-objects-unknown",
|
|
41
47
|
"print:schema": "node dist/print-md-schema.js",
|
|
42
48
|
"inspector": "npx @modelcontextprotocol/inspector node dist/index.js --env-file .env",
|
|
49
|
+
"inspector:yaml": "node scripts/inspector-yaml.mjs",
|
|
43
50
|
"prepare": "husky",
|
|
44
51
|
"prepack": "npm run build && node scripts/inject-build-config.mjs"
|
|
45
52
|
},
|
|
@@ -48,7 +55,7 @@
|
|
|
48
55
|
"@types/content-type": "^1.1.9",
|
|
49
56
|
"@types/eslint__js": "^8.42.3",
|
|
50
57
|
"@types/node": "^24.0.4",
|
|
51
|
-
"@types/
|
|
58
|
+
"@types/turndown": "^5.0.6",
|
|
52
59
|
"@types/ws": "^8.18.1",
|
|
53
60
|
"@typescript-eslint/eslint-plugin": "^8.35.0",
|
|
54
61
|
"@typescript-eslint/parser": "^8.35.0",
|
|
@@ -57,11 +64,12 @@
|
|
|
57
64
|
"eslint": "^9.29.0",
|
|
58
65
|
"eslint-config-prettier": "^10.1.5",
|
|
59
66
|
"eslint-plugin-prettier": "^5.5.1",
|
|
67
|
+
"eslint-plugin-unused-imports": "^4.4.1",
|
|
60
68
|
"globals": "^16.2.0",
|
|
61
69
|
"husky": "^9.1.7",
|
|
62
70
|
"openapi-typescript": "^7.8.0",
|
|
63
71
|
"prettier": "3.6.1",
|
|
64
|
-
"
|
|
72
|
+
"prettier-plugin-organize-imports": "^4.3.0",
|
|
65
73
|
"tsc-alias": "^1.8.16",
|
|
66
74
|
"typescript": "^5.8.3",
|
|
67
75
|
"typescript-eslint": "^8.35.0",
|
|
@@ -75,18 +83,26 @@
|
|
|
75
83
|
"@fastify/swagger-ui": "^5.2.3",
|
|
76
84
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
77
85
|
"@segment/analytics-node": "^3.0.0",
|
|
86
|
+
"cheerio": "^1.2.0",
|
|
78
87
|
"commander": "^14.0.0",
|
|
79
88
|
"dotenv": "^16.5.0",
|
|
80
89
|
"fastify": "^5.7.3",
|
|
90
|
+
"open": "^10.2.0",
|
|
81
91
|
"openapi-fetch": "^0.14.0",
|
|
82
92
|
"pino": "^10.1.0",
|
|
83
|
-
"
|
|
93
|
+
"pino-pretty": "^13.1.3",
|
|
94
|
+
"properties-file": "^3.5.12",
|
|
95
|
+
"turndown": "^7.2.4",
|
|
96
|
+
"yaml": "^2.8.3"
|
|
84
97
|
},
|
|
85
98
|
"overrides": {
|
|
86
99
|
"zod": "^4.0"
|
|
87
100
|
},
|
|
88
101
|
"files": [
|
|
89
|
-
"dist"
|
|
102
|
+
"dist",
|
|
103
|
+
"config.example.yaml",
|
|
104
|
+
"config.oauth.example.yaml",
|
|
105
|
+
"assets/oauth-templates"
|
|
90
106
|
],
|
|
91
107
|
"engines": {
|
|
92
108
|
"node": ">=22"
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Environment } from "../env.js";
|
|
2
|
-
/**
|
|
3
|
-
* Ensures a parameter exists either from the provided value or environment variable. Favor the provided param over the environment variable when truthy.
|
|
4
|
-
* @param envVarName - The name of the environment variable to check
|
|
5
|
-
* @param errorMessage - The error message to throw if neither parameter nor environment variable exists
|
|
6
|
-
* @param param - Optional parameter value to use instead of environment variable
|
|
7
|
-
* @returns The parameter value or environment variable value with its original type
|
|
8
|
-
* @throws {Error} When neither parameter nor environment variable exists
|
|
9
|
-
*/
|
|
10
|
-
export declare const getEnsuredParam: <T extends Environment[keyof Environment]>(envVarName: keyof Environment, errorMessage: string, param?: T) => T;
|
|
11
|
-
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/confluent/helpers.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,WAAW,CAAC,MAAM,WAAW,CAAC,EACtE,YAAY,MAAM,WAAW,EAC7B,cAAc,MAAM,EACpB,QAAQ,CAAC,KACR,CAMF,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import env from "../env.js";
|
|
2
|
-
/**
|
|
3
|
-
* Ensures a parameter exists either from the provided value or environment variable. Favor the provided param over the environment variable when truthy.
|
|
4
|
-
* @param envVarName - The name of the environment variable to check
|
|
5
|
-
* @param errorMessage - The error message to throw if neither parameter nor environment variable exists
|
|
6
|
-
* @param param - Optional parameter value to use instead of environment variable
|
|
7
|
-
* @returns The parameter value or environment variable value with its original type
|
|
8
|
-
* @throws {Error} When neither parameter nor environment variable exists
|
|
9
|
-
*/
|
|
10
|
-
export const getEnsuredParam = (envVarName, errorMessage, param) => {
|
|
11
|
-
const finalParam = param || env[envVarName];
|
|
12
|
-
if (!finalParam) {
|
|
13
|
-
throw new Error(`${errorMessage}`);
|
|
14
|
-
}
|
|
15
|
-
return finalParam;
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/confluent/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,GAAoB,MAAM,aAAa,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,UAA6B,EAC7B,YAAoB,EACpB,KAAS,EACN,EAAE;IACL,MAAM,UAAU,GAAG,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,UAAe,CAAC;AACzB,CAAC,CAAC"}
|