[FEATURE] Persistent user-level MCP configurations (enable/disable)
Open 💬 20 comments Opened Nov 5, 2025 by mintmcqueen
💡 Likely answer: A maintainer (ollie-anthropic, collaborator)
responded on this thread — see the highlighted reply below.
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
MCP servers installed at user level are enabled by default across all projects.
Proposed Solution
Add user level MCP config to the top of ~/.claude.json that allows user to configure persistent enable/disable MCP preferences via /mcp command.
Alternative Solutions
_No response_
Priority
Medium - Would be very helpful
Feature Category
MCP server integration
Use Case Example
_No response_
Additional Context
_No response_
20 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
Hey, this should already be working. Did you add it to the user scope?
Thanks Ollie. Yes, most of my servers are user scope.
I don't see any fields for persistent enable/disable decisions that apply to ALL projects. Am I missing something embarrassingly obvious?
For clarity, I'm not saying there's a persistence issue for MCP settings on a single project (e.g., I'm aware that enable/disable decisions for user scope MCP servers are persistently captured in ~/.Claude.json for each PROJECT). I just haven't found a way to avoid having to disable MCP servers using @ command at the beginning of a NEW project, where all MCP servers are enabled by default.
If it doesn't already exist, I'm suggesting an additional layer of "template" settings at a user level that apply to any new project (e.g., project should have MCP enable/disable configs baked into it on first start), but which is overridden by any subsequent changes to MCP enable/disable settings made in the TUI.
I've built a modular plugin architecture with separate plugins for different concerns (general, web-dev, project-mgmt), and the inability to set global MCP defaults creates significant friction.
Measured Token Impact
Here's the actual token consumption from my setup:
With all MCP servers enabled:
After disabling web-dev and project-mgmt plugins:
Even with just Context7 and GitHub enabled (my "general" plugin), I'm still consuming 31.7k tokens - and this is per-project overhead.
Current Workflow Problem
What I have to do now (tedious):
What I want to do (efficient):
Plugin Architecture
I've organized MCP servers into domain-specific plugins:
This modular approach only works well if I can:
Why This Matters
The current "enabled by default" behavior forces this choice:
Neither is acceptable for a good developer experience.
Proposed Solution Alignment
The proposed solution in this issue (user-level MCP config in
~/.claude.json) would perfectly solve this:Then new projects inherit these defaults, and I can selectively enable per-project with
/mcp enable.Use Case
I primarily work on dotfile management (chezmoi), data analysis (Python/Jupyter), and occasional web projects. I only need:
Having all of these enabled by default in every project wastes ~30% of my context window on tools I'm not using.
---
+1 for this feature request! Happy to provide more data or help test if needed.
This issue has been inactive for 30 days. If the issue is still occurring, please comment to let us know. Otherwise, this issue will be automatically closed in 30 days for housekeeping purposes.
@ollie-anthropic any thoughts on this? Would allow a lot of user creativity around proxy mcp servers, which could free up context.
Bump on this since I am also seeing the same behavior on new projects. Disable them in new projects, then enable ones i want for that specific project using /mcp
+1 for this feature. Currently have 10 MCP servers configured globally and need to manually disable them in each new project. A
mcpServerDefaultsor similar global disable option would save significant context tokens and improve workflow.Current workaround is tedious:
/mcp disablefor each server in every new project session.You can write wrapper scripts and the use the --mcp-config flag to switch
in different collections of MCPs
I'm moving to using their new skills feature to save on context but allow
access to all capabilities now rather than juggling MCPs
On Thu, 25 Dec 2025 at 13:39, Nas&Nora @.***> wrote:
+1 need this
@bcherny while you and Claude are crushing PRs 🙏
+1
+1 mcp installation will not scale without this
I'm hitting this same problem. For me, all I want is user-level MCPs to default to disabled. So per project, I have to explicitly enable the ones I want (rather than at the moment, I have to manually disable most of them).
Or if the
mcpServerssection in my user-level.claude.jsonhad an "enabled" field per MCP server - so I can say for new projects, the default state for this MCP server is disabled.+1 on this. My use case: I have several MCP servers configured globally (Grafana, Playwright, Obsidian, Context7, etc.) but only a subset are relevant to any given project. I'd like to install them centrally in
~/.claude.jsonwith adisabled: truedefault, then selectively enable per-project.Currently the only options are:
/mcpdisable in every new project (tedious).mcp.jsonacross projects (defeats the purpose of central management)A
mcpServerDefaultsor honoringdisabled: trueas the initial state for new projects would solve this cleanly.@materemias I'm in a similar situation. So I've enabled all MCPs everywhere and I turned ON "tool search" with:
(source)
It prevents polluting context with all the MCP definitions, while not having to manually switch them on or off all the time.
I still would love user-level toggles :)
This is annoying for Claude Teams subscriptions, as soon as the company configures a tool at organization level, you have to disable it for every single project.
@ollie-anthropic
The gap
No way to persistently enable/disable MCP servers through TUI or CLI:
claude mcp disabledoesn't exist---
Proposed UX
TUI should distinguish session vs persistent:
For connected servers:
For disabled servers:
CLI should mirror TUI:
Status should indicate scope:
---
Suggested data model
Plugins already have a clean pattern — per-item boolean state:
MCP servers should work the same way:
Why this is better than
deniedMcpServers:| |
deniedMcpServers(current) |enabledMcpServers(proposed) ||---|---|---|
| Model | Blacklist array | Per-server state |
| Scope override | Arrays merge — child can't undo parent denies | Boolean override — child sets
true, done || Reasoning | "Is this server in any deny list?" | "What's the state at this scope?" |
| Precedent | None | Matches
enabledPlugins|The blacklist approach requires workarounds (allowlists, merge modes, null semantics) to handle "enable at child scope what parent disabled." Per-server state handles this naturally.
---
Current workaround
deniedMcpServersexists and works for adding denies, but can't override parent scope:Verified limitation: arrays merge across scopes. If user scope denies a server, project/local scope cannot re-enable it.
Reference: Settings docs
---
Summary
The
enabledPluginspattern already exists — apply it to MCP servers.This feature is overdue!
Cross-reference: #37793 tracks the subagent-spawn variant of this. Subagents don't honor ToolSearch deferral even when the parent does, so they fail with
Prompt is too longat far lower MCP counts than expected. On a 10-MCP / ~274-tool setup,Explorehits 213,431 tokens at spawn before executing a turn. Resolving #11085's persistent-disable UX would help users mitigate #37793 without per-project edits, but the structural fix is at the subagent-spawn layer.