Skip to content

bug: -c 'mcp_servers={}' silently no-ops instead of clearing MCP servers #16045

@chriscoey

Description

@chriscoey

Summary

-c 'mcp_servers={}' is intended to clear all MCP servers for a single invocation, but it silently does nothing. TOML {} creates an empty inline table that merges non-destructively with the existing config, leaving all servers enabled.

Repro

# config.toml has MCP servers defined
codex mcp list
# Shows: context7 (enabled), fetcher (enabled), tavily (enabled), ...

# Attempt to clear all servers
codex mcp list -c 'mcp_servers={}'
# Expected: no servers, or all disabled
# Actual: identical output — all servers still enabled

# Workaround: disable per-server
codex mcp list -c 'mcp_servers.context7.enabled=false'
# This works — context7 shows as disabled

Why this matters

Users running codex exec programmatically (e.g., from Claude Code or CI) want lightweight invocations without MCP server overhead. The intuitive override mcp_servers={} appears to work (no error) but silently loads all servers anyway, adding ~5K tokens of tool schemas and boot latency per call.

The per-server workaround (-c 'mcp_servers.X.enabled=false' repeated for each server) works but doesn't scale — you need to know every server name and add a -c flag for each one.

Suggested fix

Either:

  1. Treat -c 'mcp_servers={}' as "replace the table" rather than "merge empty table" (breaking but correct)
  2. Add a --disable-all-mcp flag or --no-mcp shorthand
  3. Document the limitation in codex exec --help

Environment

  • codex v0.117.0-alpha.24
  • macOS 15.4

Metadata

Metadata

Assignees

No one assigned

    Labels

    CLIIssues related to the Codex CLIbugSomething isn't workingmcpIssues related to the use of model context protocol (MCP) servers

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions