mcpman 0.8.0 → 0.9.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
@@ -439,6 +439,83 @@ mcpman rollback 2 # restore specific snapshot
439
439
 
440
440
  Snapshots are created automatically before every lockfile write. Keeps the last 5 snapshots in `~/.mcpman/rollback/`. After rollback, run `mcpman sync` to apply to all clients.
441
441
 
442
+ ### `validate [--client <name>]`
443
+
444
+ Validate lockfile schema and client config JSON for correctness.
445
+
446
+ ```sh
447
+ mcpman validate # validate lockfile + all clients
448
+ mcpman validate --client cursor # validate specific client only
449
+ mcpman validate --json # machine-readable output
450
+ ```
451
+
452
+ Checks: required fields (name, version, source, command, args), valid JSON structure, mcpServers entries have command+args. Exits 1 if any errors found. Distinct from `doctor` (which checks runtime health).
453
+
454
+ ### `status [--server <name>]`
455
+
456
+ Show live process status of all installed MCP servers.
457
+
458
+ ```sh
459
+ mcpman status # check all servers
460
+ mcpman status --server my-server # check specific server
461
+ mcpman status --json # JSON output
462
+ ```
463
+
464
+ Probes each server with a JSON-RPC `initialize` call (3s timeout). Reports: alive/dead status, response time, and error details.
465
+
466
+ ### `replay [index]`
467
+
468
+ Re-run previous CLI commands from history.
469
+
470
+ ```sh
471
+ mcpman replay --list # show last 20 commands
472
+ mcpman replay 0 # re-run most recent command
473
+ mcpman replay 5 # re-run 5th command
474
+ ```
475
+
476
+ Maintains a ring buffer of the last 50 commands at `~/.mcpman/history.json`. Each entry includes the command, arguments, and timestamp.
477
+
478
+ ### `alias <add|remove|list>`
479
+
480
+ Create short aliases for frequently used commands.
481
+
482
+ ```sh
483
+ mcpman alias add dev "group run dev-servers"
484
+ mcpman alias add fs "install @modelcontextprotocol/server-filesystem"
485
+ mcpman alias remove dev
486
+ mcpman alias list
487
+ ```
488
+
489
+ Aliases stored in `~/.mcpman/aliases.json`. Unlike groups (server batches), aliases are command-line shorthands.
490
+
491
+ ### `template <save|apply|list|delete>`
492
+
493
+ Save and share install templates for team onboarding.
494
+
495
+ ```sh
496
+ mcpman template save myteam # snapshot current servers
497
+ mcpman template save myteam -d "Team setup"
498
+ mcpman template apply myteam # print install commands
499
+ mcpman template list # show all templates
500
+ mcpman template delete myteam # remove template
501
+ ```
502
+
503
+ Templates stored in `~/.mcpman/templates/`. Unlike `export` (full migration bundle with vault+plugins), templates are lightweight server presets for sharing.
504
+
505
+ ### `notify <add|remove|list|test>`
506
+
507
+ Configure webhook and shell hooks for server lifecycle events.
508
+
509
+ ```sh
510
+ mcpman notify add --event install --webhook https://hooks.example.com/mcp
511
+ mcpman notify add --event health-fail --shell "echo alert | mail admin"
512
+ mcpman notify list # show all hooks
513
+ mcpman notify remove 0 # remove hook by index
514
+ mcpman notify test install # fire test event
515
+ ```
516
+
517
+ Events: `install`, `remove`, `update`, `health-fail`. Webhooks use native `fetch()`, shell hooks use `execSync`. Hooks stored in `~/.mcpman/notify.json`.
518
+
442
519
  ---
443
520
 
444
521
  ## Comparison
@@ -474,6 +551,12 @@ Snapshots are created automatically before every lockfile write. Keeps the last
474
551
  | Server groups | Batch install/run tags | None | None |
475
552
  | Version pinning | `pin`/`unpin` CLI | None | None |
476
553
  | Rollback | Auto-snapshot + restore | None | None |
554
+ | Config validation | Schema + JSON checks | None | None |
555
+ | Live status | Process probe + response time | None | None |
556
+ | Command replay | History ring buffer | None | None |
557
+ | Command aliases | Shorthand definitions | None | None |
558
+ | Install templates | Sharable server presets | None | None |
559
+ | Event notifications | Webhook + shell hooks | None | None |
477
560
 
478
561
  ---
479
562
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getRollbackDir
4
- } from "./chunk-AOCGFOA6.js";
4
+ } from "./chunk-DSCBWQ3W.js";
5
5
 
6
6
  // src/core/lockfile.ts
7
7
  import fs2 from "fs";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  resolveConfigPath
4
- } from "./chunk-AOCGFOA6.js";
4
+ } from "./chunk-DSCBWQ3W.js";
5
5
 
6
6
  // src/clients/base-client-handler.ts
7
7
  import fs from "fs";
@@ -30,6 +30,18 @@ function getPinsFile() {
30
30
  function getRollbackDir() {
31
31
  return path.join(getMcpmanDir(), "rollback");
32
32
  }
33
+ function getHistoryFile() {
34
+ return path.join(getMcpmanDir(), "history.json");
35
+ }
36
+ function getAliasesFile() {
37
+ return path.join(getMcpmanDir(), "aliases.json");
38
+ }
39
+ function getTemplatesDir() {
40
+ return path.join(getMcpmanDir(), "templates");
41
+ }
42
+ function getNotifyFile() {
43
+ return path.join(getMcpmanDir(), "notify.json");
44
+ }
33
45
  function getAppDataDir() {
34
46
  const home = getHomedir();
35
47
  if (process.platform === "darwin") {
@@ -76,5 +88,9 @@ export {
76
88
  getGroupsFile,
77
89
  getPinsFile,
78
90
  getRollbackDir,
91
+ getHistoryFile,
92
+ getAliasesFile,
93
+ getTemplatesDir,
94
+ getNotifyFile,
79
95
  resolveConfigPath
80
96
  };
@@ -3,8 +3,8 @@ import {
3
3
  getAllClientTypes,
4
4
  getClient,
5
5
  getInstalledClients
6
- } from "./chunk-XPYCEHZZ.js";
7
- import "./chunk-AOCGFOA6.js";
6
+ } from "./chunk-CC7ICP7U.js";
7
+ import "./chunk-DSCBWQ3W.js";
8
8
  export {
9
9
  getAllClientTypes,
10
10
  getClient,