@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,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `getmcp update` command.
|
|
3
|
+
*
|
|
4
|
+
* Re-generates and merges configs for all tracked installations
|
|
5
|
+
* using the current registry definitions.
|
|
6
|
+
*/
|
|
7
|
+
import * as p from "@clack/prompts";
|
|
8
|
+
import { getServer } from "@getmcp/registry";
|
|
9
|
+
import { getGenerator } from "@getmcp/generators";
|
|
10
|
+
import { getTrackedServers, trackInstallation } from "../lock.js";
|
|
11
|
+
import { detectApps } from "../detect.js";
|
|
12
|
+
import { mergeServerIntoConfig, writeConfigFile } from "../config-file.js";
|
|
13
|
+
import { shortenPath } from "../utils.js";
|
|
14
|
+
import { formatError } from "../errors.js";
|
|
15
|
+
export async function updateCommand(options = {}) {
|
|
16
|
+
const isNonInteractive = options.yes || !process.stdin.isTTY;
|
|
17
|
+
p.intro("getmcp update");
|
|
18
|
+
const lock = getTrackedServers();
|
|
19
|
+
const entries = Object.entries(lock.installations);
|
|
20
|
+
if (entries.length === 0) {
|
|
21
|
+
p.log.info("No tracked installations to update. Use 'getmcp add' to install servers.");
|
|
22
|
+
p.outro("Done");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const allApps = detectApps();
|
|
26
|
+
const appMap = new Map(allApps.map((a) => [a.id, a]));
|
|
27
|
+
// Confirm update
|
|
28
|
+
if (!isNonInteractive) {
|
|
29
|
+
const confirmed = await p.confirm({
|
|
30
|
+
message: `Update ${entries.length} tracked server(s)?`,
|
|
31
|
+
initialValue: true,
|
|
32
|
+
});
|
|
33
|
+
if (p.isCancel(confirmed) || !confirmed) {
|
|
34
|
+
p.cancel("Operation cancelled.");
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (options.dryRun) {
|
|
39
|
+
p.log.step("Dry run — no files will be modified:");
|
|
40
|
+
}
|
|
41
|
+
const spin = p.spinner();
|
|
42
|
+
spin.start("Updating configurations...");
|
|
43
|
+
let updated = 0;
|
|
44
|
+
let skipped = 0;
|
|
45
|
+
let failed = 0;
|
|
46
|
+
for (const [serverId, installation] of entries) {
|
|
47
|
+
const registryEntry = getServer(serverId);
|
|
48
|
+
if (!registryEntry) {
|
|
49
|
+
spin.stop(`${serverId}: skipped (no longer in registry)`);
|
|
50
|
+
p.log.warn(`${serverId}: not found in registry, skipping`);
|
|
51
|
+
skipped++;
|
|
52
|
+
spin.start("Continuing...");
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const config = structuredClone(registryEntry.config);
|
|
56
|
+
// Determine which apps to update
|
|
57
|
+
let targetAppIds;
|
|
58
|
+
if (options.apps && options.apps.length > 0) {
|
|
59
|
+
targetAppIds = installation.apps.filter((id) => options.apps.includes(id));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
targetAppIds = installation.apps;
|
|
63
|
+
}
|
|
64
|
+
for (const appId of targetAppIds) {
|
|
65
|
+
const app = appMap.get(appId);
|
|
66
|
+
if (!app) {
|
|
67
|
+
p.log.warn(` ${serverId} → ${appId}: app not available on this platform`);
|
|
68
|
+
skipped++;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const generator = getGenerator(app.id);
|
|
73
|
+
const generatedConfig = generator.generate(serverId, config);
|
|
74
|
+
if (options.dryRun) {
|
|
75
|
+
spin.stop(`Preview: ${registryEntry.name} → ${app.name}`);
|
|
76
|
+
const serialized = generator.serialize(generatedConfig);
|
|
77
|
+
p.note(`File: ${shortenPath(app.configPath)}\n\n${serialized}`, `${registryEntry.name} → ${app.name}`);
|
|
78
|
+
spin.start("Continuing...");
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
const merged = mergeServerIntoConfig(app.configPath, generatedConfig);
|
|
82
|
+
writeConfigFile(app.configPath, merged);
|
|
83
|
+
}
|
|
84
|
+
updated++;
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
p.log.error(` ${registryEntry.name} → ${app.name}: ${formatError(err)}`);
|
|
88
|
+
failed++;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Update tracking timestamp
|
|
92
|
+
if (!options.dryRun) {
|
|
93
|
+
trackInstallation(serverId, targetAppIds, installation.envVars);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
spin.stop("Update complete.");
|
|
97
|
+
p.outro(`Updated: ${updated}, Skipped: ${skipped}, Failed: ${failed}`);
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA8DtD;AA6CD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUxE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CASvF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAehC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAa9D"}
|
package/dist/config-file.js
CHANGED
|
@@ -12,6 +12,7 @@ import * as path from "node:path";
|
|
|
12
12
|
import YAML from "yaml";
|
|
13
13
|
import * as TOML from "smol-toml";
|
|
14
14
|
import { detectConfigFormat } from "./format.js";
|
|
15
|
+
import { ConfigParseError } from "./errors.js";
|
|
15
16
|
/**
|
|
16
17
|
* Strip JSONC comments (single-line `//` and multi-line `/* ... */`)
|
|
17
18
|
* while respecting JSON string boundaries.
|
|
@@ -96,8 +97,8 @@ function parseContent(raw, format, filePath) {
|
|
|
96
97
|
return JSON.parse(raw);
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
|
-
catch {
|
|
100
|
-
throw new
|
|
100
|
+
catch (err) {
|
|
101
|
+
throw new ConfigParseError(filePath, err instanceof Error ? err.message : undefined);
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
104
|
/**
|
|
@@ -161,9 +162,7 @@ export function mergeServerIntoConfig(filePath, generatedConfig) {
|
|
|
161
162
|
const existing = readConfigFile(filePath);
|
|
162
163
|
// Deep merge: for each top-level key in generated config
|
|
163
164
|
for (const [rootKey, value] of Object.entries(generatedConfig)) {
|
|
164
|
-
if (typeof value === "object" &&
|
|
165
|
-
value !== null &&
|
|
166
|
-
!Array.isArray(value)) {
|
|
165
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
167
166
|
const existingSection = existing[rootKey] ?? {};
|
|
168
167
|
existing[rootKey] = {
|
|
169
168
|
...existingSection,
|
|
@@ -189,9 +188,7 @@ export function removeServerFromConfig(filePath, serverName) {
|
|
|
189
188
|
const existing = readConfigFile(filePath);
|
|
190
189
|
let found = false;
|
|
191
190
|
for (const [, value] of Object.entries(existing)) {
|
|
192
|
-
if (typeof value === "object" &&
|
|
193
|
-
value !== null &&
|
|
194
|
-
!Array.isArray(value)) {
|
|
191
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
195
192
|
const section = value;
|
|
196
193
|
if (serverName in section) {
|
|
197
194
|
delete section[serverName];
|
|
@@ -209,14 +206,7 @@ export function removeServerFromConfig(filePath, serverName) {
|
|
|
209
206
|
*/
|
|
210
207
|
export function listServersInConfig(filePath) {
|
|
211
208
|
const existing = readConfigFile(filePath);
|
|
212
|
-
const rootKeys = [
|
|
213
|
-
"mcpServers",
|
|
214
|
-
"servers",
|
|
215
|
-
"extensions",
|
|
216
|
-
"mcp",
|
|
217
|
-
"context_servers",
|
|
218
|
-
"mcp_servers",
|
|
219
|
-
];
|
|
209
|
+
const rootKeys = ["mcpServers", "servers", "extensions", "mcp", "context_servers", "mcp_servers"];
|
|
220
210
|
const servers = [];
|
|
221
211
|
for (const rootKey of rootKeys) {
|
|
222
212
|
const section = existing[rootKey];
|
package/dist/config-file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"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"}
|
package/dist/detect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAwBtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAKlE;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,WAAW,EAAE,CAsB1C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,EAAE,CAEnD"}
|
package/dist/detect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,IAAI,QAAQ,GAAG,UAAU,CAAC;IAE1B,qBAAqB;IACrB,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,sCAAsC;IACtC,QAAQ,GAAG,QAAQ,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,IAAI,QAAQ,GAAG,UAAU,CAAC;IAE1B,qBAAqB;IACrB,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,sCAAsC;IACtC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,aAAa,EACb,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CACrE,CAAC;IAEF,+BAA+B;IAC/B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAE7D,yCAAyC;IACzC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,kBAAkB,EAClB,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CACxE,CAAC;IAEF,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAgB;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAwC,CAAC;IAClE,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC;AAUD;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAE7D,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;YACpB,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI;YACxB,UAAU;YACV,MAAM,EAAE,UAAU,IAAI,YAAY;YAClC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error classes with actionable remediation messages.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Base class for CLI errors that include remediation steps.
|
|
6
|
+
*/
|
|
7
|
+
export declare class CliError extends Error {
|
|
8
|
+
readonly remediation: string;
|
|
9
|
+
constructor(message: string, remediation: string);
|
|
10
|
+
format(): string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Thrown when a config file cannot be parsed.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ConfigParseError extends CliError {
|
|
16
|
+
readonly filePath: string;
|
|
17
|
+
constructor(filePath: string, cause?: string);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Thrown when no AI apps are detected on the system.
|
|
21
|
+
*/
|
|
22
|
+
export declare class AppNotDetectedError extends CliError {
|
|
23
|
+
constructor();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Thrown when a specified app ID is not valid.
|
|
27
|
+
*/
|
|
28
|
+
export declare class InvalidAppError extends CliError {
|
|
29
|
+
readonly appId: string;
|
|
30
|
+
constructor(appId: string, validIds: string[]);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Thrown when a server is not found in the registry.
|
|
34
|
+
*/
|
|
35
|
+
export declare class ServerNotFoundError extends CliError {
|
|
36
|
+
readonly serverId: string;
|
|
37
|
+
constructor(serverId: string);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Thrown when a non-interactive mode requires input but can't get it.
|
|
41
|
+
*/
|
|
42
|
+
export declare class NonInteractiveError extends CliError {
|
|
43
|
+
constructor(detail: string);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Format any error for CLI output, using remediation if available.
|
|
47
|
+
*/
|
|
48
|
+
export declare function formatError(err: unknown): string;
|
|
49
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAMhD,MAAM,IAAI,MAAM;CAGjB;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAW7C;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;;CAQhD;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;CAK9C;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,QAAQ,EAAE,MAAM;CAQ7B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,MAAM,EAAE,MAAM;CAO3B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQhD"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error classes with actionable remediation messages.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Base class for CLI errors that include remediation steps.
|
|
6
|
+
*/
|
|
7
|
+
export class CliError extends Error {
|
|
8
|
+
remediation;
|
|
9
|
+
constructor(message, remediation) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "CliError";
|
|
12
|
+
this.remediation = remediation;
|
|
13
|
+
}
|
|
14
|
+
format() {
|
|
15
|
+
return `${this.message}\n\n Hint: ${this.remediation}`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Thrown when a config file cannot be parsed.
|
|
20
|
+
*/
|
|
21
|
+
export class ConfigParseError extends CliError {
|
|
22
|
+
filePath;
|
|
23
|
+
constructor(filePath, cause) {
|
|
24
|
+
const msg = cause
|
|
25
|
+
? `Failed to parse config file: ${filePath} (${cause})`
|
|
26
|
+
: `Failed to parse config file: ${filePath}`;
|
|
27
|
+
super(msg, `Check the file for syntax errors, or delete it and re-run the command to create a fresh config.`);
|
|
28
|
+
this.name = "ConfigParseError";
|
|
29
|
+
this.filePath = filePath;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Thrown when no AI apps are detected on the system.
|
|
34
|
+
*/
|
|
35
|
+
export class AppNotDetectedError extends CliError {
|
|
36
|
+
constructor() {
|
|
37
|
+
super("No AI applications detected on this system.", `Make sure at least one supported app is installed, or use --app <id> to specify a target manually.`);
|
|
38
|
+
this.name = "AppNotDetectedError";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Thrown when a specified app ID is not valid.
|
|
43
|
+
*/
|
|
44
|
+
export class InvalidAppError extends CliError {
|
|
45
|
+
appId;
|
|
46
|
+
constructor(appId, validIds) {
|
|
47
|
+
super(`Unknown app: "${appId}"`, `Valid app IDs: ${validIds.join(", ")}`);
|
|
48
|
+
this.name = "InvalidAppError";
|
|
49
|
+
this.appId = appId;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Thrown when a server is not found in the registry.
|
|
54
|
+
*/
|
|
55
|
+
export class ServerNotFoundError extends CliError {
|
|
56
|
+
serverId;
|
|
57
|
+
constructor(serverId) {
|
|
58
|
+
super(`Server "${serverId}" not found in registry.`, `Run "getmcp list" to see available servers, or "getmcp find" to search interactively.`);
|
|
59
|
+
this.name = "ServerNotFoundError";
|
|
60
|
+
this.serverId = serverId;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Thrown when a non-interactive mode requires input but can't get it.
|
|
65
|
+
*/
|
|
66
|
+
export class NonInteractiveError extends CliError {
|
|
67
|
+
constructor(detail) {
|
|
68
|
+
super(`Cannot prompt for input in non-interactive mode: ${detail}`, `Provide the required values via flags. Run "getmcp --help" for usage.`);
|
|
69
|
+
this.name = "NonInteractiveError";
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Format any error for CLI output, using remediation if available.
|
|
74
|
+
*/
|
|
75
|
+
export function formatError(err) {
|
|
76
|
+
if (err instanceof CliError) {
|
|
77
|
+
return err.format();
|
|
78
|
+
}
|
|
79
|
+
if (err instanceof Error) {
|
|
80
|
+
return err.message;
|
|
81
|
+
}
|
|
82
|
+
return String(err);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,WAAW,CAAS;IAE7B,YAAY,OAAe,EAAE,WAAmB;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,MAAM;QACJ,OAAO,GAAG,IAAI,CAAC,OAAO,eAAe,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IACnC,QAAQ,CAAS;IAE1B,YAAY,QAAgB,EAAE,KAAc;QAC1C,MAAM,GAAG,GAAG,KAAK;YACf,CAAC,CAAC,gCAAgC,QAAQ,KAAK,KAAK,GAAG;YACvD,CAAC,CAAC,gCAAgC,QAAQ,EAAE,CAAC;QAC/C,KAAK,CACH,GAAG,EACH,iGAAiG,CAClG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC/C;QACE,KAAK,CACH,6CAA6C,EAC7C,oGAAoG,CACrG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAClC,KAAK,CAAS;IAEvB,YAAY,KAAa,EAAE,QAAkB;QAC3C,KAAK,CAAC,iBAAiB,KAAK,GAAG,EAAE,kBAAkB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IACtC,QAAQ,CAAS;IAE1B,YAAY,QAAgB;QAC1B,KAAK,CACH,WAAW,QAAQ,0BAA0B,EAC7C,uFAAuF,CACxF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,MAAc;QACxB,KAAK,CACH,oDAAoD,MAAM,EAAE,EAC5D,uEAAuE,CACxE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,12 +2,19 @@
|
|
|
2
2
|
* @getmcp/cli
|
|
3
3
|
*
|
|
4
4
|
* CLI tool to install MCP servers into any AI application.
|
|
5
|
-
* Supports: add, remove, list commands.
|
|
5
|
+
* Supports: add, remove, list, find, check, update, init commands.
|
|
6
6
|
*/
|
|
7
7
|
export { addCommand } from "./commands/add.js";
|
|
8
8
|
export { removeCommand } from "./commands/remove.js";
|
|
9
9
|
export { listCommand } from "./commands/list.js";
|
|
10
|
+
export { findCommand } from "./commands/find.js";
|
|
11
|
+
export { checkCommand } from "./commands/check.js";
|
|
12
|
+
export { updateCommand } from "./commands/update.js";
|
|
13
|
+
export { initCommand } from "./commands/init.js";
|
|
10
14
|
export { detectApps, detectInstalledApps, resolvePath, getConfigPath } from "./detect.js";
|
|
11
15
|
export { readConfigFile, writeConfigFile, mergeServerIntoConfig, removeServerFromConfig, listServersInConfig, } from "./config-file.js";
|
|
12
16
|
export { getPreferencesPath, readPreferences, saveSelectedApps, getSavedSelectedApps, } from "./preferences.js";
|
|
17
|
+
export { readLockFile, writeLockFile, trackInstallation, trackRemoval, getTrackedServers, getLockFilePath, } from "./lock.js";
|
|
18
|
+
export { shortenPath, parseFlags, resolveAlias } from "./utils.js";
|
|
19
|
+
export { CliError, ConfigParseError, AppNotDetectedError, InvalidAppError, ServerNotFoundError, NonInteractiveError, formatError, } from "./errors.js";
|
|
13
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EACL,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EACL,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,12 +2,19 @@
|
|
|
2
2
|
* @getmcp/cli
|
|
3
3
|
*
|
|
4
4
|
* CLI tool to install MCP servers into any AI application.
|
|
5
|
-
* Supports: add, remove, list commands.
|
|
5
|
+
* Supports: add, remove, list, find, check, update, init commands.
|
|
6
6
|
*/
|
|
7
7
|
export { addCommand } from "./commands/add.js";
|
|
8
8
|
export { removeCommand } from "./commands/remove.js";
|
|
9
9
|
export { listCommand } from "./commands/list.js";
|
|
10
|
+
export { findCommand } from "./commands/find.js";
|
|
11
|
+
export { checkCommand } from "./commands/check.js";
|
|
12
|
+
export { updateCommand } from "./commands/update.js";
|
|
13
|
+
export { initCommand } from "./commands/init.js";
|
|
10
14
|
export { detectApps, detectInstalledApps, resolvePath, getConfigPath } from "./detect.js";
|
|
11
15
|
export { readConfigFile, writeConfigFile, mergeServerIntoConfig, removeServerFromConfig, listServersInConfig, } from "./config-file.js";
|
|
12
16
|
export { getPreferencesPath, readPreferences, saveSelectedApps, getSavedSelectedApps, } from "./preferences.js";
|
|
17
|
+
export { readLockFile, writeLockFile, trackInstallation, trackRemoval, getTrackedServers, getLockFilePath, } from "./lock.js";
|
|
18
|
+
export { shortenPath, parseFlags, resolveAlias } from "./utils.js";
|
|
19
|
+
export { CliError, ConfigParseError, AppNotDetectedError, InvalidAppError, ServerNotFoundError, NonInteractiveError, formatError, } from "./errors.js";
|
|
13
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EACL,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EACL,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,aAAa,CAAC"}
|
package/dist/lock.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installation tracking via lock file.
|
|
3
|
+
*
|
|
4
|
+
* Tracks which servers have been installed to which apps,
|
|
5
|
+
* enabling check/update workflows.
|
|
6
|
+
*
|
|
7
|
+
* Lock file location: ./getmcp-lock.json (project root)
|
|
8
|
+
*/
|
|
9
|
+
import type { AppIdType } from "@getmcp/core";
|
|
10
|
+
export interface LockInstallation {
|
|
11
|
+
/** App IDs this server is installed in */
|
|
12
|
+
apps: AppIdType[];
|
|
13
|
+
/** ISO timestamp of installation */
|
|
14
|
+
installedAt: string;
|
|
15
|
+
/** ISO timestamp of last update */
|
|
16
|
+
updatedAt: string;
|
|
17
|
+
/** Env var names that were set (values NOT stored for security) */
|
|
18
|
+
envVars: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface LockFile {
|
|
21
|
+
version: 1;
|
|
22
|
+
installations: Record<string, LockInstallation>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the path for the project-level lock file.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getLockFilePath(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Read the lock file. Returns a default empty lock if it doesn't exist.
|
|
30
|
+
*/
|
|
31
|
+
export declare function readLockFile(filePath?: string): LockFile;
|
|
32
|
+
/**
|
|
33
|
+
* Write the lock file. Creates parent directories if needed.
|
|
34
|
+
*/
|
|
35
|
+
export declare function writeLockFile(lock: LockFile, filePath?: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Record an installation of a server to one or more apps.
|
|
38
|
+
*/
|
|
39
|
+
export declare function trackInstallation(serverId: string, appIds: AppIdType[], envVarNames: string[], filePath?: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Record the removal of a server from one or more apps.
|
|
42
|
+
* Removes the entire entry if no apps remain.
|
|
43
|
+
*/
|
|
44
|
+
export declare function trackRemoval(serverId: string, appIds: AppIdType[], filePath?: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* Get all tracked installations.
|
|
47
|
+
*/
|
|
48
|
+
export declare function getTrackedServers(filePath?: string): LockFile;
|
|
49
|
+
//# sourceMappingURL=lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../src/lock.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAM9C,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,CAAC,CAAC;IACX,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACjD;AAMD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAoBxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CASrE;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,CAuBN;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAe3F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAE7D"}
|
package/dist/lock.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installation tracking via lock file.
|
|
3
|
+
*
|
|
4
|
+
* Tracks which servers have been installed to which apps,
|
|
5
|
+
* enabling check/update workflows.
|
|
6
|
+
*
|
|
7
|
+
* Lock file location: ./getmcp-lock.json (project root)
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from "node:fs";
|
|
10
|
+
import * as path from "node:path";
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Path resolution
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
/**
|
|
15
|
+
* Get the path for the project-level lock file.
|
|
16
|
+
*/
|
|
17
|
+
export function getLockFilePath() {
|
|
18
|
+
return path.resolve("getmcp-lock.json");
|
|
19
|
+
}
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Read / Write
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
/**
|
|
24
|
+
* Read the lock file. Returns a default empty lock if it doesn't exist.
|
|
25
|
+
*/
|
|
26
|
+
export function readLockFile(filePath) {
|
|
27
|
+
const lockPath = filePath ?? getLockFilePath();
|
|
28
|
+
if (!fs.existsSync(lockPath)) {
|
|
29
|
+
return { version: 1, installations: {} };
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const raw = fs.readFileSync(lockPath, "utf-8");
|
|
33
|
+
if (!raw.trim())
|
|
34
|
+
return { version: 1, installations: {} };
|
|
35
|
+
const parsed = JSON.parse(raw);
|
|
36
|
+
if (typeof parsed !== "object" || parsed === null || parsed.version !== 1) {
|
|
37
|
+
return { version: 1, installations: {} };
|
|
38
|
+
}
|
|
39
|
+
return parsed;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return { version: 1, installations: {} };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Write the lock file. Creates parent directories if needed.
|
|
47
|
+
*/
|
|
48
|
+
export function writeLockFile(lock, filePath) {
|
|
49
|
+
const lockPath = filePath ?? getLockFilePath();
|
|
50
|
+
const dir = path.dirname(lockPath);
|
|
51
|
+
if (!fs.existsSync(dir)) {
|
|
52
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
53
|
+
}
|
|
54
|
+
fs.writeFileSync(lockPath, JSON.stringify(lock, null, 2) + "\n", "utf-8");
|
|
55
|
+
}
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// Operations
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
/**
|
|
60
|
+
* Record an installation of a server to one or more apps.
|
|
61
|
+
*/
|
|
62
|
+
export function trackInstallation(serverId, appIds, envVarNames, filePath) {
|
|
63
|
+
const lock = readLockFile(filePath);
|
|
64
|
+
const now = new Date().toISOString();
|
|
65
|
+
const existing = lock.installations[serverId];
|
|
66
|
+
if (existing) {
|
|
67
|
+
// Merge apps (deduplicate)
|
|
68
|
+
const allApps = new Set([...existing.apps, ...appIds]);
|
|
69
|
+
existing.apps = [...allApps];
|
|
70
|
+
existing.updatedAt = now;
|
|
71
|
+
// Merge env var names
|
|
72
|
+
const allEnv = new Set([...existing.envVars, ...envVarNames]);
|
|
73
|
+
existing.envVars = [...allEnv];
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
lock.installations[serverId] = {
|
|
77
|
+
apps: appIds,
|
|
78
|
+
installedAt: now,
|
|
79
|
+
updatedAt: now,
|
|
80
|
+
envVars: envVarNames,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
writeLockFile(lock, filePath);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Record the removal of a server from one or more apps.
|
|
87
|
+
* Removes the entire entry if no apps remain.
|
|
88
|
+
*/
|
|
89
|
+
export function trackRemoval(serverId, appIds, filePath) {
|
|
90
|
+
const lock = readLockFile(filePath);
|
|
91
|
+
const existing = lock.installations[serverId];
|
|
92
|
+
if (!existing)
|
|
93
|
+
return;
|
|
94
|
+
const removeSet = new Set(appIds);
|
|
95
|
+
existing.apps = existing.apps.filter((a) => !removeSet.has(a));
|
|
96
|
+
existing.updatedAt = new Date().toISOString();
|
|
97
|
+
if (existing.apps.length === 0) {
|
|
98
|
+
delete lock.installations[serverId];
|
|
99
|
+
}
|
|
100
|
+
writeLockFile(lock, filePath);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get all tracked installations.
|
|
104
|
+
*/
|
|
105
|
+
export function getTrackedServers(filePath) {
|
|
106
|
+
return readLockFile(filePath);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=lock.js.map
|
package/dist/lock.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../src/lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAS3C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CA8B9D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAY7E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI,CAG1E"}
|
package/dist/preferences.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preferences.js","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAO9B;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"preferences.js","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI utility functions.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Shorten a file path for display by replacing the home directory with `~`
|
|
6
|
+
* and the current working directory with `.`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function shortenPath(filePath: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Parse CLI flags from argv.
|
|
11
|
+
* Returns structured options and remaining positional args.
|
|
12
|
+
*/
|
|
13
|
+
export interface CliFlags {
|
|
14
|
+
yes: boolean;
|
|
15
|
+
apps: string[];
|
|
16
|
+
allApps: boolean;
|
|
17
|
+
dryRun: boolean;
|
|
18
|
+
installed: boolean;
|
|
19
|
+
search?: string;
|
|
20
|
+
category?: string;
|
|
21
|
+
help: boolean;
|
|
22
|
+
version: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function parseFlags(argv: string[]): {
|
|
25
|
+
command?: string;
|
|
26
|
+
serverId?: string;
|
|
27
|
+
flags: CliFlags;
|
|
28
|
+
};
|
|
29
|
+
export declare function resolveAlias(command: string): string | undefined;
|
|
30
|
+
//# sourceMappingURL=utils.d.ts.map
|