MCP profile manager for Claude Code — pick which MCP servers load per project
Project description
mancp
A lightweight MCP profile manager for Claude Code and Conductor. Pick which MCP servers load per project instead of dumping them all into every session.
The problem
Claude Code merges user-level MCPs from ~/.claude.json into every project, always. There's no per-project exclusion. With 10+ MCPs configured, you burn 30-50k tokens on tool definitions before writing a line of code.
mancp stores all your MCPs in a central registry and lets you toggle each one independently between user scope (~/.claude.json) and project scope (.mcp.json).
Install
uvx mancp
Or install permanently:
uv tool install mancp
Quick start
# 1. Import your existing MCPs (once)
mancp init
# 2. Open the TUI in any project
cd ~/repos/my-project
mancp
mancp init reads all MCP servers from ~/.claude.json (global + all project scopes) into ~/.config/mancp/mcps.json. Safe to re-run -- skips duplicates.
TUI
mancp | my-project | 12 in store
U P name command / url
U - github npx -y @modelcontextprotocol/server-github
- P motherduck npx -y @motherduck/mcp-server
U P filesystem npx -y @anthropic/mcp-server-filesystem
- - slack npx -y @anthropic/mcp-server-slack
j/k navigate u user p project enter detail d delete s save q quit
Each MCP has two independent toggles:
| Key | Action |
|---|---|
u |
Toggle user scope (~/.claude.json) for current row |
p |
Toggle project scope (.mcp.json) for current row |
j / k or arrows |
Navigate list |
enter |
Open detail view (shows config, secrets masked) |
s / ctrl+s |
Save all changes |
q / esc |
Quit without saving |
Status columns
U(yellow) -- active in~/.claude.jsonuser scope (loads in all projects)P(cyan) -- active in project.mcp.json(loads only in this project)-(dim) -- not active in that scope
An MCP can be in both scopes, neither, or just one. On save, mancp writes ~/.claude.json and .mcp.json to match what you see.
Detail view
Press enter on any row to see the full MCP config (secrets masked). From there:
d-- delete from store permanentlyq/esc-- close
Other commands
mancp list # Show store with active status indicators
mancp clean # Remove all MCPs from ~/.claude.json (with confirmation)
Store format
~/.config/mancp/mcps.json -- plain JSON, same structure as .mcp.json's mcpServers block. You can edit it directly to rename entries or fix configs.
Notes
.mcp.jsonshould be in.gitignoreif it contains tokens~/.claude.jsonis backed up automatically before every write- The TUI auto-detects new MCPs added via
claude mcp addsince last init
Development
git clone https://github.com/dumkydewilde/mancp
cd mancp
uv sync --dev
uv run pytest
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mancp-0.2.0.tar.gz.
File metadata
- Download URL: mancp-0.2.0.tar.gz
- Upload date:
- Size: 54.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b675ebfed904bd8159317451154f8a3bb94dccf56d28f65c811d77e403e271e6
|
|
| MD5 |
d6276873d257ca196a21d48e5a0c6900
|
|
| BLAKE2b-256 |
a3b66ddce61f4adc2260ad201b6e2f260d9d6850dad45fd6da521a810ada6200
|
Provenance
The following attestation bundles were made for mancp-0.2.0.tar.gz:
Publisher:
publish.yml on dumkydewilde/mancp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mancp-0.2.0.tar.gz -
Subject digest:
b675ebfed904bd8159317451154f8a3bb94dccf56d28f65c811d77e403e271e6 - Sigstore transparency entry: 1060780833
- Sigstore integration time:
-
Permalink:
dumkydewilde/mancp@08007412b4dfb22c8c4976045e8f1918f4029a66 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/dumkydewilde
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@08007412b4dfb22c8c4976045e8f1918f4029a66 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mancp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: mancp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 42.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd1c16ee84997f3a90fc35d92befd62b4a0d4798a00ab0b4c041183dee9e4836
|
|
| MD5 |
776a099e75585af9ba46a58e1cf8e326
|
|
| BLAKE2b-256 |
c2615f6866d1ff0c692772dde0c4bd34d737bf00f6797685ce436a8e9689ba7c
|
Provenance
The following attestation bundles were made for mancp-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on dumkydewilde/mancp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mancp-0.2.0-py3-none-any.whl -
Subject digest:
bd1c16ee84997f3a90fc35d92befd62b4a0d4798a00ab0b4c041183dee9e4836 - Sigstore transparency entry: 1060780899
- Sigstore integration time:
-
Permalink:
dumkydewilde/mancp@08007412b4dfb22c8c4976045e8f1918f4029a66 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/dumkydewilde
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@08007412b4dfb22c8c4976045e8f1918f4029a66 -
Trigger Event:
release
-
Statement type: