@getmcp/cli 0.1.5 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +144 -20
  2. package/dist/bin.d.ts +7 -5
  3. package/dist/bin.d.ts.map +1 -1
  4. package/dist/bin.js +88 -28
  5. package/dist/bin.js.map +1 -1
  6. package/dist/commands/add.d.ts +10 -1
  7. package/dist/commands/add.d.ts.map +1 -1
  8. package/dist/commands/add.js +208 -71
  9. package/dist/commands/add.js.map +1 -1
  10. package/dist/commands/check.d.ts +9 -0
  11. package/dist/commands/check.d.ts.map +1 -0
  12. package/dist/commands/check.js +76 -0
  13. package/dist/commands/check.js.map +1 -0
  14. package/dist/commands/find.d.ts +10 -0
  15. package/dist/commands/find.d.ts.map +1 -0
  16. package/dist/commands/find.js +83 -0
  17. package/dist/commands/find.js.map +1 -0
  18. package/dist/commands/init.d.ts +8 -0
  19. package/dist/commands/init.d.ts.map +1 -0
  20. package/dist/commands/init.js +257 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/list.d.ts.map +1 -1
  23. package/dist/commands/list.js +25 -27
  24. package/dist/commands/list.js.map +1 -1
  25. package/dist/commands/remove.d.ts +9 -1
  26. package/dist/commands/remove.d.ts.map +1 -1
  27. package/dist/commands/remove.js +83 -33
  28. package/dist/commands/remove.js.map +1 -1
  29. package/dist/commands/update.d.ts +14 -0
  30. package/dist/commands/update.d.ts.map +1 -0
  31. package/dist/commands/update.js +99 -0
  32. package/dist/commands/update.js.map +1 -0
  33. package/dist/config-file.d.ts.map +1 -1
  34. package/dist/config-file.js +6 -16
  35. package/dist/config-file.js.map +1 -1
  36. package/dist/detect.d.ts.map +1 -1
  37. package/dist/detect.js.map +1 -1
  38. package/dist/errors.d.ts +49 -0
  39. package/dist/errors.d.ts.map +1 -0
  40. package/dist/errors.js +84 -0
  41. package/dist/errors.js.map +1 -0
  42. package/dist/index.d.ts +8 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +8 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/lock.d.ts +49 -0
  47. package/dist/lock.d.ts.map +1 -0
  48. package/dist/lock.js +108 -0
  49. package/dist/lock.js.map +1 -0
  50. package/dist/preferences.d.ts.map +1 -1
  51. package/dist/preferences.js.map +1 -1
  52. package/dist/utils.d.ts +30 -0
  53. package/dist/utils.d.ts.map +1 -0
  54. package/dist/utils.js +101 -0
  55. package/dist/utils.js.map +1 -0
  56. package/package.json +39 -39
@@ -8,15 +8,23 @@
8
8
  * 4. User selects which apps to configure
9
9
  * 5. Generate config for each selected app
10
10
  * 6. Merge into existing config files (never overwrite)
11
+ *
12
+ * Supports non-interactive mode via --yes, --app, --all-apps flags.
13
+ * Supports --dry-run to preview changes without writing.
11
14
  */
12
- import { select, checkbox, input, password } from "@inquirer/prompts";
13
- import { getAllServers, getServer, searchServers, } from "@getmcp/registry";
14
- import { getGenerator } from "@getmcp/generators";
15
+ import * as p from "@clack/prompts";
16
+ import { getAllServers, getServer, searchServers } from "@getmcp/registry";
17
+ import { getGenerator, getAppIds } from "@getmcp/generators";
15
18
  import { isStdioConfig } from "@getmcp/core";
16
19
  import { detectApps } from "../detect.js";
17
20
  import { mergeServerIntoConfig, writeConfigFile } from "../config-file.js";
18
21
  import { getSavedSelectedApps, saveSelectedApps } from "../preferences.js";
19
- export async function addCommand(serverIdArg) {
22
+ import { trackInstallation } from "../lock.js";
23
+ import { shortenPath } from "../utils.js";
24
+ import { ServerNotFoundError, AppNotDetectedError, InvalidAppError, NonInteractiveError, formatError, } from "../errors.js";
25
+ export async function addCommand(serverIdArg, options = {}) {
26
+ const isNonInteractive = options.yes || !process.stdin.isTTY;
27
+ p.intro("getmcp add");
20
28
  // Step 1: Select server
21
29
  let entry;
22
30
  if (serverIdArg) {
@@ -25,130 +33,259 @@ export async function addCommand(serverIdArg) {
25
33
  // Try fuzzy search
26
34
  const matches = searchServers(serverIdArg);
27
35
  if (matches.length === 0) {
28
- console.error(`Server "${serverIdArg}" not found in registry.`);
36
+ p.log.error(new ServerNotFoundError(serverIdArg).format());
29
37
  process.exit(1);
30
38
  }
31
39
  if (matches.length === 1) {
32
40
  entry = matches[0];
33
41
  }
42
+ else if (isNonInteractive) {
43
+ // In non-interactive mode, take first match
44
+ entry = matches[0];
45
+ p.log.info(`Multiple matches for "${serverIdArg}", using: ${matches[0].name}`);
46
+ }
34
47
  else {
35
- entry = await select({
48
+ const selected = await p.select({
36
49
  message: `Multiple matches for "${serverIdArg}". Pick one:`,
37
- choices: matches.map((s) => ({
38
- name: `${s.name} — ${s.description}`,
50
+ options: matches.map((s) => ({
51
+ label: s.name,
52
+ hint: s.description,
39
53
  value: s,
40
54
  })),
41
55
  });
56
+ if (p.isCancel(selected)) {
57
+ p.cancel("Operation cancelled.");
58
+ process.exit(0);
59
+ }
60
+ entry = selected;
42
61
  }
43
62
  }
44
63
  else {
45
64
  entry = found;
46
65
  }
47
66
  }
67
+ else if (isNonInteractive) {
68
+ p.log.error(new NonInteractiveError("server ID is required in non-interactive mode").format());
69
+ process.exit(1);
70
+ }
48
71
  else {
49
72
  const servers = getAllServers();
50
- entry = await select({
73
+ const selected = await p.select({
51
74
  message: "Select an MCP server to install:",
52
- choices: servers.map((s) => ({
53
- name: `${s.name} — ${s.description}`,
75
+ options: servers.map((s) => ({
76
+ label: s.name,
77
+ hint: s.description,
54
78
  value: s,
55
79
  })),
56
80
  });
81
+ if (p.isCancel(selected)) {
82
+ p.cancel("Operation cancelled.");
83
+ process.exit(0);
84
+ }
85
+ entry = selected;
57
86
  }
58
- console.log(`\nInstalling: ${entry.name}`);
59
- console.log(` ${entry.description}\n`);
87
+ p.log.info(`Installing: ${entry.name}\n ${entry.description}`);
60
88
  // Step 2: Prompt for required environment variables
61
89
  const config = structuredClone(entry.config);
62
90
  if (entry.requiredEnvVars.length > 0 && isStdioConfig(config)) {
63
- console.log("This server requires environment variables:\n");
64
- for (const envVar of entry.requiredEnvVars) {
65
- const prompt = isSensitiveEnvVar(envVar) ? password : input;
66
- const value = await prompt({
67
- message: ` ${envVar}:`,
68
- validate: (val) => (val.trim() ? true : `${envVar} is required`),
69
- });
70
- config.env[envVar] = value.trim();
91
+ if (isNonInteractive) {
92
+ // In non-interactive mode, check if env vars are already set in the environment
93
+ let allSet = true;
94
+ for (const envVar of entry.requiredEnvVars) {
95
+ const envValue = process.env[envVar];
96
+ if (envValue) {
97
+ config.env[envVar] = envValue;
98
+ }
99
+ else {
100
+ allSet = false;
101
+ p.log.warn(`Required env var ${envVar} is not set in environment`);
102
+ }
103
+ }
104
+ if (!allSet) {
105
+ p.log.warn("Some required environment variables are missing. The server may not work correctly.\n Set them in your shell environment and re-run, or run interactively to be prompted.");
106
+ }
107
+ }
108
+ else {
109
+ p.log.step("This server requires environment variables:");
110
+ for (const envVar of entry.requiredEnvVars) {
111
+ const isSensitive = SENSITIVE_PATTERNS.test(envVar);
112
+ const promptFn = isSensitive ? p.password : p.text;
113
+ const value = await promptFn({
114
+ message: `${envVar}:`,
115
+ validate: (val) => {
116
+ if (!val || !val.trim())
117
+ return `${envVar} is required`;
118
+ },
119
+ });
120
+ if (p.isCancel(value)) {
121
+ p.cancel("Operation cancelled.");
122
+ process.exit(0);
123
+ }
124
+ config.env[envVar] = value.trim();
125
+ }
71
126
  }
72
- console.log();
73
127
  }
74
128
  // Step 3: Detect apps and build selection list
75
129
  const allApps = detectApps();
76
130
  const detected = allApps.filter((app) => app.exists);
77
131
  const notDetectedProjectScoped = allApps.filter((app) => !app.exists && app.scope === "project");
78
- if (detected.length === 0 && notDetectedProjectScoped.length === 0) {
79
- console.log("No AI applications detected on this system.");
80
- console.log("You can manually copy the config from below:\n");
81
- printManualConfig(entry, config);
82
- return;
83
- }
84
132
  // Step 4: Select target apps
85
- // On first run (no saved preferences), detected apps are pre-checked and
86
- // project-scoped non-detected apps are unchecked.
87
- // On subsequent runs, the previously selected apps are pre-checked instead.
88
- const savedApps = getSavedSelectedApps();
89
- const hasSavedPreferences = savedApps !== null;
90
- const choices = [
91
- ...detected.map((app) => ({
92
- name: app.name,
93
- value: app,
94
- checked: hasSavedPreferences ? savedApps.includes(app.id) : true,
95
- })),
96
- ...notDetectedProjectScoped.map((app) => ({
97
- name: app.name,
98
- value: app,
99
- checked: hasSavedPreferences ? savedApps.includes(app.id) : false,
100
- })),
101
- ].sort((a, b) => Number(b.checked) - Number(a.checked));
102
- const selectedApps = await checkbox({
103
- message: "Select apps to configure:",
104
- choices,
105
- validate: (selected) => selected.length > 0 ? true : "Select at least one app",
106
- });
107
- // Save selected apps for next run
108
- saveSelectedApps(selectedApps.map((app) => app.id));
133
+ let selectedApps;
134
+ if (options.allApps) {
135
+ // --all-apps: use all detected apps
136
+ selectedApps = detected;
137
+ if (selectedApps.length === 0) {
138
+ p.log.error(new AppNotDetectedError().format());
139
+ printManualConfig(entry, config);
140
+ p.outro("Done");
141
+ return;
142
+ }
143
+ }
144
+ else if (options.apps && options.apps.length > 0) {
145
+ // --app <id>: use specified apps
146
+ const validIds = getAppIds();
147
+ selectedApps = [];
148
+ for (const appId of options.apps) {
149
+ if (!validIds.includes(appId)) {
150
+ p.log.error(new InvalidAppError(appId, validIds).format());
151
+ process.exit(1);
152
+ }
153
+ const app = allApps.find((a) => a.id === appId);
154
+ if (app) {
155
+ selectedApps.push(app);
156
+ }
157
+ else {
158
+ p.log.warn(`App "${appId}" has no config path for this platform. Skipping.`);
159
+ }
160
+ }
161
+ if (selectedApps.length === 0) {
162
+ p.log.error("None of the specified apps are available on this platform.");
163
+ process.exit(1);
164
+ }
165
+ }
166
+ else if (isNonInteractive) {
167
+ // Non-interactive without --app: use all detected
168
+ selectedApps = detected;
169
+ if (selectedApps.length === 0) {
170
+ p.log.error(new AppNotDetectedError().format());
171
+ printManualConfig(entry, config);
172
+ p.outro("Done");
173
+ return;
174
+ }
175
+ }
176
+ else {
177
+ // Interactive mode
178
+ if (detected.length === 0 && notDetectedProjectScoped.length === 0) {
179
+ p.log.warn("No AI applications detected on this system.\n You can manually copy the config from below:");
180
+ printManualConfig(entry, config);
181
+ p.outro("Done");
182
+ return;
183
+ }
184
+ const savedApps = getSavedSelectedApps();
185
+ const hasSavedPreferences = savedApps !== null;
186
+ const choices = [
187
+ ...detected.map((app) => ({
188
+ label: app.name,
189
+ value: app,
190
+ hint: shortenPath(app.configPath),
191
+ })),
192
+ ...notDetectedProjectScoped.map((app) => ({
193
+ label: app.name,
194
+ value: app,
195
+ hint: `${shortenPath(app.configPath)} (not detected)`,
196
+ })),
197
+ ];
198
+ const initialValues = choices
199
+ .filter((c) => (hasSavedPreferences ? savedApps.includes(c.value.id) : c.value.exists))
200
+ .map((c) => c.value);
201
+ const selected = await p.multiselect({
202
+ message: "Select apps to configure:",
203
+ options: choices,
204
+ initialValues,
205
+ required: true,
206
+ });
207
+ if (p.isCancel(selected)) {
208
+ p.cancel("Operation cancelled.");
209
+ process.exit(0);
210
+ }
211
+ selectedApps = selected;
212
+ // Save selected apps for next run
213
+ saveSelectedApps(selectedApps.map((app) => app.id));
214
+ }
109
215
  // Step 5+6: Generate and merge for each selected app
216
+ if (options.dryRun) {
217
+ p.log.step("Dry run — showing what would be written:\n");
218
+ }
219
+ const spin = p.spinner();
220
+ spin.start(`Configuring ${selectedApps.length} app(s)...`);
221
+ const results = [];
110
222
  for (const app of selectedApps) {
111
223
  try {
112
224
  const generator = getGenerator(app.id);
113
225
  const generatedConfig = generator.generate(entry.id, config);
114
- const merged = mergeServerIntoConfig(app.configPath, generatedConfig);
115
- writeConfigFile(app.configPath, merged);
116
- console.log(` + ${app.name}: ${app.configPath}`);
226
+ if (options.dryRun) {
227
+ spin.stop(`Preview for ${app.name}:`);
228
+ const serialized = generator.serialize(generatedConfig);
229
+ p.note(`File: ${shortenPath(app.configPath)}\n\n${serialized}`, app.name);
230
+ spin.start("Continuing...");
231
+ results.push({ app, ok: true });
232
+ }
233
+ else {
234
+ const merged = mergeServerIntoConfig(app.configPath, generatedConfig);
235
+ writeConfigFile(app.configPath, merged);
236
+ results.push({ app, ok: true });
237
+ }
117
238
  }
118
239
  catch (err) {
119
- console.error(` ! ${app.name}: Failed — ${err instanceof Error ? err.message : String(err)}`);
240
+ results.push({
241
+ app,
242
+ ok: false,
243
+ error: formatError(err),
244
+ });
120
245
  }
121
246
  }
122
- console.log(`\nDone! "${entry.name}" has been configured.`);
247
+ spin.stop("Configuration complete.");
248
+ // Show results summary
249
+ for (const r of results) {
250
+ if (r.ok) {
251
+ p.log.success(`${r.app.name}: ${shortenPath(r.app.configPath)}`);
252
+ }
253
+ else {
254
+ p.log.error(`${r.app.name}: ${r.error}`);
255
+ }
256
+ }
257
+ // Track installation (unless dry-run)
258
+ if (!options.dryRun) {
259
+ const successApps = results.filter((r) => r.ok).map((r) => r.app.id);
260
+ if (successApps.length > 0) {
261
+ trackInstallation(entry.id, successApps, entry.requiredEnvVars);
262
+ }
263
+ }
264
+ const action = options.dryRun ? "would be configured" : "has been configured";
265
+ p.outro(`"${entry.name}" ${action}.`);
123
266
  // Reminder for apps that need restart
124
267
  const needsRestart = selectedApps.some((a) => ["claude-desktop", "windsurf", "cursor"].includes(a.id));
125
- if (needsRestart) {
126
- console.log("Note: Some apps may need to be restarted to pick up changes.");
268
+ if (needsRestart && !options.dryRun) {
269
+ p.log.info("Some apps may need to be restarted to pick up changes.");
127
270
  }
128
- // PyCharm-specific warning: plugin requirement + restart
271
+ // PyCharm-specific warning
129
272
  const hasPycharm = selectedApps.some((a) => a.id === "pycharm");
130
- if (hasPycharm) {
131
- console.log("\nImportant: MCP servers in PyCharm require the JetBrains AI Assistant plugin:" +
132
- "\n https://plugins.jetbrains.com/plugin/22282-jetbrains-ai-assistant" +
133
- "\n\nPyCharm must be closed and reopened for MCP configuration changes to take effect." +
134
- "\nThe new servers will not appear until you restart the IDE.");
273
+ if (hasPycharm && !options.dryRun) {
274
+ p.log.warn("MCP servers in PyCharm require the JetBrains AI Assistant plugin:\n" +
275
+ " https://plugins.jetbrains.com/plugin/22282-jetbrains-ai-assistant\n\n" +
276
+ " PyCharm must be closed and reopened for changes to take effect.");
135
277
  }
136
278
  }
137
279
  function printManualConfig(entry, config) {
138
- // Show the canonical format
139
280
  const canonical = {
140
281
  mcpServers: {
141
282
  [entry.id]: config,
142
283
  },
143
284
  };
144
- console.log(JSON.stringify(canonical, null, 2));
285
+ p.note(JSON.stringify(canonical, null, 2), "Canonical config");
145
286
  }
146
287
  /**
147
288
  * Heuristic to detect if an environment variable name likely holds a secret.
148
- * Returns true for names containing common secret-related keywords.
149
289
  */
150
290
  const SENSITIVE_PATTERNS = /TOKEN|KEY|SECRET|PASSWORD|CREDENTIAL|AUTH|PAT|PRIVATE/i;
151
- function isSensitiveEnvVar(name) {
152
- return SENSITIVE_PATTERNS.test(name);
153
- }
154
291
  //# sourceMappingURL=add.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `getmcp check` command.
3
+ *
4
+ * Compares the lock file against the current registry to show
5
+ * which tracked servers are still available, and reports any
6
+ * apps where the server may have been removed externally.
7
+ */
8
+ export declare function checkCommand(): Promise<void>;
9
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA2ElD"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * `getmcp check` command.
3
+ *
4
+ * Compares the lock file against the current registry to show
5
+ * which tracked servers are still available, and reports any
6
+ * apps where the server may have been removed externally.
7
+ */
8
+ import * as p from "@clack/prompts";
9
+ import { getServer } from "@getmcp/registry";
10
+ import { getTrackedServers } from "../lock.js";
11
+ import { detectInstalledApps } from "../detect.js";
12
+ import { listServersInConfig } from "../config-file.js";
13
+ import { shortenPath } from "../utils.js";
14
+ export async function checkCommand() {
15
+ p.intro("getmcp check");
16
+ const lock = getTrackedServers();
17
+ const entries = Object.entries(lock.installations);
18
+ if (entries.length === 0) {
19
+ p.log.info("No tracked installations. Use 'getmcp add' to install servers.");
20
+ p.outro("Done");
21
+ return;
22
+ }
23
+ const installedApps = detectInstalledApps();
24
+ const installedAppIds = new Set(installedApps.map((a) => a.id));
25
+ const appConfigMap = new Map(installedApps.map((a) => [a.id, a]));
26
+ p.log.info(`Tracked installations: ${entries.length}`);
27
+ let issues = 0;
28
+ for (const [serverId, installation] of entries) {
29
+ const registryEntry = getServer(serverId);
30
+ if (!registryEntry) {
31
+ p.log.warn(`${serverId}: no longer in registry\n` +
32
+ ` Installed in: ${installation.apps.join(", ")}\n` +
33
+ ` Installed at: ${installation.installedAt}`);
34
+ issues++;
35
+ continue;
36
+ }
37
+ // Check if the server is still configured in each tracked app
38
+ const missingFrom = [];
39
+ const presentIn = [];
40
+ for (const appId of installation.apps) {
41
+ if (!installedAppIds.has(appId)) {
42
+ missingFrom.push(`${appId} (app not detected)`);
43
+ continue;
44
+ }
45
+ const app = appConfigMap.get(appId);
46
+ try {
47
+ const servers = listServersInConfig(app.configPath);
48
+ if (servers.includes(serverId)) {
49
+ presentIn.push(`${app.name} (${shortenPath(app.configPath)})`);
50
+ }
51
+ else {
52
+ missingFrom.push(`${app.name} (removed from config)`);
53
+ }
54
+ }
55
+ catch {
56
+ missingFrom.push(`${app.name} (config not readable)`);
57
+ }
58
+ }
59
+ if (missingFrom.length > 0) {
60
+ p.log.warn(`${registryEntry.name} (${serverId}):\n` +
61
+ ` Present in: ${presentIn.length > 0 ? presentIn.join(", ") : "(none)"}\n` +
62
+ ` Missing from: ${missingFrom.join(", ")}`);
63
+ issues++;
64
+ }
65
+ else {
66
+ p.log.success(`${registryEntry.name} (${serverId}): OK\n` + ` Configured in: ${presentIn.join(", ")}`);
67
+ }
68
+ }
69
+ if (issues > 0) {
70
+ p.outro(`${issues} issue(s) found. Run 'getmcp update' to re-apply configurations.`);
71
+ }
72
+ else {
73
+ p.outro("All installations are up to date.");
74
+ }
75
+ }
76
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `getmcp find` command.
3
+ *
4
+ * Interactive fuzzy search through the registry.
5
+ * After selection, jumps directly into the add flow.
6
+ *
7
+ * Aliases: find, search, s, f
8
+ */
9
+ export declare function findCommand(initialQuery?: string): Promise<void>;
10
+ //# sourceMappingURL=find.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../src/commands/find.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,wBAAsB,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFtE"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * `getmcp find` command.
3
+ *
4
+ * Interactive fuzzy search through the registry.
5
+ * After selection, jumps directly into the add flow.
6
+ *
7
+ * Aliases: find, search, s, f
8
+ */
9
+ import * as p from "@clack/prompts";
10
+ import { getAllServers, searchServers } from "@getmcp/registry";
11
+ import { addCommand } from "./add.js";
12
+ export async function findCommand(initialQuery) {
13
+ p.intro("getmcp find");
14
+ const servers = getAllServers();
15
+ if (servers.length === 0) {
16
+ p.log.warn("No servers in registry.");
17
+ p.outro("Done");
18
+ return;
19
+ }
20
+ // If a query was provided as argument, search and show results
21
+ let filteredServers;
22
+ if (initialQuery) {
23
+ filteredServers = searchServers(initialQuery);
24
+ if (filteredServers.length === 0) {
25
+ p.log.warn(`No servers matching "${initialQuery}".`);
26
+ // Offer to search again
27
+ const newQuery = await p.text({
28
+ message: "Try a different search term:",
29
+ placeholder: "e.g., database, github, docker",
30
+ });
31
+ if (p.isCancel(newQuery)) {
32
+ p.cancel("Operation cancelled.");
33
+ process.exit(0);
34
+ }
35
+ filteredServers = searchServers(newQuery);
36
+ if (filteredServers.length === 0) {
37
+ p.log.warn(`No servers matching "${newQuery}".`);
38
+ p.outro("Done");
39
+ return;
40
+ }
41
+ }
42
+ }
43
+ else {
44
+ // No query — prompt for search term or show all
45
+ const query = await p.text({
46
+ message: "Search for an MCP server:",
47
+ placeholder: "e.g., database, github, docker (leave empty to show all)",
48
+ });
49
+ if (p.isCancel(query)) {
50
+ p.cancel("Operation cancelled.");
51
+ process.exit(0);
52
+ }
53
+ filteredServers = query.trim() ? searchServers(query) : servers;
54
+ if (filteredServers.length === 0) {
55
+ p.log.warn(`No servers matching "${query}".`);
56
+ p.outro("Done");
57
+ return;
58
+ }
59
+ }
60
+ // Show results and let user pick
61
+ const selected = await p.select({
62
+ message: `Found ${filteredServers.length} server(s). Select one to install:`,
63
+ options: filteredServers.map((s) => {
64
+ const transport = "command" in s.config ? "stdio" : "remote";
65
+ const envCount = s.requiredEnvVars.length;
66
+ const envNote = envCount > 0 ? ` | ${envCount} env var${envCount > 1 ? "s" : ""}` : "";
67
+ const categories = s.categories && s.categories.length > 0 ? ` | ${s.categories.join(", ")}` : "";
68
+ return {
69
+ label: s.name,
70
+ hint: `${transport}${envNote}${categories}`,
71
+ value: s,
72
+ };
73
+ }),
74
+ });
75
+ if (p.isCancel(selected)) {
76
+ p.cancel("Operation cancelled.");
77
+ process.exit(0);
78
+ }
79
+ p.outro(`Selected: ${selected.name}`);
80
+ // Jump into add flow
81
+ await addCommand(selected.id);
82
+ }
83
+ //# sourceMappingURL=find.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/commands/find.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `getmcp init` command.
3
+ *
4
+ * Interactive wizard to scaffold a new MCP server registry entry.
5
+ * Prompts for metadata and generates the TypeScript file.
6
+ */
7
+ export declare function initCommand(): Promise<void>;
8
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA8RjD"}