[BUG] Project subagents with `model: opus` don't receive MCP tools (CC 2.1.131)
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 on2.1.128intermittently) - OS: Windows 11 Enterprise (10.0.26200)
- Node: 24.x
- MCP servers: declared via
.mcp.jsonin project root, all running vianode mcps/<name>/src/index.js
## Reproduction
- Create
.mcp.jsonwith at least one MCP server (e.g.mcp_logexposinglog_inicio,log_fin). - 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.
```
- 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.")
- Observed: subagent reports
Tools available: Read, Write, Glob, Grep, Bash. Calls tomcp_log.log_inicioand 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__*andmcp__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 on2.1.128intermittently) - OS: Windows 11 Enterprise (10.0.26200)
- Node: 24.x
- MCP servers: declared via
.mcp.jsonin project root, all running vianode mcps/<name>/src/index.js
## Reproduction
- Create
.mcp.jsonwith at least one MCP server (e.g.mcp_logexposinglog_inicio,log_fin). - 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.
```
- 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.")
- Observed: subagent reports
Tools available: Read, Write, Glob, Grep, Bash. Calls tomcp_log.log_inicioand 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__*andmcp__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_
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗