{"record":{"id":"162e8949b7b990db","repo":"googleapis/mcp-toolbox","slug":"invalid-s-parameter-expected-an-array","errorCode":null,"errorMessage":"invalid '%s' parameter; expected an array","messagePattern":"invalid '(.+?)' parameter; expected an array","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/tools/firestore/firestorequerycollection/firestorequerycollection.go","lineNumber":355,"sourceCode":"\n\t// Parse limit\n\tif limit, ok := mapParams[limitKey].(int); ok {\n\t\tresult.Limit = limit\n\t}\n\n\t// Parse analyze\n\tif analyze, ok := mapParams[analyzeQueryKey].(bool); ok {\n\t\tresult.AnalyzeQuery = analyze\n\t}\n\n\treturn result, nil\n}\n\n// parseFilters parses and validates filter configurations\nfunc (t Tool) parseFilters(filtersRaw interface{}) ([]FilterConfig, error) {\n\tfilters, ok := filtersRaw.([]any)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(errInvalidFilters, filtersKey)\n\t}\n\n\tif len(filters) > maxFilterLength {\n\t\treturn nil, fmt.Errorf(errTooManyFilters, len(filters), maxFilterLength)\n\t}\n\n\tresult := make([]FilterConfig, 0, len(filters))\n\tfor i, filterRaw := range filters {\n\t\tfilterJSON, ok := filterRaw.(string)\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(errFilterNotString, i)\n\t\t}\n\n\t\tvar filter FilterConfig\n\t\tif err := json.Unmarshal([]byte(filterJSON), &filter); err != nil {\n\t\t\treturn nil, fmt.Errorf(errFilterParseFailed, i, err)\n\t\t}\n","sourceCodeStart":337,"sourceCodeEnd":373,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/internal/tools/firestore/firestorequerycollection/firestorequerycollection.go#L337-L373","documentation":"Parameter-parsing guard in parseFilters: the filters parameter is present but is not a JSON array, so individual filter objects cannot be extracted.","triggerScenarios":"Thrown at internal/tools/firestore/firestorequerycollection/firestorequerycollection.go:355 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass filters as a JSON array of filter objects, e.g. '[{\"field\":\"age\",\"op\":\">\",\"value\":21}]'","Send the array as a JSON string if the parameter schema expects a string"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}