[BUG] Claude Desktop silently destroys claude_desktop_config.json when MCP server uses url field (resubmission of #37286)

Resolved 💬 3 comments Opened Apr 2, 2026 by Asher- Closed Apr 5, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

Why This Is Being Resubmitted

This is a resubmission of #37286, which was closed by an automated bot with the message "this doesn't appear to be about Claude Code." The bot's assessment was incorrect, and the closure without any human review or resolution is unacceptable.

This is unambiguously a Claude Code / Claude Desktop issue. The bug occurs in Claude Desktop -- the Electron app distributed by Anthropic as part of the Claude Code product family. It involves claude_desktop_config.json, the configuration file that Claude Desktop reads and writes. The destructive behavior (silently rewriting the user's config file) is performed by Claude Desktop's own startup code. There is no other product or vendor involved.

An automated triage bot that cannot distinguish "Claude Desktop" from "not Claude Code" and summarily closes valid data-loss bugs without escalation to a human reviewer reflects poorly on Anthropic's issue-handling procedures. Users who take the time to file detailed, reproducible bug reports with before/after evidence deserve better than a boilerplate dismissal from a bot that didn't understand the report.

We expect Anthropic's AI-powered triage to be better than this. If the bot is uncertain, it should flag for human review -- not close and auto-lock, making it impossible for the reporter to even respond.

---

What's Wrong?

When claude_desktop_config.json contains an MCP server configured with a url field (for Streamable HTTP transport per the MCP 2025-03-26 spec), Claude Desktop silently destroys the entire mcpServers section and strips some preferences keys on startup. No error is shown to the user -- the config is simply rewritten with the offending entries removed.

This is a data loss bug. The app should either support the field or reject it with a visible error -- not silently rewrite the user's config file.

Config Before Startup

{
  "mcpServers": {
    "brain-mcp": {
      "url": "http://127.0.0.1:7677/mcp"
    }
  },
  "preferences": {
    "quickEntryShortcut": "off",
    "launchPreviewPersistSession": true,
    "allowAllBrowserActions": false,
    "coworkScheduledTasksEnabled": true,
    "ccdScheduledTasksEnabled": true,
    "sidebarMode": "code",
    "bypassPermissionsModeEnabled": true,
    "coworkWebSearchEnabled": true
  }
}

Config After Startup (rewritten by the app)

{
  "preferences": {
    "coworkScheduledTasksEnabled": true,
    "ccdScheduledTasksEnabled": true,
    "sidebarMode": "code",
    "coworkWebSearchEnabled": true,
    "bypassPermissionsModeEnabled": true,
    "launchPreviewPersistSession": true
  }
}

Note:

  • The entire mcpServers key is gone
  • quickEntryShortcut and allowAllBrowserActions preferences were also stripped
  • No error dialog, no log message, no indication that the config was modified

What Should Happen?

One of:

  1. Support the url field for Streamable HTTP transport, as the MCP spec defines it and Claude Code CLI already supports it via "type": "http" in ~/.claude/settings.json
  2. Show an error ("Unknown MCP server configuration: missing 'command' field") and leave the config file intact
  3. Ignore the unrecognized entry but preserve it in the file

Silently deleting user configuration is never acceptable behavior.

Context

The url field is the natural way to configure a Streamable HTTP MCP server. The MCP 2025-03-26 specification replaces the old HTTP+SSE transport with Streamable HTTP, where the server exposes a single endpoint that accepts POST requests with JSON-RPC bodies. This is how shared MCP daemons (one process serving multiple Claude sessions) should be configured -- spawning a separate stdio process per session is wasteful when the server maintains shared state like a database connection pool.

Claude Code CLI already supports this via ~/.claude/settings.json:

{
  "mcpServers": {
    "brain-mcp": {
      "type": "http",
      "url": "http://127.0.0.1:7677/mcp"
    }
  }
}

The expectation is that claude_desktop_config.json should support the equivalent configuration. At minimum, it must not silently destroy the user's config when it encounters an unrecognized field.

Environment

  • Claude Desktop: latest version as of original filing (2026-03-28)
  • macOS
  • MCP spec version: 2025-03-26 (Streamable HTTP)

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗