@confluentinc/mcp-confluent 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +302 -0
  3. package/dist/cli.d.ts +14 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +53 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/confluent/client-manager.d.ts +93 -0
  8. package/dist/confluent/client-manager.d.ts.map +1 -0
  9. package/dist/confluent/client-manager.js +148 -0
  10. package/dist/confluent/client-manager.js.map +1 -0
  11. package/dist/confluent/helpers.d.ts +11 -0
  12. package/dist/confluent/helpers.d.ts.map +1 -0
  13. package/dist/confluent/helpers.js +17 -0
  14. package/dist/confluent/helpers.js.map +1 -0
  15. package/dist/confluent/middleware.d.ts +15 -0
  16. package/dist/confluent/middleware.d.ts.map +1 -0
  17. package/dist/confluent/middleware.js +43 -0
  18. package/dist/confluent/middleware.js.map +1 -0
  19. package/dist/confluent/schema.d.ts +4 -0
  20. package/dist/confluent/schema.d.ts.map +1 -0
  21. package/dist/confluent/schema.js +4 -0
  22. package/dist/confluent/schema.js.map +1 -0
  23. package/dist/confluent/tools/base-tools.d.ts +19 -0
  24. package/dist/confluent/tools/base-tools.d.ts.map +1 -0
  25. package/dist/confluent/tools/base-tools.js +16 -0
  26. package/dist/confluent/tools/base-tools.js.map +1 -0
  27. package/dist/confluent/tools/handlers/catalog/add-tag-to-topic.d.ts +8 -0
  28. package/dist/confluent/tools/handlers/catalog/add-tag-to-topic.d.ts.map +1 -0
  29. package/dist/confluent/tools/handlers/catalog/add-tag-to-topic.js +47 -0
  30. package/dist/confluent/tools/handlers/catalog/add-tag-to-topic.js.map +1 -0
  31. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic copy.d.ts +8 -0
  32. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic copy.d.ts.map +1 -0
  33. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic copy.js +47 -0
  34. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic copy.js.map +1 -0
  35. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts +8 -0
  36. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.d.ts.map +1 -0
  37. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js +47 -0
  38. package/dist/confluent/tools/handlers/catalog/add-tags-to-topic.js.map +1 -0
  39. package/dist/confluent/tools/handlers/catalog/create-topic-tags copy.d.ts +8 -0
  40. package/dist/confluent/tools/handlers/catalog/create-topic-tags copy.d.ts.map +1 -0
  41. package/dist/confluent/tools/handlers/catalog/create-topic-tags copy.js +52 -0
  42. package/dist/confluent/tools/handlers/catalog/create-topic-tags copy.js.map +1 -0
  43. package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts +8 -0
  44. package/dist/confluent/tools/handlers/catalog/create-topic-tags.d.ts.map +1 -0
  45. package/dist/confluent/tools/handlers/catalog/create-topic-tags.js +52 -0
  46. package/dist/confluent/tools/handlers/catalog/create-topic-tags.js.map +1 -0
  47. package/dist/confluent/tools/handlers/catalog/delete-tag copy.d.ts +8 -0
  48. package/dist/confluent/tools/handlers/catalog/delete-tag copy.d.ts.map +1 -0
  49. package/dist/confluent/tools/handlers/catalog/delete-tag copy.js +42 -0
  50. package/dist/confluent/tools/handlers/catalog/delete-tag copy.js.map +1 -0
  51. package/dist/confluent/tools/handlers/catalog/delete-tag-for-entity.d.ts +8 -0
  52. package/dist/confluent/tools/handlers/catalog/delete-tag-for-entity.d.ts.map +1 -0
  53. package/dist/confluent/tools/handlers/catalog/delete-tag-for-entity.js +56 -0
  54. package/dist/confluent/tools/handlers/catalog/delete-tag-for-entity.js.map +1 -0
  55. package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts +8 -0
  56. package/dist/confluent/tools/handlers/catalog/delete-tag.d.ts.map +1 -0
  57. package/dist/confluent/tools/handlers/catalog/delete-tag.js +42 -0
  58. package/dist/confluent/tools/handlers/catalog/delete-tag.js.map +1 -0
  59. package/dist/confluent/tools/handlers/catalog/list-.d.ts +8 -0
  60. package/dist/confluent/tools/handlers/catalog/list-.d.ts.map +1 -0
  61. package/dist/confluent/tools/handlers/catalog/list-.js +35 -0
  62. package/dist/confluent/tools/handlers/catalog/list-.js.map +1 -0
  63. package/dist/confluent/tools/handlers/catalog/list-tags.d.ts +8 -0
  64. package/dist/confluent/tools/handlers/catalog/list-tags.d.ts.map +1 -0
  65. package/dist/confluent/tools/handlers/catalog/list-tags.js +35 -0
  66. package/dist/confluent/tools/handlers/catalog/list-tags.js.map +1 -0
  67. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts +8 -0
  68. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.d.ts.map +1 -0
  69. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js +56 -0
  70. package/dist/confluent/tools/handlers/catalog/remove-tag-from-entity.js.map +1 -0
  71. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts +182 -0
  72. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts.map +1 -0
  73. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js +147 -0
  74. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.js.map +1 -0
  75. package/dist/confluent/tools/handlers/connect/create-connector-handler copy.d.ts +8 -0
  76. package/dist/confluent/tools/handlers/connect/create-connector-handler copy.d.ts.map +1 -0
  77. package/dist/confluent/tools/handlers/connect/create-connector-handler copy.js +84 -0
  78. package/dist/confluent/tools/handlers/connect/create-connector-handler copy.js.map +1 -0
  79. package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts +8 -0
  80. package/dist/confluent/tools/handlers/connect/create-connector-handler.d.ts.map +1 -0
  81. package/dist/confluent/tools/handlers/connect/create-connector-handler.js +95 -0
  82. package/dist/confluent/tools/handlers/connect/create-connector-handler.js.map +1 -0
  83. package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts +8 -0
  84. package/dist/confluent/tools/handlers/connect/delete-connector-handler.d.ts.map +1 -0
  85. package/dist/confluent/tools/handlers/connect/delete-connector-handler.js +59 -0
  86. package/dist/confluent/tools/handlers/connect/delete-connector-handler.js.map +1 -0
  87. package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts +8 -0
  88. package/dist/confluent/tools/handlers/connect/list-connectors-handler.d.ts.map +1 -0
  89. package/dist/confluent/tools/handlers/connect/list-connectors-handler.js +56 -0
  90. package/dist/confluent/tools/handlers/connect/list-connectors-handler.js.map +1 -0
  91. package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts +8 -0
  92. package/dist/confluent/tools/handlers/connect/read-connectors-handler.d.ts.map +1 -0
  93. package/dist/confluent/tools/handlers/connect/read-connectors-handler.js +62 -0
  94. package/dist/confluent/tools/handlers/connect/read-connectors-handler.js.map +1 -0
  95. package/dist/confluent/tools/handlers/entity/create-tags-for-topics.d.ts +8 -0
  96. package/dist/confluent/tools/handlers/entity/create-tags-for-topics.d.ts.map +1 -0
  97. package/dist/confluent/tools/handlers/entity/create-tags-for-topics.js +52 -0
  98. package/dist/confluent/tools/handlers/entity/create-tags-for-topics.js.map +1 -0
  99. package/dist/confluent/tools/handlers/entity/create-topic-tags.d.ts +8 -0
  100. package/dist/confluent/tools/handlers/entity/create-topic-tags.d.ts.map +1 -0
  101. package/dist/confluent/tools/handlers/entity/create-topic-tags.js +52 -0
  102. package/dist/confluent/tools/handlers/entity/create-topic-tags.js.map +1 -0
  103. package/dist/confluent/tools/handlers/entity/create-topicc-tags.d.ts +8 -0
  104. package/dist/confluent/tools/handlers/entity/create-topicc-tags.d.ts.map +1 -0
  105. package/dist/confluent/tools/handlers/entity/create-topicc-tags.js +52 -0
  106. package/dist/confluent/tools/handlers/entity/create-topicc-tags.js.map +1 -0
  107. package/dist/confluent/tools/handlers/entity/create-topics-tags.d.ts +8 -0
  108. package/dist/confluent/tools/handlers/entity/create-topics-tags.d.ts.map +1 -0
  109. package/dist/confluent/tools/handlers/entity/create-topics-tags.js +52 -0
  110. package/dist/confluent/tools/handlers/entity/create-topics-tags.js.map +1 -0
  111. package/dist/confluent/tools/handlers/entity/topics-with-tags-handler copy.d.ts +8 -0
  112. package/dist/confluent/tools/handlers/entity/topics-with-tags-handler copy.d.ts.map +1 -0
  113. package/dist/confluent/tools/handlers/entity/topics-with-tags-handler copy.js +39 -0
  114. package/dist/confluent/tools/handlers/entity/topics-with-tags-handler copy.js.map +1 -0
  115. package/dist/confluent/tools/handlers/entity/topics-with-tags-handler.d.ts +8 -0
  116. package/dist/confluent/tools/handlers/entity/topics-with-tags-handler.d.ts.map +1 -0
  117. package/dist/confluent/tools/handlers/entity/topics-with-tags-handler.js +39 -0
  118. package/dist/confluent/tools/handlers/entity/topics-with-tags-handler.js.map +1 -0
  119. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts +213 -0
  120. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts.map +1 -0
  121. package/dist/confluent/tools/handlers/environments/list-environments-handler.js +130 -0
  122. package/dist/confluent/tools/handlers/environments/list-environments-handler.js.map +1 -0
  123. package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts +8 -0
  124. package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts.map +1 -0
  125. package/dist/confluent/tools/handlers/environments/read-environment-handler.js +84 -0
  126. package/dist/confluent/tools/handlers/environments/read-environment-handler.js.map +1 -0
  127. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts +8 -0
  128. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.d.ts.map +1 -0
  129. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js +100 -0
  130. package/dist/confluent/tools/handlers/flink/create-flink-statement-handler.js.map +1 -0
  131. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts +8 -0
  132. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.d.ts.map +1 -0
  133. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js +63 -0
  134. package/dist/confluent/tools/handlers/flink/delete-flink-statement-handler.js.map +1 -0
  135. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts +8 -0
  136. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -0
  137. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +80 -0
  138. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -0
  139. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts +8 -0
  140. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.d.ts.map +1 -0
  141. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.js +83 -0
  142. package/dist/confluent/tools/handlers/flink/read-flink-statement-handler.js.map +1 -0
  143. package/dist/confluent/tools/handlers/kafka/alter-topic-config copy.d.ts +14 -0
  144. package/dist/confluent/tools/handlers/kafka/alter-topic-config copy.d.ts.map +1 -0
  145. package/dist/confluent/tools/handlers/kafka/alter-topic-config copy.js +61 -0
  146. package/dist/confluent/tools/handlers/kafka/alter-topic-config copy.js.map +1 -0
  147. package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts +14 -0
  148. package/dist/confluent/tools/handlers/kafka/alter-topic-config.d.ts.map +1 -0
  149. package/dist/confluent/tools/handlers/kafka/alter-topic-config.js +61 -0
  150. package/dist/confluent/tools/handlers/kafka/alter-topic-config.js.map +1 -0
  151. package/dist/confluent/tools/handlers/kafka/create-topics-handler copy.d.ts +8 -0
  152. package/dist/confluent/tools/handlers/kafka/create-topics-handler copy.d.ts.map +1 -0
  153. package/dist/confluent/tools/handlers/kafka/create-topics-handler copy.js +28 -0
  154. package/dist/confluent/tools/handlers/kafka/create-topics-handler copy.js.map +1 -0
  155. package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts +8 -0
  156. package/dist/confluent/tools/handlers/kafka/create-topics-handler.d.ts.map +1 -0
  157. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +28 -0
  158. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -0
  159. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts +8 -0
  160. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.d.ts.map +1 -0
  161. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +23 -0
  162. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -0
  163. package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts +8 -0
  164. package/dist/confluent/tools/handlers/kafka/list-topics-handler.d.ts.map +1 -0
  165. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +22 -0
  166. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -0
  167. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts +8 -0
  168. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.d.ts.map +1 -0
  169. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +37 -0
  170. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -0
  171. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts +8 -0
  172. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -0
  173. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +52 -0
  174. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -0
  175. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler copy.d.ts +8 -0
  176. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler copy.d.ts.map +1 -0
  177. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler copy.js +45 -0
  178. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler copy.js.map +1 -0
  179. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts +8 -0
  180. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.d.ts.map +1 -0
  181. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js +53 -0
  182. package/dist/confluent/tools/handlers/search/search-topic-by-tag-handler.js.map +1 -0
  183. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts +8 -0
  184. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.d.ts.map +1 -0
  185. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js +45 -0
  186. package/dist/confluent/tools/handlers/search/search-topics-by-name-handler.js.map +1 -0
  187. package/dist/confluent/tools/handlers/search/topics-with-tags-handler.d.ts +8 -0
  188. package/dist/confluent/tools/handlers/search/topics-with-tags-handler.d.ts.map +1 -0
  189. package/dist/confluent/tools/handlers/search/topics-with-tags-handler.js +39 -0
  190. package/dist/confluent/tools/handlers/search/topics-with-tags-handler.js.map +1 -0
  191. package/dist/confluent/tools/tool-factory.d.ts +9 -0
  192. package/dist/confluent/tools/tool-factory.d.ts.map +1 -0
  193. package/dist/confluent/tools/tool-factory.js +70 -0
  194. package/dist/confluent/tools/tool-factory.js.map +1 -0
  195. package/dist/confluent/tools/tool-name.d.ts +27 -0
  196. package/dist/confluent/tools/tool-name.d.ts.map +1 -0
  197. package/dist/confluent/tools/tool-name.js +28 -0
  198. package/dist/confluent/tools/tool-name.js.map +1 -0
  199. package/dist/env-schema.d.ts +67 -0
  200. package/dist/env-schema.d.ts.map +1 -0
  201. package/dist/env-schema.js +111 -0
  202. package/dist/env-schema.js.map +1 -0
  203. package/dist/env.d.ts +36 -0
  204. package/dist/env.d.ts.map +1 -0
  205. package/dist/env.js +40 -0
  206. package/dist/env.js.map +1 -0
  207. package/dist/index.d.ts +3 -0
  208. package/dist/index.d.ts.map +1 -0
  209. package/dist/index.js +70 -0
  210. package/dist/index.js.map +1 -0
  211. package/dist/lazy.d.ts +65 -0
  212. package/dist/lazy.d.ts.map +1 -0
  213. package/dist/lazy.js +106 -0
  214. package/dist/lazy.js.map +1 -0
  215. package/dist/print-md-schema.d.ts +2 -0
  216. package/dist/print-md-schema.d.ts.map +1 -0
  217. package/dist/print-md-schema.js +96 -0
  218. package/dist/print-md-schema.js.map +1 -0
  219. package/package.json +68 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Confluent Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,302 @@
1
+ # mcp-confluent
2
+
3
+ An MCP server implementation that enables AI assistants to interact with Confluent Kafka and Confluent Cloud REST APIs. This server allows AI tools like Claude Desktop and Goose CLI to manage Kafka topics, connectors, and Flink SQL statements through natural language interactions.
4
+
5
+ ## Demo
6
+
7
+ ### Goose CLI
8
+
9
+ ![Goose CLI Demo](assets/goose-cli-demo.gif)
10
+
11
+ ### Claude Desktop
12
+
13
+ ![Claude Desktop Demo](assets/claude-desktop-demo.gif)
14
+
15
+ ## Table of Contents
16
+
17
+ - [mcp-confluent](#mcp-confluent)
18
+ - [Demo](#demo)
19
+ - [Goose CLI](#goose-cli)
20
+ - [Claude Desktop](#claude-desktop)
21
+ - [Table of Contents](#table-of-contents)
22
+ - [User Guide](#user-guide)
23
+ - [Getting Started](#getting-started)
24
+ - [Configuration](#configuration)
25
+ - [Environment Variables Reference](#environment-variables-reference)
26
+ - [Usage](#usage)
27
+ - [Configuring Claude Desktop](#configuring-claude-desktop)
28
+ - [Configuring Goose CLI](#configuring-goose-cli)
29
+ - [Developer Guide](#developer-guide)
30
+ - [Project Structure](#project-structure)
31
+ - [Building and Running](#building-and-running)
32
+ - [Testing](#testing)
33
+ - [MCP Inspector](#mcp-inspector)
34
+ - [Adding a New Tool](#adding-a-new-tool)
35
+ - [Generating Types](#generating-types)
36
+ - [Contributing](#contributing)
37
+
38
+ ## User Guide
39
+
40
+ ### Getting Started
41
+
42
+ 1. **Create a `.env` file:** Copy the example `.env` file structure (shown below) into a new file named `.env` in the root of your project.
43
+ 2. **Populate the `.env` file:** Fill in the necessary values for your Confluent Cloud environment. See the [Configuration](#configuration) section for details on each variable.
44
+ 3. **Install Node.js** (if not already installed)
45
+ - We recommend using [NVM](https://github.com/nvm-sh/nvm) (Node Version Manager) to manage Node.js versions
46
+ - Install and use Node.js:
47
+
48
+ ```bash
49
+ nvm install 22
50
+ nvm use 22
51
+ ```
52
+
53
+ ### Configuration
54
+
55
+ Create a `.env` file in the root directory of your project with the following configuration:
56
+
57
+ <details>
58
+ <summary>Example .env file structure</summary>
59
+
60
+ ```properties
61
+ # .env file
62
+ BOOTSTRAP_SERVERS="pkc-v12gj.us-east4.gcp.confluent.cloud:9092"
63
+ KAFKA_API_KEY="..."
64
+ KAFKA_API_SECRET="..."
65
+ KAFKA_REST_ENDPOINT="https://pkc-v12gj.us-east4.gcp.confluent.cloud:443"
66
+ KAFKA_CLUSTER_ID=""
67
+ KAFKA_ENV_ID="env-..."
68
+ FLINK_ENV_ID="env-..."
69
+ FLINK_ORG_ID=""
70
+ FLINK_REST_ENDPOINT="https://flink.us-east4.gcp.confluent.cloud"
71
+ FLINK_ENV_NAME=""
72
+ FLINK_DATABASE_NAME=""
73
+ FLINK_API_KEY=""
74
+ FLINK_API_SECRET=""
75
+ FLINK_COMPUTE_POOL_ID="lfcp-..."
76
+ CONFLUENT_CLOUD_API_KEY=""
77
+ CONFLUENT_CLOUD_API_SECRET=""
78
+ CONFLUENT_CLOUD_REST_ENDPOINT="https://api.confluent.cloud"
79
+ SCHEMA_REGISTRY_API_KEY="..."
80
+ SCHEMA_REGISTRY_API_SECRET="..."
81
+ SCHEMA_REGISTRY_ENDPOINT="https://psrc-zv01y.northamerica-northeast2.gcp.confluent.cloud"
82
+ ```
83
+ </details>
84
+
85
+ ### Environment Variables Reference
86
+
87
+ | Variable | Description | Default Value | Required |
88
+ | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -------- |
89
+ | BOOTSTRAP_SERVERS | List of Kafka broker addresses in the format host1:port1,host2:port2 used to establish initial connection to the Kafka cluster (string) | | Yes |
90
+ | CONFIG_PATH | File system path to store and retrieve conversation-based configurations for session persistence (Future Implementation) (string) | | Yes |
91
+ | CONFLUENT_CLOUD_API_KEY | Master API key for Confluent Cloud platform administration, enabling management of resources across your organization (string (min: 1)) | | Yes |
92
+ | CONFLUENT_CLOUD_API_SECRET | Master API secret paired with CONFLUENT_CLOUD_API_KEY for comprehensive Confluent Cloud platform administration (string (min: 1)) | | Yes |
93
+ | FLINK_API_KEY | Authentication key for accessing Confluent Cloud's Flink services, including compute pools and SQL statement management (string (min: 1)) | | Yes |
94
+ | FLINK_API_SECRET | Secret token paired with FLINK_API_KEY for authenticated access to Confluent Cloud's Flink services (string (min: 1)) | | Yes |
95
+ | KAFKA_API_KEY | Authentication credential (username) required to establish secure connection with the Kafka cluster (string (min: 1)) | | Yes |
96
+ | KAFKA_API_SECRET | Authentication credential (password) paired with KAFKA_API_KEY for secure Kafka cluster access (string (min: 1)) | | Yes |
97
+ | SCHEMA_REGISTRY_API_KEY | Authentication key for accessing Schema Registry services to manage and validate data schemas (string (min: 1)) | | Yes |
98
+ | SCHEMA_REGISTRY_API_SECRET | Authentication secret paired with SCHEMA_REGISTRY_API_KEY for secure Schema Registry access (string (min: 1)) | | Yes |
99
+ | CONFLUENT_CLOUD_REST_ENDPOINT | Base URL for Confluent Cloud's REST API services (default) | | No |
100
+ | FLINK_COMPUTE_POOL_ID | Unique identifier for the Flink compute pool, must start with 'lfcp-' prefix (string) | | No |
101
+ | FLINK_DATABASE_NAME | Name of the associated Kafka cluster used as a database reference in Flink SQL operations (string (min: 1)) | | No |
102
+ | FLINK_ENV_ID | Unique identifier for the Flink environment, must start with 'env-' prefix (string) | | No |
103
+ | FLINK_ENV_NAME | Human-readable name for the Flink environment used for identification and display purposes (string (min: 1)) | | No |
104
+ | FLINK_ORG_ID | Organization identifier within Confluent Cloud for Flink resource management (string (min: 1)) | | No |
105
+ | FLINK_REST_ENDPOINT | Base URL for Confluent Cloud's Flink REST API endpoints used for SQL statement and compute pool management (string) | | No |
106
+ | KAFKA_CLUSTER_ID | Unique identifier for the Kafka cluster within Confluent Cloud ecosystem (string (min: 1)) | | No |
107
+ | KAFKA_ENV_ID | Environment identifier for Kafka cluster, must start with 'env-' prefix (string) | | No |
108
+ | KAFKA_REST_ENDPOINT | REST API endpoint for Kafka cluster management and administration (string) | | No |
109
+ | SCHEMA_REGISTRY_ENDPOINT | URL endpoint for accessing Schema Registry services to manage data schemas (string) | | No |
110
+
111
+ ### Usage
112
+
113
+ This MCP server is designed to be used with various MCP clients, such as Claude Desktop or Goose CLI/Desktop. The specific configuration and interaction will depend on the client you are using. However, the general steps are:
114
+
115
+ 1. **Build:** Follow the instructions in the [Developer Guide](#developer-guide) to build and run the server from source. This typically involves:
116
+ - Installing dependencies (`npm install`)
117
+ - Building the project (`npm run build` or `npm run dev`)
118
+
119
+ 2. **Configure your MCP Client:** Each client will have its own way of specifying the MCP server's address and any required credentials. You'll need to configure your client (e.g., Claude, Goose) to connect to the address where this server is running (likely `localhost` with a specific port). The port the server runs on may be configured by an environment variable.
120
+
121
+ 3. **Start the MCP Client:** Once your client is configured to connect to the MCP server, you can start your mcp client and on startup - it will stand up an instance of this MCP server locally. This instance will be responsible for managing data schemas and interacting with Confluent Cloud on your behalf.
122
+
123
+ 4. **Interact with Confluent through the Client:** Once the client is connected, you can use the client's interface to interact with Confluent Cloud resources. The client will send requests to this MCP server, which will then interact with Confluent Cloud on your behalf.
124
+
125
+ ### Configuring Claude Desktop
126
+
127
+ See [here](https://modelcontextprotocol.io/quickstart/user) for more details about installing Claude Desktop and MCP servers.
128
+
129
+ To configure Claude Desktop to use this MCP server:
130
+
131
+ 1. **Open Claude Desktop Configuration**
132
+ - On Mac: `~/Library/Application Support/Claude/claude_desktop_config.json`
133
+ - On Windows: `%APPDATA%\Claude\claude_desktop_config.json`
134
+
135
+ 2. **Edit Configuration File**
136
+ - Open the config file in your preferred text editor
137
+ - Add or modify the configuration using one of the following methods:
138
+
139
+ <details>
140
+ <summary>Option 1: Run from source</summary>
141
+
142
+ ```json
143
+ {
144
+ "mcpServers": {
145
+ "confluent": {
146
+ "command": "node",
147
+ "args": [
148
+ "--env-file",
149
+ "/path/to/confluent-mcp-server/.env",
150
+ "/path/to/confluent-mcp-server/dist/index.js"
151
+ ]
152
+ }
153
+ }
154
+ }
155
+ ```
156
+ </details>
157
+
158
+ <details>
159
+ <summary>Option 2: Run from npx</summary>
160
+
161
+ ```json
162
+ {
163
+ "mcpServers": {
164
+ "confluent": {
165
+ "command": "npx",
166
+ "args": [
167
+ "-y"
168
+ "@confluentinc/mcp-confluent",
169
+ "-e",
170
+ "/path/to/confluent-mcp-server/.env"
171
+ ]
172
+ }
173
+ }
174
+ }
175
+ ```
176
+ </details>
177
+
178
+ Replace `/path/to/confluent-mcp-server/` with the actual path where you've installed this MCP server.
179
+
180
+ 1. **Restart Claude Desktop**
181
+ - Close and reopen Claude Desktop for the changes to take effect
182
+ - The MCP server will automatically start when Claude Desktop launches
183
+
184
+ Now Claude Desktop will be configured to use your local MCP server for Confluent interactions.
185
+
186
+ ![Claude Tools](assets/claude-tools.png)
187
+
188
+ ### Configuring Goose CLI
189
+
190
+ See [here](https://block.github.io/goose/docs/quickstart#install-an-extension) for detailed instructions on how to install the Goose CLI.
191
+
192
+ Once installed, follow these steps:
193
+
194
+ 1. **Run the Configuration Command:**
195
+ ```bash
196
+ goose configure
197
+ ```
198
+
199
+ 2. **Follow the Interactive Prompts:**
200
+ - Select `Add extension`
201
+ - Choose `Command-line Extension`
202
+ - Enter `mcp-confluent` as the extension name
203
+ - Choose one of the following configuration methods:
204
+
205
+ <details>
206
+ <summary>Option 1: Run from source</summary>
207
+
208
+ ```bash
209
+ node --env-file /path/to/confluent-mcp-server/.env /path/to/confluent-mcp-server/dist/index.js
210
+ ```
211
+ </details>
212
+
213
+ <details>
214
+ <summary>Option 2: Run from npx</summary>
215
+
216
+ ```bash
217
+ npx -y @confluentinc/mcp-confluent -e /path/to/confluent-mcp-server/.env
218
+ ```
219
+ </details>
220
+
221
+ - When asked about requiring sudo/admin privileges, select `No`
222
+
223
+ Replace `/path/to/confluent-mcp-server/` with the actual path where you've installed this MCP server.
224
+
225
+ ![Goose Configure](assets/goose-configure.png)
226
+
227
+ ## Developer Guide
228
+
229
+ ### Project Structure
230
+
231
+ ```sh
232
+ /
233
+ ├── src/ # Source code
234
+ │ ├── confluent/ # Code related to Confluent integration (API clients, etc.)
235
+ │ ├── tools/ # Tool implementations (each tool in a separate file)
236
+ │ ├── index.ts # Main entry point for the server
237
+ │ └── ... # Other server logic, utilities, etc.
238
+ ├── dist/ # Compiled output (TypeScript -> JavaScript)
239
+ ├── openapi.json # OpenAPI specification for Confluent Cloud
240
+ ├── .env # Environment variables (example - should be copied and filled)
241
+ ├── README.md # This file
242
+ └── package.json # Node.js project metadata and dependencies
243
+ ```
244
+
245
+ ### Building and Running
246
+
247
+ 1. **Install Dependencies:**
248
+
249
+ ```bash
250
+ npm install
251
+ ```
252
+
253
+ 2. **Development Mode (watch for changes):**
254
+
255
+ ```bash
256
+ npm run dev
257
+ ```
258
+
259
+ This command compiles the TypeScript code to JavaScript and automatically rebuilds when changes are detected in the `src/` directory.
260
+
261
+ 3. **Production Build (one-time compilation):**
262
+
263
+ ```bash
264
+ npm run build
265
+ ```
266
+
267
+ 4. **Start the Server:**
268
+
269
+ ```bash
270
+ npm run start
271
+ ```
272
+
273
+ ### Testing
274
+
275
+ #### MCP Inspector
276
+
277
+ For testing MCP servers, you can use [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector) which is an interactive developer tool for testing and debugging MCP servers.
278
+
279
+ ```bash
280
+ # make sure you've already built the project either in dev mode or by running npm run build
281
+ npx @modelcontextprotocol/inspector node --env-file $PATH_TO_PROJECT/.env /$PATH_TO_PROJECT/dist/index.js
282
+ ```
283
+
284
+ ### Adding a New Tool
285
+
286
+ 1. Add a new enum to the enum class `ToolName`.
287
+ 2. Add your new tool to the handlers map in the `ToolFactory` class.
288
+ 3. Create a new file, exporting the class that extends `BaseToolHandler`.
289
+ 1. Implement the `handle` method of the base class.
290
+ 2. Implement the `getToolConfig` method of the base class.
291
+ 4. Once satisfied, add it to the set of `enabledTools` in `index.ts`.
292
+
293
+ ### Generating Types
294
+
295
+ ```bash
296
+ # as of v7.5.2 there is a bug when using allOf w/ required https://github.com/openapi-ts/openapi-typescript/issues/1474. need --empty-objects-unknown flag to avoid it
297
+ npx openapi-typescript ./openapi.json -o ./src/confluent/openapi-schema.d.ts --empty-objects-unknown
298
+ ```
299
+
300
+ ### Contributing
301
+
302
+ Bug reports and feedback is appreciated in the form of Github Issues. For guidelines on contributing please see [CONTRIBUTING.md](CONTRIBUTING.MD)
package/dist/cli.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export interface CLIOptions {
2
+ envFile?: string;
3
+ }
4
+ /**
5
+ * Parse command line arguments with strong typing
6
+ * @returns Parsed CLI options
7
+ */
8
+ export declare function parseCliArgs(): CLIOptions;
9
+ /**
10
+ * Load environment variables from file if specified in options
11
+ * @param options CLI options containing envFile path
12
+ */
13
+ export declare function loadEnvironmentVariables(options: CLIOptions): void;
14
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,UAAU,CAwBzC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAsBlE"}
package/dist/cli.js ADDED
@@ -0,0 +1,53 @@
1
+ import { Command } from "@commander-js/extra-typings";
2
+ import * as dotenv from "dotenv";
3
+ import fs from "fs";
4
+ import path from "path";
5
+ /**
6
+ * Parse command line arguments with strong typing
7
+ * @returns Parsed CLI options
8
+ */
9
+ export function parseCliArgs() {
10
+ const program = new Command()
11
+ .name("mcp-confluent")
12
+ .description("Confluent MCP Server - Model Context Protocol implementation for Confluent Cloud")
13
+ .version(process.env.npm_package_version ?? "dev")
14
+ .option("-e, --env-file <path>", "Load environment variables from file")
15
+ .action((options) => {
16
+ if (options.envFile) {
17
+ loadEnvironmentVariables(options);
18
+ }
19
+ })
20
+ .allowExcessArguments(false)
21
+ .exitOverride();
22
+ try {
23
+ // Parse arguments and get options (no need for generic type parameter with extra-typings)
24
+ return program.parse().opts();
25
+ }
26
+ catch {
27
+ // This block is reached when --help or --version is called
28
+ // as these will throw an error due to exitOverride()
29
+ process.exit(0);
30
+ }
31
+ }
32
+ /**
33
+ * Load environment variables from file if specified in options
34
+ * @param options CLI options containing envFile path
35
+ */
36
+ export function loadEnvironmentVariables(options) {
37
+ if (options.envFile) {
38
+ const envPath = path.resolve(options.envFile);
39
+ // Check if file exists
40
+ if (!fs.existsSync(envPath)) {
41
+ console.error(`Environment file not found: ${envPath}`);
42
+ return;
43
+ }
44
+ // Load environment variables from file
45
+ const result = dotenv.config({ path: envPath });
46
+ if (result.error) {
47
+ console.error(`Error loading environment variables: ${result.error.message}`);
48
+ return;
49
+ }
50
+ console.error(`Loaded environment variables from ${envPath}`);
51
+ }
52
+ }
53
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,eAAe,CAAC;SACrB,WAAW,CACV,kFAAkF,CACnF;SACA,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,KAAK,CAAC;SACjD,MAAM,CAAC,uBAAuB,EAAE,sCAAsC,CAAC;SACvE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC;SACD,oBAAoB,CAAC,KAAK,CAAC;SAC3B,YAAY,EAAE,CAAC;IAElB,IAAI,CAAC;QACH,0FAA0F;QAC1F,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;QAC3D,qDAAqD;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAmB;IAC1D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE9C,uBAAuB;QACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,uCAAuC;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAEhD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CACX,wCAAwC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAC/D,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @fileoverview Provides client management functionality for Kafka and Confluent Cloud services.
3
+ */
4
+ import { KafkaJS } from "@confluentinc/kafka-javascript";
5
+ import { paths } from "@src/confluent/openapi-schema.js";
6
+ import { Client } from "openapi-fetch";
7
+ /**
8
+ * Interface for managing Kafka client connections and operations.
9
+ */
10
+ export interface KafkaClientManager {
11
+ /** Gets the main Kafka client instance */
12
+ getKafkaClient(): KafkaJS.Kafka;
13
+ /** Gets a connected admin client for Kafka administration operations */
14
+ getAdminClient(): Promise<KafkaJS.Admin>;
15
+ /** Gets a connected producer client for publishing messages */
16
+ getProducer(): Promise<KafkaJS.Producer>;
17
+ /** Gets a connected consumer client for subscribing to topics */
18
+ getConsumer(): Promise<KafkaJS.Consumer>;
19
+ /** Disconnects and cleans up all client connections */
20
+ disconnect(): Promise<void>;
21
+ }
22
+ /**
23
+ * Interface for managing Confluent Cloud REST client connections.
24
+ */
25
+ export interface ConfluentCloudRestClientManager {
26
+ /** Gets a configured REST client for Confluent Cloud Flink operations */
27
+ getConfluentCloudFlinkRestClient(): Client<paths, `${string}/${string}`>;
28
+ /** Gets a configured REST client for general Confluent Cloud operations */
29
+ getConfluentCloudRestClient(): Client<paths, `${string}/${string}`>;
30
+ /** Gets a configured REST client for Confluent Cloud Schema Registry operations */
31
+ getConfluentCloudSchemaRegistryRestClient(): Client<paths, `${string}/${string}`>;
32
+ /** Gets a configured REST client for Confluent Cloud Kafka operations */
33
+ getConfluentCloudKafkaRestClient(): Client<paths, `${string}/${string}`>;
34
+ setConfluentCloudRestEndpoint(endpoint: string): void;
35
+ setConfluentCloudFlinkEndpoint(endpoint: string): void;
36
+ setConfluentCloudSchemaRegistryEndpoint(endpoint: string): void;
37
+ setConfluentCloudKafkaRestEndpoint(endpoint: string): void;
38
+ }
39
+ export interface ClientManager extends KafkaClientManager, ConfluentCloudRestClientManager {
40
+ }
41
+ /**
42
+ * Default implementation of client management for Kafka and Confluent Cloud services.
43
+ * Manages lifecycle and lazy initialization of various client connections.
44
+ */
45
+ export declare class DefaultClientManager implements ClientManager {
46
+ private confluentCloudBaseUrl;
47
+ private confluentCloudFlinkBaseUrl;
48
+ private confluentCloudSchemaRegistryBaseUrl;
49
+ private confluentCloudKafkaRestBaseUrl;
50
+ private readonly kafkaClient;
51
+ private readonly adminClient;
52
+ private readonly producer;
53
+ private readonly confluentCloudFlinkRestClient;
54
+ private readonly confluentCloudRestClient;
55
+ private readonly confluentCloudSchemaRegistryRestClient;
56
+ private readonly confluentCloudKafkaRestClient;
57
+ /**
58
+ * Creates a new DefaultClientManager instance.
59
+ * @param config - Configuration options for KafkaJS client
60
+ * @param confluentCloudBaseUrl - Base URL for Confluent Cloud REST API
61
+ * @param confluentCloudFlinkBaseUrl - Base URL for Flink REST API
62
+ * @param confluentCloudSchemaRegistryBaseUrl - Base URL for Schema Registry REST API
63
+ * @param confluentCloudKafkaRestBaseUrl - Base URL for Kafka REST API
64
+ */
65
+ constructor(config: KafkaJS.CommonConstructorConfig, confluentCloudBaseUrl?: string, confluentCloudFlinkBaseUrl?: string, confluentCloudSchemaRegistryBaseUrl?: string, confluentCloudKafkaRestBaseUrl?: string);
66
+ /**
67
+ * a function that sets a new confluent cloud rest endpoint.
68
+ * Closes the current client first.
69
+ * @param endpoint the endpoint to set
70
+ */
71
+ setConfluentCloudRestEndpoint(endpoint: string): void;
72
+ setConfluentCloudFlinkEndpoint(endpoint: string): void;
73
+ setConfluentCloudSchemaRegistryEndpoint(endpoint: string): void;
74
+ setConfluentCloudKafkaRestEndpoint(endpoint: string): void;
75
+ getConsumer(): Promise<KafkaJS.Consumer>;
76
+ /** @inheritdoc */
77
+ getKafkaClient(): KafkaJS.Kafka;
78
+ /** @inheritdoc */
79
+ getConfluentCloudFlinkRestClient(): Client<paths, `${string}/${string}`>;
80
+ /** @inheritdoc */
81
+ getConfluentCloudRestClient(): Client<paths, `${string}/${string}`>;
82
+ /** @inheritdoc */
83
+ getConfluentCloudSchemaRegistryRestClient(): Client<paths, `${string}/${string}`>;
84
+ /** @inheritdoc */
85
+ getConfluentCloudKafkaRestClient(): Client<paths, `${string}/${string}`>;
86
+ /** @inheritdoc */
87
+ getAdminClient(): Promise<KafkaJS.Admin>;
88
+ /** @inheritdoc */
89
+ getProducer(): Promise<KafkaJS.Producer>;
90
+ /** @inheritdoc */
91
+ disconnect(): Promise<void>;
92
+ }
93
+ //# sourceMappingURL=client-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-manager.d.ts","sourceRoot":"","sources":["../../src/confluent/client-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * @fileoverview Provides client management functionality for Kafka and Confluent Cloud services.
3
+ */
4
+ import { KafkaJS } from "@confluentinc/kafka-javascript";
5
+ import { confluentCloudAuthMiddleware, confluentCloudFlinkAuthMiddleware, confluentCloudKafkaAuthMiddleware, confluentCloudSchemaRegistryAuthMiddleware, } from "../confluent/middleware.js";
6
+ import { AsyncLazy, Lazy } from "../lazy.js";
7
+ import createClient from "openapi-fetch";
8
+ /**
9
+ * Default implementation of client management for Kafka and Confluent Cloud services.
10
+ * Manages lifecycle and lazy initialization of various client connections.
11
+ */
12
+ export class DefaultClientManager {
13
+ confluentCloudBaseUrl;
14
+ confluentCloudFlinkBaseUrl;
15
+ confluentCloudSchemaRegistryBaseUrl;
16
+ confluentCloudKafkaRestBaseUrl;
17
+ kafkaClient;
18
+ adminClient;
19
+ producer;
20
+ confluentCloudFlinkRestClient;
21
+ confluentCloudRestClient;
22
+ confluentCloudSchemaRegistryRestClient;
23
+ confluentCloudKafkaRestClient;
24
+ /**
25
+ * Creates a new DefaultClientManager instance.
26
+ * @param config - Configuration options for KafkaJS client
27
+ * @param confluentCloudBaseUrl - Base URL for Confluent Cloud REST API
28
+ * @param confluentCloudFlinkBaseUrl - Base URL for Flink REST API
29
+ * @param confluentCloudSchemaRegistryBaseUrl - Base URL for Schema Registry REST API
30
+ * @param confluentCloudKafkaRestBaseUrl - Base URL for Kafka REST API
31
+ */
32
+ constructor(config, confluentCloudBaseUrl, confluentCloudFlinkBaseUrl, confluentCloudSchemaRegistryBaseUrl, confluentCloudKafkaRestBaseUrl) {
33
+ this.confluentCloudBaseUrl = confluentCloudBaseUrl || "";
34
+ this.confluentCloudFlinkBaseUrl = confluentCloudFlinkBaseUrl || "";
35
+ this.confluentCloudSchemaRegistryBaseUrl =
36
+ confluentCloudSchemaRegistryBaseUrl || "";
37
+ this.confluentCloudKafkaRestBaseUrl = confluentCloudKafkaRestBaseUrl || "";
38
+ this.kafkaClient = new Lazy(() => new KafkaJS.Kafka(config));
39
+ this.adminClient = new AsyncLazy(async () => {
40
+ console.error("Connecting Kafka Admin");
41
+ const admin = this.kafkaClient.get().admin();
42
+ await admin.connect();
43
+ return admin;
44
+ }, (admin) => admin.disconnect());
45
+ this.producer = new AsyncLazy(async () => {
46
+ console.error("Connecting Kafka Producer");
47
+ const producer = this.kafkaClient.get().producer({
48
+ kafkaJS: {
49
+ acks: 1,
50
+ compression: KafkaJS.CompressionTypes.GZIP,
51
+ },
52
+ });
53
+ await producer.connect();
54
+ return producer;
55
+ }, (producer) => producer.disconnect());
56
+ this.confluentCloudRestClient = new Lazy(() => {
57
+ console.error(`Initializing Confluent Cloud REST client for base URL ${this.confluentCloudBaseUrl}`);
58
+ const client = createClient({
59
+ baseUrl: this.confluentCloudBaseUrl,
60
+ });
61
+ client.use(confluentCloudAuthMiddleware);
62
+ return client;
63
+ });
64
+ this.confluentCloudFlinkRestClient = new Lazy(() => {
65
+ console.error(`Initializing Confluent Cloud Flink REST client for base URL ${this.confluentCloudFlinkBaseUrl}`);
66
+ const client = createClient({
67
+ baseUrl: this.confluentCloudFlinkBaseUrl,
68
+ });
69
+ client.use(confluentCloudFlinkAuthMiddleware);
70
+ return client;
71
+ });
72
+ this.confluentCloudSchemaRegistryRestClient = new Lazy(() => {
73
+ console.error(`Initializing Confluent Cloud Schema Registry REST client for base URL ${this.confluentCloudSchemaRegistryBaseUrl}`);
74
+ const client = createClient({
75
+ baseUrl: this.confluentCloudSchemaRegistryBaseUrl,
76
+ });
77
+ client.use(confluentCloudSchemaRegistryAuthMiddleware);
78
+ return client;
79
+ });
80
+ this.confluentCloudKafkaRestClient = new Lazy(() => {
81
+ console.error(`Initializing Confluent Cloud Kafka REST client for base URL ${this.confluentCloudKafkaRestBaseUrl}`);
82
+ const client = createClient({
83
+ baseUrl: this.confluentCloudKafkaRestBaseUrl,
84
+ });
85
+ client.use(confluentCloudKafkaAuthMiddleware);
86
+ return client;
87
+ });
88
+ }
89
+ /**
90
+ * a function that sets a new confluent cloud rest endpoint.
91
+ * Closes the current client first.
92
+ * @param endpoint the endpoint to set
93
+ */
94
+ setConfluentCloudRestEndpoint(endpoint) {
95
+ this.confluentCloudRestClient.close();
96
+ this.confluentCloudBaseUrl = endpoint;
97
+ }
98
+ setConfluentCloudFlinkEndpoint(endpoint) {
99
+ this.confluentCloudFlinkRestClient.close();
100
+ this.confluentCloudFlinkBaseUrl = endpoint;
101
+ }
102
+ setConfluentCloudSchemaRegistryEndpoint(endpoint) {
103
+ this.confluentCloudSchemaRegistryRestClient.close();
104
+ this.confluentCloudSchemaRegistryBaseUrl = endpoint;
105
+ }
106
+ setConfluentCloudKafkaRestEndpoint(endpoint) {
107
+ this.confluentCloudKafkaRestClient.close();
108
+ this.confluentCloudKafkaRestBaseUrl = endpoint;
109
+ }
110
+ getConsumer() {
111
+ throw new Error("Method not implemented.");
112
+ }
113
+ /** @inheritdoc */
114
+ getKafkaClient() {
115
+ return this.kafkaClient.get();
116
+ }
117
+ /** @inheritdoc */
118
+ getConfluentCloudFlinkRestClient() {
119
+ return this.confluentCloudFlinkRestClient.get();
120
+ }
121
+ /** @inheritdoc */
122
+ getConfluentCloudRestClient() {
123
+ return this.confluentCloudRestClient.get();
124
+ }
125
+ /** @inheritdoc */
126
+ getConfluentCloudSchemaRegistryRestClient() {
127
+ return this.confluentCloudSchemaRegistryRestClient.get();
128
+ }
129
+ /** @inheritdoc */
130
+ getConfluentCloudKafkaRestClient() {
131
+ return this.confluentCloudKafkaRestClient.get();
132
+ }
133
+ /** @inheritdoc */
134
+ async getAdminClient() {
135
+ return this.adminClient.get();
136
+ }
137
+ /** @inheritdoc */
138
+ async getProducer() {
139
+ return this.producer.get();
140
+ }
141
+ /** @inheritdoc */
142
+ async disconnect() {
143
+ await this.adminClient.close();
144
+ await this.producer.close();
145
+ this.kafkaClient.close();
146
+ }
147
+ }
148
+ //# sourceMappingURL=client-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-manager.js","sourceRoot":"","sources":["../../src/confluent/client-manager.ts"],"names":[],"mappings":"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"}