{"version":"2.1.311","anchor":"mcp-as-written-config-entries-and-clearer-missing-env-messag","canonical_anchor":"mcp-as-written-config-entries-and-clearer-missing-env-messag","heading":"MCP config entries are kept as written, and missing-variable messages depend on scope","tier":"notice","area":"MCP","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.311\/e\/mcp-as-written-config-entries-and-clearer-missing-env-messag","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.311","markdown":"### MCP config entries are kept as written, and missing-variable messages depend on scope\n\nServers loaded with `--mcp-config` are now recorded as written, and messages about missing environment variables change with where the config came from\n\n**What**\n\nWhen you load MCP servers with `--mcp-config` (MCP servers are outside programs that give Claude extra tools), Claude Code now keeps a copy of each server entry exactly as you wrote it. This applies whether you pass the config as inline JSON or as a file. That copy is passed along through headless startup and handed to the session before Claude Code connects to the servers. Headless startup means running without the interactive screen, for example with `-p`.\n\nTwo messages also changed:\n\n- Missing environment variable messages are now worded according to the config's scope, meaning where the config came from.\n\n- Errors in a plugin's language server settings now begin with `In plugin LSP config:`.\n\n**Why**\n\nMost of this is internal. The part you can see is the wording of error messages when an MCP or plugin config refers to an environment variable that is not set.\n\n- Area: MCP\n- Names: `--mcp-config`\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 2\/5\n- Scope: individual\n- Heads-up: no"}