Skip to content

Add disable, enable, completions, and alias commands#2

Merged
m1ngshum merged 4 commits intomainfrom
claude/quick-win-features-1bEvo
Apr 5, 2026
Merged

Add disable, enable, completions, and alias commands#2
m1ngshum merged 4 commits intomainfrom
claude/quick-win-features-1bEvo

Conversation

@m1ngshum
Copy link
Copy Markdown
Member

@m1ngshum m1ngshum commented Apr 5, 2026

What does this PR do?

This PR adds four new commands to mcpm:

  1. disable <name> – Disables an MCP server across all (or a specific) client config files by setting "disabled": true on the entry. The server remains in config but won't be loaded by the client.

  2. enable <name> – Re-enables a previously disabled MCP server by removing the "disabled": true flag.

  3. completions <shell> – Generates shell completion scripts for bash, zsh, and fish. Users can pipe the output into their shell config to enable tab-completion for mcpm commands and arguments.

  4. alias [args...] – Creates short aliases for long MCP server names (e.g., mcpm alias fs io.github.domdomegg/filesystem-mcp). Aliases are stored in ~/.mcpm/aliases.json and can be resolved automatically in install, info, remove, enable, and disable commands.

The implementation includes:

  • New setServerDisabled() method in BaseAdapter to toggle the disabled flag on server entries
  • A new disabled?: boolean field in McpServerEntry interface
  • Comprehensive unit tests for all new commands and the aliases store
  • Dependency injection pattern for testability
  • Updated list command to display server status (enabled/disabled)

How to test

  • pnpm test passes
  • pnpm typecheck passes

All new functionality is covered by unit tests:

  • src/__tests__/commands/disable.test.ts – Tests for disable command
  • src/__tests__/commands/enable.test.ts – Tests for enable command
  • src/__tests__/commands/completions.test.ts – Tests for completions command
  • src/__tests__/commands/alias.test.ts – Tests for alias command
  • src/__tests__/store/aliases.test.ts – Tests for aliases store

Checklist

https://claude.ai/code/session_01HVQiPLMxn8TFFcKbSyt42s

claude and others added 4 commits April 4, 2026 12:17
- `mcpm disable/enable <name>`: toggle servers on/off without removing
  them by setting `disabled: true` in config entries. Supports --client filter.
- `mcpm completions <shell>`: generate shell completion scripts for
  bash, zsh, and fish with full subcommand and option completions.
- `mcpm alias <shortname> <server>`: create short aliases for long
  server names, stored in ~/.mcpm/aliases.json. Supports --list and --remove.
- `mcpm list` now shows disabled/active status column.
- Added setServerDisabled() to ConfigAdapter interface and BaseAdapter.
- 33 new tests (730 total), all passing.

https://claude.ai/code/session_01HVQiPLMxn8TFFcKbSyt42s
- Extract shared handleToggleServer() into toggle.ts, reducing
  disable.ts and enable.ts from ~124 lines each to ~55 line wrappers
- Single-pass config read per client (was reading twice)
- Validate --client against CLIENT_IDS before unsafe as ClientId cast
- Replace loose alias validation (only blocked / and .) with strict
  regex /^[\w-]+$/ plus length cap, rejecting shell metacharacters
- Block __proto__/constructor/prototype as server names
- Validate alias name on --remove path before calling removeAlias()
- Add tests: mixed-state toggle, invalid client, empty alias, shell
  metacharacters, max length, __proto__ server name, remove validation
@m1ngshum m1ngshum marked this pull request as ready for review April 5, 2026 06:07
@m1ngshum m1ngshum merged commit 7abbb4e into main Apr 5, 2026
4 checks passed
@m1ngshum m1ngshum deleted the claude/quick-win-features-1bEvo branch April 5, 2026 06:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants