@confluentinc/mcp-confluent 1.0.6 → 1.2.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.
Files changed (145) hide show
  1. package/README.md +608 -297
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +10 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/confluent/client-manager.d.ts +9 -0
  7. package/dist/confluent/client-manager.d.ts.map +1 -1
  8. package/dist/confluent/client-manager.js +35 -4
  9. package/dist/confluent/client-manager.js.map +1 -1
  10. package/dist/confluent/middleware.d.ts +3 -2
  11. package/dist/confluent/middleware.d.ts.map +1 -1
  12. package/dist/confluent/middleware.js +9 -1
  13. package/dist/confluent/middleware.js.map +1 -1
  14. package/dist/confluent/node-deps.d.ts +60 -0
  15. package/dist/confluent/node-deps.d.ts.map +1 -0
  16. package/dist/confluent/node-deps.js +12 -0
  17. package/dist/confluent/node-deps.js.map +1 -0
  18. package/dist/confluent/telemetry.d.ts +18 -0
  19. package/dist/confluent/telemetry.d.ts.map +1 -0
  20. package/dist/confluent/telemetry.js +104 -0
  21. package/dist/confluent/telemetry.js.map +1 -0
  22. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +11 -0
  23. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts.map +1 -0
  24. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js +174 -0
  25. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js.map +1 -0
  26. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts +7 -141
  27. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts.map +1 -1
  28. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts +8 -164
  29. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts.map +1 -1
  30. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts +77 -0
  31. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -0
  32. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +136 -0
  33. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js.map +1 -0
  34. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts +11 -0
  35. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts.map +1 -0
  36. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +111 -0
  37. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -0
  38. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts +11 -0
  39. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts.map +1 -0
  40. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js +110 -0
  41. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js.map +1 -0
  42. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts +11 -0
  43. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts.map +1 -0
  44. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +74 -0
  45. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js.map +1 -0
  46. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts +11 -0
  47. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts.map +1 -0
  48. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +81 -0
  49. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js.map +1 -0
  50. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts +11 -0
  51. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts.map +1 -0
  52. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +90 -0
  53. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js.map +1 -0
  54. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts +11 -0
  55. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts.map +1 -0
  56. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +131 -0
  57. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js.map +1 -0
  58. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts +11 -0
  59. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts.map +1 -0
  60. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +248 -0
  61. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -0
  62. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts +88 -0
  63. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts.map +1 -0
  64. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js +443 -0
  65. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js.map +1 -0
  66. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts +11 -0
  67. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts.map +1 -0
  68. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js +398 -0
  69. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js.map +1 -0
  70. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts +23 -0
  71. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -0
  72. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js +133 -0
  73. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -0
  74. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts +11 -0
  75. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts.map +1 -0
  76. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js +72 -0
  77. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -0
  78. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -1
  79. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +20 -3
  80. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
  81. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts +6 -54
  82. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts.map +1 -1
  83. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js +1 -1
  84. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
  85. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +1 -1
  86. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
  87. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +1 -1
  88. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -1
  89. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +1 -1
  90. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -1
  91. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +1 -1
  92. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
  93. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +11 -0
  94. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -0
  95. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +193 -0
  96. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -0
  97. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +11 -0
  98. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -0
  99. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +224 -0
  100. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -0
  101. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +10 -0
  102. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -0
  103. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +71 -0
  104. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -0
  105. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
  106. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +1 -5
  107. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
  108. package/dist/confluent/tools/tool-factory.d.ts.map +1 -1
  109. package/dist/confluent/tools/tool-factory.js +26 -0
  110. package/dist/confluent/tools/tool-factory.js.map +1 -1
  111. package/dist/confluent/tools/tool-name.d.ts +14 -1
  112. package/dist/confluent/tools/tool-name.d.ts.map +1 -1
  113. package/dist/confluent/tools/tool-name.js +13 -0
  114. package/dist/confluent/tools/tool-name.js.map +1 -1
  115. package/dist/env-schema.d.ts +17 -62
  116. package/dist/env-schema.d.ts.map +1 -1
  117. package/dist/env-schema.js +37 -2
  118. package/dist/env-schema.js.map +1 -1
  119. package/dist/env.d.ts +8 -1
  120. package/dist/env.d.ts.map +1 -1
  121. package/dist/index.js +67 -5
  122. package/dist/index.js.map +1 -1
  123. package/dist/logger.d.ts +2 -1
  124. package/dist/logger.d.ts.map +1 -1
  125. package/dist/logger.js +1 -1
  126. package/dist/logger.js.map +1 -1
  127. package/dist/mcp/transports/auth.d.ts +55 -0
  128. package/dist/mcp/transports/auth.d.ts.map +1 -0
  129. package/dist/mcp/transports/auth.js +127 -0
  130. package/dist/mcp/transports/auth.js.map +1 -0
  131. package/dist/mcp/transports/index.d.ts +1 -0
  132. package/dist/mcp/transports/index.d.ts.map +1 -1
  133. package/dist/mcp/transports/index.js +1 -0
  134. package/dist/mcp/transports/index.js.map +1 -1
  135. package/dist/mcp/transports/manager.d.ts +13 -1
  136. package/dist/mcp/transports/manager.d.ts.map +1 -1
  137. package/dist/mcp/transports/manager.js +20 -2
  138. package/dist/mcp/transports/manager.js.map +1 -1
  139. package/dist/mcp/transports/server.d.ts +10 -1
  140. package/dist/mcp/transports/server.d.ts.map +1 -1
  141. package/dist/mcp/transports/server.js +12 -2
  142. package/dist/mcp/transports/server.js.map +1 -1
  143. package/dist/print-md-schema.js +2 -2
  144. package/dist/print-md-schema.js.map +1 -1
  145. package/package.json +20 -9
@@ -0,0 +1,136 @@
1
+ import { executeFlinkSql } from "../../../../../confluent/tools/handlers/flink/flink-sql-helper.js";
2
+ import env from "../../../../../env.js";
3
+ /**
4
+ * Resolves the Flink catalog name from various inputs.
5
+ *
6
+ * In Confluent Cloud Flink, the catalog name is always the environment ID (env-xxxxx).
7
+ * This function handles cases where a friendly name or invalid value is provided,
8
+ * falling back to the environment ID from config.
9
+ *
10
+ * Resolution order:
11
+ * 1. If catalogName is provided and looks like an env ID (starts with "env-"), use it
12
+ * 2. Otherwise, use FLINK_ENV_ID from environment
13
+ *
14
+ * @param catalogName - Optional catalog name from user/LLM input
15
+ * @returns The resolved catalog name (environment ID), or undefined if not resolvable
16
+ */
17
+ export function resolveCatalogName(catalogName) {
18
+ // If provided value looks like an environment ID, use it
19
+ if (catalogName && catalogName.startsWith("env-")) {
20
+ return catalogName;
21
+ }
22
+ // Fall back to FLINK_ENV_ID (the actual environment ID)
23
+ return env.FLINK_ENV_ID;
24
+ }
25
+ /**
26
+ * Resolves the Flink database name from various inputs.
27
+ *
28
+ * In Confluent Cloud Flink, the database name can be either:
29
+ * - A Kafka cluster ID (lkc-xxxxx)
30
+ * - A friendly database name (e.g., "standard_cluster")
31
+ *
32
+ * INFORMATION_SCHEMA.TABLES uses friendly names in TABLE_SCHEMA, not cluster IDs.
33
+ *
34
+ * Resolution order:
35
+ * 1. If databaseName is provided and non-empty, use it (could be cluster ID or friendly name)
36
+ * 2. Otherwise, use KAFKA_CLUSTER_ID from environment
37
+ *
38
+ * @param databaseName - Optional database name from user/LLM input
39
+ * @returns The resolved database name, or undefined if not resolvable
40
+ */
41
+ export function resolveDatabaseName(databaseName) {
42
+ // If any non-empty value is provided, use it (could be lkc-* or friendly name)
43
+ if (databaseName && databaseName.trim()) {
44
+ return databaseName.trim();
45
+ }
46
+ // Fall back to KAFKA_CLUSTER_ID
47
+ return env.KAFKA_CLUSTER_ID;
48
+ }
49
+ /**
50
+ * Looks up catalog mappings from INFORMATION_SCHEMA.CATALOGS.
51
+ * Returns a 1:1 mapping between environment IDs (CATALOG_ID) and friendly names (CATALOG_NAME).
52
+ */
53
+ export async function getCatalogMapping(clientManager, catalogName, options) {
54
+ const sql = `SELECT \`CATALOG_ID\`, \`CATALOG_NAME\` FROM \`${catalogName}\`.\`INFORMATION_SCHEMA\`.\`CATALOGS\``;
55
+ const result = await executeFlinkSql(clientManager, sql, {
56
+ organizationId: options.organizationId,
57
+ environmentId: options.environmentId,
58
+ computePoolId: options.computePoolId,
59
+ });
60
+ if (!result.success || !result.data) {
61
+ return [];
62
+ }
63
+ const mappings = [];
64
+ for (const row of result.data) {
65
+ const r = row;
66
+ const catalogId = r?.CATALOG_ID;
67
+ const catalogNameValue = r?.CATALOG_NAME;
68
+ if (typeof catalogId === "string" && typeof catalogNameValue === "string") {
69
+ mappings.push({ catalogId, catalogName: catalogNameValue });
70
+ }
71
+ }
72
+ return mappings;
73
+ }
74
+ /**
75
+ * Resolves a catalog identifier (could be env ID or friendly name) to the friendly CATALOG_NAME.
76
+ *
77
+ * @param catalogInput - The catalog identifier (env-xxxxx or friendly name)
78
+ * @param mappings - The catalog mappings from getCatalogMapping()
79
+ * @returns The friendly CATALOG_NAME to use in queries, or the original input if no mapping found
80
+ */
81
+ export function resolveToCatalogName(catalogInput, mappings) {
82
+ // If it looks like an environment ID, look up the friendly name
83
+ if (catalogInput.startsWith("env-")) {
84
+ const mapping = mappings.find((m) => m.catalogId === catalogInput);
85
+ if (mapping) {
86
+ return mapping.catalogName;
87
+ }
88
+ }
89
+ // Otherwise, assume it's already a friendly name or return as-is
90
+ return catalogInput;
91
+ }
92
+ /**
93
+ * Looks up schema mappings from INFORMATION_SCHEMA.SCHEMATA.
94
+ * Returns a 1:1 mapping between cluster IDs (SCHEMA_ID) and friendly names (SCHEMA_NAME).
95
+ */
96
+ export async function getSchemaMapping(clientManager, catalogName, options) {
97
+ const sql = `SELECT \`SCHEMA_ID\`, \`SCHEMA_NAME\` FROM \`${catalogName}\`.\`INFORMATION_SCHEMA\`.\`SCHEMATA\` WHERE \`SCHEMA_NAME\` <> 'INFORMATION_SCHEMA'`;
98
+ const result = await executeFlinkSql(clientManager, sql, {
99
+ organizationId: options.organizationId,
100
+ environmentId: options.environmentId,
101
+ computePoolId: options.computePoolId,
102
+ });
103
+ if (!result.success || !result.data) {
104
+ return [];
105
+ }
106
+ const mappings = [];
107
+ for (const row of result.data) {
108
+ const r = row;
109
+ const schemaId = r?.SCHEMA_ID;
110
+ const schemaName = r?.SCHEMA_NAME;
111
+ if (typeof schemaId === "string" && typeof schemaName === "string") {
112
+ mappings.push({ schemaId, schemaName });
113
+ }
114
+ }
115
+ return mappings;
116
+ }
117
+ /**
118
+ * Resolves a database identifier (could be cluster ID or friendly name) to the friendly SCHEMA_NAME.
119
+ * INFORMATION_SCHEMA queries use SCHEMA_NAME (friendly name) in TABLE_SCHEMA, not SCHEMA_ID.
120
+ *
121
+ * @param databaseInput - The database identifier (lkc-xxxxx or friendly name)
122
+ * @param mappings - The schema mappings from getSchemaMapping()
123
+ * @returns The friendly SCHEMA_NAME to use in queries, or the original input if no mapping found
124
+ */
125
+ export function resolveToSchemaName(databaseInput, mappings) {
126
+ // If it looks like a cluster ID, look up the friendly name
127
+ if (databaseInput.startsWith("lkc-")) {
128
+ const mapping = mappings.find((m) => m.schemaId === databaseInput);
129
+ if (mapping) {
130
+ return mapping.schemaName;
131
+ }
132
+ }
133
+ // Otherwise, assume it's already a friendly name or return as-is
134
+ return databaseInput;
135
+ }
136
+ //# sourceMappingURL=catalog-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-resolver.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/catalog-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ClientManager } from "../../../../../confluent/client-manager.js";
2
+ import { CallToolResult } from "../../../../../confluent/schema.js";
3
+ import { BaseToolHandler, ToolConfig } from "../../../../../confluent/tools/base-tools.js";
4
+ import { EnvVar } from "../../../../../env-schema.js";
5
+ export declare class DescribeTableHandler extends BaseToolHandler {
6
+ handle(clientManager: ClientManager, toolArguments: Record<string, unknown> | undefined): Promise<CallToolResult>;
7
+ getToolConfig(): ToolConfig;
8
+ getRequiredEnvVars(): EnvVar[];
9
+ isConfluentCloudOnly(): boolean;
10
+ }
11
+ //# sourceMappingURL=describe-table-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe-table-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/describe-table-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,UAAU,EACX,MAAM,oCAAoC,CAAC;AAS5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA+C5C,qBAAa,oBAAqB,SAAQ,eAAe;IACjD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IA0F1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -0,0 +1,111 @@
1
+ import { getEnsuredParam } from "../../../../../confluent/helpers.js";
2
+ import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
3
+ import { resolveCatalogName, resolveDatabaseName, getSchemaMapping, resolveToSchemaName, } from "../../../../../confluent/tools/handlers/flink/catalog/catalog-resolver.js";
4
+ import { executeFlinkSql } from "../../../../../confluent/tools/handlers/flink/flink-sql-helper.js";
5
+ import { ToolName } from "../../../../../confluent/tools/tool-name.js";
6
+ import env from "../../../../../env.js";
7
+ import { z } from "zod";
8
+ const describeTableArguments = z.object({
9
+ baseUrl: z
10
+ .string()
11
+ .describe("The base URL of the Flink REST API.")
12
+ .url()
13
+ .default(() => env.FLINK_REST_ENDPOINT ?? "")
14
+ .optional(),
15
+ organizationId: z
16
+ .string()
17
+ .trim()
18
+ .optional()
19
+ .describe("The unique identifier for the organization."),
20
+ environmentId: z
21
+ .string()
22
+ .trim()
23
+ .optional()
24
+ .describe("The unique identifier for the environment."),
25
+ computePoolId: z
26
+ .string()
27
+ .trim()
28
+ .optional()
29
+ .describe("The id associated with the compute pool in context."),
30
+ catalogName: z
31
+ .string()
32
+ .trim()
33
+ .optional()
34
+ .describe("The Flink catalog name (environment ID, e.g., env-xxxxx). Omit to use defaults."),
35
+ databaseName: z
36
+ .string()
37
+ .trim()
38
+ .optional()
39
+ .describe("The database/schema name. Can be cluster ID (lkc-xxxxx) or friendly name. Optional."),
40
+ tableName: z
41
+ .string()
42
+ .trim()
43
+ .nonempty()
44
+ .describe("The name of the table to describe."),
45
+ });
46
+ export class DescribeTableHandler extends BaseToolHandler {
47
+ async handle(clientManager, toolArguments) {
48
+ const { organizationId, environmentId, computePoolId, catalogName, databaseName, tableName, baseUrl, } = describeTableArguments.parse(toolArguments);
49
+ const organization_id = getEnsuredParam("FLINK_ORG_ID", "Organization ID is required", organizationId);
50
+ const environment_id = getEnsuredParam("FLINK_ENV_ID", "Environment ID is required", environmentId);
51
+ const compute_pool_id = getEnsuredParam("FLINK_COMPUTE_POOL_ID", "Compute Pool ID is required", computePoolId);
52
+ // Smart resolution: only accept env-* format, otherwise fall back to FLINK_ENV_ID
53
+ const catalog_name = resolveCatalogName(catalogName);
54
+ if (!catalog_name) {
55
+ return this.createResponse("Catalog name could not be resolved. Set FLINK_ENV_ID or provide a valid environment ID (env-xxxxx).", true);
56
+ }
57
+ // Database name is optional - if provided, resolve it to friendly SCHEMA_NAME
58
+ const database_input = resolveDatabaseName(databaseName);
59
+ if (baseUrl !== undefined && baseUrl !== "") {
60
+ clientManager.setConfluentCloudFlinkEndpoint(baseUrl);
61
+ }
62
+ // If a database was specified, resolve cluster ID to friendly name
63
+ let schema_name;
64
+ if (database_input) {
65
+ const mappings = await getSchemaMapping(clientManager, catalog_name, {
66
+ organizationId: organization_id,
67
+ environmentId: environment_id,
68
+ computePoolId: compute_pool_id,
69
+ });
70
+ schema_name = resolveToSchemaName(database_input, mappings);
71
+ }
72
+ // Query INFORMATION_SCHEMA.COLUMNS for full schema details
73
+ // Must fully qualify with catalog and use backticks per Confluent Cloud requirements
74
+ // If schema_name is provided, filter by it; otherwise search all databases for the table
75
+ const schemaFilter = schema_name
76
+ ? ` AND \`TABLE_SCHEMA\` = '${schema_name}'`
77
+ : "";
78
+ const sql = `SELECT \`TABLE_SCHEMA\`, \`COLUMN_NAME\`, \`ORDINAL_POSITION\`, \`DATA_TYPE\`, \`FULL_DATA_TYPE\`, \`IS_NULLABLE\`, \`IS_HIDDEN\`, \`IS_GENERATED\`, \`GENERATION_EXPRESSION\`, \`IS_METADATA\`, \`METADATA_KEY\` FROM \`${catalog_name}\`.\`INFORMATION_SCHEMA\`.\`COLUMNS\` WHERE \`TABLE_NAME\` = '${tableName}' AND \`IS_HIDDEN\` = 'NO'${schemaFilter}`;
79
+ const result = await executeFlinkSql(clientManager, sql, {
80
+ organizationId: organization_id,
81
+ environmentId: environment_id,
82
+ computePoolId: compute_pool_id,
83
+ });
84
+ if (!result.success) {
85
+ return this.createResponse(`Failed to describe table: ${result.error}`, true);
86
+ }
87
+ const columns = result.data ?? [];
88
+ if (columns.length === 0) {
89
+ const scope = schema_name
90
+ ? `'${catalog_name}.${schema_name}.${tableName}'`
91
+ : `'${tableName}' in catalog '${catalog_name}'`;
92
+ return this.createResponse(`Table ${scope} not found or has no columns.`, true);
93
+ }
94
+ // Include TABLE_SCHEMA in response so user knows which database the table is in
95
+ return this.createResponse(`Table '${tableName}' schema:\n${JSON.stringify(columns, null, 2)}`);
96
+ }
97
+ getToolConfig() {
98
+ return {
99
+ name: ToolName.DESCRIBE_FLINK_TABLE,
100
+ description: "Get full schema details for a Flink table via INFORMATION_SCHEMA.COLUMNS. Returns column names, data types (including $rowtime), nullability, and metadata column info.",
101
+ inputSchema: describeTableArguments.shape,
102
+ };
103
+ }
104
+ getRequiredEnvVars() {
105
+ return ["FLINK_API_KEY", "FLINK_API_SECRET"];
106
+ }
107
+ isConfluentCloudOnly() {
108
+ return true;
109
+ }
110
+ }
111
+ //# sourceMappingURL=describe-table-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe-table-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/describe-table-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ClientManager } from "../../../../../confluent/client-manager.js";
2
+ import { CallToolResult } from "../../../../../confluent/schema.js";
3
+ import { BaseToolHandler, ToolConfig } from "../../../../../confluent/tools/base-tools.js";
4
+ import { EnvVar } from "../../../../../env-schema.js";
5
+ export declare class GetTableInfoHandler extends BaseToolHandler {
6
+ handle(clientManager: ClientManager, toolArguments: Record<string, unknown> | undefined): Promise<CallToolResult>;
7
+ getToolConfig(): ToolConfig;
8
+ getRequiredEnvVars(): EnvVar[];
9
+ isConfluentCloudOnly(): boolean;
10
+ }
11
+ //# sourceMappingURL=get-table-info-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-table-info-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/get-table-info-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,UAAU,EACX,MAAM,oCAAoC,CAAC;AAS5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA+C5C,qBAAa,mBAAoB,SAAQ,eAAe;IAChD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IAsF1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -0,0 +1,110 @@
1
+ import { getEnsuredParam } from "../../../../../confluent/helpers.js";
2
+ import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
3
+ import { resolveCatalogName, resolveDatabaseName, getSchemaMapping, resolveToSchemaName, } from "../../../../../confluent/tools/handlers/flink/catalog/catalog-resolver.js";
4
+ import { executeFlinkSql } from "../../../../../confluent/tools/handlers/flink/flink-sql-helper.js";
5
+ import { ToolName } from "../../../../../confluent/tools/tool-name.js";
6
+ import env from "../../../../../env.js";
7
+ import { z } from "zod";
8
+ const getTableInfoArguments = z.object({
9
+ baseUrl: z
10
+ .string()
11
+ .describe("The base URL of the Flink REST API.")
12
+ .url()
13
+ .default(() => env.FLINK_REST_ENDPOINT ?? "")
14
+ .optional(),
15
+ organizationId: z
16
+ .string()
17
+ .trim()
18
+ .optional()
19
+ .describe("The unique identifier for the organization."),
20
+ environmentId: z
21
+ .string()
22
+ .trim()
23
+ .optional()
24
+ .describe("The unique identifier for the environment."),
25
+ computePoolId: z
26
+ .string()
27
+ .trim()
28
+ .optional()
29
+ .describe("The id associated with the compute pool in context."),
30
+ catalogName: z
31
+ .string()
32
+ .trim()
33
+ .optional()
34
+ .describe("The Flink catalog name (environment ID, e.g., env-xxxxx). Omit to use defaults."),
35
+ databaseName: z
36
+ .string()
37
+ .trim()
38
+ .optional()
39
+ .describe("The database/schema name. Can be cluster ID (lkc-xxxxx) or friendly name. Optional."),
40
+ tableName: z
41
+ .string()
42
+ .trim()
43
+ .nonempty()
44
+ .describe("The name of the table to get info for."),
45
+ });
46
+ export class GetTableInfoHandler extends BaseToolHandler {
47
+ async handle(clientManager, toolArguments) {
48
+ const { organizationId, environmentId, computePoolId, catalogName, databaseName, tableName, baseUrl, } = getTableInfoArguments.parse(toolArguments);
49
+ const organization_id = getEnsuredParam("FLINK_ORG_ID", "Organization ID is required", organizationId);
50
+ const environment_id = getEnsuredParam("FLINK_ENV_ID", "Environment ID is required", environmentId);
51
+ const compute_pool_id = getEnsuredParam("FLINK_COMPUTE_POOL_ID", "Compute Pool ID is required", computePoolId);
52
+ // Smart resolution: only accept env-* format, otherwise fall back to FLINK_ENV_ID
53
+ const catalog_name = resolveCatalogName(catalogName);
54
+ if (!catalog_name) {
55
+ return this.createResponse("Catalog name could not be resolved. Set FLINK_ENV_ID or provide a valid environment ID (env-xxxxx).", true);
56
+ }
57
+ // Database name is optional - if provided, resolve it to friendly SCHEMA_NAME
58
+ const database_input = resolveDatabaseName(databaseName);
59
+ if (baseUrl !== undefined && baseUrl !== "") {
60
+ clientManager.setConfluentCloudFlinkEndpoint(baseUrl);
61
+ }
62
+ // If a database was specified, resolve cluster ID to friendly name
63
+ let schema_name;
64
+ if (database_input) {
65
+ const mappings = await getSchemaMapping(clientManager, catalog_name, {
66
+ organizationId: organization_id,
67
+ environmentId: environment_id,
68
+ computePoolId: compute_pool_id,
69
+ });
70
+ schema_name = resolveToSchemaName(database_input, mappings);
71
+ }
72
+ // Query INFORMATION_SCHEMA.TABLES for table metadata including watermarks
73
+ // Must fully qualify with catalog and use backticks per Confluent Cloud requirements
74
+ // If schema_name is provided, filter by it; otherwise search all databases for the table
75
+ const schemaFilter = schema_name
76
+ ? ` AND \`TABLE_SCHEMA\` = '${schema_name}'`
77
+ : "";
78
+ const sql = `SELECT \`TABLE_CATALOG\`, \`TABLE_SCHEMA\`, \`TABLE_NAME\`, \`TABLE_TYPE\`, \`IS_DISTRIBUTED\`, \`DISTRIBUTION_ALGORITHM\`, \`DISTRIBUTION_BUCKETS\`, \`IS_WATERMARKED\`, \`WATERMARK_COLUMN\`, \`WATERMARK_EXPRESSION\`, \`WATERMARK_IS_HIDDEN\`, \`COMMENT\` FROM \`${catalog_name}\`.\`INFORMATION_SCHEMA\`.\`TABLES\` WHERE \`TABLE_NAME\` = '${tableName}'${schemaFilter}`;
79
+ const result = await executeFlinkSql(clientManager, sql, {
80
+ organizationId: organization_id,
81
+ environmentId: environment_id,
82
+ computePoolId: compute_pool_id,
83
+ });
84
+ if (!result.success) {
85
+ return this.createResponse(`Failed to get table info: ${result.error}`, true);
86
+ }
87
+ const tables = result.data ?? [];
88
+ if (tables.length === 0) {
89
+ const scope = schema_name
90
+ ? `'${catalog_name}.${schema_name}.${tableName}'`
91
+ : `'${tableName}' in catalog '${catalog_name}'`;
92
+ return this.createResponse(`Table ${scope} not found.`, true);
93
+ }
94
+ return this.createResponse(`Table info for '${tableName}':\n${JSON.stringify(tables[0], null, 2)}`);
95
+ }
96
+ getToolConfig() {
97
+ return {
98
+ name: ToolName.GET_FLINK_TABLE_INFO,
99
+ description: "Get table metadata via INFORMATION_SCHEMA.TABLES. Returns watermark configuration, distribution info, and table type.",
100
+ inputSchema: getTableInfoArguments.shape,
101
+ };
102
+ }
103
+ getRequiredEnvVars() {
104
+ return ["FLINK_API_KEY", "FLINK_API_SECRET"];
105
+ }
106
+ isConfluentCloudOnly() {
107
+ return true;
108
+ }
109
+ }
110
+ //# sourceMappingURL=get-table-info-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-table-info-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/get-table-info-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ClientManager } from "../../../../../confluent/client-manager.js";
2
+ import { CallToolResult } from "../../../../../confluent/schema.js";
3
+ import { BaseToolHandler, ToolConfig } from "../../../../../confluent/tools/base-tools.js";
4
+ import { EnvVar } from "../../../../../env-schema.js";
5
+ export declare class ListCatalogsHandler extends BaseToolHandler {
6
+ handle(clientManager: ClientManager, toolArguments: Record<string, unknown> | undefined): Promise<CallToolResult>;
7
+ getToolConfig(): ToolConfig;
8
+ getRequiredEnvVars(): EnvVar[];
9
+ isConfluentCloudOnly(): boolean;
10
+ }
11
+ //# sourceMappingURL=list-catalogs-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-catalogs-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/list-catalogs-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,UAAU,EACX,MAAM,oCAAoC,CAAC;AAI5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA0B5C,qBAAa,mBAAoB,SAAQ,eAAe;IAChD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IA2D1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -0,0 +1,74 @@
1
+ import { getEnsuredParam } from "../../../../../confluent/helpers.js";
2
+ import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
3
+ import { resolveCatalogName } from "../../../../../confluent/tools/handlers/flink/catalog/catalog-resolver.js";
4
+ import { executeFlinkSql } from "../../../../../confluent/tools/handlers/flink/flink-sql-helper.js";
5
+ import { ToolName } from "../../../../../confluent/tools/tool-name.js";
6
+ import { z } from "zod";
7
+ const listCatalogsArguments = z.object({
8
+ baseUrl: z
9
+ .string()
10
+ .describe("The base URL of the Flink REST API.")
11
+ .url()
12
+ .optional(),
13
+ organizationId: z
14
+ .string()
15
+ .trim()
16
+ .optional()
17
+ .describe("The unique identifier for the organization."),
18
+ environmentId: z
19
+ .string()
20
+ .trim()
21
+ .optional()
22
+ .describe("The unique identifier for the environment."),
23
+ computePoolId: z
24
+ .string()
25
+ .trim()
26
+ .optional()
27
+ .describe("The id associated with the compute pool in context."),
28
+ });
29
+ export class ListCatalogsHandler extends BaseToolHandler {
30
+ async handle(clientManager, toolArguments) {
31
+ const { organizationId, environmentId, computePoolId, baseUrl } = listCatalogsArguments.parse(toolArguments);
32
+ const organization_id = getEnsuredParam("FLINK_ORG_ID", "Organization ID is required", organizationId);
33
+ const environment_id = getEnsuredParam("FLINK_ENV_ID", "Environment ID is required", environmentId);
34
+ const compute_pool_id = getEnsuredParam("FLINK_COMPUTE_POOL_ID", "Compute Pool ID is required", computePoolId);
35
+ // Smart resolution: use FLINK_ENV_ID as the catalog name
36
+ const catalog_name = resolveCatalogName();
37
+ if (!catalog_name) {
38
+ return this.createResponse("Catalog name could not be resolved. Set FLINK_ENV_ID.", true);
39
+ }
40
+ if (baseUrl !== undefined && baseUrl !== "") {
41
+ clientManager.setConfluentCloudFlinkEndpoint(baseUrl);
42
+ }
43
+ // Query INFORMATION_SCHEMA.CATALOGS for all available catalogs
44
+ // Must fully qualify with catalog and use backticks per Confluent Cloud requirements
45
+ const sql = `SELECT \`CATALOG_NAME\` FROM \`${catalog_name}\`.\`INFORMATION_SCHEMA\`.\`CATALOGS\``;
46
+ const result = await executeFlinkSql(clientManager, sql, {
47
+ organizationId: organization_id,
48
+ environmentId: environment_id,
49
+ computePoolId: compute_pool_id,
50
+ });
51
+ if (!result.success) {
52
+ return this.createResponse(`Failed to list catalogs: ${result.error}`, true);
53
+ }
54
+ const catalogs = result.data ?? [];
55
+ if (catalogs.length === 0) {
56
+ return this.createResponse("No catalogs found.");
57
+ }
58
+ return this.createResponse(`Catalogs:\n${JSON.stringify(catalogs, null, 2)}`);
59
+ }
60
+ getToolConfig() {
61
+ return {
62
+ name: ToolName.LIST_FLINK_CATALOGS,
63
+ description: "List all catalogs available in the Flink environment via INFORMATION_SCHEMA.CATALOGS.",
64
+ inputSchema: listCatalogsArguments.shape,
65
+ };
66
+ }
67
+ getRequiredEnvVars() {
68
+ return ["FLINK_API_KEY", "FLINK_API_SECRET"];
69
+ }
70
+ isConfluentCloudOnly() {
71
+ return true;
72
+ }
73
+ }
74
+ //# sourceMappingURL=list-catalogs-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-catalogs-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/list-catalogs-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ClientManager } from "../../../../../confluent/client-manager.js";
2
+ import { CallToolResult } from "../../../../../confluent/schema.js";
3
+ import { BaseToolHandler, ToolConfig } from "../../../../../confluent/tools/base-tools.js";
4
+ import { EnvVar } from "../../../../../env-schema.js";
5
+ export declare class ListDatabasesHandler extends BaseToolHandler {
6
+ handle(clientManager: ClientManager, toolArguments: Record<string, unknown> | undefined): Promise<CallToolResult>;
7
+ getToolConfig(): ToolConfig;
8
+ getRequiredEnvVars(): EnvVar[];
9
+ isConfluentCloudOnly(): boolean;
10
+ }
11
+ //# sourceMappingURL=list-databases-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-databases-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/list-databases-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,UAAU,EACX,MAAM,oCAAoC,CAAC;AAI5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAmC5C,qBAAa,oBAAqB,SAAQ,eAAe;IACjD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IAgE1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -0,0 +1,81 @@
1
+ import { getEnsuredParam } from "../../../../../confluent/helpers.js";
2
+ import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
3
+ import { resolveCatalogName } from "../../../../../confluent/tools/handlers/flink/catalog/catalog-resolver.js";
4
+ import { executeFlinkSql } from "../../../../../confluent/tools/handlers/flink/flink-sql-helper.js";
5
+ import { ToolName } from "../../../../../confluent/tools/tool-name.js";
6
+ import env from "../../../../../env.js";
7
+ import { z } from "zod";
8
+ const listDatabasesArguments = z.object({
9
+ baseUrl: z
10
+ .string()
11
+ .describe("The base URL of the Flink REST API.")
12
+ .url()
13
+ .default(() => env.FLINK_REST_ENDPOINT ?? "")
14
+ .optional(),
15
+ organizationId: z
16
+ .string()
17
+ .trim()
18
+ .optional()
19
+ .describe("The unique identifier for the organization."),
20
+ environmentId: z
21
+ .string()
22
+ .trim()
23
+ .optional()
24
+ .describe("The unique identifier for the environment."),
25
+ computePoolId: z
26
+ .string()
27
+ .trim()
28
+ .optional()
29
+ .describe("The id associated with the compute pool in context."),
30
+ catalogName: z
31
+ .string()
32
+ .trim()
33
+ .optional()
34
+ .describe("The Flink catalog name (environment ID, e.g., env-xxxxx). Omit to use defaults."),
35
+ });
36
+ export class ListDatabasesHandler extends BaseToolHandler {
37
+ async handle(clientManager, toolArguments) {
38
+ const { organizationId, environmentId, computePoolId, catalogName, baseUrl, } = listDatabasesArguments.parse(toolArguments);
39
+ const organization_id = getEnsuredParam("FLINK_ORG_ID", "Organization ID is required", organizationId);
40
+ const environment_id = getEnsuredParam("FLINK_ENV_ID", "Environment ID is required", environmentId);
41
+ const compute_pool_id = getEnsuredParam("FLINK_COMPUTE_POOL_ID", "Compute Pool ID is required", computePoolId);
42
+ // Smart resolution: only accept env-* format, otherwise fall back to FLINK_ENV_ID
43
+ const catalog_name = resolveCatalogName(catalogName);
44
+ if (!catalog_name) {
45
+ return this.createResponse("Catalog name could not be resolved. Set FLINK_ENV_ID or provide a valid environment ID (env-xxxxx).", true);
46
+ }
47
+ if (baseUrl !== undefined && baseUrl !== "") {
48
+ clientManager.setConfluentCloudFlinkEndpoint(baseUrl);
49
+ }
50
+ // Build SQL query for INFORMATION_SCHEMA.SCHEMATA
51
+ // Must fully qualify with catalog and use backticks per Confluent Cloud requirements
52
+ const sql = `SELECT \`SCHEMA_ID\`, \`SCHEMA_NAME\` FROM \`${catalog_name}\`.\`INFORMATION_SCHEMA\`.\`SCHEMATA\` WHERE \`SCHEMA_NAME\` <> 'INFORMATION_SCHEMA'`;
53
+ const result = await executeFlinkSql(clientManager, sql, {
54
+ organizationId: organization_id,
55
+ environmentId: environment_id,
56
+ computePoolId: compute_pool_id,
57
+ });
58
+ if (!result.success) {
59
+ return this.createResponse(`Failed to list databases: ${result.error}`, true);
60
+ }
61
+ const databases = result.data ?? [];
62
+ if (databases.length === 0) {
63
+ return this.createResponse("No databases found.");
64
+ }
65
+ return this.createResponse(`Databases:\n${JSON.stringify(databases, null, 2)}`);
66
+ }
67
+ getToolConfig() {
68
+ return {
69
+ name: ToolName.LIST_FLINK_DATABASES,
70
+ description: "List all databases (schemas) in a Flink catalog via INFORMATION_SCHEMA.SCHEMATA. Returns catalog and database names.",
71
+ inputSchema: listDatabasesArguments.shape,
72
+ };
73
+ }
74
+ getRequiredEnvVars() {
75
+ return ["FLINK_API_KEY", "FLINK_API_SECRET"];
76
+ }
77
+ isConfluentCloudOnly() {
78
+ return true;
79
+ }
80
+ }
81
+ //# sourceMappingURL=list-databases-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-databases-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/list-databases-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ClientManager } from "../../../../../confluent/client-manager.js";
2
+ import { CallToolResult } from "../../../../../confluent/schema.js";
3
+ import { BaseToolHandler, ToolConfig } from "../../../../../confluent/tools/base-tools.js";
4
+ import { EnvVar } from "../../../../../env-schema.js";
5
+ export declare class ListTablesHandler extends BaseToolHandler {
6
+ handle(clientManager: ClientManager, toolArguments: Record<string, unknown> | undefined): Promise<CallToolResult>;
7
+ getToolConfig(): ToolConfig;
8
+ getRequiredEnvVars(): EnvVar[];
9
+ isConfluentCloudOnly(): boolean;
10
+ }
11
+ //# sourceMappingURL=list-tables-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tables-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/list-tables-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,UAAU,EACX,MAAM,oCAAoC,CAAC;AAI5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA0C5C,qBAAa,iBAAkB,SAAQ,eAAe;IAC9C,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IAuE1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}