{"record":{"id":"8f44750825e97596","repo":"googleapis/mcp-toolbox","slug":"invalid-prebuilt-config-format-s-did-you-mean","errorCode":null,"errorMessage":"invalid prebuilt config format '%s'. Did you mean '%s/%s'? Use '/' to specify a toolset","messagePattern":"invalid prebuilt config format '(.+?)'\\. Did you mean '(.+?)/(.+?)'\\? Use '/' to specify a toolset","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/internal/options.go","lineNumber":206,"sourceCode":"\t}\n\n\tvar allConfigs []Config\n\n\t// Load Prebuilt Configuration\n\tif len(opts.PrebuiltConfigs) > 0 {\n\t\tslices.Sort(opts.PrebuiltConfigs)\n\t\tsourcesList := strings.Join(opts.PrebuiltConfigs, \", \")\n\t\tlogMsg := fmt.Sprintf(\"Using prebuilt tool configurations for: %s\", sourcesList)\n\t\tlogger.InfoContext(ctx, logMsg)\n\t\tlogger.WarnContext(ctx, \"These prebuilt configs are intended for 'build-time' use cases, where agents are helping trusted developers build things. They are not secure enough for 'run time' use cases, where the agent will be talking to potentially untrusted developers.\")\n\n\t\tfor _, configName := range opts.PrebuiltConfigs {\n\t\t\tif !strings.Contains(configName, \"/\") {\n\t\t\t\tfor _, sep := range []string{\".\", \":\", \"@\"} {\n\t\t\t\t\tif strings.Contains(configName, sep) {\n\t\t\t\t\t\tparts := strings.SplitN(configName, sep, 2)\n\t\t\t\t\t\tif slices.Contains(prebuiltconfigs.GetPrebuiltSources(), parts[0]) {\n\t\t\t\t\t\t\terrMsg := fmt.Errorf(\"invalid prebuilt config format '%s'. Did you mean '%s/%s'? Use '/' to specify a toolset\", configName, parts[0], parts[1])\n\t\t\t\t\t\t\tlogger.ErrorContext(ctx, errMsg.Error())\n\t\t\t\t\t\t\treturn isCustomConfigured, errMsg\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsourceName, toolsetName, _ := strings.Cut(configName, \"/\")\n\n\t\t\tbuf, err := prebuiltconfigs.Get(sourceName)\n\t\t\tif err != nil {\n\t\t\t\tlogger.ErrorContext(ctx, err.Error())\n\t\t\t\treturn isCustomConfigured, err\n\t\t\t}\n\n\t\t\t// Parse into Config struct\n\t\t\tparsed, err := parser.ParseConfig(ctx, buf)\n\t\t\tif err != nil {","sourceCodeStart":188,"sourceCodeEnd":224,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/cmd/internal/options.go#L188-L224","documentation":"LoadConfig validates prebuilt config names, which must be of the form '<source>/<toolset>'. If the name contains '.', ':' or '@' but not '/', and the part before the separator is a known prebuilt source, the toolbox guesses you used the wrong separator and throws this hinting error.","triggerScenarios":"Passing --prebuilt <name> (or --tools-file style prebuilt) like 'postgres-postgres-sql', 'postgres:postgres-sql', or 'postgres@postgres-sql' instead of 'postgres/postgres-sql'.","commonSituations":"Copying a config filename like 'postgres.yaml' or using the Docker image tag syntax 'postgres@sha256:...' when intending to select a source toolset.","solutions":["Replace the separator with '/': use 'postgres/postgres-sql' instead of 'postgres:postgres-sql' or 'postgres.postgres-sql'","Check the list of valid prebuilt sources (docs / prebuilt-configs) to confirm the source name","If loading a local YAML file, pass a file path rather than a prebuilt config name"],"exampleFix":"// before\n--prebuilt postgres:postgres-sql\n// after\n--prebuilt postgres/postgres-sql","handlingStrategy":"validation","validationCode":"const configName = \"postgres:postgres-sql\"\nif !strings.Contains(configName, \"/\") && /[.:@]/.test(configName) {\n    throw new Error(\"prebuilt config must use '/': \" + configName.split(/[.:@]/)[0] + \"/\" + configName.split(/[.:@]/)[1])\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always use '<source>/<toolset>' with a slash for prebuilt configs","Copy toolset names from official docs, not from filenames or image tags","Add shell completion / linting for --prebuilt values in scripts"],"tags":["cli","configuration","prebuilt-configs"],"backgroundTag":"config-name-invalid","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"}