{"record":{"id":"fa33498bf28477f3","repo":"xai-org/grok-build","slug":"invalid-header-header-header-name-cannot-be","errorCode":null,"errorMessage":"Invalid header: '{header}'. Header name cannot be empty.","messagePattern":"Invalid header: '(.+?)'\\. Header name cannot be empty\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/codegen/xai-grok-pager/src/mcp_cmd.rs","lineNumber":458,"sourceCode":"                env.insert(key.to_string(), value.to_string());\n            }\n            _ => bail!(\n                \"Invalid environment variable format: '{pair}'. Environment variables should be added as: -e KEY1=value1 -e KEY2=value2\"\n            ),\n        }\n    }\n    Ok(env)\n}\n\nfn parse_headers(headers: &[String]) -> Result<HashMap<String, String>> {\n    let mut parsed = HashMap::new();\n    for header in headers {\n        let Some((name, value)) = header.split_once(':') else {\n            bail!(\"Invalid header format: '{header}'. Expected format: 'Name: value'\");\n        };\n        let name = name.trim();\n        if name.is_empty() {\n            bail!(\"Invalid header: '{header}'. Header name cannot be empty.\");\n        }\n        parsed.insert(name.to_string(), value.trim().to_string());\n    }\n    Ok(parsed)\n}\n\nfn looks_like_url(command: &str) -> bool {\n    command.starts_with(\"http://\")\n        || command.starts_with(\"https://\")\n        || command.starts_with(\"localhost\")\n}\n\n/// True for `KEY=value` shapes with a `[A-Za-z_][A-Za-z0-9_]*` key.\nfn looks_like_env_pair(s: &str) -> bool {\n    let Some((key, _)) = s.split_once('=') else {\n        return false;\n    };\n    let mut chars = key.chars();","sourceCodeStart":440,"sourceCodeEnd":476,"githubUrl":"https://github.com/xai-org/grok-build/blob/bc7f02eddd3d84085849dc19ed216f11c23b0571/crates/codegen/xai-grok-pager/src/mcp_cmd.rs#L440-L476","documentation":"After splitting a --header value on the first colon, the header name is trimmed; if it is empty (e.g. the string starts with ':') the header is rejected because an HTTP header must have a non-empty name.","triggerScenarios":"`--header ': somevalue'` or `--header ':'` — a colon is present but everything before it is empty or whitespace only.","commonSituations":"Accidentally deleting the header name while editing a command, template variables that expanded to an empty name (`--header '${H}: v'` with H unset).","solutions":["Provide a non-empty header name before the colon.","Verify templated header names actually expand (e.g. ${H} is set).","Remove the empty header flag entirely if it is not needed."],"exampleFix":"// before\ngrok mcp add acme --transport http https://acme.example.com/mcp --header ': secret'\n// after\ngrok mcp add acme --transport http https://acme.example.com/mcp --header 'X-Api-Key: secret'","handlingStrategy":"validation","validationCode":"for h in headers {\n    let name = h.split_once(':').map(|(n, _)| n.trim()).unwrap_or(\"\");\n    assert!(!name.is_empty(), \"header '{h}' has an empty name\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Verify templated header names expand to non-empty values.","Always include the header name before the colon."],"tags":["cli","mcp","http-headers","validation"],"backgroundTag":"invalid-header-format","analyzedSha":"bc7f02eddd3d84085849dc19ed216f11c23b0571","analyzedAt":"2026-08-31T04:59:42.031Z","schemaVersion":2},"datasetVersion":"2026-08-31T09:17:48.483Z"}