@mongodb-js/mcp-setup 3.0.0-prerelease.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupAiToolsUtils.d.ts","sourceRoot":"","sources":["../src/setupAiToolsUtils.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;AACnD,eAAO,MAAM,WAAW,QAAO,QAAQ,GAAG,IAWzC,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,MAG5C,CAAC"}
@@ -0,0 +1,20 @@
1
+ import os from "os";
2
+ import { Keychain } from "@mongodb-js/mcp-core";
3
+ import { redact } from "mongodb-redact";
4
+ export const getPlatform = () => {
5
+ switch (os.platform()) {
6
+ case "win32":
7
+ return "windows";
8
+ case "darwin":
9
+ return "mac";
10
+ case "linux":
11
+ return "linux";
12
+ default:
13
+ return null;
14
+ }
15
+ };
16
+ export const formatError = (error) => {
17
+ const message = error instanceof Error ? error.message : String(error);
18
+ return redact(message, Keychain.root.allSecrets);
19
+ };
20
+ //# sourceMappingURL=setupAiToolsUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupAiToolsUtils.js","sourceRoot":"","sources":["../src/setupAiToolsUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC,MAAM,CAAC,MAAM,WAAW,GAAG,GAAoB,EAAE;IAC7C,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QACpB,KAAK,OAAO;YACR,OAAO,SAAS,CAAC;QACrB,KAAK,QAAQ;YACT,OAAO,KAAK,CAAC;QACjB,KAAK,OAAO;YACR,OAAO,OAAO,CAAC;QACnB;YACI,OAAO,IAAI,CAAC;IACpB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAU,EAAE;IAClD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACrD,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { CliHandler, CliHandlerContext } from "@mongodb-js/mcp-cli";
2
+ /**
3
+ * CLI Handler for "setup" command. Runs the setup wizard.
4
+ */
5
+ export declare class SetupCliHandler implements CliHandler {
6
+ handle({ args, config, onExit, serverMetadata }: CliHandlerContext): Promise<boolean>;
7
+ }
8
+ //# sourceMappingURL=setupCliHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupCliHandler.d.ts","sourceRoot":"","sources":["../src/setupCliHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEzE;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IACxC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;CAS9F"}
@@ -0,0 +1,15 @@
1
+ import { runSetup } from "./setupMcpServer.js";
2
+ /**
3
+ * CLI Handler for "setup" command. Runs the setup wizard.
4
+ */
5
+ export class SetupCliHandler {
6
+ async handle({ args, config, onExit, serverMetadata }) {
7
+ if (args[0] !== "setup") {
8
+ return false;
9
+ }
10
+ await runSetup({ config, serverMetadata });
11
+ onExit(0);
12
+ return true;
13
+ }
14
+ }
15
+ //# sourceMappingURL=setupCliHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupCliHandler.js","sourceRoot":"","sources":["../src/setupCliHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C;;GAEG;AACH,MAAM,OAAO,eAAe;IACxB,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAqB;QACpE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,CAAC,CAAC,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
@@ -0,0 +1,12 @@
1
+ import type { ServerMetadata } from "@mongodb-js/mcp-types";
2
+ import type { SetupConfig } from "./types.js";
3
+ /**
4
+ * Runs the interactive setup wizard. When `setupTelemetry` is provided, each
5
+ * logical step emits a telemetry event so we can track both overall completion
6
+ * rates and per-step drop-off.
7
+ */
8
+ export declare const runSetup: ({ config, serverMetadata, }: {
9
+ config: SetupConfig;
10
+ serverMetadata: ServerMetadata;
11
+ }) => Promise<never>;
12
+ //# sourceMappingURL=setupMcpServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupMcpServer.d.ts","sourceRoot":"","sources":["../src/setupMcpServer.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAO5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAoY9C;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAU,6BAG5B;IACC,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,EAAE,cAAc,CAAC;CAClC,KAAG,OAAO,CAAC,KAAK,CAoHhB,CAAC"}
@@ -0,0 +1,385 @@
1
+ import select from "@inquirer/select";
2
+ import { input, confirm, password } from "@inquirer/prompts";
3
+ import path from "path";
4
+ import chalk from "chalk";
5
+ import semver from "semver";
6
+ import { NodeDriverServiceProvider } from "@mongosh/service-provider-node-driver";
7
+ import { AI_TOOL_REGISTRY, openConfigSettings, TOOLS_WITHOUT_EDITORS } from "./aiTool.js";
8
+ import { formatError, getPlatform } from "./setupAiToolsUtils.js";
9
+ import { getAuthType } from "@mongodb-js/mcp-tools-mongodb";
10
+ import { createAtlasLocalClient } from "@mongodb-js/mcp-tools-atlas-local";
11
+ import { NoopLogger } from "@mongodb-js/mcp-core";
12
+ import { SetupTelemetry } from "./setupTelemetry.js";
13
+ import { Keychain, registerGlobalSecretToRedact } from "@mongodb-js/mcp-core";
14
+ import { promptAndInstallSkills } from "./installSkills.js";
15
+ const buildEnvObject = (connectionString, serviceWorkerId, serviceWorkerSecret) => {
16
+ const env = {};
17
+ if (connectionString) {
18
+ env.MDB_MCP_CONNECTION_STRING = connectionString;
19
+ }
20
+ if (serviceWorkerId) {
21
+ env.MDB_MCP_API_CLIENT_ID = serviceWorkerId;
22
+ }
23
+ if (serviceWorkerSecret) {
24
+ env.MDB_MCP_API_CLIENT_SECRET = serviceWorkerSecret;
25
+ }
26
+ return env;
27
+ };
28
+ const testConnectionString = async (connectionString) => {
29
+ let attempts = 0;
30
+ while (true) {
31
+ attempts += 1;
32
+ console.log("\nTesting connection...");
33
+ let serviceProvider;
34
+ try {
35
+ serviceProvider = await NodeDriverServiceProvider.connect(connectionString, {
36
+ productDocsLink: "https://github.com/mongodb-js/mongodb-mcp-server/",
37
+ productName: "MongoDB MCP",
38
+ serverSelectionTimeoutMS: 10000,
39
+ });
40
+ await serviceProvider.runCommand("admin", { ping: 1 });
41
+ console.log(chalk.green("✓ Connection successful!"));
42
+ return { connectionString, testResult: "success", attempts };
43
+ }
44
+ catch (error) {
45
+ console.log(chalk.red("\n✗ Connection failed: " + formatError(error)));
46
+ console.log(chalk.yellow("\nPlease check:"));
47
+ console.log(chalk.yellow(" • Your database user credentials are correct"));
48
+ console.log(chalk.yellow(" • Your IP address is allowed in Network Access"));
49
+ console.log(chalk.yellow(" • The cluster is running and accessible"));
50
+ const retry = await confirm({
51
+ message: "\nWould you like to enter a new connection string and try again?",
52
+ default: true,
53
+ });
54
+ if (retry) {
55
+ connectionString = await password({ message: "Enter your MongoDB connection string:", mask: true });
56
+ }
57
+ else {
58
+ console.log(chalk.yellow("\nYou might be proceeding with a potentially invalid connection string."));
59
+ return { connectionString, testResult: "failure", attempts };
60
+ }
61
+ }
62
+ finally {
63
+ try {
64
+ await serviceProvider?.close();
65
+ }
66
+ catch {
67
+ // Ignore close errors
68
+ }
69
+ }
70
+ }
71
+ };
72
+ const configureEditor = async (tool, connectionString, serviceWorkerId, serviceWorkerSecret, isReadOnly) => {
73
+ const { name: displayName, configFileName } = AI_TOOL_REGISTRY[tool];
74
+ let { configPath } = AI_TOOL_REGISTRY[tool];
75
+ // Confirm the config path with the user
76
+ const useDetectedPath = await confirm({
77
+ message: `Is this the correct path for your ${displayName} config?\n ${configPath}`,
78
+ default: true,
79
+ });
80
+ if (!useDetectedPath) {
81
+ configPath = await input({
82
+ message: `Enter the correct path to your ${displayName} ${configFileName} file:`,
83
+ default: configPath,
84
+ });
85
+ }
86
+ // Resolve to absolute path and trim so we always write to the intended file
87
+ configPath = path.resolve(configPath.trim());
88
+ const env = buildEnvObject(connectionString, serviceWorkerId, serviceWorkerSecret);
89
+ try {
90
+ AI_TOOL_REGISTRY[tool].updateConfig(configPath, env, isReadOnly);
91
+ console.log(`\nConfiguration saved to ${configPath}`);
92
+ return { usedDefaultConfigPath: useDetectedPath, result: "success" };
93
+ }
94
+ catch (error) {
95
+ console.log(chalk.red(`\nFailed to save configuration: ${formatError(error)}`));
96
+ return { usedDefaultConfigPath: useDetectedPath, result: "failure", error };
97
+ }
98
+ };
99
+ const printNewLine = () => {
100
+ console.log("\n");
101
+ };
102
+ const printLogo = () => {
103
+ // Unicode block character banner with MongoDB leaf logo
104
+ const banner = `
105
+ ▄▄
106
+ ▟██▙ █▀▄▀█ █▀█ █▄ █ █▀▀ █▀█ █▀▄ █▄▄ █▀▄▀█ █▀▀ █▀█ █▀ █▀▀ █▀█ █ █ █▀▀ █▀█
107
+ ▟████▙ █ ▀ █ █▄█ █ ▀█ █▄█ █▄█ █▄▀ █▄█ █ ▀ █ █▄▄ █▀▀ ▄█ ██▄ █▀▄ ▀▄▀ ██▄ █▀▄
108
+ ▜████▛
109
+ ▜██▛ █▀ █▀▀ ▀█▀ █ █ █▀█
110
+ ▐▌ ▄█ ██▄ █ █▄█ █▀▀
111
+ `;
112
+ console.log(chalk.hex("#00ED64")(banner));
113
+ printNewLine();
114
+ };
115
+ const validateNodeVersion = (serverMetadata) => {
116
+ const nodeVersion = process.versions.node;
117
+ const requiredNodeRange = serverMetadata.engines?.node;
118
+ if (!requiredNodeRange) {
119
+ return true;
120
+ }
121
+ if (!nodeVersion || !semver.satisfies(nodeVersion, requiredNodeRange)) {
122
+ console.log(chalk.red(`Node version satisfying "${requiredNodeRange}" is required for the MongoDB Local MCP Server. Current version: ${nodeVersion ?? "unknown"}. Please install or activate a compatible version.`));
123
+ printNewLine();
124
+ return false;
125
+ }
126
+ return true;
127
+ };
128
+ const validateDocker = async () => {
129
+ const client = await createAtlasLocalClient({ logger: new NoopLogger() });
130
+ if (client) {
131
+ try {
132
+ // Use the client to confirm docker is available and running
133
+ await client.listDeployments();
134
+ return true;
135
+ }
136
+ catch {
137
+ // Can't connect to docker daemon, treat as if docker isn't available and return false
138
+ }
139
+ }
140
+ return false;
141
+ };
142
+ const printInstructions = () => {
143
+ console.log("To install a Local MCP Server configuration, you will need at least ONE of the following:");
144
+ console.log("1. A MongoDB connection string (requires a cluster or local MongoDB instance)");
145
+ console.log("2. Your Atlas project's Service Account credentials\n");
146
+ console.log("It's best to have this information at hand. We will not store any data or credentials in this process.");
147
+ printNewLine();
148
+ };
149
+ const promptForAITool = async (platform) => {
150
+ return await select({
151
+ message: "What tool would you like to use the MongoDB MCP Server with?",
152
+ choices: [
153
+ { value: "cursor", name: "Cursor" },
154
+ { value: "vscode", name: "VS Code" },
155
+ // Claude Desktop is only supported on macOS and Windows
156
+ ...(platform !== "linux" ? [{ value: "claudeDesktop", name: "Claude Desktop" }] : []),
157
+ { value: "claudeCode", name: "Claude Code" },
158
+ { value: "opencode", name: "Open Code" },
159
+ { value: "windsurf", name: "Windsurf" },
160
+ ],
161
+ });
162
+ };
163
+ const promptForReadonly = async () => {
164
+ return await confirm({ message: "Install MCP server as Read-only?", default: false });
165
+ };
166
+ const promptForConnectionString = async (config) => {
167
+ console.log("Providing a connection string allows the MCP server to read and write data to your MongoDB cluster.");
168
+ const connectionString = await password({
169
+ message: "Enter your MongoDB connection string (press enter to skip):",
170
+ mask: true,
171
+ });
172
+ if (!connectionString) {
173
+ return { connectionString: "", provided: false, tested: false, attempts: 0 };
174
+ }
175
+ registerGlobalSecretToRedact(connectionString, "mongodb uri");
176
+ try {
177
+ const auth = getAuthType(config, connectionString);
178
+ if (auth === "scram") {
179
+ const shouldTest = await confirm({ message: "Test your connection string?", default: true });
180
+ if (shouldTest) {
181
+ const outcome = await testConnectionString(connectionString);
182
+ return {
183
+ connectionString: outcome.connectionString,
184
+ provided: true,
185
+ tested: true,
186
+ attempts: outcome.attempts,
187
+ testResult: outcome.testResult,
188
+ };
189
+ }
190
+ }
191
+ return { connectionString, provided: true, tested: false, attempts: 0 };
192
+ }
193
+ catch {
194
+ // If auth type detection failed but user provided a connection string, preserve it
195
+ return { connectionString, provided: true, tested: false, attempts: 0 };
196
+ }
197
+ };
198
+ const promptForServiceAccountId = async () => {
199
+ console.log("\nService Accounts allow the MCP Server to access Atlas tools and perform actions on your behalf.");
200
+ return await input({ message: "Enter your Atlas Service Account Client ID (press enter to skip):" });
201
+ };
202
+ const promptForServiceAccountSecret = async () => {
203
+ const secret = await password({
204
+ message: "Enter your Atlas Service Account Secret (press enter to skip):",
205
+ mask: true,
206
+ });
207
+ if (secret.trim()) {
208
+ registerGlobalSecretToRedact(secret, "private key");
209
+ }
210
+ return secret;
211
+ };
212
+ const validateCredentials = (connectionString, serviceAccountId, serviceAccountSecret, hasDocker) => {
213
+ // If either the connection string is missing or one of the service account credentials, throw error
214
+ if (!connectionString && (!serviceAccountId || !serviceAccountSecret)) {
215
+ console.log(chalk.yellow("No credentials have been provided, so the MCP Server will not be able to access your MongoDB data or Atlas project."));
216
+ if (hasDocker) {
217
+ console.log(chalk.yellow("Since you have Docker running, you can still use the MCP server with a local Atlas instance running in a container."));
218
+ }
219
+ else {
220
+ console.log(chalk.red("Since you don't have Docker running, you can only connect to a MongoDB instance dynamically, " +
221
+ chalk.bold(chalk.red("which is strongly discouraged as it will expose your connection string to the LLM."))));
222
+ }
223
+ printNewLine();
224
+ }
225
+ };
226
+ const getAvailablePrompts = (connectionString, serviceAccountId, serviceAccountSecret, hasDocker) => {
227
+ const availablePrompts = [];
228
+ if (connectionString) {
229
+ availablePrompts.push('\t"List the collections in my MongoDB instance"');
230
+ availablePrompts.push('\t"Show me some db stats about my Atlas cluster"');
231
+ }
232
+ if (serviceAccountId && serviceAccountSecret) {
233
+ availablePrompts.push('\t"What are the clusters in my project?"');
234
+ availablePrompts.push('\t"Does my project have any active alerts?"');
235
+ }
236
+ if (hasDocker) {
237
+ availablePrompts.push('\t"Create a local Atlas deployment and connect to it"');
238
+ availablePrompts.push('\t"How many databases are there in my local Atlas instance?"');
239
+ }
240
+ if (availablePrompts.length === 0) {
241
+ availablePrompts.push("\t[strongly discouraged] Connect to a MongoDB instance at mongodb://localhost:27017 and list the databases");
242
+ }
243
+ return availablePrompts;
244
+ };
245
+ const promptToOpenConfigFile = async (displayName, tool) => {
246
+ let openConfigMessage = `Would you like to open the config file in ${displayName}?`;
247
+ if (TOOLS_WITHOUT_EDITORS.includes(tool)) {
248
+ openConfigMessage = `Would you like to open the config file in your default editor?`;
249
+ }
250
+ const openConfig = await confirm({
251
+ message: openConfigMessage,
252
+ default: true,
253
+ });
254
+ if (!openConfig) {
255
+ return { opened: false, result: "success" };
256
+ }
257
+ try {
258
+ await openConfigSettings(tool);
259
+ return { opened: true, result: "success" };
260
+ }
261
+ catch (error) {
262
+ console.log(chalk.red(`Failed to open config file: ${formatError(error)}`));
263
+ return { opened: true, result: "failure", error };
264
+ }
265
+ };
266
+ const formatSkillsResult = (result) => {
267
+ switch (result.status) {
268
+ case "installed":
269
+ return chalk.green("✓ Agent skills installed.");
270
+ case "skipped":
271
+ return chalk.dim("○ Agent skills skipped.");
272
+ case "failed":
273
+ return chalk.red(`✗ Agent skills install failed (exit ${result.exitCode}).`);
274
+ }
275
+ };
276
+ const guideUserWithSetupSuccess = (displayName, availablePrompts, skillsResult) => {
277
+ printNewLine();
278
+ console.log(chalk.green(`Setup complete! You can now use the MongoDB MCP Server in ${displayName}. You will probably need to restart your application to see the changes.\n`));
279
+ console.log(formatSkillsResult(skillsResult));
280
+ printNewLine();
281
+ console.log("Try a query to get started:\n");
282
+ console.log(availablePrompts.join("\n"));
283
+ printNewLine();
284
+ };
285
+ class UnsupportedPlatformError extends Error {
286
+ constructor() {
287
+ super("Unsupported platform. Only macOS, Windows and Linux are supported.");
288
+ this.name = "UnsupportedPlatformError";
289
+ }
290
+ }
291
+ /**
292
+ * Runs the interactive setup wizard. When `setupTelemetry` is provided, each
293
+ * logical step emits a telemetry event so we can track both overall completion
294
+ * rates and per-step drop-off.
295
+ */
296
+ export const runSetup = async ({ config, serverMetadata, }) => {
297
+ const setupTelemetry = SetupTelemetry.create({ config, keychain: Keychain.root, serverMetadata });
298
+ // Ensure hard cancellations (SIGINT/SIGTERM outside of an Inquirer prompt)
299
+ // are still captured. Inquirer itself converts Ctrl+C during prompts into
300
+ // an ExitPromptError which runSetup already handles.
301
+ let interrupted = false;
302
+ const onInterrupt = () => {
303
+ if (interrupted) {
304
+ return;
305
+ }
306
+ interrupted = true;
307
+ setupTelemetry.emitCancelled();
308
+ setupTelemetry
309
+ .flush()
310
+ .catch(() => undefined)
311
+ .finally(() => process.exit(0));
312
+ };
313
+ process.on("SIGINT", onInterrupt);
314
+ process.on("SIGTERM", onInterrupt);
315
+ let exitCode = 0;
316
+ try {
317
+ printLogo();
318
+ setupTelemetry.emitStarted();
319
+ const nodeVersionOk = validateNodeVersion(serverMetadata);
320
+ const platform = getPlatform();
321
+ const platformSupported = platform !== null;
322
+ if (!platformSupported) {
323
+ console.log(chalk.red("Unsupported platform. Only macOS, Windows and Linux are supported."));
324
+ printNewLine();
325
+ throw new UnsupportedPlatformError();
326
+ }
327
+ printInstructions();
328
+ const hasDocker = await validateDocker();
329
+ setupTelemetry.emitPrerequisitesChecked({ nodeVersionOk, hasDocker });
330
+ const tool = await promptForAITool(platform);
331
+ const displayName = AI_TOOL_REGISTRY[tool].name;
332
+ setupTelemetry.emitAiToolSelected(tool);
333
+ printNewLine();
334
+ const isReadOnly = await promptForReadonly();
335
+ setupTelemetry.emitReadOnlySelected(isReadOnly);
336
+ printNewLine();
337
+ const connectionOutcome = await promptForConnectionString(config);
338
+ setupTelemetry.emitConnectionStringEntered({
339
+ provided: connectionOutcome.provided,
340
+ tested: connectionOutcome.tested,
341
+ attempts: connectionOutcome.attempts,
342
+ testResult: connectionOutcome.testResult,
343
+ });
344
+ const serviceAccountId = await promptForServiceAccountId();
345
+ setupTelemetry.emitServiceAccountIdEntered(Boolean(serviceAccountId));
346
+ const serviceAccountSecret = await promptForServiceAccountSecret();
347
+ setupTelemetry.emitServiceAccountSecretEntered(Boolean(serviceAccountSecret));
348
+ printNewLine();
349
+ validateCredentials(connectionOutcome.connectionString, serviceAccountId, serviceAccountSecret, hasDocker);
350
+ setupTelemetry.emitCredentialsValidated();
351
+ const editorOutcome = await configureEditor(tool, connectionOutcome.connectionString, serviceAccountId, serviceAccountSecret, isReadOnly);
352
+ setupTelemetry.emitEditorConfigured(editorOutcome);
353
+ const skillsResult = await promptAndInstallSkills({ tool, cwd: process.cwd() });
354
+ setupTelemetry.emitSkillsInstallPrompted(skillsResult);
355
+ const availablePrompts = getAvailablePrompts(connectionOutcome.connectionString, serviceAccountId, serviceAccountSecret, hasDocker);
356
+ guideUserWithSetupSuccess(displayName, availablePrompts, skillsResult);
357
+ const openOutcome = await promptToOpenConfigFile(displayName, tool);
358
+ setupTelemetry.emitOpenConfigPrompted(openOutcome);
359
+ setupTelemetry.emitCompleted();
360
+ }
361
+ catch (error) {
362
+ // Handle Ctrl+C during prompts (inquirer throws ExitPromptError)
363
+ // Re-throw other errors
364
+ if (error && typeof error === "object" && "name" in error && error.name === "ExitPromptError") {
365
+ console.log("\n\nSetup cancelled. Goodbye!");
366
+ setupTelemetry.emitCancelled();
367
+ }
368
+ else {
369
+ exitCode = 1;
370
+ setupTelemetry.emitFailed(error);
371
+ if (!(error instanceof UnsupportedPlatformError)) {
372
+ // Don't print the error message for UnsupportedPlatformError since we already
373
+ // printed it earlier.
374
+ console.error(`Setup failed: ${error instanceof Error ? error.message : String(error)}`);
375
+ }
376
+ }
377
+ }
378
+ finally {
379
+ process.off("SIGINT", onInterrupt);
380
+ process.off("SIGTERM", onInterrupt);
381
+ await setupTelemetry.flush();
382
+ }
383
+ process.exit(exitCode);
384
+ };
385
+ //# sourceMappingURL=setupMcpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupMcpServer.js","sourceRoot":"","sources":["../src/setupMcpServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import type { Keychain } from "@mongodb-js/mcp-core";
2
+ import { DeviceId } from "@mongodb-js/mcp-tools-mongodb";
3
+ import type { ITelemetry, ServerMetadata } from "@mongodb-js/mcp-types";
4
+ import type { SkillsInstallOutcome } from "./installSkills.js";
5
+ import type { TelemetrySetupEventProperties, TelemetryBoolSet, TelemetryResult } from "@mongodb-js/mcp-atlas-telemetry";
6
+ /**
7
+ * Context accumulated as the user progresses through the setup wizard. Each
8
+ * step adds to it, and every emitted event carries the full context so each
9
+ * event is independently queryable downstream.
10
+ */
11
+ export type SetupTelemetryContext = Omit<TelemetrySetupEventProperties, "stage" | "setup_session_id" | "last_step" | "error_type" | "total_duration_ms">;
12
+ export declare const toBoolSet: (value: boolean | undefined) => TelemetryBoolSet | undefined;
13
+ /**
14
+ * Per-run helper that owns the setup telemetry session: assigns the
15
+ * `setup_session_id`, tracks wall-clock durations, and
16
+ * accumulates context so every event carries the full set of known flags.
17
+ *
18
+ * One instance is constructed per `runSetup` invocation. Callers emit typed
19
+ * events at each logical step and call {@link flush} before the process
20
+ * exits so buffered events are best-effort sent.
21
+ */
22
+ export declare class SetupTelemetry {
23
+ private readonly setupSessionId;
24
+ private readonly startedAt;
25
+ private stepStartedAt;
26
+ private lastStep;
27
+ private context;
28
+ /**
29
+ * Builds a fully-wired {@link SetupTelemetry} for the setup CLI: a silent
30
+ * logger (so telemetry's internal logging doesn't leak into the
31
+ * interactive wizard), a fresh {@link DeviceId}, an unauthenticated
32
+ * {@link ApiClient}, and an {@link AtlasTelemetry} instance.
33
+ */
34
+ static create({ config, keychain, serverMetadata, }: {
35
+ config: {
36
+ apiBaseUrl: string;
37
+ telemetry: "enabled" | "disabled";
38
+ };
39
+ keychain: Keychain;
40
+ serverMetadata: ServerMetadata;
41
+ }): SetupTelemetry;
42
+ private readonly telemetry;
43
+ private readonly deviceId;
44
+ /**
45
+ * Direct construction is primarily for tests that want to inject a mock
46
+ * telemetry pipeline. Production code should use {@link SetupTelemetry.create}.
47
+ */
48
+ constructor({ telemetry, deviceId }: {
49
+ telemetry: ITelemetry;
50
+ deviceId: DeviceId;
51
+ });
52
+ /**
53
+ * Merges new context values into the accumulated context. Subsequent
54
+ * events will automatically carry the updated values.
55
+ */
56
+ updateContext(patch: Partial<SetupTelemetryContext>): void;
57
+ /**
58
+ * Emits a single setup event. `duration_ms` is computed from the time
59
+ * elapsed since the previous step (or setup start), and `result`
60
+ * defaults to "success" — callers pass "failure" only when the step's
61
+ * own code path failed (e.g. writing the editor config threw).
62
+ */
63
+ private emit;
64
+ emitStarted(): void;
65
+ emitPrerequisitesChecked(props: {
66
+ nodeVersionOk: boolean;
67
+ hasDocker?: boolean;
68
+ }): void;
69
+ emitAiToolSelected(aiTool: string): void;
70
+ emitReadOnlySelected(isReadOnly: boolean): void;
71
+ emitConnectionStringEntered(props: {
72
+ provided: boolean;
73
+ tested: boolean;
74
+ attempts: number;
75
+ testResult?: TelemetryResult;
76
+ }): void;
77
+ emitServiceAccountIdEntered(provided: boolean): void;
78
+ emitServiceAccountSecretEntered(provided: boolean): void;
79
+ emitCredentialsValidated(): void;
80
+ emitEditorConfigured(props: {
81
+ usedDefaultConfigPath: boolean;
82
+ result: TelemetryResult;
83
+ error?: unknown;
84
+ }): void;
85
+ emitSkillsInstallPrompted(outcome: SkillsInstallOutcome): void;
86
+ emitOpenConfigPrompted(props: {
87
+ opened: boolean;
88
+ result: TelemetryResult;
89
+ error?: unknown;
90
+ }): void;
91
+ emitCompleted(): void;
92
+ /**
93
+ * Emits a cancellation event (e.g. the user hit Ctrl+C). The `result` is
94
+ * "success" because the cancellation itself was handled gracefully — the
95
+ * distinct `stage: "cancelled"` is what analytics use to separate
96
+ * abandoned runs from completed ones.
97
+ */
98
+ emitCancelled(): void;
99
+ emitFailed(error: unknown): void;
100
+ /**
101
+ * Best-effort flush of any buffered events before the process exits. Also
102
+ * closes the owned {@link DeviceId}.
103
+ */
104
+ flush(): Promise<void>;
105
+ }
106
+ //# sourceMappingURL=setupTelemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupTelemetry.d.ts","sourceRoot":"","sources":["../src/setupTelemetry.ts"],"names":[],"mappings":"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"}