OpenBMB/ChatDev · error · ConfigError
args entries must be strings
Error message
args entries must be strings
What it means
Raised by the stdio-process tooling config parser when the 'args' list contains an entry that is not a string. Args are the argv passed to the spawned command; only strings are accepted.
Source
Thrown at entity/configs/node/tooling.py:512
name="cache_ttl",
display_name="Tool Cache TTL",
type_hint="float",
required=False,
description="Seconds to cache MCP tool list; 0 disables cache for hot updates",
advance=True,
),
}
@classmethod
def from_dict(cls, data: Mapping[str, Any], *, path: str) -> "McpLocalConfig":
mapping = require_mapping(data, path)
command = require_str(mapping, "command", path)
args_raw = ensure_list(mapping.get("args"))
normalized_args: List[str] = []
for idx, arg in enumerate(args_raw):
arg_path = extend_path(path, f"args[{idx}]")
if not isinstance(arg, str):
raise ConfigError("args entries must be strings", arg_path)
normalized_args.append(arg)
cwd = optional_str(mapping, "cwd", path)
inherit_env = optional_bool(mapping, "inherit_env", path, default=True)
if inherit_env is None:
inherit_env = True
env_mapping = mapping.get("env")
if env_mapping is not None:
if not isinstance(env_mapping, Mapping):
raise ConfigError("env must be a mapping", extend_path(path, "env"))
env = {str(k): str(v) for k, v in env_mapping.items()}
else:
env = {}
timeout_value = mapping.get("startup_timeout", 10.0)
if timeout_value is None:
startup_timeout = 10.0View on GitHub (pinned to 4fb2db0ea9)
Solutions
- Quote every arg: "--port", "8080"
- Express boolean flags as their flag string ("--verbose") not true/false
- Run [str(a) for a in args] before from_dict when args are programmatically built
Example fix
# before args: ["--port", 8080] # after args: ["--port", "8080"]
Defensive patterns
Strategy: type-guard
Validate before calling
args = cfg.get("args", [])
assert all(isinstance(a, str) for a in args) Type guard
def valid_args(v) -> bool:
return isinstance(v, list) and all(isinstance(a, str) for a in v) Try / catch
except ConfigError as e:
if "args entries" in str(e):
cfg["args"] = [str(a) for a in cfg["args"]] Prevention
- Quote CLI numbers in YAML: "8080" not 8080
- Express flags as "--verbose", never true/false
- Stringify programmatically built argv lists
When it happens
Trigger: args: ["--port", 8080] in a tooling config with a command like 'npx'; booleans (true) intended as flags; nested lists.
Common situations: Writing args: [--verbose] in YAML (becomes bool or null); JSON configs generated from Python lists with ints; passing flags as true instead of "--verbose".
Related errors
- env must be a mapping
- startup_timeout must be numeric
- tooling must be a list
- cache_ttl must be numeric
- tool_sources must be a list of strings
AI-assisted analysis of OpenBMB/ChatDev@4fb2db0ea9 (2026-08-27).
Data as JSON: /api/errors/d81fb3420325ee6f.
Report an issue: GitHub.