@incultnitollc/mcpr 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -23,9 +23,10 @@ Node 20+ required.
23
23
  ## Usage
24
24
 
25
25
  ```sh
26
- mcpr search <query> # search by name / slug / description
27
- mcpr info <slug> # full detail for one server
28
- mcpr score <slug> # quality-score breakdown
26
+ mcpr search <query> # search by name / slug / description
27
+ mcpr info <slug> # full detail for one server
28
+ mcpr score <slug> # quality-score breakdown
29
+ mcpr install <slug> # write a server into a client config (mcpServers)
29
30
  ```
30
31
 
31
32
  ### Examples
@@ -37,9 +38,30 @@ mcpr info mcpr-ai-arclan-registry
37
38
  mcpr score mcpr-ai-arclan-registry
38
39
  ```
39
40
 
40
- `mcpr install` (cross-client config writer for Claude Code, Claude Desktop,
41
- Cursor, Windsurf, and VS Code) is on the v1.1 roadmap. The Registry is
42
- read-only from the CLI in v1.
41
+ ### `mcpr install <slug>`
42
+
43
+ Write a server into an MCP client config under `mcpServers`, deriving an `npx`
44
+ launch command from the server's npm package. Supported clients: **Claude
45
+ Desktop**, **Cline**. The target config is auto-detected; override it with
46
+ `--client`.
47
+
48
+ ```sh
49
+ mcpr install npm-figma-mcp # auto-detect client, write entry
50
+ mcpr install npm-figma-mcp --client claude-desktop # target one client
51
+ mcpr install npm-figma-mcp --dry-run # preview the diff, write nothing
52
+ mcpr install npm-figma-mcp --force # overwrite a differing entry
53
+ ```
54
+
55
+ | Flag | Effect |
56
+ |---|---|
57
+ | `--client <claude-desktop\|cline>` | Target one client instead of auto-detecting. |
58
+ | `--dry-run` | Print the config change; write nothing. |
59
+ | `--force` | Overwrite an existing entry whose values differ. |
60
+
61
+ The original config is copied to `<path>.bak.<unix-ts>` before every write.
62
+ Servers without a resolvable npm package print a manual-install link instead of
63
+ writing a broken config. Cursor, Windsurf, and VS Code MCP are on the v1.2
64
+ roadmap.
43
65
 
44
66
  ## Configuration
45
67
 
package/dist/cli.d.ts CHANGED
@@ -3,13 +3,13 @@
3
3
  * mcpr — MCP Registry CLI.
4
4
  *
5
5
  * Subcommands:
6
- * mcpr search <query> — search the registry by name/slug/description
7
- * mcpr info <slug> — print full server detail
8
- * mcpr score <slug> — print quality-score breakdown
6
+ * mcpr search <query> — search the registry by name/slug/description
7
+ * mcpr info <slug> — print full server detail
8
+ * mcpr score <slug> — print quality-score breakdown
9
+ * mcpr install <slug> — write a server into a client config (mcpServers)
9
10
  *
10
11
  * Reads the public Supabase project via the published anon key. No
11
- * credentials required at install time. `mcpr install` (cross-client
12
- * config writer) is intentionally out of scope for v1.
12
+ * credentials required.
13
13
  */
14
14
  export {};
15
15
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.js CHANGED
@@ -3,16 +3,19 @@
3
3
  * mcpr — MCP Registry CLI.
4
4
  *
5
5
  * Subcommands:
6
- * mcpr search <query> — search the registry by name/slug/description
7
- * mcpr info <slug> — print full server detail
8
- * mcpr score <slug> — print quality-score breakdown
6
+ * mcpr search <query> — search the registry by name/slug/description
7
+ * mcpr info <slug> — print full server detail
8
+ * mcpr score <slug> — print quality-score breakdown
9
+ * mcpr install <slug> — write a server into a client config (mcpServers)
9
10
  *
10
11
  * Reads the public Supabase project via the published anon key. No
11
- * credentials required at install time. `mcpr install` (cross-client
12
- * config writer) is intentionally out of scope for v1.
12
+ * credentials required.
13
13
  */
14
14
  import { createClient } from "@supabase/supabase-js";
15
15
  import { Command } from "commander";
16
+ import { resolveInstall } from "./lib/install-resolver.js";
17
+ import { CLIENT_IDS, configPathFor, detectClients, isClientId, } from "./lib/client-paths.js";
18
+ import { readConfig, mergeServer, serializeConfig, lineDiff, writeConfigAtomic, } from "./lib/config-writer.js";
16
19
  const REGISTRY_URL = process.env.MCPR_SUPABASE_URL ?? "https://kpqxrtsdcmwbszznpeem.supabase.co";
17
20
  // Public anon key for the MCP Registry Supabase project. Anon role only;
18
21
  // reads are governed by RLS. Safe to ship inside a published CLI.
@@ -233,6 +236,74 @@ function formatMs(v) {
233
236
  return "—";
234
237
  return `${Math.round(v)} ms`;
235
238
  }
239
+ async function cmdInstall(slug, opts) {
240
+ // Resolve targets first so a bad --client fails before any network call.
241
+ let targets;
242
+ if (opts.client) {
243
+ if (!isClientId(opts.client)) {
244
+ console.error(`Unknown client “${opts.client}”. Supported: ${CLIENT_IDS.join(", ")}.`);
245
+ return 2;
246
+ }
247
+ targets = [opts.client];
248
+ }
249
+ else {
250
+ targets = detectClients();
251
+ if (targets.length === 0) {
252
+ console.error(`No client config detected. Pass --client <${CLIENT_IDS.join("|")}> to choose one.`);
253
+ return 2;
254
+ }
255
+ }
256
+ const sb = getClient();
257
+ const server = await findServer(sb, slug);
258
+ if (!server) {
259
+ console.error(`No active server with slug “${slug}”.`);
260
+ return 2;
261
+ }
262
+ const version = await getLatestVersion(sb, server.id);
263
+ const resolved = await resolveInstall(version?.source_url ?? null);
264
+ if (!resolved.block) {
265
+ console.log(`No npm package found for “${slug}” — manual install required.`);
266
+ console.log(dim(` ${WEB_HOST}/servers/${encodeURIComponent(slug)}`));
267
+ return 1;
268
+ }
269
+ let wrote = false;
270
+ let blocked = false;
271
+ for (const client of targets) {
272
+ const path = configPathFor(client);
273
+ if (!path) {
274
+ console.error(`${client}: unsupported on this platform.`);
275
+ blocked = true;
276
+ continue;
277
+ }
278
+ const before = readConfig(path);
279
+ const merge = mergeServer(before, server.slug, resolved.block, opts.force ?? false);
280
+ if (merge.status === "noop") {
281
+ console.log(`${client}: “${server.slug}” already configured. ${dim(path)}`);
282
+ continue;
283
+ }
284
+ if (merge.status === "collision") {
285
+ console.error(`${client}: “${server.slug}” already exists with different values.`);
286
+ console.error(lineDiff(serializeConfig({ mcpServers: { [server.slug]: merge.existing } }), serializeConfig({ mcpServers: { [server.slug]: resolved.block } })));
287
+ console.error("Re-run with --force to overwrite.");
288
+ blocked = true;
289
+ continue;
290
+ }
291
+ if (opts.dryRun) {
292
+ console.log(`${client}: ${dim(path)}`);
293
+ console.log(lineDiff(serializeConfig(before), serializeConfig(merge.config)));
294
+ continue;
295
+ }
296
+ const { backup } = writeConfigAtomic(path, merge.config);
297
+ wrote = true;
298
+ console.log(`${client}: wrote “${server.slug}”. ${dim(path)}`);
299
+ if (backup)
300
+ console.log(dim(` backup ${backup}`));
301
+ }
302
+ if (wrote && resolved.source === "npm-resolved") {
303
+ console.log(dim(` resolved npm package “${resolved.packageName}” from source repo`));
304
+ }
305
+ return blocked ? 1 : 0;
306
+ }
236
307
  // ---------------------------------------------------------------------------
237
308
  // Commander entrypoint
238
309
  // ---------------------------------------------------------------------------
@@ -240,7 +311,7 @@ const program = new Command();
240
311
  program
241
312
  .name("mcpr")
242
313
  .description("MCP Registry CLI — search, inspect, and score MCP servers.")
243
- .version("0.1.0");
314
+ .version("0.2.0");
244
315
  program
245
316
  .command("search")
246
317
  .argument("<query>", "name, slug, or description keyword")
@@ -281,6 +352,22 @@ program
281
352
  process.exit(1);
282
353
  }
283
354
  });
355
+ program
356
+ .command("install")
357
+ .argument("<slug>", "server slug (use `mcpr search` to find one)")
358
+ .option("--client <client>", `target client: ${CLIENT_IDS.join(" | ")}`)
359
+ .option("--dry-run", "print the config change; write nothing")
360
+ .option("--force", "overwrite an existing entry for this server")
361
+ .description("Write a server into a client config (Claude Desktop, Cline)")
362
+ .action(async (slug, opts) => {
363
+ try {
364
+ process.exit(await cmdInstall(slug, opts));
365
+ }
366
+ catch (err) {
367
+ console.error(err.message);
368
+ process.exit(1);
369
+ }
370
+ });
284
371
  program.parseAsync(process.argv).catch((err) => {
285
372
  console.error(err.message);
286
373
  process.exit(1);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type ClientId = "claude-desktop" | "cline";
2
+ export declare const CLIENT_IDS: ClientId[];
3
+ export declare function isClientId(value: string): value is ClientId;
4
+ /** Expand a leading `~` (via home dir) and `%VAR%` tokens (via env). */
5
+ export declare function expandPath(raw: string, env?: NodeJS.ProcessEnv, home?: string): string;
6
+ /** Absolute config path for a client on a platform, or null if unsupported. */
7
+ export declare function configPathFor(client: ClientId, platform?: NodeJS.Platform): string | null;
8
+ /** Clients whose config file already exists on disk. */
9
+ export declare function detectClients(platform?: NodeJS.Platform): ClientId[];
10
+ //# sourceMappingURL=client-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-paths.d.ts","sourceRoot":"","sources":["../../src/lib/client-paths.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,QAAQ,GAAG,gBAAgB,GAAG,OAAO,CAAC;AAElD,eAAO,MAAM,UAAU,EAAE,QAAQ,EAAgC,CAAC;AAkBlE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAE3D;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,IAAI,GAAE,MAAkB,GACvB,MAAM,CAGR;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAC3B,MAAM,EAAE,QAAQ,EAChB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,GAAG,IAAI,CAGf;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAC3B,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,QAAQ,EAAE,CAKZ"}
@@ -0,0 +1,40 @@
1
+ // Per-OS x per-client config path matrix for `mcpr install`.
2
+ // v1.1 clients: Claude Desktop + Cline. (Cursor/Continue/VS Code -> v1.2.)
3
+ import { homedir } from "node:os";
4
+ import { existsSync } from "node:fs";
5
+ import { join } from "node:path";
6
+ export const CLIENT_IDS = ["claude-desktop", "cline"];
7
+ const MATRIX = {
8
+ "claude-desktop": {
9
+ darwin: "~/Library/Application Support/Claude/claude_desktop_config.json",
10
+ win32: "%APPDATA%\\Claude\\claude_desktop_config.json",
11
+ linux: "~/.config/Claude/claude_desktop_config.json",
12
+ },
13
+ cline: {
14
+ darwin: "~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json",
15
+ win32: "%APPDATA%\\Code\\User\\globalStorage\\saoudrizwan.claude-dev\\settings\\cline_mcp_settings.json",
16
+ linux: "~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json",
17
+ },
18
+ };
19
+ export function isClientId(value) {
20
+ return CLIENT_IDS.includes(value);
21
+ }
22
+ /** Expand a leading `~` (via home dir) and `%VAR%` tokens (via env). */
23
+ export function expandPath(raw, env = process.env, home = homedir()) {
24
+ if (raw.startsWith("~"))
25
+ return join(home, raw.slice(1));
26
+ return raw.replace(/%([^%]+)%/g, (_, key) => env[key] ?? "");
27
+ }
28
+ /** Absolute config path for a client on a platform, or null if unsupported. */
29
+ export function configPathFor(client, platform = process.platform) {
30
+ const raw = MATRIX[client]?.[platform];
31
+ return raw ? expandPath(raw) : null;
32
+ }
33
+ /** Clients whose config file already exists on disk. */
34
+ export function detectClients(platform = process.platform) {
35
+ return CLIENT_IDS.filter((c) => {
36
+ const p = configPathFor(c, platform);
37
+ return p ? existsSync(p) : false;
38
+ });
39
+ }
40
+ //# sourceMappingURL=client-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-paths.js","sourceRoot":"","sources":["../../src/lib/client-paths.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,2EAA2E;AAE3E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,CAAC,MAAM,UAAU,GAAe,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAElE,MAAM,MAAM,GAA+D;IACzE,gBAAgB,EAAE;QAChB,MAAM,EAAE,iEAAiE;QACzE,KAAK,EAAE,+CAA+C;QACtD,KAAK,EAAE,6CAA6C;KACrD;IACD,KAAK,EAAE;QACL,MAAM,EACJ,+GAA+G;QACjH,KAAK,EACH,iGAAiG;QACnG,KAAK,EACH,2FAA2F;KAC9F;CACF,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAQ,UAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,UAAU,CACxB,GAAW,EACX,MAAyB,OAAO,CAAC,GAAG,EACpC,OAAe,OAAO,EAAE;IAExB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAC3B,MAAgB,EAChB,WAA4B,OAAO,CAAC,QAAQ;IAE5C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,aAAa,CAC3B,WAA4B,OAAO,CAAC,QAAQ;IAE5C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACrC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { InstallBlock } from "./install-resolver.js";
2
+ export interface McpConfig {
3
+ mcpServers?: Record<string, unknown>;
4
+ [key: string]: unknown;
5
+ }
6
+ export type MergeStatus = "write" | "noop" | "collision";
7
+ export interface MergeResult {
8
+ status: MergeStatus;
9
+ /** Resulting config — identical to input for `noop` and `collision`. */
10
+ config: McpConfig;
11
+ /** Existing entry, present only when status is `collision`. */
12
+ existing?: unknown;
13
+ }
14
+ /** Read a config file, returning a seed config if it is missing or empty. */
15
+ export declare function readConfig(path: string): McpConfig;
16
+ /** Merge a server block into `mcpServers[key]` per the locked policy. */
17
+ export declare function mergeServer(config: McpConfig, key: string, block: InstallBlock, force: boolean): MergeResult;
18
+ /** Serialize a config the way it is written to disk (2-space, trailing newline). */
19
+ export declare function serializeConfig(config: McpConfig): string;
20
+ /**
21
+ * Unified +/- line diff between two text blocks (LCS-based, dependency-free).
22
+ * Unchanged lines are prefixed with two spaces.
23
+ */
24
+ export declare function lineDiff(before: string, after: string): string;
25
+ export interface WriteResult {
26
+ /** Path of the backup copy, or null if the original did not exist. */
27
+ backup: string | null;
28
+ }
29
+ /**
30
+ * Atomically write a config: tmp file -> backup original -> rename into place.
31
+ * Creates the parent directory if missing.
32
+ */
33
+ export declare function writeConfigAtomic(path: string, config: McpConfig): WriteResult;
34
+ //# sourceMappingURL=config-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-writer.d.ts","sourceRoot":"","sources":["../../src/lib/config-writer.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,wEAAwE;IACxE,MAAM,EAAE,SAAS,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAKlD;AAoBD,yEAAyE;AACzE,wBAAgB,WAAW,CACzB,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,OAAO,GACb,WAAW,CAab;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAmC9D;AAED,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,WAAW,CAqB9E"}
@@ -0,0 +1,116 @@
1
+ // Read, merge, preview, and atomically write MCP client config files.
2
+ //
3
+ // Merge policy (locked design): merge into `mcpServers`; if the target key
4
+ // already exists with different values, refuse unless `--force`. Every write
5
+ // backs the original up to `<path>.bak.<unix-ts>` first.
6
+ import { existsSync, readFileSync, writeFileSync, copyFileSync, renameSync, mkdirSync, statSync, chmodSync, } from "node:fs";
7
+ import { dirname } from "node:path";
8
+ /** Read a config file, returning a seed config if it is missing or empty. */
9
+ export function readConfig(path) {
10
+ if (!existsSync(path))
11
+ return { mcpServers: {} };
12
+ const raw = readFileSync(path, "utf8").trim();
13
+ if (!raw)
14
+ return { mcpServers: {} };
15
+ return JSON.parse(raw);
16
+ }
17
+ function stableStringify(value) {
18
+ return JSON.stringify(value, (_, v) => {
19
+ if (v && typeof v === "object" && !Array.isArray(v)) {
20
+ return Object.keys(v)
21
+ .sort()
22
+ .reduce((acc, k) => {
23
+ acc[k] = v[k];
24
+ return acc;
25
+ }, {});
26
+ }
27
+ return v;
28
+ });
29
+ }
30
+ function deepEqual(a, b) {
31
+ return stableStringify(a) === stableStringify(b);
32
+ }
33
+ /** Merge a server block into `mcpServers[key]` per the locked policy. */
34
+ export function mergeServer(config, key, block, force) {
35
+ const servers = { ...(config.mcpServers ?? {}) };
36
+ const existing = servers[key];
37
+ if (existing !== undefined && deepEqual(existing, block)) {
38
+ return { status: "noop", config };
39
+ }
40
+ if (existing !== undefined && !force) {
41
+ return { status: "collision", config, existing };
42
+ }
43
+ servers[key] = block;
44
+ return { status: "write", config: { ...config, mcpServers: servers } };
45
+ }
46
+ /** Serialize a config the way it is written to disk (2-space, trailing newline). */
47
+ export function serializeConfig(config) {
48
+ return JSON.stringify(config, null, 2) + "\n";
49
+ }
50
+ /**
51
+ * Unified +/- line diff between two text blocks (LCS-based, dependency-free).
52
+ * Unchanged lines are prefixed with two spaces.
53
+ */
54
+ export function lineDiff(before, after) {
55
+ const a = before.length ? before.split("\n") : [];
56
+ const b = after.length ? after.split("\n") : [];
57
+ const m = a.length;
58
+ const n = b.length;
59
+ const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
60
+ for (let i = m - 1; i >= 0; i--) {
61
+ for (let j = n - 1; j >= 0; j--) {
62
+ dp[i][j] =
63
+ a[i] === b[j]
64
+ ? dp[i + 1][j + 1] + 1
65
+ : Math.max(dp[i + 1][j], dp[i][j + 1]);
66
+ }
67
+ }
68
+ const out = [];
69
+ let i = 0;
70
+ let j = 0;
71
+ while (i < m && j < n) {
72
+ if (a[i] === b[j]) {
73
+ out.push(` ${a[i]}`);
74
+ i++;
75
+ j++;
76
+ }
77
+ else if (dp[i + 1][j] >= dp[i][j + 1]) {
78
+ out.push(`- ${a[i]}`);
79
+ i++;
80
+ }
81
+ else {
82
+ out.push(`+ ${b[j]}`);
83
+ j++;
84
+ }
85
+ }
86
+ while (i < m)
87
+ out.push(`- ${a[i++]}`);
88
+ while (j < n)
89
+ out.push(`+ ${b[j++]}`);
90
+ return out.join("\n");
91
+ }
92
+ /**
93
+ * Atomically write a config: tmp file -> backup original -> rename into place.
94
+ * Creates the parent directory if missing.
95
+ */
96
+ export function writeConfigAtomic(path, config) {
97
+ const dir = dirname(path);
98
+ if (!existsSync(dir))
99
+ mkdirSync(dir, { recursive: true });
100
+ // Preserve the original file mode — configs may legitimately be 0o600
101
+ // (e.g. when env blocks contain API keys), and a default-umask rename
102
+ // would silently widen them to 0o644.
103
+ const originalMode = existsSync(path) ? statSync(path).mode & 0o777 : null;
104
+ const tmp = `${path}.tmp.${process.pid}`;
105
+ writeFileSync(tmp, serializeConfig(config), "utf8");
106
+ if (originalMode !== null)
107
+ chmodSync(tmp, originalMode);
108
+ let backup = null;
109
+ if (existsSync(path)) {
110
+ backup = `${path}.bak.${Math.floor(Date.now() / 1000)}`;
111
+ copyFileSync(path, backup);
112
+ }
113
+ renameSync(tmp, path);
114
+ return { backup };
115
+ }
116
+ //# sourceMappingURL=config-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/lib/config-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface InstallBlock {
2
+ command: string;
3
+ args: string[];
4
+ env: Record<string, string>;
5
+ }
6
+ export type ResolveSource = "npm-direct" | "npm-resolved" | "none";
7
+ export interface ResolveResult {
8
+ block: InstallBlock | null;
9
+ source: ResolveSource;
10
+ packageName?: string;
11
+ }
12
+ /** Returns true if a package name is published on the npm registry. */
13
+ export type NpmExists = (pkg: string) => Promise<boolean>;
14
+ /**
15
+ * Extract an npm package name from an npmjs.com package URL.
16
+ * Handles scoped packages, e.g. `/package/@modelcontextprotocol/sdk`.
17
+ */
18
+ export declare function parseNpmPackage(sourceUrl: string): string | null;
19
+ /**
20
+ * Guess a package name from a github/gitlab repo URL: the repository segment,
21
+ * with a trailing `.git` stripped, lowercased.
22
+ */
23
+ export declare function repoNameGuess(sourceUrl: string): string | null;
24
+ /** Default npm-registry existence check, used outside tests. */
25
+ export declare function npmRegistryExists(pkg: string): Promise<boolean>;
26
+ /**
27
+ * Resolve an install block from a server's source_url.
28
+ * `npmExists` is injectable so tests never touch the network.
29
+ */
30
+ export declare function resolveInstall(sourceUrl: string | null, npmExists?: NpmExists): Promise<ResolveResult>;
31
+ //# sourceMappingURL=install-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/install-resolver.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,uEAAuE;AACvE,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAQ1D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI9D;AAED,gEAAgE;AAChE,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrE;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,GAAE,SAA6B,GACvC,OAAO,CAAC,aAAa,CAAC,CAcxB"}
@@ -0,0 +1,62 @@
1
+ // Derive a runnable MCP install block from a server's source_url.
2
+ //
3
+ // v1.1 strategy (Option A+, npm-resolve):
4
+ // - npmjs.com URL -> npx the named package directly (no network).
5
+ // - github/gitlab URL -> guess the package name from the repo, confirm it
6
+ // exists on the npm registry, and npx it if found.
7
+ // - anything else / not found -> null (caller prints a manual-install link).
8
+ //
9
+ // The correct long-term home is an `install_json` column populated at ingest
10
+ // (Option B, deferred to v1.2).
11
+ const NPM_REGISTRY = "https://registry.npmjs.org";
12
+ function npxBlock(pkg) {
13
+ return { command: "npx", args: ["-y", pkg], env: {} };
14
+ }
15
+ /**
16
+ * Extract an npm package name from an npmjs.com package URL.
17
+ * Handles scoped packages, e.g. `/package/@modelcontextprotocol/sdk`.
18
+ */
19
+ export function parseNpmPackage(sourceUrl) {
20
+ const m = sourceUrl.match(/npmjs\.com\/package\/(@[^/]+\/[^/?#]+|[^/?#]+)/i);
21
+ return m ? decodeURIComponent(m[1]) : null;
22
+ }
23
+ /**
24
+ * Guess a package name from a github/gitlab repo URL: the repository segment,
25
+ * with a trailing `.git` stripped, lowercased.
26
+ */
27
+ export function repoNameGuess(sourceUrl) {
28
+ const m = sourceUrl.match(/(?:github|gitlab)\.com\/[^/]+\/([^/?#]+)/i);
29
+ if (!m)
30
+ return null;
31
+ return m[1].replace(/\.git$/i, "").toLowerCase();
32
+ }
33
+ /** Default npm-registry existence check, used outside tests. */
34
+ export async function npmRegistryExists(pkg) {
35
+ try {
36
+ const res = await fetch(`${NPM_REGISTRY}/${pkg.replace("/", "%2F")}`, {
37
+ method: "GET",
38
+ });
39
+ return res.ok;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ /**
46
+ * Resolve an install block from a server's source_url.
47
+ * `npmExists` is injectable so tests never touch the network.
48
+ */
49
+ export async function resolveInstall(sourceUrl, npmExists = npmRegistryExists) {
50
+ if (!sourceUrl)
51
+ return { block: null, source: "none" };
52
+ const npmPkg = parseNpmPackage(sourceUrl);
53
+ if (npmPkg) {
54
+ return { block: npxBlock(npmPkg), source: "npm-direct", packageName: npmPkg };
55
+ }
56
+ const guess = repoNameGuess(sourceUrl);
57
+ if (guess && (await npmExists(guess))) {
58
+ return { block: npxBlock(guess), source: "npm-resolved", packageName: guess };
59
+ }
60
+ return { block: null, source: "none" };
61
+ }
62
+ //# sourceMappingURL=install-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-resolver.js","sourceRoot":"","sources":["../../src/lib/install-resolver.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,0CAA0C;AAC1C,wEAAwE;AACxE,4EAA4E;AAC5E,uDAAuD;AACvD,+EAA+E;AAC/E,EAAE;AACF,6EAA6E;AAC7E,gCAAgC;AAmBhC,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAElD,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC7E,OAAO,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACvE,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACpD,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW;IACjD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACpE,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAwB,EACxB,YAAuB,iBAAiB;IAExC,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAEvD,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAChF,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,KAAK,IAAI,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAChF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACzC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@incultnitollc/mcpr",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "MCP Registry CLI — search, inspect, and score MCP servers across clients.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -19,7 +19,7 @@
19
19
  "build": "tsc -p tsconfig.json",
20
20
  "typecheck": "tsc -p tsconfig.json --noEmit",
21
21
  "lint": "eslint . --quiet",
22
- "test": "echo \"(no tests yet)\" && exit 0"
22
+ "test": "node --import tsx --test test/*.test.ts"
23
23
  },
24
24
  "homepage": "https://mcp-registry-dh5.pages.dev",
25
25
  "repository": {
@@ -37,13 +37,13 @@
37
37
  "license": "MIT",
38
38
  "author": "Incultnito LLC",
39
39
  "dependencies": {
40
- "@mcpr/types": "workspace:*",
41
40
  "@supabase/supabase-js": "^2.58.0",
42
41
  "commander": "^14.0.3"
43
42
  },
44
43
  "devDependencies": {
45
44
  "@mcpr/tsconfig": "workspace:*",
46
45
  "@types/node": "^22.19.17",
46
+ "tsx": "^4.20.4",
47
47
  "typescript": "^5.7.3"
48
48
  }
49
49
  }