Sandbox
@spences10/mcpick

MCP configuration manager for Claude Code and other clients

MCPick manages MCP server config, skills, and related client-specific tools from one CLI. It can list clients, enable or disable servers, validate config health, back up state, and run as an MCP server so agents can control it through tool calls.

93 stars15 forksTypeScriptUpdated 7d ago
Who it's for

Builders who want one command to manage MCP servers, skills, and profiles across several AI clients.

What it delivers

You can keep MCP setup consistent, audited, and safer without editing each client by hand.

What it does

Multi-client MCP management

Lists and edits MCP config for Claude Code, Claude Desktop, Codex CLI, Gemini CLI, VS Code / Copilot, Cursor, Windsurf, OpenCode, and Pi.

MCP server mode

Runs `mcpick serve` so agents can call tools like `mcpick_list`, `mcpick_enable`, `mcpick_add`, and `mcpick_doctor` over stdio.

Config health checks

`mcpick doctor` checks JSON validity, schema shape, missing commands, duplicate servers, plaintext secrets, and unpinned packages.

Portable skills management

Installs and updates GitHub-hosted SKILL.md packs through `gh skill`, with staging, validation, provenance, and pinning.

Claude Code extras

Includes commands for plugins, marketplaces, hooks, and cache management for Claude Code-specific workflows.

Profiles, backup, and rollback

Saves and loads MCP profiles, makes backups, restores from files, and rolls back safe-write changes.

Secret handling

Redacts known secret patterns in output and warns when values look like secrets or are stored in plaintext.

How to get it

  1. 1Run
    npm install -g mcpick
    # or run without installing
    npx mcpick --help
  2. 2npx mcpick doctor checks every known client config: JSON validity, per-client schema…
    npx mcpick doctor
    npx mcpick doctor --client cursor --json

README

MCPick

built with vite+ tested with vitest

Vendor-neutral MCP configuration manager with first-class Claude Code support.

MCPick helps humans and LLM agents inspect, toggle, and back up MCP server configuration across multiple AI clients. Claude Code-specific plugins, hooks, marketplaces, and cache commands remain available, but they are no longer the core product model.

Install

npm install -g mcpick
# or run without installing
npx mcpick --help

Requirements:

  • Node.js 22+
  • Claude Code is required only for Claude Code-specific commands
  • The GitHub CLI (gh, authenticated) is required for portable skills commands; check-skills validates skills before install when available

Agent-first CLI

In non-TTY environments, MCPick shows help instead of launching the interactive TUI. This makes it safer for prompts like:

“Use mcpick to work out how to enable this MCP server.”

Start with:

npx mcpick --help
npx mcpick clients
npx mcpick list --json

MCPick redacts known secret patterns before printing output. MCP configs often contain env vars and authorization headers, so env and headers values are shown as *** in JSON output.

MCP server mode

npx mcpick serve runs MCPick itself as an MCP server over stdio, so agents can manage MCP configuration through tool calls instead of shelling out to the CLI. Tools:

  • Read: mcpick_list, mcpick_clients, mcpick_get, mcpick_doctor
  • Mutate: mcpick_enable, mcpick_disable, mcpick_remove, mcpick_add, mcpick_add_json

Read-only/destructive annotations are set so clients can make safe decisions; secret warnings and from_env resolution behave the same as the CLI. Client config example:

{
	"mcpServers": {
		"mcpick": {
			"command": "npx",
			"args": ["-y", "mcpick", "serve"]
		}
	}
}

MCP clients

Supported client adapters:

ClientScopesCommand examples
Claude Codelocal, project, usermcpick list, mcpick enable <server>
Claude Desktopusermcpick list --client claude-desktop
Codex CLIusermcpick list --client codex
Gemini CLIproject, usermcpick list --client gemini-cli --scope project
VS Code / Copilotprojectmcpick list --client vscode --scope project
Cursorproject, usermcpick list --client cursor --scope user
Windsurfusermcpick list --client windsurf --scope user
OpenCodeproject, usermcpick list --client opencode --scope project
Pi via pi-mcp-adapterproject, usermcpick list --client pi --scope user

Show known config locations:

npx mcpick clients
npx mcpick clients --json

MCP server commands

# List Claude Code registry/status
npx mcpick list
npx mcpick list --json

# List another client
npx mcpick list --client pi --scope user --json
npx mcpick list --client opencode --scope project

# Claude Code enable/disable
npx mcpick enable <server> --scope local
npx mcpick disable <server> --scope local

# Add/remove Claude Code server definitions
npx mcpick add --name <server> --command npx --args "-y,package-name"
npx mcpick add --from-registry io.github.user/server
npx mcpick add-json <name> '{"command":"npx","args":["-y","package-name"]}'
npx mcpick remove <server>

add --from-registry requires an exact official MCP Registry name and writes the package's exact published version. It currently supports npm packages using stdio; unsupported package types fail without writing a guessed configuration. Registry-declared required environment variables must be supplied with --from-env or --env. --dry-run works for adapter-backed clients.

MCPick warns when a value you write looks like a secret, redacts printed output, and npx mcpick doctor flags plaintext secrets already on disk. To keep secrets off the command line and out of LLM conversation context, resolve them from the process environment:

pnpx nopeek run .env --only GITHUB_TOKEN -- npx mcpick add --name github --command npx --args "-y,@modelcontextprotocol/server-github" --from-env GITHUB_TOKEN --yes

MCP client config files may still store secrets in plain text because that is how many clients currently load MCP credentials; prefer ${VAR} references where your client supports them.

Validate your setup

npx mcpick doctor checks every known client config: JSON validity, per-client schema shape, missing commands on PATH, duplicate servers across scopes, plaintext secrets, and unpinned server packages. It exits non-zero when it finds errors, so it works in CI:

npx mcpick doctor
npx mcpick doctor --client cursor --json

Portable skills

MCPick installs portable SKILL.md packs through the GitHub CLI's gh skill commands. Installs are staged in a temporary directory and validated with check-skills before anything is written to your agent directories, and each install records provenance (source repo, pinned ref, target agents) shown in skills list --json.

# List installed skills for a client
npx mcpick skills list --agent pi --json

# Search GitHub, or see what a source offers without installing
npx mcpick skills search svelte
npx mcpick skills add spences10/skills --list
npx mcpick skills preview spences10/skills svelte-runes

# Install one skill, pinned for reproducibility
npx mcpick skills add spences10/skills --agent pi --skill svelte-runes --pin v1.2.0 --yes

# Install all skills from a repo at user scope
npx mcpick skills add spences10/skills --agent opencode --all --global --yes

# Check for updates, then apply them
npx mcpick skills update --dry-run --json
npx mcpick skills update

skills remove is not supported by the gh skill backend; it reports the manual deletion paths instead.

Claude Code-specific tools

These commands wrap Claude Code concepts and are intentionally client-specific:

# Plugins
npx mcpick plugins list
npx mcpick plugins install <name>@<marketplace>
npx mcpick plugins enable <name>@<marketplace>
npx mcpick plugins disable <name>@<marketplace>

# Marketplaces
npx mcpick marketplace list
npx mcpick marketplace add <source>
npx mcpick marketplace update
npx mcpick marketplace remove <name>

# Hooks and plugin cache
npx mcpick hooks list
npx mcpick cache status
npx mcpick cache refresh

Profiles and backups

Profiles are portable MCP server snapshots. Claude Code plugin state is preserved as optional Claude-specific profile metadata.

# Legacy Claude Code shortcuts still work
npx mcpick --profile database
npx mcpick --save-profile mysetup
npx mcpick --list-profiles

# Save/load profiles for a specific MCP client
npx mcpick profile save work --client vscode --scope project
npx mcpick profile load work --client opencode --scope project
npx mcpick profile load work --client pi --scope user

npx mcpick backup
npx mcpick restore [file]

# Safe-write rollback backups created before config mutations
npx mcpick rollback --list
npx mcpick rollback [file]

Interactive TUI

Running npx mcpick in a terminal launches the human-facing menu:

MCPick - MCP Configuration Manager

What would you like to do?
  Enable / Disable MCP servers
  Validate configs (doctor)
  Skills
  Client-specific tools
  Load profile
  Save profile
  Backup config
  Restore from backup
  Exit

The primary TUI flow is client-first: choose a client, then toggle its MCP servers. Claude Code plugins, hooks, marketplaces, and cache live under “Client-specific tools”. “Validate configs (doctor)” runs the same read-only health checks as mcpick doctor (config parse errors, schema-shape issues, missing commands, duplicate servers, plaintext secrets, unpinned servers) and prints the report grouped by client.

Config locations

MCPick reads the standard locations used by each client adapter. Common paths include:

PathPurpose
~/.claude.jsonClaude Code local/user MCP config
.mcp.jsonShared project MCP config
.gemini/settings.jsonGemini CLI project config
.vscode/mcp.jsonVS Code / Copilot project config
.cursor/mcp.jsonCursor project config
opencode.jsonOpenCode project config
~/.config/mcp/mcp.jsonShared global MCP config used by pi-mcp-adapter
.pi/mcp.jsonPi project override

MCPick-owned state lives under $XDG_CONFIG_HOME/mcpick/ (~/.config/mcpick/ by default; override with MCPICK_CONFIG_DIR). State previously kept in ~/.claude/mcpick/ is moved there automatically on first run.

Development

pnpm install
pnpm test
pnpm run check
pnpm build

See docs/VENDOR_NEUTRAL_ARCHITECTURE.md for architecture notes.

Files in the repo

Repository payload18 top-level entries
  • .changeset
  • .github
  • .vscode
  • .zed
  • docs
  • src
  • .gitignore
  • .npmignore
  • CHANGELOG.md
  • CONTEXT.md
  • LICENSE
  • package.json
  • pnpm-lock.yaml
  • pnpm-workspace.yaml
  • README.md
  • renovate.json
  • tsconfig.json
  • vite.config.ts

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More tools

JuliusBrussee/
caveman

🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman

105k
1 add
MemPalace/
mempalace

The best-benchmarked open-source AI memory system. And it's free.

59k
stablyai/
orca

Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and remote runtime.

66k

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

132k

Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors

64k
headroomlabs-ai/
headroom

Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.

71k