@confluentinc/mcp-confluent 1.1.0 → 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 (133) hide show
  1. package/README.md +507 -342
  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 -2
  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/flink/catalog/catalog-resolver.d.ts +77 -0
  27. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -0
  28. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +136 -0
  29. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js.map +1 -0
  30. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts +11 -0
  31. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts.map +1 -0
  32. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +111 -0
  33. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -0
  34. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts +11 -0
  35. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts.map +1 -0
  36. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js +110 -0
  37. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js.map +1 -0
  38. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts +11 -0
  39. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts.map +1 -0
  40. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +74 -0
  41. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js.map +1 -0
  42. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts +11 -0
  43. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts.map +1 -0
  44. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +81 -0
  45. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js.map +1 -0
  46. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts +11 -0
  47. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts.map +1 -0
  48. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +90 -0
  49. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js.map +1 -0
  50. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts +11 -0
  51. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts.map +1 -0
  52. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +131 -0
  53. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js.map +1 -0
  54. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts +11 -0
  55. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts.map +1 -0
  56. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +248 -0
  57. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -0
  58. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts +88 -0
  59. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts.map +1 -0
  60. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js +443 -0
  61. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js.map +1 -0
  62. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts +11 -0
  63. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts.map +1 -0
  64. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js +398 -0
  65. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js.map +1 -0
  66. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts +23 -0
  67. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -0
  68. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js +133 -0
  69. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -0
  70. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts +11 -0
  71. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts.map +1 -0
  72. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js +72 -0
  73. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -0
  74. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -1
  75. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +20 -3
  76. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
  77. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js +1 -1
  78. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
  79. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +1 -1
  80. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
  81. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +1 -1
  82. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -1
  83. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +1 -1
  84. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -1
  85. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +1 -1
  86. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
  87. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +11 -0
  88. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -0
  89. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +193 -0
  90. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -0
  91. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +11 -0
  92. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -0
  93. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +224 -0
  94. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -0
  95. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +10 -0
  96. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -0
  97. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +71 -0
  98. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -0
  99. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
  100. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +1 -5
  101. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
  102. package/dist/confluent/tools/tool-factory.d.ts.map +1 -1
  103. package/dist/confluent/tools/tool-factory.js +26 -0
  104. package/dist/confluent/tools/tool-factory.js.map +1 -1
  105. package/dist/confluent/tools/tool-name.d.ts +14 -1
  106. package/dist/confluent/tools/tool-name.d.ts.map +1 -1
  107. package/dist/confluent/tools/tool-name.js +13 -0
  108. package/dist/confluent/tools/tool-name.js.map +1 -1
  109. package/dist/env-schema.d.ts +7 -0
  110. package/dist/env-schema.d.ts.map +1 -1
  111. package/dist/env-schema.js +37 -2
  112. package/dist/env-schema.js.map +1 -1
  113. package/dist/env.d.ts +7 -0
  114. package/dist/env.d.ts.map +1 -1
  115. package/dist/index.js +67 -5
  116. package/dist/index.js.map +1 -1
  117. package/dist/mcp/transports/auth.d.ts +55 -0
  118. package/dist/mcp/transports/auth.d.ts.map +1 -0
  119. package/dist/mcp/transports/auth.js +127 -0
  120. package/dist/mcp/transports/auth.js.map +1 -0
  121. package/dist/mcp/transports/index.d.ts +1 -0
  122. package/dist/mcp/transports/index.d.ts.map +1 -1
  123. package/dist/mcp/transports/index.js +1 -0
  124. package/dist/mcp/transports/index.js.map +1 -1
  125. package/dist/mcp/transports/manager.d.ts +13 -1
  126. package/dist/mcp/transports/manager.d.ts.map +1 -1
  127. package/dist/mcp/transports/manager.js +20 -2
  128. package/dist/mcp/transports/manager.js.map +1 -1
  129. package/dist/mcp/transports/server.d.ts +10 -1
  130. package/dist/mcp/transports/server.d.ts.map +1 -1
  131. package/dist/mcp/transports/server.js +12 -2
  132. package/dist/mcp/transports/server.js.map +1 -1
  133. package/package.json +14 -6
@@ -10,8 +10,8 @@ const envSchema = z.object({
10
10
  .default(8080),
11
11
  HTTP_HOST: z
12
12
  .string()
13
- .describe("Host to bind for HTTP transport. 0.0.0.0 means all interfaces.")
14
- .default("0.0.0.0"),
13
+ .describe("Host to bind for HTTP transport. Defaults to localhost only for security.")
14
+ .default("127.0.0.1"),
15
15
  HTTP_MCP_ENDPOINT_PATH: z
16
16
  .string()
17
17
  .describe("HTTP endpoint path for MCP transport (e.g., '/mcp')")
@@ -28,6 +28,25 @@ const envSchema = z.object({
28
28
  .preprocess((val) => (typeof val === "string" ? val.toLowerCase() : val), z.enum(Object.keys(logLevels)))
29
29
  .describe("Log level for application logging (trace, debug, info, warn, error, fatal)")
30
30
  .default("info"),
31
+ MCP_API_KEY: z
32
+ .string()
33
+ .describe("API key for HTTP/SSE authentication. Not required when authentication is disabled.")
34
+ .trim()
35
+ .min(32, "API key must be at least 32 characters for security")
36
+ .optional(),
37
+ MCP_AUTH_DISABLED: z
38
+ .preprocess((val) => val === "true" || val === "1", z.boolean())
39
+ .describe("Disable authentication for HTTP/SSE transports. WARNING: Only use in development environments.")
40
+ .default(false),
41
+ DO_NOT_TRACK: z
42
+ .preprocess((val) => val === "true" || val === "1", z.boolean())
43
+ .describe("Disable telemetry analytics.")
44
+ .default(false),
45
+ MCP_ALLOWED_HOSTS: z
46
+ .string()
47
+ .describe("Comma-separated list of allowed Host header values for DNS rebinding protection.")
48
+ .default("localhost,127.0.0.1")
49
+ .transform((val) => val.split(",").map((h) => h.trim().toLowerCase())),
31
50
  BOOTSTRAP_SERVERS: z
32
51
  .string()
33
52
  .describe("List of Kafka broker addresses in the format host1:port1,host2:port2 used to establish initial connection to the Kafka cluster")
@@ -153,6 +172,22 @@ const configSchema = z
153
172
  .describe("REST API endpoint for Kafka cluster management and administration")
154
173
  .trim()
155
174
  .url(),
175
+ TELEMETRY_ENDPOINT: z
176
+ .string()
177
+ .describe("Base URL for Confluent Cloud Telemetry API (metrics)")
178
+ .trim()
179
+ .url()
180
+ .default("https://api.telemetry.confluent.cloud"),
181
+ TELEMETRY_API_KEY: z
182
+ .string()
183
+ .describe("Optional API key for telemetry access with basic read permissions. Falls back to CONFLUENT_CLOUD_API_KEY if not set.")
184
+ .trim()
185
+ .min(1),
186
+ TELEMETRY_API_SECRET: z
187
+ .string()
188
+ .describe("Optional API secret paired with TELEMETRY_API_KEY. Falls back to CONFLUENT_CLOUD_API_SECRET if not set.")
189
+ .trim()
190
+ .min(1),
156
191
  })
157
192
  .partial();
158
193
  export const combinedSchema = envSchema.merge(configSchema);
@@ -1 +1 @@
1
- {"version":3,"file":"env-schema.js","sourceRoot":"","sources":["../src/env-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env-schema.js","sourceRoot":"","sources":["../src/env-schema.ts"],"names":[],"mappings":"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"}
package/dist/env.d.ts CHANGED
@@ -17,6 +17,10 @@ declare const env: {
17
17
  SSE_MCP_ENDPOINT_PATH: string;
18
18
  SSE_MCP_MESSAGE_ENDPOINT_PATH: string;
19
19
  LOG_LEVEL: "info" | "fatal" | "error" | "warn" | "debug" | "trace";
20
+ MCP_AUTH_DISABLED: boolean;
21
+ DO_NOT_TRACK: boolean;
22
+ MCP_ALLOWED_HOSTS: string[];
23
+ MCP_API_KEY?: string | undefined;
20
24
  BOOTSTRAP_SERVERS?: string | undefined;
21
25
  KAFKA_API_KEY?: string | undefined;
22
26
  KAFKA_API_SECRET?: string | undefined;
@@ -39,6 +43,9 @@ declare const env: {
39
43
  CONFLUENT_CLOUD_REST_ENDPOINT?: string | undefined;
40
44
  SCHEMA_REGISTRY_ENDPOINT?: string | undefined;
41
45
  KAFKA_REST_ENDPOINT?: string | undefined;
46
+ TELEMETRY_ENDPOINT?: string | undefined;
47
+ TELEMETRY_API_KEY?: string | undefined;
48
+ TELEMETRY_API_SECRET?: string | undefined;
42
49
  };
43
50
  export default env;
44
51
  //# sourceMappingURL=env.d.ts.map
package/dist/env.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAMzD;;;GAGG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,CAQpD;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,CAMpD;AAGD,QAAA,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASP,CAAC;AAEH,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAMzD;;;GAGG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,CAQpD;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,CAMpD;AAGD,QAAA,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASP,CAAC;AAEH,eAAe,GAAG,CAAC"}
package/dist/index.js CHANGED
@@ -4,11 +4,23 @@ import { getFilteredToolNames, getPackageVersion, parseCliArgs, } from "./cli.js
4
4
  import { DefaultClientManager } from "./confluent/client-manager.js";
5
5
  import { ToolFactory } from "./confluent/tools/tool-factory.js";
6
6
  import { ToolName } from "./confluent/tools/tool-name.js";
7
+ import { TelemetryEvent, TelemetryService } from "./confluent/telemetry.js";
7
8
  import { initEnv } from "./env.js";
8
9
  import { logger, setLogLevel } from "./logger.js";
9
- import { TransportManager } from "./mcp/transports/index.js";
10
+ import { generateApiKey, TransportManager } from "./mcp/transports/index.js";
10
11
  // Parse command line arguments and load environment variables if --env-file is specified
11
12
  const cliOptions = parseCliArgs();
13
+ // Handle --generate-key early (before any other initialization)
14
+ if (cliOptions.generateKey) {
15
+ const apiKey = generateApiKey();
16
+ console.log("\nGenerated MCP API Key:");
17
+ console.log("=".repeat(64));
18
+ console.log(apiKey);
19
+ console.log("=".repeat(64));
20
+ console.log("\nAdd this to your .env file:");
21
+ console.log(`MCP_API_KEY=${apiKey}\n`);
22
+ process.exit(0);
23
+ }
12
24
  async function main() {
13
25
  try {
14
26
  // Initialize environment after CLI args are processed
@@ -39,6 +51,7 @@ async function main() {
39
51
  flink: env.FLINK_REST_ENDPOINT,
40
52
  schemaRegistry: env.SCHEMA_REGISTRY_ENDPOINT,
41
53
  kafka: env.KAFKA_REST_ENDPOINT,
54
+ telemetry: env.TELEMETRY_ENDPOINT ?? "https://api.telemetry.confluent.cloud",
42
55
  },
43
56
  auth: {
44
57
  cloud: {
@@ -61,6 +74,11 @@ async function main() {
61
74
  apiKey: env.KAFKA_API_KEY,
62
75
  apiSecret: env.KAFKA_API_SECRET,
63
76
  },
77
+ telemetry: {
78
+ apiKey: (env.TELEMETRY_API_KEY ?? env.CONFLUENT_CLOUD_API_KEY),
79
+ apiSecret: (env.TELEMETRY_API_SECRET ??
80
+ env.CONFLUENT_CLOUD_API_SECRET),
81
+ },
64
82
  },
65
83
  });
66
84
  const filteredToolNames = getFilteredToolNames(cliOptions);
@@ -102,24 +120,68 @@ async function main() {
102
120
  logger.warn(`Tool ${toolName} disabled due to missing environment variables: ${missingVars.join(", ")}`);
103
121
  }
104
122
  });
123
+ const serverVersion = getPackageVersion();
105
124
  const server = new McpServer({
106
125
  name: "confluent",
107
- version: getPackageVersion(),
126
+ version: serverVersion,
127
+ });
128
+ TelemetryService.getInstance().setCommonProperties({
129
+ serverVersion,
130
+ transportType: cliOptions.transports.join(","),
108
131
  });
132
+ // Capture MCP client info when the handshake completes.
133
+ server.server.oninitialized = () => {
134
+ const clientInfo = server.server.getClientVersion();
135
+ TelemetryService.getInstance().setCommonProperties({
136
+ clientName: clientInfo?.name,
137
+ clientVersion: clientInfo?.version,
138
+ });
139
+ };
109
140
  toolHandlers.forEach((handler, name) => {
110
141
  const config = handler.getToolConfig();
111
- server.tool(name, config.description, config.inputSchema, async (args, context) => {
142
+ server.registerTool(name, { description: config.description, inputSchema: config.inputSchema }, async (args, context) => {
112
143
  const sessionId = context?.sessionId;
113
- return await handler.handle(clientManager, args, sessionId);
144
+ const startTime = Date.now();
145
+ try {
146
+ const result = await handler.handle(clientManager, args, sessionId);
147
+ TelemetryService.getInstance().track(TelemetryEvent.TOOL_CALL, {
148
+ toolName: name,
149
+ durationMs: Date.now() - startTime,
150
+ status: result.isError ? "error" : "success",
151
+ });
152
+ return result;
153
+ }
154
+ catch (error) {
155
+ TelemetryService.getInstance().track(TelemetryEvent.TOOL_CALL, {
156
+ toolName: name,
157
+ durationMs: Date.now() - startTime,
158
+ status: "error",
159
+ });
160
+ throw error;
161
+ }
114
162
  });
115
163
  });
116
- const transportManager = new TransportManager(server);
164
+ // Prepare auth configuration
165
+ const disableAuth = cliOptions.disableAuth || env.MCP_AUTH_DISABLED;
166
+ const allowedHosts = cliOptions.allowedHosts || env.MCP_ALLOWED_HOSTS;
167
+ const apiKey = env.MCP_API_KEY;
168
+ // Warn if auth is disabled
169
+ if (disableAuth) {
170
+ logger.warn("Authentication is DISABLED for HTTP/SSE transports. " +
171
+ "This should only be used in development environments.");
172
+ }
173
+ const transportManager = new TransportManager(server, {
174
+ disableAuth,
175
+ allowedHosts,
176
+ apiKey,
177
+ });
117
178
  // Start all transports with a single call
118
179
  logger.info(`Starting transports: ${cliOptions.transports.join(", ")}`);
119
180
  await transportManager.start(cliOptions.transports, env.HTTP_PORT, env.HTTP_HOST, env.HTTP_MCP_ENDPOINT_PATH, env.SSE_MCP_ENDPOINT_PATH, env.SSE_MCP_MESSAGE_ENDPOINT_PATH);
120
181
  // Set up cleanup handlers
121
182
  const performCleanup = async () => {
122
183
  logger.info("Shutting down...");
184
+ await TelemetryService.getInstance().shutdown();
123
185
  await transportManager.stop();
124
186
  await clientManager.disconnect();
125
187
  await server.close();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { FastifyReply, FastifyRequest } from "fastify";
2
+ /**
3
+ * Configuration for MCP server authentication
4
+ */
5
+ export interface AuthConfig {
6
+ /** API key for authentication */
7
+ apiKey: string;
8
+ /** Whether authentication is enabled */
9
+ enabled: boolean;
10
+ /** List of allowed Host header values for DNS rebinding protection */
11
+ allowedHosts: string[];
12
+ }
13
+ /**
14
+ * Generates a cryptographically secure random API key
15
+ * @returns 64-character hex string
16
+ */
17
+ export declare function generateApiKey(): string;
18
+ /**
19
+ * Creates Fastify onRequest hook for authentication and host validation
20
+ * @param config Authentication configuration
21
+ * @returns Fastify hook function
22
+ */
23
+ export declare function createAuthHook(config: AuthConfig): (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
24
+ /**
25
+ * Error response schemas for OpenAPI documentation
26
+ */
27
+ export declare const authErrorSchemas: {
28
+ unauthorized: {
29
+ type: string;
30
+ properties: {
31
+ error: {
32
+ type: string;
33
+ example: string;
34
+ };
35
+ message: {
36
+ type: string;
37
+ example: string;
38
+ };
39
+ };
40
+ };
41
+ forbidden: {
42
+ type: string;
43
+ properties: {
44
+ error: {
45
+ type: string;
46
+ example: string;
47
+ };
48
+ message: {
49
+ type: string;
50
+ example: string;
51
+ };
52
+ };
53
+ };
54
+ };
55
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/mcp/transports/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGvD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,sEAAsE;IACtE,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAiED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,IAE7C,SAAS,cAAc,EACvB,OAAO,YAAY,KAClB,OAAO,CAAC,IAAI,CAAC,CA6CjB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAe5B,CAAC"}
@@ -0,0 +1,127 @@
1
+ import { randomBytes, timingSafeEqual } from "crypto";
2
+ import { logger } from "../../logger.js";
3
+ /**
4
+ * Generates a cryptographically secure random API key
5
+ * @returns 64-character hex string
6
+ */
7
+ export function generateApiKey() {
8
+ return randomBytes(32).toString("hex");
9
+ }
10
+ /**
11
+ * Timing-safe comparison of API keys to prevent timing attacks
12
+ */
13
+ function secureCompare(a, b) {
14
+ const bufA = Buffer.from(a, "utf8");
15
+ const bufB = Buffer.from(b, "utf8");
16
+ // If lengths differ, still do comparison to prevent timing leak
17
+ if (bufA.length !== bufB.length) {
18
+ // Compare against self to maintain constant time
19
+ timingSafeEqual(bufA, bufA);
20
+ return false;
21
+ }
22
+ return timingSafeEqual(bufA, bufB);
23
+ }
24
+ /**
25
+ * Extracts hostname from Host header using URL parsing
26
+ * Handles IPv4, IPv6, and regular hostnames correctly
27
+ */
28
+ function parseHostname(hostHeader) {
29
+ try {
30
+ // Prepend dummy protocol since URL requires one
31
+ const url = new URL(`http://${hostHeader}`);
32
+ return url.hostname.toLowerCase();
33
+ }
34
+ catch {
35
+ // Invalid host header format
36
+ return null;
37
+ }
38
+ }
39
+ /**
40
+ * Validates the Host header against allowed hosts list
41
+ * Used for DNS rebinding protection
42
+ */
43
+ function isHostAllowed(hostHeader, allowedHosts) {
44
+ if (!hostHeader) {
45
+ return false;
46
+ }
47
+ const hostname = parseHostname(hostHeader);
48
+ if (!hostname) {
49
+ return false;
50
+ }
51
+ return allowedHosts.some((allowed) => {
52
+ const allowedLower = allowed.toLowerCase();
53
+ // Exact match on hostname (e.g., "localhost" matches "localhost:8080")
54
+ if (hostname === allowedLower) {
55
+ return true;
56
+ }
57
+ // Allow matching with port in allowed list (e.g., "localhost:8080")
58
+ if (hostHeader.toLowerCase() === allowedLower) {
59
+ return true;
60
+ }
61
+ return false;
62
+ });
63
+ }
64
+ /**
65
+ * Creates Fastify onRequest hook for authentication and host validation
66
+ * @param config Authentication configuration
67
+ * @returns Fastify hook function
68
+ */
69
+ export function createAuthHook(config) {
70
+ return async (request, reply) => {
71
+ // 1. ALWAYS validate Host header (DNS rebinding protection)
72
+ // This runs regardless of whether API key auth is enabled
73
+ const hostHeader = request.headers.host;
74
+ if (!isHostAllowed(hostHeader, config.allowedHosts)) {
75
+ logger.warn({ host: hostHeader }, "Request rejected: Invalid Host header");
76
+ reply.status(403).send({
77
+ error: "Forbidden",
78
+ message: "Invalid Host header",
79
+ });
80
+ return;
81
+ }
82
+ // 2. Skip API key auth if disabled
83
+ if (!config.enabled) {
84
+ logger.debug("API key authentication disabled, skipping API key check");
85
+ return;
86
+ }
87
+ // 3. Validate API Key (header names are lowercased by Fastify)
88
+ const apiKey = request.headers["cflt-mcp-api-key"];
89
+ if (!apiKey || typeof apiKey !== "string") {
90
+ logger.warn("Request rejected: Missing cflt-mcp-api-Key header");
91
+ reply.status(401).send({
92
+ error: "Unauthorized",
93
+ message: "Missing cflt-mcp-api-Key header",
94
+ });
95
+ return;
96
+ }
97
+ if (!secureCompare(apiKey, config.apiKey)) {
98
+ logger.warn("Request rejected: Invalid API key");
99
+ reply.status(401).send({
100
+ error: "Unauthorized",
101
+ message: "Invalid API key",
102
+ });
103
+ return;
104
+ }
105
+ logger.debug("Request authenticated successfully");
106
+ };
107
+ }
108
+ /**
109
+ * Error response schemas for OpenAPI documentation
110
+ */
111
+ export const authErrorSchemas = {
112
+ unauthorized: {
113
+ type: "object",
114
+ properties: {
115
+ error: { type: "string", example: "Unauthorized" },
116
+ message: { type: "string", example: "Missing cflt-mcp-api-Key header" },
117
+ },
118
+ },
119
+ forbidden: {
120
+ type: "object",
121
+ properties: {
122
+ error: { type: "string", example: "Forbidden" },
123
+ message: { type: "string", example: "Invalid Host header" },
124
+ },
125
+ },
126
+ };
127
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/mcp/transports/auth.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ export * from "../../mcp/transports/auth.js";
1
2
  export * from "../../mcp/transports/http.js";
2
3
  export * from "../../mcp/transports/manager.js";
3
4
  export * from "../../mcp/transports/server.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from "../../mcp/transports/auth.js";
1
2
  export * from "../../mcp/transports/http.js";
2
3
  export * from "../../mcp/transports/manager.js";
3
4
  export * from "../../mcp/transports/server.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC"}
@@ -1,10 +1,22 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { TransportType } from "../../mcp/transports/types.js";
3
+ /**
4
+ * Configuration for the transport manager
5
+ */
6
+ export interface TransportManagerConfig {
7
+ /** Disable authentication for HTTP/SSE transports */
8
+ disableAuth?: boolean;
9
+ /** List of allowed Host header values for DNS rebinding protection */
10
+ allowedHosts?: string[];
11
+ /** API key for authentication (required when auth is enabled) */
12
+ apiKey?: string;
13
+ }
3
14
  export declare class TransportManager {
4
15
  private server;
16
+ private config?;
5
17
  private transports;
6
18
  private httpServer;
7
- constructor(server: McpServer);
19
+ constructor(server: McpServer, config?: TransportManagerConfig | undefined);
8
20
  start(types: TransportType[], port?: number, host?: string, httpMcpEndpointPath?: string, sseMcpEndpointPath?: string, sseMcpMessageEndpointPath?: string): Promise<void>;
9
21
  stop(): Promise<void>;
10
22
  private createTransport;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/mcp/transports/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,OAAO,EAAa,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAExE,qBAAa,gBAAgB;IAIf,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,UAAU,CAA2B;gBAEzB,MAAM,EAAE,SAAS;IAE/B,KAAK,CACT,KAAK,EAAE,aAAa,EAAE,EACtB,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,mBAAmB,CAAC,EAAE,MAAM,EAC5B,kBAAkB,CAAC,EAAE,MAAM,EAC3B,yBAAyB,CAAC,EAAE,MAAM,GACjC,OAAO,CAAC,IAAI,CAAC;IAgDV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAwBb,eAAe;CAgC9B"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/mcp/transports/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,OAAO,EAAa,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM,CAAC;IALjB,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,UAAU,CAA2B;gBAGnC,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,sBAAsB,YAAA;IAGnC,KAAK,CACT,KAAK,EAAE,aAAa,EAAE,EACtB,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,mBAAmB,CAAC,EAAE,MAAM,EAC5B,kBAAkB,CAAC,EAAE,MAAM,EAC3B,yBAAyB,CAAC,EAAE,MAAM,GACjC,OAAO,CAAC,IAAI,CAAC;IAsEV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAwBb,eAAe;CAgC9B"}
@@ -6,18 +6,36 @@ import { StdioTransport } from "../../mcp/transports/stdio.js";
6
6
  import { TransportType } from "../../mcp/transports/types.js";
7
7
  export class TransportManager {
8
8
  server;
9
+ config;
9
10
  transports = new Map();
10
11
  httpServer = null;
11
- constructor(server) {
12
+ constructor(server, config) {
12
13
  this.server = server;
14
+ this.config = config;
13
15
  }
14
16
  async start(types, port, host, httpMcpEndpointPath, sseMcpEndpointPath, sseMcpMessageEndpointPath) {
15
17
  try {
16
18
  const needsHttpServer = types.some((type) => type === TransportType.HTTP || type === TransportType.SSE);
17
19
  // Initialize and prepare HTTP server if needed
18
20
  if (needsHttpServer) {
19
- this.httpServer = new HttpServer();
21
+ // Prepare auth configuration
22
+ const authEnabled = !this.config?.disableAuth;
23
+ const apiKey = this.config?.apiKey;
24
+ // Require API key when auth is enabled
25
+ if (authEnabled && !apiKey) {
26
+ throw new Error("MCP_API_KEY is required when authentication is enabled for HTTP/SSE transports. " +
27
+ "Generate a key using: npx mcp-confluent --generate-key");
28
+ }
29
+ const authConfig = {
30
+ apiKey: apiKey || "",
31
+ enabled: authEnabled,
32
+ allowedHosts: this.config?.allowedHosts || ["localhost", "127.0.0.1"],
33
+ };
34
+ this.httpServer = new HttpServer({ auth: authConfig });
20
35
  await this.httpServer.prepare();
36
+ if (authEnabled) {
37
+ logger.info("MCP Server authentication enabled");
38
+ }
21
39
  }
22
40
  // Create and connect all transports
23
41
  await Promise.all(types.map(async (type) => {
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/mcp/transports/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAa,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAExE,MAAM,OAAO,gBAAgB;IAIP;IAHZ,UAAU,GAAkC,IAAI,GAAG,EAAE,CAAC;IACtD,UAAU,GAAsB,IAAI,CAAC;IAE7C,YAAoB,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;IAAG,CAAC;IAEzC,KAAK,CAAC,KAAK,CACT,KAAsB,EACtB,IAAa,EACb,IAAa,EACb,mBAA4B,EAC5B,kBAA2B,EAC3B,yBAAkC;QAElC,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAChC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,IAAI,IAAI,KAAK,aAAa,CAAC,GAAG,CACpE,CAAC;YAEF,+CAA+C;YAC/C,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAClC,CAAC;YAED,oCAAoC;YACpC,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAC1C,IAAI,EACJ,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,CAC1B,CAAC;gBACF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACrC,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;YAC5B,CAAC,CAAC,CACH,CAAC;YAEF,4DAA4D;YAC5D,IAAI,eAAe,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;oBACjB,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;wBAC1B,IAAI;wBACJ,IAAI;qBACL,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;oBAC3C,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,4BAA4B,CAAC,CAAC;YACtD,4CAA4C;YAC5C,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,iDAAiD;QACjD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAED,iCAAiC;QACjC,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC3D,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CACV,EAAE,KAAK,EAAE,EACT,mCAAmC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAChE,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,IAAmB,EACnB,mBAA4B,EAC5B,kBAA2B,EAC3B,yBAAkC;QAElC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBACjD,CAAC;gBACD,OAAO,IAAI,aAAa,CACtB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,mBAAmB,CACpB,CAAC;YACJ,KAAK,KAAK;gBACR,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBACjD,CAAC;gBACD,OAAO,IAAI,YAAY,CACrB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,kBAAkB,EAClB,yBAAyB,CAC1B,CAAC;YACJ,KAAK,OAAO;gBACV,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC;gBACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/mcp/transports/manager.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,18 @@
1
+ import { AuthConfig } from "../../mcp/transports/auth.js";
1
2
  import { ServerConfig } from "../../mcp/transports/types.js";
2
3
  import { FastifyInstance } from "fastify";
4
+ /**
5
+ * Configuration for the HTTP server
6
+ */
7
+ export interface HttpServerConfig {
8
+ /** Authentication configuration */
9
+ auth?: AuthConfig;
10
+ }
3
11
  export declare class HttpServer {
4
12
  private fastify;
5
13
  private isSwaggerConfigured;
6
- constructor();
14
+ private authConfig;
15
+ constructor(config?: HttpServerConfig);
7
16
  prepare(): Promise<void>;
8
17
  getInstance(): FastifyInstance;
9
18
  start(config: ServerConfig): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/transports/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAGL,eAAe,EAChB,MAAM,SAAS,CAAC;AAEjB,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,mBAAmB,CAAS;;IAS9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+C9B,WAAW,IAAI,eAAe;IAIxB,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB1C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAS5B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/transports/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAkB,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAGL,eAAe,EAChB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,UAAU,CAA2B;gBAEjC,MAAM,CAAC,EAAE,gBAAgB;IAY/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwD9B,WAAW,IAAI,eAAe;IAIxB,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB1C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAS5B"}
@@ -2,21 +2,31 @@ import fastifySwagger from "@fastify/swagger";
2
2
  import fastifySwaggerUi from "@fastify/swagger-ui";
3
3
  import env from "../../env.js";
4
4
  import { logger } from "../../logger.js";
5
+ import { createAuthHook } from "../../mcp/transports/auth.js";
5
6
  import { default as Fastify, } from "fastify";
6
7
  export class HttpServer {
7
8
  fastify;
8
9
  isSwaggerConfigured = false;
9
- constructor() {
10
+ authConfig = null;
11
+ constructor(config) {
10
12
  this.fastify = Fastify({
11
13
  loggerInstance: logger,
12
14
  // Useful for when ongoing http/sse connections are present
13
15
  forceCloseConnections: true,
14
16
  });
17
+ if (config?.auth) {
18
+ this.authConfig = config.auth;
19
+ }
15
20
  }
16
21
  async prepare() {
17
22
  if (this.isSwaggerConfigured) {
18
23
  return;
19
24
  }
25
+ // Register authentication hook BEFORE routes are registered
26
+ if (this.authConfig) {
27
+ this.fastify.addHook("onRequest", createAuthHook(this.authConfig));
28
+ logger.info({ enabled: this.authConfig.enabled }, "Authentication hook registered");
29
+ }
20
30
  // Configure Swagger before any routes are registered
21
31
  await this.fastify.register(fastifySwagger, {
22
32
  openapi: {
@@ -35,7 +45,7 @@ export class HttpServer {
35
45
  securitySchemes: {
36
46
  apiKey: {
37
47
  type: "apiKey",
38
- name: "X-API-Key",
48
+ name: "cflt-mcp-api-Key",
39
49
  in: "header",
40
50
  },
41
51
  },