{"record":{"id":"a9e84c5f682f75b2","repo":"googleapis/mcp-toolbox","slug":"http-error-response-status-errorbody","errorCode":null,"errorMessage":"HTTP error ${response.status}: ${errorBody}","messagePattern":"HTTP error (.+?): (.+?)","errorType":"http","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"internal/server/static/js/runTool.js","lineNumber":107,"sourceCode":"                arguments: typedParams\n            }\n        };\n\n        const mcpHeaders = { \n            ...headers, \n            'Content-Type': 'application/json',\n            'MCP-Protocol-Version': '2025-11-25'\n        };\n\n        const response = await fetch(`/mcp`, {\n            method: 'POST',\n            headers: mcpHeaders,\n            body: JSON.stringify(body)\n        });\n\n        if (!response.ok) {\n            const errorBody = await response.text();\n            throw new Error(`HTTP error ${response.status}: ${errorBody}`);\n        }\n        \n        const results = await response.json();\n        updateLastResults(results);\n        displayResults(results, responseArea, prettifyCheckbox.checked);\n    } catch (error) {\n        console.error('Error running tool:', error);\n        responseArea.value = `Error: ${error.message}`;\n        updateLastResults(null);\n    }\n}\n\n/**\n * Parses and validates a single array parameter from a raw string value.\n * @param {string} rawValue The raw string value from FormData.\n * @param {string} valueType The full array type string (e.g., \"array<number>\").\n * @param {string} paramName The name of the parameter for error messaging.\n * @return {!Array<*>} The parsed array.","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/internal/server/static/js/runTool.js#L89-L125","documentation":"An \"arrayValue\" must be a map containing a \"values\" key whose value is a JSON array ([]any). If either shape check fails, this error is returned. This mirrors Firestore's REST representation of arrays.","triggerScenarios":"Passing {\"arrayValue\": [1,2,3]} (array directly, not wrapped), {\"arrayValue\": {\"items\": [...]}} (wrong key), or {\"arrayValue\": {\"values\": \"abc\"}} (values not an array).","commonSituations":"Developers hand-rolling Firestore JSON and omitting the \"values\" wrapper; configs migrated from a different serialization format.","solutions":["Wrap the elements: {\"arrayValue\": {\"values\": [<elements>]}}.","Use the exact key name \"values\".","Ensure \"values\" decodes as a JSON array, not a scalar or object."],"exampleFix":"// before\n{\"arrayValue\": [1, 2, 3]}\n// after\n{\"arrayValue\": {\"values\": [1, 2, 3]}}","handlingStrategy":"type-guard","validationCode":"func validArrayValue(v any) bool {\n    m, ok := v.(map[string]any); if !ok { return false }\n    _, ok = m[\"values\"].([]any); return ok\n}","typeGuard":"func asArrayValue(v any) ([]any, bool) {\n    m, ok := v.(map[string]any); if !ok { return nil, false }\n    vals, ok := m[\"values\"].([]any); return vals, ok\n}","tryCatchPattern":"if _, err := JSONToFirestoreValue(val, client); err != nil {\n    if strings.Contains(err.Error(), \"invalid array value format\") { /* wrap elements in {\"values\": [...]} */ }\n}","preventionTips":["Always wrap array elements under the \"values\" key","Use the Firestore REST value shape when hand-building payloads","Prefer passing plain Go slices and letting the converter's default branch handle them"],"tags":["firestore","array","shape-validation"],"backgroundTag":"invalid-array-value-format","analyzedSha":"8cc6e09de2ad7b8bffc77751799585a1401a48eb","analyzedAt":"2026-09-05T01:10:36.887Z","contentChangedAt":"2026-09-05T01:10:36.887Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}