[BUG] Project subagents with `model: opus` don't receive MCP tools (CC 2.1.131)

Resolved 💬 3 comments Opened May 6, 2026 by KoxkorSua Closed May 10, 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

What's Wrong?

Summary

In Claude Code 2.1.131, when a Project subagent (.claude/agents/<name>.md) declares model: opus in its frontmatter, the subagent starts without any MCP tools — even when its tools: list explicitly
references MCP servers/tools. The same agent with model: sonnet works correctly. Built-in subagents (general-purpose) also receive MCPs as expected. This appears to be a regression: in 2.1.128 the issue
was intermittent, in 2.1.131 it is 100% reproducible.

## Environment

  • Claude Code version: 2.1.131 (also reproduces on 2.1.128 intermittently)
  • OS: Windows 11 Enterprise (10.0.26200)
  • Node: 24.x
  • MCP servers: declared via .mcp.json in project root, all running via node mcps/<name>/src/index.js

## Reproduction

  1. Create .mcp.json with at least one MCP server (e.g. mcp_log exposing log_inicio, log_fin).
  2. Create a Project subagent at .claude/agents/test-opus.md:

```markdown
---
name: test-opus
description: Reproduces MCP-tools-not-propagated bug.
model: opus
tools:

  • Read
  • Write
  • Bash
  • mcp_log
  • mcp_pipeline_io

---
List your available tools. Try calling mcp_log.log_inicio. Report results.
```

  1. From a top-level CC session, invoke:

``
Task(subagent_type="test-opus", prompt="Diagnostic: list every tool you have access to. Try calling mcp_log.log_inicio. Report exactly what you see.")
``

  1. Observed: subagent reports Tools available: Read, Write, Glob, Grep, Bash. Calls to mcp_log.log_inicio and any other MCP fail with "tool not available in toolset".

## Expected behaviour

The subagent should expose at least the MCP tools whose servers are declared in .mcp.json. Either:

  • Honor the tools: list and expose those MCP tools, or
  • Document that the tools: field requires a specific MCP-tool naming convention and reject invalid entries with a visible warning.

## Control test that proves it is model: opus-specific

Same exact agent file but model: sonnet:

``yaml
model: sonnet
``

Subagent now reports the full MCP toolbelt:
``
mcp__mcp_log__log_inicio, mcp__mcp_log__log_fin, mcp__mcp_pipeline_io__get_instructions, ...
``

I tested four tools: syntaxes (mcp_log bare, mcp__mcp_log server-prefix, mcp__mcp_log__log_inicio full, and omitting tools: entirely to inherit) — all four fail with model: opus and all four work
with model: sonnet. So the frontmatter is not the cause. The model selector is.

The built-in general-purpose subagent (which has no Project frontmatter) also receives the full MCP toolbelt regardless. The bug is specific to Project agents whose model: resolves to opus.

## Why this matters

Pipelines that legitimately delegate complex reasoning to opus subagents (large analyses, optimization, multi-step planning) cannot run at all. Either every Project agent is forced to sonnet, or the pipeline
fails at the first opus step.

## Workaround

Replace model: opus with model: sonnet in every affected Project agent. Functional impact: lower depth on complex reasoning tasks, but pipeline runs end-to-end. We are tracking this as DIST-27 internally
and have an automated test (verify-dist.js) that fails CI if any Project agent declares model: opus until this is fixed upstream.

## Logs / additional artifacts I can share if useful

  • Sub-agent output dumps for all four tools: syntaxes (opus vs sonnet) — confirms identical model: opus → no MCPs, sonnet → all MCPs.
  • Pipeline log snippets where multiple sonnet subagents complete normally with mcp__mcp_svn__* and mcp__mcp_log__* calls, then the first opus subagent in the same session aborts because it doesn't see

those tools.

Happy to attach in a follow-up comment if helpful.

What Should Happen?

In Claude Code 2.1.131, when a Project subagent (.claude/agents/<name>.md) declares model: opus in its frontmatter, the subagent starts without any MCP tools — even when its tools: list explicitly
references MCP servers/tools. The same agent with model: sonnet works correctly. Built-in subagents (general-purpose) also receive MCPs as expected. This appears to be a regression: in 2.1.128 the issue
was intermittent, in 2.1.131 it is 100% reproducible.

Error Messages/Logs

## Environment

  - **Claude Code version:** `2.1.131` (also reproduces on `2.1.128` intermittently)
  - **OS:** Windows 11 Enterprise (10.0.26200)
  - **Node:** 24.x
  - **MCP servers:** declared via `.mcp.json` in project root, all running via `node mcps/<name>/src/index.js`

  ## Reproduction

  1. Create `.mcp.json` with at least one MCP server (e.g. `mcp_log` exposing `log_inicio`, `log_fin`).
  2. Create a Project subagent at `.claude/agents/test-opus.md`:

     
     ---
     name: test-opus
     description: Reproduces MCP-tools-not-propagated bug.
     model: opus
     tools:
       - Read
       - Write
       - Bash
       - mcp_log
       - mcp_pipeline_io
     ---
     List your available tools. Try calling mcp_log.log_inicio. Report results.
     

  3. From a top-level CC session, invoke:

     
     Task(subagent_type="test-opus", prompt="Diagnostic: list every tool you have access to. Try calling mcp_log.log_inicio. Report exactly what you see.")
     

  4. **Observed:** subagent reports `Tools available: Read, Write, Glob, Grep, Bash`. Calls to `mcp_log.log_inicio` and any other MCP fail with "tool not available in toolset".

  ## Expected behaviour

  The subagent should expose at least the MCP tools whose servers are declared in `.mcp.json`. Either:
  - Honor the `tools:` list and expose those MCP tools, or
  - Document that the `tools:` field requires a specific MCP-tool naming convention and reject invalid entries with a visible warning.

  ## Control test that proves it is `model: opus`-specific

  Same exact agent file but `model: sonnet`:

  
  model: sonnet
  

  Subagent now reports the full MCP toolbelt:
  
  mcp__mcp_log__log_inicio, mcp__mcp_log__log_fin, mcp__mcp_pipeline_io__get_instructions, ...
  

  I tested four `tools:` syntaxes (`mcp_log` bare, `mcp__mcp_log` server-prefix, `mcp__mcp_log__log_inicio` full, and omitting `tools:` entirely to inherit) — all four fail with `model: opus` and all four work
   with `model: sonnet`. So the frontmatter is not the cause. The model selector is.

  The built-in `general-purpose` subagent (which has no Project frontmatter) also receives the full MCP toolbelt regardless. The bug is specific to Project agents whose `model:` resolves to opus.

  ## Why this matters

  Pipelines that legitimately delegate complex reasoning to opus subagents (large analyses, optimization, multi-step planning) cannot run at all. Either every Project agent is forced to sonnet, or the pipeline
   fails at the first opus step.

  ## Workaround

  Replace `model: opus` with `model: sonnet` in every affected Project agent. Functional impact: lower depth on complex reasoning tasks, but pipeline runs end-to-end. We are tracking this as DIST-27 internally
   and have an automated test (`verify-dist.js`) that fails CI if any Project agent declares `model: opus` until this is fixed upstream.

  ## Logs / additional artifacts I can share if useful

  - Sub-agent output dumps for all four `tools:` syntaxes (opus vs sonnet) — confirms identical model: opus → no MCPs, sonnet → all MCPs.
  - Pipeline log snippets where multiple sonnet subagents complete normally with `mcp__mcp_svn__*` and `mcp__mcp_log__*` calls, then the first opus subagent in the same session aborts because it doesn't see
  those tools.

  Happy to attach in a follow-up comment if helpful.

Steps to Reproduce

## Environment

  • Claude Code version: 2.1.131 (also reproduces on 2.1.128 intermittently)
  • OS: Windows 11 Enterprise (10.0.26200)
  • Node: 24.x
  • MCP servers: declared via .mcp.json in project root, all running via node mcps/<name>/src/index.js

## Reproduction

  1. Create .mcp.json with at least one MCP server (e.g. mcp_log exposing log_inicio, log_fin).
  2. Create a Project subagent at .claude/agents/test-opus.md:

```markdown
---
name: test-opus
description: Reproduces MCP-tools-not-propagated bug.
model: opus
tools:

  • Read
  • Write
  • Bash
  • mcp_log
  • mcp_pipeline_io

---
List your available tools. Try calling mcp_log.log_inicio. Report results.
```

  1. From a top-level CC session, invoke:

``
Task(subagent_type="test-opus", prompt="Diagnostic: list every tool you have access to. Try calling mcp_log.log_inicio. Report exactly what you see.")
``

  1. Observed: subagent reports Tools available: Read, Write, Glob, Grep, Bash. Calls to mcp_log.log_inicio and any other MCP fail with "tool not available in toolset".

## Expected behaviour

The subagent should expose at least the MCP tools whose servers are declared in .mcp.json. Either:

  • Honor the tools: list and expose those MCP tools, or
  • Document that the tools: field requires a specific MCP-tool naming convention and reject invalid entries with a visible warning.

## Control test that proves it is model: opus-specific

Same exact agent file but model: sonnet:

``yaml
model: sonnet
``

Subagent now reports the full MCP toolbelt:
``
mcp__mcp_log__log_inicio, mcp__mcp_log__log_fin, mcp__mcp_pipeline_io__get_instructions, ...
``

I tested four tools: syntaxes (mcp_log bare, mcp__mcp_log server-prefix, mcp__mcp_log__log_inicio full, and omitting tools: entirely to inherit) — all four fail with model: opus and all four work
with model: sonnet. So the frontmatter is not the cause. The model selector is.

The built-in general-purpose subagent (which has no Project frontmatter) also receives the full MCP toolbelt regardless. The bug is specific to Project agents whose model: resolves to opus.

## Why this matters

Pipelines that legitimately delegate complex reasoning to opus subagents (large analyses, optimization, multi-step planning) cannot run at all. Either every Project agent is forced to sonnet, or the pipeline
fails at the first opus step.

## Workaround

Replace model: opus with model: sonnet in every affected Project agent. Functional impact: lower depth on complex reasoning tasks, but pipeline runs end-to-end. We are tracking this as DIST-27 internally
and have an automated test (verify-dist.js) that fails CI if any Project agent declares model: opus until this is fixed upstream.

## Logs / additional artifacts I can share if useful

  • Sub-agent output dumps for all four tools: syntaxes (opus vs sonnet) — confirms identical model: opus → no MCPs, sonnet → all MCPs.
  • Pipeline log snippets where multiple sonnet subagents complete normally with mcp__mcp_svn__* and mcp__mcp_log__* calls, then the first opus subagent in the same session aborts because it doesn't see

those tools.

Happy to attach in a follow-up comment if helpful.

Claude Model

Opus

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

2.1.131

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

PowerShell

Additional Information

_No response_

View original on GitHub ↗

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