[FEATURE] Per-server startDisabled for MCP servers (disabledMcpServers is per-folder only; every session spawns every server)

Status Open
Reported on v2.1.285
Maintainer reply None cached
Activity 1 comment · opened Sep 30, 2026

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet (earlier requests were closed without shipping it, see below)
  • [x] This is a single feature request (not multiple features)

Problem Statement

There is no way to configure an MCP server that is defined once but does not start by default, so every session in every folder spawns it.

  • The /mcp toggle writes projects.<cwd>.disabledMcpServers in ~/.claude.json, which covers one folder only. Any folder or worktree opened later starts the server again.
  • A top-level disabledMcpServers in ~/.claude/settings.json is ignored. Tested on 2.1.285: claude -p --settings '{"disabledMcpServers":["anki","timing-db"]}' … still exposed both servers' tools.
  • There is no per-server enabled: false / autoStart: false field.

Tool search (#17668) fixed the context cost, but not the process cost. Each stdio server is a live process tree per session, including pre-warmed background spare sessions. On my machine, with 17 sessions open, one rarely used server (chrome-devtools-mcp, which I need only for Lighthouse and performance traces) had 17 copies using about 830 MB of RAM. The only way to keep it off everywhere is to write the server name into the disabled list of all ~120 project entries in ~/.claude.json by script, and then repeat that for every new folder.

Proposed Solution

A per-server flag, honored in every scope:

{
  "mcpServers": {
    "chrome-devtools-real": {
      "command": "npx",
      "args": ["chrome-devtools-mcp@latest", "--browserUrl", "http://127.0.0.1:9410"],
      "startDisabled": true
    }
  }
}
  • The server is not spawned at session start.
  • /mcp lists it as disabled and can enable it for the current session (optionally persisting that per project, as the toggle does today).

An equivalent alternative is a user-level disabledMcpServers in settings.json that acts as the default for every project, with per-project enabledMcpServers able to override it.

Alternative Solutions

  • Remove the server and re-add it with claude mcp add whenever it is needed.
  • Start sessions with --mcp-config <file> when the server is needed.
  • Script the per-project disabledMcpServers list across all project entries, which misses every new folder.
  • Agent-scoped mcpServers in a subagent definition (#17668). This helps only when the server is used exclusively inside that subagent.

Priority

Medium - Would be very helpful

Feature Category

MCP server integration

Use Case Example

  1. I have one heavyweight browser-automation MCP server that I need a few times a month.
  2. I set startDisabled: true on it once, at user scope.
  3. Day to day, none of my ~15–30 concurrent sessions spawns it.
  4. When a session needs it, /mcp → enable, and the server starts in that session only.

Additional Context

Earlier requests for the same thing, all closed without the feature:

  • #23411 "Support per-MCP-server startDisabled option": closed as a duplicate of #17668
  • #17921 "disabled option for MCP servers in .mcp.json": closed as inactive
  • #16254 and #18497, lazy/on-demand MCP loading: closed as inactive
  • #20467 and #23410: closed as duplicates

#17668 was closed as completed on the strength of tool search and agent-scoped servers. Neither of those stops the server process from being spawned in every session.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗