Agent team teammates fail to use ToolSearch / MCP tools despite having them
Bug Description
Teammates spawned via agent teams have ToolSearch and deferred MCP tools in their tool list, but consistently fail to use them. They attempt Skill(ToolSearch) (which fails), then fall back to curl or WebSearch instead of calling ToolSearch as a direct tool.
Environment
- Claude Code version: 2.1.37
- OS: Linux 6.17.0-12-generic
- MCP server: FastMCP 2.14.5, streamable-http transport, Dockerized on port 8080
.mcp.jsonconfigured with"type": "http"pointing tohttp://localhost:8080/mcp
Steps to Reproduce
- Configure an MCP server with HTTP transport in
.mcp.json - Create an agent team with
TeamCreate - Spawn a teammate with a prompt instructing it to use ToolSearch to load MCP tools
- Observe the teammate's behavior
Expected Behavior
Teammate calls ToolSearch directly (like Read or Grep), loads deferred MCP tools, and uses them.
Actual Behavior
Teammate consistently:
- Tries
Skill(ToolSearch)→ fails with "Unknown skill: ToolSearch" - Falls back to
WebSearch("+awl")orcurlto the MCP server directly - Only discovers ToolSearch is a direct tool after explicit correction from the team lead ("list your tools, you will find ToolSearch")
When a teammate is asked to list its own tools, it correctly shows ToolSearch as tool #23 with description "Load deferred MCP tools". But when prompted to use ToolSearch, it misidentifies it as a Skill.
Evidence
Subagents work fine: A subagent (Task without team_name) correctly uses ToolSearch and MCP tools on the first try, every time.
Teammates have the tools: When a teammate is asked to enumerate its tools, ToolSearch appears in the list alongside all deferred mcp__awl__* tools. The tools are there — the model just doesn't use them correctly.
Manual intervention works: When a user directly interacts with a teammate (via Shift+Up/Down) and tells it to call ToolSearch, it works. The issue is that spawned teammates with task prompts don't use ToolSearch unprompted.
Prompts Tried (all failed on first attempt)
"Call ToolSearch with query '+awl'"→ Skill(ToolSearch)"Use the ToolSearch tool (NOT WebSearch!) with query '+awl'"→ Grep search, then curl"YOUR FIRST ACTION MUST BE: Call the tool named 'ToolSearch'"→ Skill(ToolSearch)"Before doing anything, list your tools. You will find ToolSearch."→ still Skill(ToolSearch) first- Explicit correction message from lead → then works
Hypothesis
The model doesn't recognize "ToolSearch" as a built-in tool when processing the spawn prompt. It pattern-matches the name to the Skill invocation mechanism. Subagents don't have this problem because they run in-process and inherit the parent's tool environment with full context about what ToolSearch is.
The teammate session loads the tools correctly (they're in the tool list), but the model's prompt processing doesn't give ToolSearch the same recognition as familiar tools like Read, Grep, or Bash.
Workaround
After the teammate fails with Skill(ToolSearch), send it a direct message: "You DO have ToolSearch. It's a direct tool like Read or Grep. Just call it." The teammate then uses it correctly for the rest of the session.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗