amazon-bedrock provider: namespace_tools capability breaks Bedrock Mantle (validation_error)
Bug
The built-in amazon-bedrock provider sets namespace_tools: true in its capabilities (mod.rs:60). This causes Codex to serialize tools using the {"type": "namespace", ...} wrapper format. However, Bedrock Mantle's Responses API schema validator only accepts "function" and "mcp" tool types, rejecting "namespace" with:
{"error":{"code":"validation_error","message":"Failed to deserialize the JSON body into the target type: ?[13]: Invalid 'tools': unknown variant `namespace`, expected `function` or `mcp` at line 1 column 107773","param":null,"type":"invalid_request_error"}}
This is a separate issue from the URL path bug (#23650 / #21352). Even after fixing the /openai/v1 → /v1 path, users with any meaningful number of tools (MCP servers, built-in shell/apply_patch, etc.) will hit this error because namespace_tools: true wraps all tool definitions in the unsupported format.
Reproduction
- Fix the Mantle URL path (per #23650) so requests actually reach the server
- Use the
amazon-bedrockprovider with default config (any registered MCP servers or built-in tools) - Run
codex exec "hello"→ HTTP 400 validation_error aboutnamespace
With a minimal config (no MCP, features like code_mode/multi_agent_v2 off), the namespace wrapping doesn't fire for the few remaining tools, so it works. But any real-world config triggers it.
Root Cause
// codex-rs/model-provider/src/amazon_bedrock/mod.rs:58-62
fn capabilities(&self) -> ProviderCapabilities {
ProviderCapabilities {
namespace_tools: true, // ← Mantle doesn't support this
image_generation: false,
web_search: false,
}
}
When namespace_tools is true, core/src/tools/spec_plan.rs:876 wraps Function tools into Namespace:
ToolSpec::Function(tool) => ToolSpec::Namespace(ResponsesApiNamespace { ... })
The "namespace" tool type is an OpenAI-proprietary extension that Bedrock Mantle has not implemented.
Suggested Fix
fn capabilities(&self) -> ProviderCapabilities {
ProviderCapabilities {
namespace_tools: false, // Mantle only accepts "function" and "mcp"
image_generation: false,
web_search: false,
}
}
Environment
- Codex CLI v0.135.0
- Bedrock Mantle all regions (us-east-1, us-west-2, etc.)
- AWS Account with
openai.gpt-oss-120bmodel access - Tested 2026-05-29
3 Comments
Workaround (verified on v0.135.0)
Add one line to your
config.toml:This is the only setting needed for
model_provider = "amazon-bedrock"+openai.gpt-oss-120b.(If using a custom provider pointing at Mantle — i.e. not the built-in
amazon-bedrockprovider — you also needweb_search = "disabled"because custom providers inheritProviderCapabilities::default()which hasweb_search: true.)Why this works
The root cause is the Collab V1 code path. By default:
Feature::Collab= true (stable,default_enabled: true)Feature::MultiAgentV2= false (default_enabled: false, under development)This combination triggers
add_collaboration_tools()→ V1 path →create_spawn_agent_tool_v1()which hardcodesToolSpec::Namespace { name: "multi_agent_v1", ... }.Setting
multi_agent_v2 = trueswitches to the V2 path, wheretool_namespacedefaults toNone→multi_agent_v2_handler(handler, None)returns the handler directly asToolSpec::Function— no namespace wrapping.This is an upgrade, not a workaround
| | V1 path (default) | V2 path (
multi_agent_v2 = true) ||--|---|---|
| Tool format |
ToolSpec::Namespace(hardcoded) |ToolSpec::Function|| Mantle direct | ❌ rejected | ✅ works |
| Via LiteLLM | Silent degradation (sub-tools lost, replaced by empty
litellm_unnamed_tool_N) | ✅ tools properly exposed || Multi-agent collab | Non-functional on both paths | Fully functional |
With V1, the 5 collab tools (spawn_agent, send_message, wait_agent, list_agents, stop_agent) were never actually usable on Bedrock — either rejected by Mantle or silently dropped by LiteLLM's transform layer. V2 makes them work for the first time.
Impact of
multi_agent_v2 = trueNo functionality loss. Same collab tools (spawn_agent, send_message, etc.) are exposed as plain
{"type":"function"}instead of being wrapped in a namespace group. All coding capabilities (shell, apply_patch, etc.) are completely unaffected.Version history of
namespace_toolsfor amazon-bedrock| Version range |
namespace_tools| Behavior ||---|---|---|
| ≤ v0.124 (before PR #19442) |
true(default) | namespace sent → Mantle rejects || v0.128 ~ v0.134 (PR #19442) |
false| namespace filtered out → no error, but collab tools completely unavailable || v0.135.0 (PR #24713) |
true| namespace sent → Mantle rejects (this issue) || v0.135.0 +
multi_agent_v2=true|true(unchanged) | V2 path produces Function format → Mantle accepts ✅ |PR #24713 commit message states "Client-side namespace tools are now supported by bedrock" — this is incorrect. Neither Bedrock Mantle nor Bedrock Runtime accepts
"type": "namespace"(both verified via curl 2026-05-29/06-01).can confirm that this didn't work for me .
version 0.136
on gpt-5.5
Bedrock openai.gpt-5.5 already support namespace tool type, so i think this issue may close.