mcpick 0.0.20 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/.github/copilot-instructions.md +39 -21
  2. package/CHANGELOG.md +24 -4
  3. package/CONTEXT.md +49 -0
  4. package/README.md +149 -309
  5. package/dist/{add-BDyaBew0.js → add-Bok0qbXi.js} +4 -5
  6. package/dist/{add-json-BjgzdeG-.js → add-json-C44vy2A_.js} +3 -3
  7. package/dist/{atomic-write-BqEykHp9.js → atomic-write-4lANmzsO.js} +1 -1
  8. package/dist/{backup-DSDhHI5f.js → backup-bdg6dvsb.js} +5 -5
  9. package/dist/{cache-D6kd7qE8.js → cache-CSUcGdZP.js} +3 -3
  10. package/dist/cli-avr5R1LO.js +111 -0
  11. package/dist/clients-CSQgqHzb.js +30 -0
  12. package/dist/{clone-DYKPEsar.js → clone-CQ0skkT6.js} +6 -7
  13. package/dist/{config-DijVdEFn.js → config-BhX4eAgg.js} +4 -4
  14. package/dist/{dev-DRJRNp7y.js → dev-CTDg5g-c.js} +6 -6
  15. package/dist/{disable-xJXZfUR_.js → disable-DLlOj7sc.js} +3 -4
  16. package/dist/{enable-RrpcN6la.js → enable-CGFYYC2A.js} +3 -4
  17. package/dist/{get-Bb1eOOIZ.js → get-l-eAJhBy.js} +3 -3
  18. package/dist/{hooks-Bmn7pUZa.js → hooks-BWZ_Kgx3.js} +4 -4
  19. package/dist/index.js +1485 -318
  20. package/dist/list-By--kltj.js +100 -0
  21. package/dist/{marketplace-DcKk5dc1.js → marketplace-DdiKDDKK.js} +4 -5
  22. package/dist/output-BgN9Uuxf.js +17 -0
  23. package/dist/{paths-BPISiJi4.js → paths-6wrIM8yh.js} +1 -1
  24. package/dist/{plugin-cache-Bby9Dxm9.js → plugin-cache-DKcW8LGV.js} +3 -3
  25. package/dist/{plugins-Dc7DN6R_.js → plugins-CsXE8AH4.js} +5 -5
  26. package/dist/{profile-CX97sMGp.js → profile-DzGPsdsl.js} +5 -5
  27. package/dist/redact-Dltz2gde.js +88 -0
  28. package/dist/{reload-CYDhkCVZ.js → reload-C29-vuvy.js} +2 -2
  29. package/dist/{remove-D1owHLhG.js → remove-B5q4rQRU.js} +3 -4
  30. package/dist/{reset-project-choices-BfRSNN3m.js → reset-project-choices-Dhh4CxIC.js} +3 -3
  31. package/dist/{restore-DdMfUljI.js → restore-BI8aiszM.js} +6 -6
  32. package/dist/{settings-DEcWtzLE.js → settings-CZR8bVfh.js} +5 -5
  33. package/dist/skills-DPBDmION.js +216 -0
  34. package/dist/{validation-xMlbgGCF.js → validation-qWlF51fw.js} +1 -1
  35. package/package.json +20 -6
  36. package/dist/claude-cli-DnmBJrjg.js +0 -445
  37. package/dist/cli-CsFfnWBo.js +0 -84
  38. package/dist/hook-state-Di8lUsPr.js +0 -171
  39. package/dist/list-B8YeDWt6.js +0 -64
  40. package/dist/output-BchYq0mR.js +0 -15
  41. package/dist/profile-DkY_lBEm.js +0 -70
  42. package/dist/redact-O35tjnRD.js +0 -26
  43. package/dist/registry-CfUKT7_C.js +0 -92
@@ -1,7 +1,6 @@
1
- import { n as validate_mcp_server } from "./validation-xMlbgGCF.js";
2
- import { t as add_server_to_registry } from "./registry-CfUKT7_C.js";
3
- import { t as add_mcp_via_cli } from "./claude-cli-DnmBJrjg.js";
4
- import { n as output, t as error } from "./output-BchYq0mR.js";
1
+ import { n as validate_mcp_server } from "./validation-qWlF51fw.js";
2
+ import { d as add_mcp_via_cli, w as add_server_to_registry } from "./index.js";
3
+ import { n as output, t as error } from "./output-BgN9Uuxf.js";
5
4
  import { defineCommand } from "citty";
6
5
  //#region src/cli/commands/add.ts
7
6
  var add_default = defineCommand({
@@ -110,4 +109,4 @@ function parse_key_value_pairs(input) {
110
109
  //#endregion
111
110
  export { add_default as default };
112
111
 
113
- //# sourceMappingURL=add-BDyaBew0.js.map
112
+ //# sourceMappingURL=add-Bok0qbXi.js.map
@@ -1,5 +1,5 @@
1
- import { u as mcp_add_json_via_cli } from "./claude-cli-DnmBJrjg.js";
2
- import { n as output, t as error } from "./output-BchYq0mR.js";
1
+ import { _ as mcp_add_json_via_cli } from "./index.js";
2
+ import { n as output, t as error } from "./output-BgN9Uuxf.js";
3
3
  import { defineCommand } from "citty";
4
4
  //#region src/cli/commands/add-json.ts
5
5
  var add_json_default = defineCommand({
@@ -55,4 +55,4 @@ var add_json_default = defineCommand({
55
55
  //#endregion
56
56
  export { add_json_default as default };
57
57
 
58
- //# sourceMappingURL=add-json-BjgzdeG-.js.map
58
+ //# sourceMappingURL=add-json-C44vy2A_.js.map
@@ -23,4 +23,4 @@ async function atomic_json_write(file_path, merge) {
23
23
  //#endregion
24
24
  export { atomic_json_write as t };
25
25
 
26
- //# sourceMappingURL=atomic-write-BqEykHp9.js.map
26
+ //# sourceMappingURL=atomic-write-4lANmzsO.js.map
@@ -1,7 +1,7 @@
1
- import { m as get_plugin_backup_filename, n as get_backup_filename, r as get_backups_dir, t as ensure_directory_exists } from "./paths-BPISiJi4.js";
2
- import { s as read_claude_config } from "./config-DijVdEFn.js";
3
- import { a as read_claude_settings } from "./settings-DEcWtzLE.js";
4
- import { n as output } from "./output-BchYq0mR.js";
1
+ import { m as get_plugin_backup_filename, n as get_backup_filename, r as get_backups_dir, t as ensure_directory_exists } from "./paths-6wrIM8yh.js";
2
+ import { s as read_claude_config } from "./config-BhX4eAgg.js";
3
+ import { a as read_claude_settings } from "./settings-CZR8bVfh.js";
4
+ import { n as output } from "./output-BgN9Uuxf.js";
5
5
  import { readdir, unlink, writeFile } from "node:fs/promises";
6
6
  import { join } from "node:path";
7
7
  import { defineCommand } from "citty";
@@ -61,4 +61,4 @@ var backup_default = defineCommand({
61
61
  //#endregion
62
62
  export { backup_default as default };
63
63
 
64
- //# sourceMappingURL=backup-DSDhHI5f.js.map
64
+ //# sourceMappingURL=backup-bdg6dvsb.js.map
@@ -1,5 +1,5 @@
1
- import { a as list_linked_plugins, c as read_installed_plugins, d as refresh_all_marketplaces, f as scan_all_cache_keys, i as link_local_plugin, n as clear_plugin_caches, p as unlink_local_plugin, r as get_cached_plugins_info, t as clean_orphaned_versions } from "./plugin-cache-Bby9Dxm9.js";
2
- import { n as output, t as error } from "./output-BchYq0mR.js";
1
+ import { a as list_linked_plugins, c as read_installed_plugins, d as refresh_all_marketplaces, f as scan_all_cache_keys, i as link_local_plugin, n as clear_plugin_caches, p as unlink_local_plugin, r as get_cached_plugins_info, t as clean_orphaned_versions } from "./plugin-cache-DKcW8LGV.js";
2
+ import { n as output, t as error } from "./output-BgN9Uuxf.js";
3
3
  import { defineCommand } from "citty";
4
4
  var cache_default = defineCommand({
5
5
  meta: {
@@ -223,4 +223,4 @@ var cache_default = defineCommand({
223
223
  //#endregion
224
224
  export { cache_default as default };
225
225
 
226
- //# sourceMappingURL=cache-D6kd7qE8.js.map
226
+ //# sourceMappingURL=cache-CSUcGdZP.js.map
@@ -0,0 +1,111 @@
1
+ import { defineCommand, renderUsage, runMain } from "citty";
2
+ //#region src/cli/index.ts
3
+ const main = defineCommand({
4
+ meta: {
5
+ name: "mcpick",
6
+ description: "Vendor-neutral MCP configuration manager with first-class Claude Code support"
7
+ },
8
+ subCommands: {
9
+ list: () => import("./list-By--kltj.js").then((m) => m.default),
10
+ enable: () => import("./enable-CGFYYC2A.js").then((m) => m.default),
11
+ disable: () => import("./disable-DLlOj7sc.js").then((m) => m.default),
12
+ clients: () => import("./clients-CSQgqHzb.js").then((m) => m.default),
13
+ remove: () => import("./remove-B5q4rQRU.js").then((m) => m.default),
14
+ add: () => import("./add-Bok0qbXi.js").then((m) => m.default),
15
+ "add-json": () => import("./add-json-C44vy2A_.js").then((m) => m.default),
16
+ clone: () => import("./clone-CQ0skkT6.js").then((m) => m.default),
17
+ get: () => import("./get-l-eAJhBy.js").then((m) => m.default),
18
+ "reset-project-choices": () => import("./reset-project-choices-Dhh4CxIC.js").then((m) => m.default),
19
+ backup: () => import("./backup-bdg6dvsb.js").then((m) => m.default),
20
+ restore: () => import("./restore-BI8aiszM.js").then((m) => m.default),
21
+ profile: () => import("./profile-DzGPsdsl.js").then((m) => m.default),
22
+ skills: () => import("./skills-DPBDmION.js").then((m) => m.default),
23
+ plugins: () => import("./plugins-CsXE8AH4.js").then((m) => m.default),
24
+ hooks: () => import("./hooks-BWZ_Kgx3.js").then((m) => m.default),
25
+ cache: () => import("./cache-CSUcGdZP.js").then((m) => m.default),
26
+ dev: () => import("./dev-CTDg5g-c.js").then((m) => m.default),
27
+ marketplace: () => import("./marketplace-DdiKDDKK.js").then((m) => m.default),
28
+ reload: () => import("./reload-C29-vuvy.js").then((m) => m.default)
29
+ }
30
+ });
31
+ /**
32
+ * Custom help renderer that appends workflow guidance and examples
33
+ * after citty's standard help output. This is critical for LLM agents
34
+ * that rely on --help output to understand multi-step workflows.
35
+ */
36
+ async function show_usage_with_examples(cmd, parent) {
37
+ const base = await renderUsage(cmd, parent);
38
+ if ((await (typeof cmd.meta === "function" ? cmd.meta() : cmd.meta))?.name === "mcpick") console.log(base + "\n" + WORKFLOW_SECTION + "\n" + CONCEPTS_SECTION + "\n" + EXAMPLES_SECTION + "\n");
39
+ else console.log(base + "\n");
40
+ }
41
+ const WORKFLOW_SECTION = `
42
+ \x1b[4m\x1b[1mWORKFLOW\x1b[22m\x1b[24m MCPick has two vendor-neutral layers and one Claude Code-specific layer.
43
+
44
+ MCP servers: toggle configured servers per client with mcpick list/enable/disable/clients.
45
+ Skills: install portable SKILL.md packs through the external skills CLI via mcpick skills.
46
+ Claude Code plugins/hooks/marketplaces: client-specific commands under plugins/hooks/marketplace/cache.`;
47
+ const CONCEPTS_SECTION = `
48
+ \x1b[4m\x1b[1mCONCEPTS\x1b[22m\x1b[24m
49
+
50
+ Marketplace Claude Code-specific plugin catalog hosted on GitHub, GitLab, or locally
51
+ Plugin Claude Code bundle containing any mix of: skills, hooks, agents, MCP servers
52
+ Skill Portable SKILL.md instruction pack installed into one or more agent clients
53
+ MCP server A tool server providing external capabilities to an AI client
54
+ MCP client An application that loads MCP server config (Claude Code, Gemini CLI, VS Code, Cursor, OpenCode, Pi via pi-mcp-adapter, etc.)
55
+ Hook An event handler that runs on tool use, session start, etc.
56
+ Profile A saved snapshot of your MCP server and plugin configuration`;
57
+ const EXAMPLES_SECTION = `
58
+ \x1b[4m\x1b[1mEXAMPLES\x1b[22m\x1b[24m
59
+
60
+ Add a marketplace from GitHub (owner/repo):
61
+ mcpick marketplace add spences10/claude-code-toolkit
62
+
63
+ Add a marketplace from a full URL:
64
+ mcpick marketplace add https://github.com/spences10/claude-code-toolkit
65
+
66
+ Install a plugin from a marketplace:
67
+ mcpick plugins install my-plugin@claude-code-toolkit
68
+
69
+ List all installed plugins and their status:
70
+ mcpick plugins list
71
+
72
+ Toggle an MCP server on or off:
73
+ mcpick enable my-server
74
+ mcpick disable my-server
75
+
76
+ List all MCP servers for Claude Code:
77
+ mcpick list
78
+
79
+ List servers for another client:
80
+ mcpick list --client gemini-cli --scope project
81
+ mcpick list --client opencode --scope project
82
+ mcpick list --client pi --scope user
83
+
84
+ Show supported client config locations:
85
+ mcpick clients
86
+
87
+ List portable skills installed for Pi:
88
+ mcpick skills list --agent pi --json
89
+
90
+ See skills available from a repo without installing:
91
+ mcpick skills add spences10/skills --list
92
+
93
+ Install one portable skill for Pi:
94
+ mcpick skills add spences10/skills --agent pi --skill svelte-runes --yes
95
+
96
+ Install all portable skills for OpenCode globally:
97
+ mcpick skills add spences10/skills --agent opencode --skill '*' --global --yes
98
+
99
+ Update portable skills non-interactively:
100
+ mcpick skills update --global --yes
101
+
102
+ Remove a portable skill for Pi:
103
+ mcpick skills remove svelte-runes --agent pi --yes
104
+
105
+ Prefer --json for machine-readable output where supported. MCPick redacts known secret patterns before printing.
106
+ Run without arguments to launch the interactive TUI (not suitable for LLM agents).`;
107
+ const run = () => runMain(main, { showUsage: show_usage_with_examples });
108
+ //#endregion
109
+ export { run };
110
+
111
+ //# sourceMappingURL=cli-avr5R1LO.js.map
@@ -0,0 +1,30 @@
1
+ import { j as list_client_locations } from "./index.js";
2
+ import { n as output } from "./output-BgN9Uuxf.js";
3
+ import { defineCommand } from "citty";
4
+ //#region src/cli/commands/clients.ts
5
+ var clients_default = defineCommand({
6
+ meta: {
7
+ name: "clients",
8
+ description: "List supported MCP clients and known config locations"
9
+ },
10
+ args: { json: {
11
+ type: "boolean",
12
+ description: "Output as JSON",
13
+ default: false
14
+ } },
15
+ async run({ args }) {
16
+ const locations = await list_client_locations();
17
+ if (args.json) {
18
+ output(locations, true);
19
+ return;
20
+ }
21
+ for (const location of locations) {
22
+ const status = location.exists ? "found" : "missing";
23
+ console.log(`${location.client}:${location.scope} ${status} ${location.path}`);
24
+ }
25
+ }
26
+ });
27
+ //#endregion
28
+ export { clients_default as default };
29
+
30
+ //# sourceMappingURL=clients-CSQgqHzb.js.map
@@ -1,9 +1,8 @@
1
- import { n as validate_mcp_server } from "./validation-xMlbgGCF.js";
2
- import { t as add_server_to_registry } from "./registry-CfUKT7_C.js";
3
- import { t as add_mcp_via_cli } from "./claude-cli-DnmBJrjg.js";
4
- import { i as find_server_in_scope, r as detect_server_scope } from "./config-DijVdEFn.js";
5
- import { n as output, t as error } from "./output-BchYq0mR.js";
6
- import { t as redact_server } from "./redact-O35tjnRD.js";
1
+ import { n as validate_mcp_server } from "./validation-qWlF51fw.js";
2
+ import { i as find_server_in_scope, r as detect_server_scope } from "./config-BhX4eAgg.js";
3
+ import { n as redact_server } from "./redact-Dltz2gde.js";
4
+ import { d as add_mcp_via_cli, w as add_server_to_registry } from "./index.js";
5
+ import { n as output, t as error } from "./output-BgN9Uuxf.js";
7
6
  import { defineCommand } from "citty";
8
7
  //#region src/cli/commands/clone.ts
9
8
  var clone_default = defineCommand({
@@ -85,4 +84,4 @@ var clone_default = defineCommand({
85
84
  //#endregion
86
85
  export { clone_default as default };
87
86
 
88
- //# sourceMappingURL=clone-DYKPEsar.js.map
87
+ //# sourceMappingURL=clone-CQ0skkT6.js.map
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
2
- import { i as get_claude_config_path, o as get_current_project_path, v as get_project_mcp_json_path } from "./paths-BPISiJi4.js";
3
- import { t as validate_claude_config } from "./validation-xMlbgGCF.js";
4
- import { t as atomic_json_write } from "./atomic-write-BqEykHp9.js";
2
+ import { t as atomic_json_write } from "./atomic-write-4lANmzsO.js";
3
+ import { i as get_claude_config_path, o as get_current_project_path, v as get_project_mcp_json_path } from "./paths-6wrIM8yh.js";
4
+ import { t as validate_claude_config } from "./validation-qWlF51fw.js";
5
5
  import { access, readFile } from "node:fs/promises";
6
6
  //#region src/core/config.ts
7
7
  var config_exports = /* @__PURE__ */ __exportAll({
@@ -173,4 +173,4 @@ async function get_enabled_servers_for_scope(scope) {
173
173
  //#endregion
174
174
  export { get_enabled_servers as a, write_claude_config as c, find_server_in_scope as i, create_config_from_servers as n, get_enabled_servers_for_scope as o, detect_server_scope as r, read_claude_config as s, config_exports as t };
175
175
 
176
- //# sourceMappingURL=config-DijVdEFn.js.map
176
+ //# sourceMappingURL=config-BhX4eAgg.js.map
@@ -1,8 +1,8 @@
1
- import { i as get_claude_config_path, o as get_current_project_path, s as get_dev_overrides_path, v as get_project_mcp_json_path } from "./paths-BPISiJi4.js";
2
- import { t as atomic_json_write } from "./atomic-write-BqEykHp9.js";
3
- import { i as find_server_in_scope, r as detect_server_scope } from "./config-DijVdEFn.js";
4
- import { n as output, t as error } from "./output-BchYq0mR.js";
5
- import { n as redact_server_base } from "./redact-O35tjnRD.js";
1
+ import { t as atomic_json_write } from "./atomic-write-4lANmzsO.js";
2
+ import { i as get_claude_config_path, o as get_current_project_path, s as get_dev_overrides_path, v as get_project_mcp_json_path } from "./paths-6wrIM8yh.js";
3
+ import { i as find_server_in_scope, r as detect_server_scope } from "./config-BhX4eAgg.js";
4
+ import { r as redact_server_base } from "./redact-Dltz2gde.js";
5
+ import { n as output, t as error } from "./output-BgN9Uuxf.js";
6
6
  import { readFile } from "node:fs/promises";
7
7
  import { defineCommand } from "citty";
8
8
  //#region src/core/dev-override.ts
@@ -262,4 +262,4 @@ var dev_default = defineCommand({
262
262
  //#endregion
263
263
  export { dev_default as default };
264
264
 
265
- //# sourceMappingURL=dev-DRJRNp7y.js.map
265
+ //# sourceMappingURL=dev-CTDg5g-c.js.map
@@ -1,6 +1,5 @@
1
- import { n as get_all_available_servers } from "./registry-CfUKT7_C.js";
2
- import { p as remove_mcp_via_cli } from "./claude-cli-DnmBJrjg.js";
3
- import { t as error } from "./output-BchYq0mR.js";
1
+ import { T as get_all_available_servers, b as remove_mcp_via_cli } from "./index.js";
2
+ import { t as error } from "./output-BgN9Uuxf.js";
4
3
  import { defineCommand } from "citty";
5
4
  //#region src/cli/commands/disable.ts
6
5
  var disable_default = defineCommand({
@@ -36,4 +35,4 @@ var disable_default = defineCommand({
36
35
  //#endregion
37
36
  export { disable_default as default };
38
37
 
39
- //# sourceMappingURL=disable-xJXZfUR_.js.map
38
+ //# sourceMappingURL=disable-DLlOj7sc.js.map
@@ -1,6 +1,5 @@
1
- import { n as get_all_available_servers } from "./registry-CfUKT7_C.js";
2
- import { t as add_mcp_via_cli } from "./claude-cli-DnmBJrjg.js";
3
- import { t as error } from "./output-BchYq0mR.js";
1
+ import { T as get_all_available_servers, d as add_mcp_via_cli } from "./index.js";
2
+ import { t as error } from "./output-BgN9Uuxf.js";
4
3
  import { defineCommand } from "citty";
5
4
  //#region src/cli/commands/enable.ts
6
5
  var enable_default = defineCommand({
@@ -37,4 +36,4 @@ var enable_default = defineCommand({
37
36
  //#endregion
38
37
  export { enable_default as default };
39
38
 
40
- //# sourceMappingURL=enable-RrpcN6la.js.map
39
+ //# sourceMappingURL=enable-CGFYYC2A.js.map
@@ -1,5 +1,5 @@
1
- import { d as mcp_get_via_cli } from "./claude-cli-DnmBJrjg.js";
2
- import { n as output, t as error } from "./output-BchYq0mR.js";
1
+ import { v as mcp_get_via_cli } from "./index.js";
2
+ import { n as output, t as error } from "./output-BgN9Uuxf.js";
3
3
  import { defineCommand } from "citty";
4
4
  //#region src/cli/commands/get.ts
5
5
  var get_default = defineCommand({
@@ -38,4 +38,4 @@ var get_default = defineCommand({
38
38
  //#endregion
39
39
  export { get_default as default };
40
40
 
41
- //# sourceMappingURL=get-Bb1eOOIZ.js.map
41
+ //# sourceMappingURL=get-l-eAJhBy.js.map
@@ -1,6 +1,6 @@
1
- import { o as remove_hook, r as get_all_hooks, t as add_hook } from "./settings-DEcWtzLE.js";
2
- import { a as redisable_restored_hooks, i as read_disabled_hooks, n as disable_plugin_hook, r as enable_plugin_hook, t as check_restored_hooks } from "./hook-state-Di8lUsPr.js";
3
- import { n as output, t as error } from "./output-BchYq0mR.js";
1
+ import { o as remove_hook, r as get_all_hooks, t as add_hook } from "./settings-CZR8bVfh.js";
2
+ import { c as enable_plugin_hook, l as read_disabled_hooks, o as check_restored_hooks, s as disable_plugin_hook, u as redisable_restored_hooks } from "./index.js";
3
+ import { n as output, t as error } from "./output-BgN9Uuxf.js";
4
4
  import { defineCommand } from "citty";
5
5
  var hooks_default = defineCommand({
6
6
  meta: {
@@ -277,4 +277,4 @@ var hooks_default = defineCommand({
277
277
  //#endregion
278
278
  export { hooks_default as default };
279
279
 
280
- //# sourceMappingURL=hooks-Bmn7pUZa.js.map
280
+ //# sourceMappingURL=hooks-BWZ_Kgx3.js.map