@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.
- package/README.md +144 -20
- package/dist/bin.d.ts +7 -5
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +88 -28
- package/dist/bin.js.map +1 -1
- package/dist/commands/add.d.ts +10 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +208 -71
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/check.d.ts +9 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +76 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/find.d.ts +10 -0
- package/dist/commands/find.d.ts.map +1 -0
- package/dist/commands/find.js +83 -0
- package/dist/commands/find.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +257 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +25 -27
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/remove.d.ts +9 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +83 -33
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/update.d.ts +14 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +99 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config-file.d.ts.map +1 -1
- package/dist/config-file.js +6 -16
- package/dist/config-file.js.map +1 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js.map +1 -1
- package/dist/errors.d.ts +49 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +84 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/lock.d.ts +49 -0
- package/dist/lock.d.ts.map +1 -0
- package/dist/lock.js +108 -0
- package/dist/lock.js.map +1 -0
- package/dist/preferences.d.ts.map +1 -1
- package/dist/preferences.js.map +1 -1
- package/dist/utils.d.ts +30 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +101 -0
- package/dist/utils.js.map +1 -0
- package/package.json +39 -39
|
@@ -0,0 +1,257 @@
|
|
|
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
|
+
import * as p from "@clack/prompts";
|
|
8
|
+
import * as fs from "node:fs";
|
|
9
|
+
import * as path from "node:path";
|
|
10
|
+
export async function initCommand() {
|
|
11
|
+
p.intro("getmcp init — Scaffold a new MCP server entry");
|
|
12
|
+
// Basic metadata
|
|
13
|
+
const id = await p.text({
|
|
14
|
+
message: "Server ID (lowercase, hyphens only):",
|
|
15
|
+
placeholder: "my-mcp-server",
|
|
16
|
+
validate: (val) => {
|
|
17
|
+
if (!val || !val.trim())
|
|
18
|
+
return "ID is required";
|
|
19
|
+
if (!/^[a-z0-9-]+$/.test(val))
|
|
20
|
+
return "Must be lowercase alphanumeric with hyphens";
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
if (p.isCancel(id)) {
|
|
24
|
+
p.cancel("Operation cancelled.");
|
|
25
|
+
process.exit(0);
|
|
26
|
+
}
|
|
27
|
+
const name = await p.text({
|
|
28
|
+
message: "Display name:",
|
|
29
|
+
placeholder: "My MCP Server",
|
|
30
|
+
validate: (val) => {
|
|
31
|
+
if (!val || !val.trim())
|
|
32
|
+
return "Name is required";
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
if (p.isCancel(name)) {
|
|
36
|
+
p.cancel("Operation cancelled.");
|
|
37
|
+
process.exit(0);
|
|
38
|
+
}
|
|
39
|
+
const description = await p.text({
|
|
40
|
+
message: "Description:",
|
|
41
|
+
placeholder: "What does this server do?",
|
|
42
|
+
validate: (val) => {
|
|
43
|
+
if (!val || !val.trim())
|
|
44
|
+
return "Description is required";
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
if (p.isCancel(description)) {
|
|
48
|
+
p.cancel("Operation cancelled.");
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
// Transport type
|
|
52
|
+
const transport = await p.select({
|
|
53
|
+
message: "Transport type:",
|
|
54
|
+
options: [
|
|
55
|
+
{ label: "stdio", hint: "Local process (npx, uvx, docker, etc.)", value: "stdio" },
|
|
56
|
+
{ label: "http", hint: "Remote HTTP server", value: "http" },
|
|
57
|
+
{
|
|
58
|
+
label: "streamable-http",
|
|
59
|
+
hint: "Remote streamable HTTP",
|
|
60
|
+
value: "streamable-http",
|
|
61
|
+
},
|
|
62
|
+
{ label: "sse", hint: "Server-Sent Events", value: "sse" },
|
|
63
|
+
],
|
|
64
|
+
});
|
|
65
|
+
if (p.isCancel(transport)) {
|
|
66
|
+
p.cancel("Operation cancelled.");
|
|
67
|
+
process.exit(0);
|
|
68
|
+
}
|
|
69
|
+
let configBlock;
|
|
70
|
+
let envVarNames = [];
|
|
71
|
+
if (transport === "stdio") {
|
|
72
|
+
const command = await p.text({
|
|
73
|
+
message: "Command:",
|
|
74
|
+
placeholder: "npx",
|
|
75
|
+
validate: (val) => {
|
|
76
|
+
if (!val || !val.trim())
|
|
77
|
+
return "Command is required";
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
if (p.isCancel(command)) {
|
|
81
|
+
p.cancel("Operation cancelled.");
|
|
82
|
+
process.exit(0);
|
|
83
|
+
}
|
|
84
|
+
const argsRaw = await p.text({
|
|
85
|
+
message: "Arguments (space-separated):",
|
|
86
|
+
placeholder: "-y @modelcontextprotocol/server-github",
|
|
87
|
+
});
|
|
88
|
+
if (p.isCancel(argsRaw)) {
|
|
89
|
+
p.cancel("Operation cancelled.");
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
const args = argsRaw.trim() ? argsRaw.trim().split(/\s+/) : [];
|
|
93
|
+
const envRaw = await p.text({
|
|
94
|
+
message: "Required env vars (comma-separated, or empty):",
|
|
95
|
+
placeholder: "GITHUB_TOKEN, API_KEY",
|
|
96
|
+
});
|
|
97
|
+
if (p.isCancel(envRaw)) {
|
|
98
|
+
p.cancel("Operation cancelled.");
|
|
99
|
+
process.exit(0);
|
|
100
|
+
}
|
|
101
|
+
envVarNames = envRaw.trim()
|
|
102
|
+
? envRaw
|
|
103
|
+
.trim()
|
|
104
|
+
.split(/\s*,\s*/)
|
|
105
|
+
.filter(Boolean)
|
|
106
|
+
: [];
|
|
107
|
+
const envObj = envVarNames.length > 0
|
|
108
|
+
? `\n env: {\n${envVarNames.map((v) => ` ${v}: "",`).join("\n")}\n },`
|
|
109
|
+
: "";
|
|
110
|
+
const argsStr = args.length > 0 ? `\n args: [${args.map((a) => `"${a}"`).join(", ")}],` : "";
|
|
111
|
+
configBlock = ` config: {
|
|
112
|
+
command: "${command}",${argsStr}${envObj}
|
|
113
|
+
},`;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const url = await p.text({
|
|
117
|
+
message: "Server URL:",
|
|
118
|
+
placeholder: "https://example.com/mcp",
|
|
119
|
+
validate: (val) => {
|
|
120
|
+
if (!val || !val.trim())
|
|
121
|
+
return "URL is required";
|
|
122
|
+
try {
|
|
123
|
+
new URL(val);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return "Must be a valid URL";
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
if (p.isCancel(url)) {
|
|
131
|
+
p.cancel("Operation cancelled.");
|
|
132
|
+
process.exit(0);
|
|
133
|
+
}
|
|
134
|
+
configBlock = ` config: {
|
|
135
|
+
url: "${url}",
|
|
136
|
+
transport: "${transport}",
|
|
137
|
+
},`;
|
|
138
|
+
}
|
|
139
|
+
// Categories
|
|
140
|
+
const categories = await p.multiselect({
|
|
141
|
+
message: "Categories:",
|
|
142
|
+
options: [
|
|
143
|
+
{ label: "developer-tools", value: "developer-tools" },
|
|
144
|
+
{ label: "web", value: "web" },
|
|
145
|
+
{ label: "automation", value: "automation" },
|
|
146
|
+
{ label: "data", value: "data" },
|
|
147
|
+
{ label: "search", value: "search" },
|
|
148
|
+
{ label: "ai", value: "ai" },
|
|
149
|
+
{ label: "cloud", value: "cloud" },
|
|
150
|
+
{ label: "communication", value: "communication" },
|
|
151
|
+
{ label: "design", value: "design" },
|
|
152
|
+
{ label: "documentation", value: "documentation" },
|
|
153
|
+
{ label: "devops", value: "devops" },
|
|
154
|
+
{ label: "utilities", value: "utilities" },
|
|
155
|
+
{ label: "security", value: "security" },
|
|
156
|
+
{ label: "gaming", value: "gaming" },
|
|
157
|
+
],
|
|
158
|
+
required: false,
|
|
159
|
+
});
|
|
160
|
+
if (p.isCancel(categories)) {
|
|
161
|
+
p.cancel("Operation cancelled.");
|
|
162
|
+
process.exit(0);
|
|
163
|
+
}
|
|
164
|
+
// Runtime (for stdio)
|
|
165
|
+
let runtime;
|
|
166
|
+
if (transport === "stdio") {
|
|
167
|
+
const runtimeChoice = await p.select({
|
|
168
|
+
message: "Runtime:",
|
|
169
|
+
options: [
|
|
170
|
+
{ label: "node", value: "node" },
|
|
171
|
+
{ label: "python", value: "python" },
|
|
172
|
+
{ label: "docker", value: "docker" },
|
|
173
|
+
{ label: "binary", value: "binary" },
|
|
174
|
+
],
|
|
175
|
+
});
|
|
176
|
+
if (p.isCancel(runtimeChoice)) {
|
|
177
|
+
p.cancel("Operation cancelled.");
|
|
178
|
+
process.exit(0);
|
|
179
|
+
}
|
|
180
|
+
runtime = runtimeChoice;
|
|
181
|
+
}
|
|
182
|
+
// Optional metadata
|
|
183
|
+
const repository = await p.text({
|
|
184
|
+
message: "Repository URL (optional):",
|
|
185
|
+
placeholder: "https://github.com/user/repo",
|
|
186
|
+
});
|
|
187
|
+
if (p.isCancel(repository)) {
|
|
188
|
+
p.cancel("Operation cancelled.");
|
|
189
|
+
process.exit(0);
|
|
190
|
+
}
|
|
191
|
+
const author = await p.text({
|
|
192
|
+
message: "Author (optional):",
|
|
193
|
+
placeholder: "Author Name",
|
|
194
|
+
});
|
|
195
|
+
if (p.isCancel(author)) {
|
|
196
|
+
p.cancel("Operation cancelled.");
|
|
197
|
+
process.exit(0);
|
|
198
|
+
}
|
|
199
|
+
// Generate the TypeScript file
|
|
200
|
+
const categoriesArr = categories;
|
|
201
|
+
const categoriesStr = categoriesArr.length > 0
|
|
202
|
+
? `\n categories: [${categoriesArr.map((c) => `"${c}"`).join(", ")}],`
|
|
203
|
+
: "";
|
|
204
|
+
const runtimeStr = runtime ? `\n runtime: "${runtime}",` : "";
|
|
205
|
+
const repoStr = repository.trim() ? `\n repository: "${repository.trim()}",` : "";
|
|
206
|
+
const authorStr = author.trim() ? `\n author: "${author.trim()}",` : "";
|
|
207
|
+
const envVarsStr = envVarNames.length > 0
|
|
208
|
+
? `\n requiredEnvVars: [${envVarNames.map((v) => `"${v}"`).join(", ")}],`
|
|
209
|
+
: "";
|
|
210
|
+
const fileContent = `import type { RegistryEntryType } from "@getmcp/core";
|
|
211
|
+
|
|
212
|
+
const server: RegistryEntryType = {
|
|
213
|
+
id: "${id}",
|
|
214
|
+
name: "${name}",
|
|
215
|
+
description: "${description}",
|
|
216
|
+
${configBlock}${categoriesStr}${runtimeStr}${repoStr}${authorStr}${envVarsStr}
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
export default server;
|
|
220
|
+
`;
|
|
221
|
+
// Determine output path
|
|
222
|
+
const registryDir = path.resolve("packages/registry/src/servers");
|
|
223
|
+
const outputPath = path.join(registryDir, `${id}.ts`);
|
|
224
|
+
if (fs.existsSync(outputPath)) {
|
|
225
|
+
p.log.warn(`File already exists: ${outputPath}`);
|
|
226
|
+
const overwrite = await p.confirm({
|
|
227
|
+
message: "Overwrite?",
|
|
228
|
+
initialValue: false,
|
|
229
|
+
});
|
|
230
|
+
if (p.isCancel(overwrite) || !overwrite) {
|
|
231
|
+
p.cancel("Operation cancelled.");
|
|
232
|
+
process.exit(0);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Show preview
|
|
236
|
+
p.note(fileContent, `${id}.ts`);
|
|
237
|
+
const confirmed = await p.confirm({
|
|
238
|
+
message: "Create this file?",
|
|
239
|
+
initialValue: true,
|
|
240
|
+
});
|
|
241
|
+
if (p.isCancel(confirmed) || !confirmed) {
|
|
242
|
+
p.cancel("Operation cancelled.");
|
|
243
|
+
process.exit(0);
|
|
244
|
+
}
|
|
245
|
+
// Write file
|
|
246
|
+
if (!fs.existsSync(registryDir)) {
|
|
247
|
+
fs.mkdirSync(registryDir, { recursive: true });
|
|
248
|
+
}
|
|
249
|
+
fs.writeFileSync(outputPath, fileContent, "utf-8");
|
|
250
|
+
p.log.success(`Created: ${outputPath}`);
|
|
251
|
+
p.log.info("Next steps:\n" +
|
|
252
|
+
` 1. Import and register in packages/registry/src/index.ts\n` +
|
|
253
|
+
` 2. Add a test in packages/registry/tests/registry.test.ts\n` +
|
|
254
|
+
` 3. Run: npx vitest packages/registry`);
|
|
255
|
+
p.outro("Server entry scaffolded successfully.");
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhB"}
|
package/dist/commands/list.js
CHANGED
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
* Lists all MCP servers from the registry, or lists servers
|
|
5
5
|
* installed in detected AI apps.
|
|
6
6
|
*/
|
|
7
|
+
import * as p from "@clack/prompts";
|
|
7
8
|
import { getAllServers, searchServers, getCategories, getServersByCategory, getServerCount, } from "@getmcp/registry";
|
|
8
9
|
import { detectInstalledApps } from "../detect.js";
|
|
9
10
|
import { listServersInConfig } from "../config-file.js";
|
|
11
|
+
import { shortenPath } from "../utils.js";
|
|
10
12
|
export async function listCommand(options) {
|
|
11
13
|
if (options.installed) {
|
|
12
14
|
return listInstalledServers();
|
|
@@ -19,63 +21,59 @@ export async function listCommand(options) {
|
|
|
19
21
|
async function listRegistry(search) {
|
|
20
22
|
const servers = search ? searchServers(search) : getAllServers();
|
|
21
23
|
if (servers.length === 0) {
|
|
22
|
-
|
|
24
|
+
p.log.warn(search ? `No servers matching "${search}".` : "No servers in registry.");
|
|
23
25
|
return;
|
|
24
26
|
}
|
|
25
27
|
const title = search
|
|
26
28
|
? `Servers matching "${search}" (${servers.length}):`
|
|
27
29
|
: `Available MCP servers (${getServerCount()}):`;
|
|
28
|
-
|
|
30
|
+
p.intro(title);
|
|
31
|
+
const lines = [];
|
|
29
32
|
for (const server of servers) {
|
|
30
33
|
const transport = "command" in server.config ? "stdio" : "remote";
|
|
31
34
|
const envCount = server.requiredEnvVars.length;
|
|
32
35
|
const envNote = envCount > 0 ? ` [${envCount} env var${envCount > 1 ? "s" : ""} required]` : "";
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
console.log();
|
|
36
|
+
const categories = server.categories && server.categories.length > 0 ? ` (${server.categories.join(", ")})` : "";
|
|
37
|
+
lines.push(`${server.id} — ${server.name}`);
|
|
38
|
+
lines.push(` ${server.description}`);
|
|
39
|
+
lines.push(` ${transport}${envNote}${categories}`);
|
|
40
|
+
lines.push("");
|
|
40
41
|
}
|
|
42
|
+
console.log(lines.join("\n"));
|
|
41
43
|
}
|
|
42
44
|
async function listByCategory(category) {
|
|
43
45
|
const servers = getServersByCategory(category);
|
|
44
46
|
if (servers.length === 0) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
p.log.warn(`No servers in category "${category}".`);
|
|
48
|
+
p.log.info(`Available categories: ${getCategories().join(", ")}`);
|
|
47
49
|
return;
|
|
48
50
|
}
|
|
49
|
-
|
|
51
|
+
p.intro(`Servers in category "${category}" (${servers.length}):`);
|
|
52
|
+
const lines = [];
|
|
50
53
|
for (const server of servers) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
lines.push(`${server.id} — ${server.name}`);
|
|
55
|
+
lines.push(` ${server.description}`);
|
|
56
|
+
lines.push("");
|
|
54
57
|
}
|
|
58
|
+
console.log(lines.join("\n"));
|
|
55
59
|
}
|
|
56
60
|
async function listInstalledServers() {
|
|
57
61
|
const apps = detectInstalledApps();
|
|
58
62
|
if (apps.length === 0) {
|
|
59
|
-
|
|
63
|
+
p.log.warn("No AI applications detected on this system.");
|
|
60
64
|
return;
|
|
61
65
|
}
|
|
62
|
-
|
|
66
|
+
p.intro(`Detected AI applications (${apps.length}):`);
|
|
63
67
|
for (const app of apps) {
|
|
64
|
-
|
|
65
|
-
console.log(` Config: ${app.configPath}`);
|
|
68
|
+
let serversLine;
|
|
66
69
|
try {
|
|
67
70
|
const servers = listServersInConfig(app.configPath);
|
|
68
|
-
|
|
69
|
-
console.log(` Servers: ${servers.join(", ")}`);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
console.log(` Servers: (none configured)`);
|
|
73
|
-
}
|
|
71
|
+
serversLine = servers.length > 0 ? servers.join(", ") : "(none configured)";
|
|
74
72
|
}
|
|
75
73
|
catch {
|
|
76
|
-
|
|
74
|
+
serversLine = "(config not readable)";
|
|
77
75
|
}
|
|
78
|
-
|
|
76
|
+
p.log.info(`${app.name}\n Config: ${shortenPath(app.configPath)}\n Servers: ${serversLine}`);
|
|
79
77
|
}
|
|
80
78
|
}
|
|
81
79
|
//# sourceMappingURL=list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,14 @@
|
|
|
6
6
|
* 2. Detect installed apps
|
|
7
7
|
* 3. User selects which apps to remove from (or all)
|
|
8
8
|
* 4. Remove server from each selected config file
|
|
9
|
+
*
|
|
10
|
+
* Supports non-interactive mode via --yes flag.
|
|
11
|
+
* Supports --dry-run to preview changes without writing.
|
|
9
12
|
*/
|
|
10
|
-
export
|
|
13
|
+
export interface RemoveOptions {
|
|
14
|
+
yes?: boolean;
|
|
15
|
+
apps?: string[];
|
|
16
|
+
dryRun?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function removeCommand(serverName?: string, options?: RemoveOptions): Promise<void>;
|
|
11
19
|
//# sourceMappingURL=remove.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,aAAa,CACjC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAsIf"}
|
package/dist/commands/remove.js
CHANGED
|
@@ -6,19 +6,27 @@
|
|
|
6
6
|
* 2. Detect installed apps
|
|
7
7
|
* 3. User selects which apps to remove from (or all)
|
|
8
8
|
* 4. Remove server from each selected config file
|
|
9
|
+
*
|
|
10
|
+
* Supports non-interactive mode via --yes flag.
|
|
11
|
+
* Supports --dry-run to preview changes without writing.
|
|
9
12
|
*/
|
|
10
|
-
import
|
|
13
|
+
import * as p from "@clack/prompts";
|
|
11
14
|
import { detectInstalledApps } from "../detect.js";
|
|
12
|
-
import { removeServerFromConfig, writeConfigFile, listServersInConfig
|
|
13
|
-
|
|
15
|
+
import { removeServerFromConfig, writeConfigFile, listServersInConfig } from "../config-file.js";
|
|
16
|
+
import { trackRemoval } from "../lock.js";
|
|
17
|
+
import { shortenPath } from "../utils.js";
|
|
18
|
+
import { formatError } from "../errors.js";
|
|
19
|
+
export async function removeCommand(serverName, options = {}) {
|
|
20
|
+
const isNonInteractive = options.yes || !process.stdin.isTTY;
|
|
21
|
+
p.intro("getmcp remove");
|
|
14
22
|
if (!serverName) {
|
|
15
|
-
|
|
16
|
-
console.error(" Provide the name/key of the MCP server to remove.");
|
|
23
|
+
p.log.error("Usage: getmcp remove <server-name>\n Provide the name/key of the MCP server to remove.");
|
|
17
24
|
process.exit(1);
|
|
18
25
|
}
|
|
19
26
|
const installed = detectInstalledApps();
|
|
20
27
|
if (installed.length === 0) {
|
|
21
|
-
|
|
28
|
+
p.log.warn("No AI applications detected on this system.");
|
|
29
|
+
p.outro("Done");
|
|
22
30
|
return;
|
|
23
31
|
}
|
|
24
32
|
// Find which apps have this server configured
|
|
@@ -35,50 +43,92 @@ export async function removeCommand(serverName) {
|
|
|
35
43
|
}
|
|
36
44
|
}
|
|
37
45
|
if (appsWithServer.length === 0) {
|
|
38
|
-
|
|
46
|
+
p.log.warn(`Server "${serverName}" was not found in any detected app config.`);
|
|
47
|
+
p.outro("Done");
|
|
39
48
|
return;
|
|
40
49
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
50
|
+
const appList = appsWithServer
|
|
51
|
+
.map((app) => ` - ${app.name} (${shortenPath(app.configPath)})`)
|
|
52
|
+
.join("\n");
|
|
53
|
+
p.log.info(`Found "${serverName}" in ${appsWithServer.length} app(s):\n${appList}`);
|
|
54
|
+
// Select apps to remove from
|
|
55
|
+
let selectedApps;
|
|
56
|
+
if (options.apps && options.apps.length > 0) {
|
|
57
|
+
// --app flag: filter to specified apps
|
|
58
|
+
selectedApps = appsWithServer.filter((a) => options.apps.includes(a.id));
|
|
59
|
+
if (selectedApps.length === 0) {
|
|
60
|
+
p.log.warn("None of the specified apps have this server configured.");
|
|
61
|
+
p.outro("Done");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (isNonInteractive) {
|
|
66
|
+
// Non-interactive: remove from all apps that have it
|
|
67
|
+
selectedApps = appsWithServer;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const selected = await p.multiselect({
|
|
71
|
+
message: "Select apps to remove from:",
|
|
72
|
+
options: appsWithServer.map((app) => ({
|
|
73
|
+
label: app.name,
|
|
74
|
+
hint: shortenPath(app.configPath),
|
|
75
|
+
value: app,
|
|
76
|
+
})),
|
|
77
|
+
initialValues: appsWithServer,
|
|
78
|
+
required: true,
|
|
79
|
+
});
|
|
80
|
+
if (p.isCancel(selected)) {
|
|
81
|
+
p.cancel("Operation cancelled.");
|
|
82
|
+
process.exit(0);
|
|
83
|
+
}
|
|
84
|
+
selectedApps = selected;
|
|
44
85
|
}
|
|
45
|
-
console.log();
|
|
46
|
-
// Confirm removal
|
|
47
|
-
const selectedApps = await checkbox({
|
|
48
|
-
message: "Select apps to remove from:",
|
|
49
|
-
choices: appsWithServer.map((app) => ({
|
|
50
|
-
name: app.name,
|
|
51
|
-
value: app,
|
|
52
|
-
checked: true,
|
|
53
|
-
})),
|
|
54
|
-
});
|
|
55
86
|
if (selectedApps.length === 0) {
|
|
56
|
-
|
|
87
|
+
p.log.warn("No apps selected.");
|
|
88
|
+
p.outro("Cancelled");
|
|
57
89
|
return;
|
|
58
90
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
91
|
+
// Confirm removal
|
|
92
|
+
if (!isNonInteractive) {
|
|
93
|
+
const confirmed = await p.confirm({
|
|
94
|
+
message: `Remove "${serverName}" from ${selectedApps.length} app(s)?`,
|
|
95
|
+
initialValue: true,
|
|
96
|
+
});
|
|
97
|
+
if (p.isCancel(confirmed) || !confirmed) {
|
|
98
|
+
p.cancel("Operation cancelled.");
|
|
99
|
+
process.exit(0);
|
|
100
|
+
}
|
|
66
101
|
}
|
|
102
|
+
if (options.dryRun) {
|
|
103
|
+
p.log.step("Dry run — no files will be modified:");
|
|
104
|
+
}
|
|
105
|
+
const removedApps = [];
|
|
67
106
|
for (const app of selectedApps) {
|
|
68
107
|
try {
|
|
69
108
|
const updated = removeServerFromConfig(app.configPath, serverName);
|
|
70
109
|
if (updated) {
|
|
71
|
-
|
|
72
|
-
|
|
110
|
+
if (options.dryRun) {
|
|
111
|
+
p.log.info(`${app.name}: would remove "${serverName}" from ${shortenPath(app.configPath)}`);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
writeConfigFile(app.configPath, updated);
|
|
115
|
+
p.log.success(`${app.name}: removed`);
|
|
116
|
+
}
|
|
117
|
+
removedApps.push(app);
|
|
73
118
|
}
|
|
74
119
|
else {
|
|
75
|
-
|
|
120
|
+
p.log.warn(`${app.name}: not found (skipped)`);
|
|
76
121
|
}
|
|
77
122
|
}
|
|
78
123
|
catch (err) {
|
|
79
|
-
|
|
124
|
+
p.log.error(`${app.name}: ${formatError(err)}`);
|
|
80
125
|
}
|
|
81
126
|
}
|
|
82
|
-
|
|
127
|
+
// Track removal (unless dry-run)
|
|
128
|
+
if (!options.dryRun && removedApps.length > 0) {
|
|
129
|
+
trackRemoval(serverName, removedApps.map((a) => a.id));
|
|
130
|
+
}
|
|
131
|
+
const action = options.dryRun ? "would be removed" : "has been removed";
|
|
132
|
+
p.outro(`"${serverName}" ${action}.`);
|
|
83
133
|
}
|
|
84
134
|
//# sourceMappingURL=remove.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `getmcp update` command.
|
|
3
|
+
*
|
|
4
|
+
* Re-generates and merges configs for all tracked installations
|
|
5
|
+
* using the current registry definitions.
|
|
6
|
+
*/
|
|
7
|
+
export interface UpdateOptions {
|
|
8
|
+
yes?: boolean;
|
|
9
|
+
apps?: string[];
|
|
10
|
+
allApps?: boolean;
|
|
11
|
+
dryRun?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function updateCommand(options?: UpdateOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuG9E"}
|