Claude Code v2.1.274 Major Updates - Deprecation of `type: sdk` MCP Configuration and MCP Connection Stabilization

Claude Code v2.1.274 Major Updates - Deprecation of `type: sdk` MCP Configuration and MCP Connection Stabilization

Claude Code v2.1.274 has been released. The environment variable `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` has been added, which can reduce MCP server connection wait times, and startup for non-interactive sessions has been significantly improved. In this article, we examined the key changes in this update and verified their actual effects.
2026.09.17

This page has been translated by machine translation. View original

This is Ishikawa from the Cloud Business Division. Claude Code v2.1.274 (released 2026-09-16) has been released. This release has quite a large number of changes for a single release, and I feel it's a version where MCP-related areas received significant attention. Today, I tried out the ability to reduce startup time for non-interactive sessions using the CLAUDE_CODE_MCP_STARTUP_WAIT_MS environment variable.

The previous update article is here.

https://dev.classmethod.jp/articles/20260916-cc-updates-v2-1-273/

Update Summary

v2.1.274 includes 108 changes. In my classification, fixes are the most numerous at 68, followed by improvements at 21, new features at 13, security at 3, and breaking changes at 3.

Of the 108 changes, 41 are changes for surrounding platforms tagged with [VSCode] / [Claude Code on the web] / [Claude Tag] / [Code Review], and the remaining 67 are directly relevant to the terminal version.

In terms of scope of impact, changes related to those using MCP servers stand out, and 2 of the 3 breaking changes are also MCP-related. The remaining 1 involves plugin distribution.

Notable Updates

Environment Variable to Cut Off MCP Server Startup Wait (New Feature)

CLAUDE_CODE_MCP_STARTUP_WAIT_MS has been added. This allows you to specify the maximum time the first turn of a non-interactive session waits for connecting MCP servers. Specifying 0 means it won't wait at all.

I feel that those running headless from CI or scripts can suppress the wait time on the first turn using this environment variable.

Continuation of Steps Interrupted by Window Reload (New Feature · VS Code)

Steps interrupted by a window reload will now be continued. A notification that continuation occurred will be displayed in the chat, and this can be disabled via the Claude Code: Continue After Reload setting.

I feel that those who frequently reload windows due to extension updates or configuration changes will benefit most from reduced rework with this change.

Diff Comparison Against Any Branch (New Feature · Claude Code on the web)

A branch picker for "Compare against" has been added to the diff view in cloud sessions, making it possible to view diffs against any branch other than the base branch.

I feel that those running reviews in cloud sessions that require comparison against branches other than the base branch will benefit from reduced effort in verification.

Fix for Retries Getting Stuck on "unexpected tool_use_id" (Bug Fix)

An issue where retries continued endlessly on a 400 error of "unexpected tool_use_id," causing the session to halt, has been fixed. Broken transcripts will be automatically repaired where possible, and if repair is not possible, the loop will terminate with an error prompting /rewind.

I feel that those who have experienced the same error looping endlessly in long sessions will now have a clearer path to recovery from this version.

Fix for MCP Tool Calls Timing Out Around 5 Minutes (Bug Fix)

An issue where Streamable HTTP MCP tool calls timed out at approximately 5 minutes even when a long timeout was set per server has been fixed.

I feel that those using MCP servers with time-consuming tools may find that what was previously processed as an unexplained timeout is now resolved.

Fix for settings.json Getting Corrupted (Bug Fix · VS Code)

An issue where overlapping setting writes from the extension caused ~/.claude/settings.json to become unparseable or settings to be lost has been fixed.

I feel that those using both the terminal and VS Code extension together will benefit from one fewer path through which settings could become corrupted.

Fixes for Secret Display and Bash Permission Checks (Security)

Three fixes related to permission and secret handling have been included.

  • Secrets resolved from ${VAR} placeholders in MCP configuration were being displayed in MCP connection errors and MCP login tool descriptions.
  • Bash permission checks have been fixed for commands that loop over or assign certain special shell variables. These commands will now have their permissions verified.
  • Sessions isolated in worktrees were accepting Bash commands containing certain nested shell expansions. These will now be rejected.

I feel that environments that rely on permission controls for trust have more reason to update promptly.

Trying Out CLAUDE_CODE_MCP_STARTUP_WAIT_MS

I verified how much the presence or absence of the CLAUDE_CODE_MCP_STARTUP_WAIT_MS environment variable changes the time required for the first turn of a non-interactive session. This is an update exclusively for non-interactive (headless) sessions.

As an MCP server that takes time to connect, I prepared one stdio server that does nothing for 60 seconds after startup.

slow-mcp.json:

{
  "mcpServers": {
    "slow": { "type": "stdio", "command": "sleep", "args": ["60"] }
  }
}

Note that sleep 60 does not speak MCP, so the connection is left in a state where it neither succeeds nor fails. Claude Code will stop waiting after a certain time and move on, so the value of 60 just needs to be longer than that cutoff time, and the number 60 itself does not appear in the execution time.

As a baseline for comparison, I also use empty-mcp.json with no servers at all.

empty-mcp.json:

{
  "mcpServers": {}
}

I load these with --mcp-config and add --strict-mcp-config to use only the servers in this configuration file. My usual MCP servers are not loaded, so my local settings are not affected.

First, as a baseline, I run with no MCP servers at all.

claude -p "Reply with exactly: ok" --max-turns 1 --strict-mcp-config --mcp-config empty-mcp.json

The execution time was 3.6 seconds (average of 4 runs).

Next, I run with one MCP server that does not connect.

claude -p "Reply with exactly: ok" --max-turns 1 --strict-mcp-config --mcp-config slow-mcp.json

The execution time was 33.4 seconds (average of 4 runs).

Finally, I run with the same conditions but with CLAUDE_CODE_MCP_STARTUP_WAIT_MS=0 added.

CLAUDE_CODE_MCP_STARTUP_WAIT_MS=0 claude -p "Reply with exactly: ok" --max-turns 1 --strict-mcp-config --mcp-config slow-mcp.json

The execution time was 3.5 seconds (average of 4 runs).

Discussion

Here are the results of the 3 conditions side by side. Since execution time varies by about 1 second per model response, all values are averages of 4 runs.

Condition Execution Time Difference from Baseline
No MCP servers (empty-mcp.json) 3.6 sec
Non-connecting server present, no env var 33.4 sec +29.8 sec
Non-connecting server present, env var set to 0 3.5 sec -0.1 sec

※ When using --mcp-config, the default value of CLAUDE_CODE_MCP_STARTUP_WAIT_MS is 30 seconds.

The baseline of 3.6 seconds is the time it takes to make one model call. Adding just one non-connecting MCP server brings this to 33.4 seconds, meaning the roughly 30-second difference was entirely consumed by waiting for the connection. With CLAUDE_CODE_MCP_STARTUP_WAIT_MS=0, the time returns to nearly the same 3.5 seconds as the baseline, confirming that the first turn begins without waiting for the connection.

The difference from the baseline ranged from 28.6 seconds to 32.3 seconds across all 4 runs. Since the effect is orders of magnitude larger than the variance, I consider the trend to be stable.

However, I feel it's worth noting that this approximately 30 seconds does not necessarily translate directly to the amount of time saved. What I set up here was a server where the connection never completes — the worst-case scenario of waiting until the cutoff. If you have a server that connects in 3 seconds, the wait time is 3 seconds, and the amount you can reduce is also 3 seconds. The most reliable way to know how long you're waiting in your own environment is to measure the difference between running with and without the environment variable.

One more point: this measurement was taken under conditions where --mcp-config was explicitly specified. Another item in the same v2.1.274 states that for --input-format stream-json sessions, "the first turn no longer waits up to 2 seconds," suggesting that the default wait time varies depending on the execution conditions.

This is most impactful when running headless from CI or scripts. Since the wait time occurs per process startup, in batch processing that loops claude -p per file, even a small reduction per run adds up in total. For remote MCP servers with unpredictable connection times or configurations with cold starts, it can also be used to lock in a worst-case startup time.

On the other hand, specifying 0 means MCP tools may not be fully available on the first turn. For scripts that assume MCP tools are available from the first turn, setting a limit of a few hundred milliseconds rather than 0 would be safer. Note that the CHANGELOG description is limited to "the first turn of a non-interactive session," so this is not a change that affects the feel of interactive sessions.

Update Details

New Features

  • A warning is now displayed when memory usage reaches a critical level, with guidance on how to free memory and safely restart.
  • CLAUDE_CODE_MCP_STARTUP_WAIT_MS has been added (described above).
  • An OpenTelemetry event called claude_code.managed_settings_resolved has been added, recording the source of managed settings and the state of the policy helper. Specifying OTEL_LOG_MANAGED_SETTINGS=1 will also output redacted settings and digests.
  • An effort attribute has been added to the OpenTelemetry trace span claude_code.llm_request, aligning it with the api_request event.
  • Collapsed teammate and agent messages in fullscreen mode can now be expanded by clicking.
  • [VS Code] Steps interrupted by a window reload will now be continued (described above).
  • [VS Code] Memory and Instructions items have been added to the Customize menu. Memory displays auto-memory toggle, saved memories, and memory folder, while Instructions edits CLAUDE.md files.
  • [VS Code] A claudeCode.lockEditorGroups setting has been added to prevent Claude from locking the editor groups it opens.
  • [Claude Code on the web] A branch picker for "Compare against" has been added to the diff view (described above).
  • [Claude Tag] A Guests setting has been added to the Add channel and Add workspace forms in managed settings, allowing owners to pre-select Inherit, Allow, Channel only, or Restrict.
  • For self-hosted Claude apps gateway, the following have been added: store.connect_timeout_seconds to extend Postgres connection timeout, a telemetry attribute enduser.sub to include the IdP subject, and a warning when the number of concurrent upstream submissions exceeds the limit of 256.

Improvements

  • Startup of --input-format stream-json sessions has been improved. The first turn no longer waits up to 2 seconds for connecting MCP servers with tools that slow down tool lookup, and those tools will be available in later turns.
  • Monitor tool notifications have been improved. The final output and completion of a script are now delivered in 1 notification instead of 2, saving 1 model turn.
  • /code-review has been changed so that for models without custom tuning settings, a lighter inline review prompt is used instead of launching numerous review sub-agents.
  • The output of OTEL_LOG_RAW_API_BODIES=file:<dir> has been improved. A new index.jsonl and event attributes request_body_id / message.id allow each response to be linked to the request file and transcript message.
  • When publishing artifacts, publishing based on an older version is now stopped before submission, and the new page that should be merged is indicated. Additionally, artifact monitoring in local sessions has been changed so that new versions published elsewhere no longer start a turn.
  • Safety confirmation before deleting agent worktrees containing submodule checkouts has been improved.
  • [VS Code] Screen reader narration of conversations has been improved, with each message announced as "You" or "Claude." Tool steps also announce the tool name.
  • [Claude Code on the web] When an owner's GitHub integration is lost, instead of turning off the routine on the first check failure, execution is now skipped and retried for up to 72 hours.
  • [Code Review] Each comment posted now leads with who is affected, what is wrong in the code, and how to fix it, in short, plain language.
  • Additional improvements have been made to the GitHub line display in /status, the repost interval of Claude Tag progress checklists, startup retries and spend limit checks for self-hosted Claude apps gateway, and more.

Fixes

  • Fixed infinite retries on "unexpected tool_use_id": Retries on 400 errors continued endlessly, causing sessions to halt (described above).
  • Fixed 5-minute timeout for MCP tool calls: Calls were timing out at approximately 5 minutes even when a long timeout was set per server (described above).
  • Fixed connection failure for legacy HTTP+SSE-only MCP servers: Servers configured as http were failing to connect when the first request returned a 4xx such as 422.
  • Fixed "Prompt is too long" in hook-driven sessions: When /goal was active, if context overflowed again after reactive compression, the session would exit without compressing. Additionally, an issue where a valid /goal was lost when resuming a compressed session with --continue / --resume has also been fixed.
  • Fixed flag loss after auto-update of claude agents: After restart, --model, --effort, --permission-mode, --allow-dangerously-skip-permissions, and --agent were being lost.
  • Fixed per-turn delays caused by large numbers of language server diagnostics: When diagnostics for an entire project spanning thousands of files were published, per-turn processing was slowing down.
  • Fixed Bash pausing for several seconds after plugin reload: The shell profile was being re-read on every reload. It will now only be re-read when the plugin's bin/ directory changes.
  • Fixed Stop prompt hook resending full prompt: The full prompt was being resent on every block during conversation. Repeated blocks now indicate the condition with a 500-character label.
  • [VS Code] Fixed settings.json corruption: This occurred when setting writes from the extension overlapped (described above).
  • [Claude Tag] Fixed Slack search error within a single channel: Searching with a channel specified was returning an error. It now returns matching messages for that channel.
  • A quietly welcome fix: An issue where the permission prompt preview for Edit sometimes displayed a different location than the approved edit in files containing multibyte characters has been fixed. Since I often edit files containing Japanese, I find it quietly reassuring that the display will no longer show a different location than where I approved the edit.
  • Additional minor bugs have been fixed in areas including display of MCP permission errors, background task notifications, plugin loading, Claude Desktop transcripts, extra windows opening on Wayland, and more.

Breaking Changes

v2.1.274 includes 3 changes that may alter behavior depending on your configuration or runtime environment.

1. "type": "sdk" entries in .mcp.json and similar files will be skipped

MCP entries with "type": "sdk" in .mcp.json, configuration, plugin, and agent files will now be skipped with a warning. Only SDK host applications can register in-process servers.

Here is a configuration example.

Before (up to v2.1.273):

{
  "mcpServers": {
    "my-inprocess-server": {
      "type": "sdk",
      "name": "my-inprocess-server"
    }
  }
}

After (v2.1.274 and later):

The above entry will be skipped with a warning, so it should be removed from the configuration file, and in-process servers should be registered on the SDK host application side.

{
  "mcpServers": {}
}

2. MCP client v2 becomes the default for Bedrock, Vertex, and Foundry

Bedrock, Vertex, and Foundry, as well as installations with telemetry disabled, will now use the v2 MCP client and MCP 2026-07-28 negotiation by default for direct HTTP MCP servers, just like other installations.

To revert to the previous behavior, opt out using either of the following (environment variable names are as stated in the CHANGELOG, with examples below):

export MCP_SDK_GENERATION=v1
# or
export MCP_PROTOCOL_NEGOTIATION=legacy

3. Git LFS files remain as pointers when cloning plugins

Plugin and marketplace clones will now leave Git LFS files as pointers without downloading them. If you need the actual content, run the following within the checkout:

git lfs pull

Closing Thoughts

While v2.1.274 has a large count of 108 changes, the content centers on tightening MCP connection, timeout, and permission handling, along with bug fixes for VS Code, web, and Slack integrations. I see this more as a release that reduces day-to-day friction rather than one that introduces new features.

If you're using MCP servers or operating on Bedrock, Vertex, or Foundry, why not update and check the behavior?

References

https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md

https://code.claude.com/docs/en/changelog

https://dev.classmethod.jp/articles/20260916-cc-updates-v2-1-273/


Claudeならクラスメソッドにお任せください

クラスメソッドは、Anthropic社とリセラー契約を締結しています。各種製品ガイドから、業種別の活用法、フェーズごとのお悩み解決などサービス支援ページにまとめております。まずはご覧いただき、お気軽にご相談ください。

サービス詳細を見る

Share this article

AI白書