anthropics / anthropics/claude-code
Desktop app: no way to enable/disable Claude Code MCP servers (`/mcp disable` fails, no Settings UI)
- Dominant language
- Python
- Stars
- 145k
- Forks
- 23.1k
- PR merge metrics
- PR metrics pending
Description
## What happens
In the **desktop app**, there is no way to enable or disable a Claude Code MCP server.
`/mcp disable ` fails every time:
```
MCP controls aren't available right now — the terminal is still starting up or is showing another view.
```
This is reproducible on an idle session with no other view open. The interactive `/mcp` picker never renders either — it's a terminal dialog, like `/permissions`, `/config`, and `/hooks`.
## Why this looks like a bug rather than a missing feature
The capability already exists in the terminal. The in-session MCP toggle shipped in v2.0.10, and `/mcp` there gives a clean list with per-server enable/disable. Same version, same machine, same config — it just isn't reachable from the desktop app.
It's also easy to assume the feature is present, because **Settings has two MCP panels that don't cover Claude Code**:
| Settings panel | Manages | Config |
|---|---|---|
| Extensions | Desktop app's own MCP servers (`.mcpb` / `.dxt` bundles) | `claude_desktop_config.json` |
| Connectors | claude.ai remote connectors (Gmail, Slack, Notion…) | server-side |
| — none — | **Claude Code's MCP servers** | `~/.claude.json` |
So a user with 13 servers in `~/.claude.json` opens Settings, sees an MCP screen listing one unrelated server, and has no path forward.
## Why it matters
Context. Every enabled server's tools load at session start, so disabling unused servers is the main lever a user has over startup context. In my case 4 connected servers contributed 151 tools (meta-ads 97, razorpay-pvtltd 42, Sentry 9, cloudflare-api 3). Turning them off is worth doing regularly — but in the desktop app it currently costs a config edit plus a new chat, and starting a new chat loses the conversation you're in.
## Workaround (for anyone hitting this)
Two mechanisms, because neither alone is sufficient:
1. **Live, mid-session** — add `mcp__` to `permissions.deny` in `./.claude/settings.local.json`. Permission rules are re-read while a session runs, so the block applies immediately with no restart. This stops tool *use*, not tool *loading*, so it does not save context.
2. **Persistent** — add the server to `disabledMcpServers` under `projects[""]` in `~/.claude.json`. This prevents the server launching next session, which is what actually saves context.
One trap worth documenting: `disabledMcpServers` is keyed by absolute project path, and **each git worktree is its own key with its own empty list**. Disabling a server in the main checkout has no effect in any worktree. Servers can also be defined per-project rather than globally, so enumerating only `mcpServers` at the top level of `~/.claude.json` misses some.
## Request
Either:
- port the terminal's MCP panel to the desktop app, or
- make the non-interactive form (`/mcp enable|disable|reconnect `) work there.
The non-interactive form alone would be enough — it's already the documented usage string, it just never executes.
## Environment
- Claude Code v2.1.220 (desktop app)
- macOS 27.0.0 (arm64)
- 14 MCP servers configured in `~/.claude.json` (13 global, 1 project-scoped)
## Related
#10447 · #30595 · #17921 · #4879 · #5722 · #50826 — all cover CLI or config-file toggling. None cover the desktop app having no MCP surface at all.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reproducing the desktop app failure with `/mcp disable ` and compare it with the working terminal `/mcp` panel. Review the desktop app's MCP controls and the `~/.claude.json` configuration described in the report; done means Claude Code MCP servers can be enabled or disabled from the desktop app without editing configuration manually.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- macos
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100