googleapis/mcp-toolbox · error
can't convert types to array of strings: %w
Error message
can't convert types to array of strings: %w
What it means
InvokeSearchCatalog converts the types parameter (Dataplex entry type filters such as TABLE, DATASET) from []any to []string using parameters.ConvertAnySliceToTyped. If elements are not strings the conversion fails with this wrapped error, preventing invalid type filters from reaching ConstructSearchQuery.
Source
Thrown at internal/sources/dataplex/searchcatalog/search_catalog.go:158
) ([]DataplexSearchResponse, error) {
pageSize := int32(paramsMap["pageSize"].(int))
prompt, _ := paramsMap["prompt"].(string)
projectIdSlice, err := parameters.ConvertAnySliceToTyped(paramsMap["projectIds"].([]any), "string")
if err != nil {
return nil, fmt.Errorf("can't convert projectIds to array of strings: %w", err)
}
projectIds := projectIdSlice.([]string)
parentIdSlice, err := parameters.ConvertAnySliceToTyped(paramsMap[parentParamName].([]any), "string")
if err != nil {
return nil, fmt.Errorf("can't convert %s to array of strings: %w", parentParamName, err)
}
parentIds := parentIdSlice.([]string)
typesSlice, err := parameters.ConvertAnySliceToTyped(paramsMap["types"].([]any), "string")
if err != nil {
return nil, fmt.Errorf("can't convert types to array of strings: %w", err)
}
types := typesSlice.([]string)
query := ConstructSearchQuery(prompt, projectIds, parentIds, types, systemName)
req := &dataplexpb.SearchEntriesRequest{
Query: query,
Name: fmt.Sprintf("projects/%s/locations/global", projectID),
PageSize: pageSize,
SemanticSearch: true,
}
catalogClient, err := getCatalogClient(ctx, tokenStr)
if err != nil {
return nil, fmt.Errorf("failed to get catalog client: %w", err)
}
return ExecuteSearch(ctx, catalogClient, req, typeMap)View on GitHub (pinned to 8cc6e09de2)
Solutions
- Send types as an array of strings, e.g. ["TABLE","VIEW"], or [] if empty
- Ensure the key exists (empty array rather than omitted) if the client always serializes it
- Normalize any enum-like values to plain uppercase strings
- Validate client-side that every element is a string before invoking
Example fix
// before
{"types": [null, {"type": "TABLE"}]}
// after
{"types": ["TABLE"]} Defensive patterns
Strategy: validation
Validate before calling
func allStrings(v []any) bool {
for _, e := range v { if _, ok := e.(string); !ok { return false } }
return true
}
// require types (if present) to be []any of strings Type guard
t, ok := paramsMap["types"].([]any); if ok && !allStrings(t) { return errors.New("types must be strings") } Try / catch
res, err := searchcatalog.InvokeSearchCatalog(ctx, src, params)
if err != nil {
if strings.Contains(err.Error(), "can't convert types") {
return fmt.Errorf("types must be an array of strings: %w", err)
}
return err
} Prevention
- Send types as ["TABLE","VIEW"] style string arrays
- Use [] rather than omitting the key when the client always serializes lists
- Whitelist known Dataplex entry type strings before sending
When it happens
Trigger: Invoking search_catalog with types containing non-string values (numbers, booleans, null entries) or the key absent so the type assertion to []any fails.
Common situations: Clients omitting types (key missing) instead of sending an empty array; agents passing type objects/dicts instead of plain strings; casing mistakes are fine value-wise but only string type matters here.
Related errors
- can't convert projectIds to array of strings: %w
- can't convert %s to array of strings: %w
- dataplex catalog client is nil
- failed to create search entries iterator
- can't convert fields to array of strings: %s
AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05).
Data as JSON: /api/errors/a166efac795a86ee.
Report an issue: GitHub.