alibaba/open-code-review · error
header name must not be empty
Error message
header name must not be empty
What it means
parseMCPHeaders validates each parsed header pair and rejects a header with an empty name using "header name must not be empty". An empty key in the JSON object cannot be sent as an HTTP header, so it is refused during config entry rather than failing later at request time.
Source
Thrown at cmd/opencodereview/config_cmd.go:943
entry.Setup = value
default:
return fmt.Errorf("unknown MCP server field %q: supported fields are type, command, args, env, url, headers, tools, setup", field)
}
cfg.MCPServers[name] = entry
return nil
}
// parseMCPHeaders parses a JSON object of header key-value pairs.
// Example: {"Authorization": "Bearer $TOKEN", "X-Custom": "value"}
func parseMCPHeaders(value string) (map[string]string, error) {
var m map[string]string
if err := json.Unmarshal([]byte(value), &m); err != nil {
return nil, fmt.Errorf("expected JSON object: %w", err)
}
for k, v := range m {
if k == "" {
return nil, fmt.Errorf("header name must not be empty")
}
if v == "" {
return nil, fmt.Errorf("header value for %q must not be empty", k)
}
}
return m, nil
}
func (c *Config) ensureTelemetry() {
if c.Telemetry == nil {
c.Telemetry = &TelemetryConfig{}
}
}
View on GitHub (pinned to 5cf97d0d15)
Solutions
- Provide a non-empty key for every pair: '{"Authorization":"Bearer t"}'
- Check shell expansions used to build the JSON — ensure the key variable is set
- Edit the stored config entry directly if it was written programmatically
Example fix
// before
ocr config set mcp-servers.myserver.headers '{"": "bearer-token"}'
// after
ocr config set mcp-servers.myserver.headers '{"Authorization": "Bearer token"}' Defensive patterns
Strategy: validation
Validate before calling
func keysNonEmpty(s string) bool {
var m map[string]string
if json.Unmarshal([]byte(s), &m) != nil { return false }
for k := range m { if k == "" { return false } }
return true
} Type guard
func hasEmptyKey(m map[string]string) bool { _, ok := m[""]; return ok } Try / catch
if err := setMCPServerValue(cfg, name, "headers", raw); err != nil {
if strings.Contains(err.Error(), "header name must not be empty") { /* fix the empty key */ }
return err
} Prevention
- Never build header keys from possibly-empty env expansions
- Validate with jq: `jq 'keys | all(length > 0)'`
- Review generated JSON before passing it to the setter
When it happens
Trigger: A headers JSON object containing an empty-string key, e.g. '{"":"value"}' — typically from template interpolation that produced an empty variable name, or accidental deletion of a key in an editor.
Common situations: Unset environment variable interpolated into the key position (e.g. '{"$HDR_NAME":"v"}' with $HDR_NAME empty via naive shell expansion); copy-paste that dropped the key.
Related errors
- invalid MCP server key %q: expected mcp_servers.<name>.<fiel
- invalid MCP server type %q: must be "stdio" or "remote"
- MCP server command cannot be empty
- invalid JSON array for %s: %w
- invalid env entry %q: must be in KEY=VALUE format
AI-assisted analysis of alibaba/open-code-review@5cf97d0d15 (2026-09-02).
Data as JSON: /api/errors/585b68582a8dcff2.
Report an issue: GitHub.