googleapis/mcp-toolbox · error

toolset %q not found

Error message

toolset %q not found

What it means

`buildSkillContents` throws "toolset %q not found" when the `--toolset` flag passed to `skills-generate` names a toolset that is not present in the initialized primitive manager (`primitiveMgr.GetGroup(c.toolset)` fails). Toolsets are registered as groups keyed by their config name, so an unknown or uninitialized name produces this error and stops skill generation.

Source

Thrown at cmd/internal/skills/command.go:309

			}
		}
		return groupTools
	}

	if c.group != "" {
		g, ok := primitiveMgr.GetGroup(c.group)
		if !ok {
			return nil, fmt.Errorf("group %q not found", c.group)
		}

		skillsToContents[c.name] = skillContent{tools: getToolsFromGroup(g), description: c.descriptionFor(g)}
		return skillsToContents, nil
	}

	if c.toolset != "" {
		g, ok := primitiveMgr.GetGroup(c.toolset)
		if !ok {
			return nil, fmt.Errorf("toolset %q not found", c.toolset)
		}

		skillsToContents[c.name] = skillContent{tools: getToolsFromGroup(g), description: c.description}
		return skillsToContents, nil
	}

	if len(groupsMap) <= 1 {
		// Default to all tools if no named group found. The default nameless
		// group's description (if any) takes precedence over the flag.
		skillsToContents[c.name] = skillContent{tools: toolsMap, description: c.descriptionFor(groupsMap[""])}
		return skillsToContents, nil
	}

	// One skill per group
	for gName, g := range groupsMap {
		if gName == "" {
			continue
		}

View on GitHub (pinned to 8cc6e09de2)

Solutions

  1. Check the `toolsets:` keys in your config file and match `--toolset` exactly (case-sensitive)
  2. Use `--group` instead if the target is a group, not a toolset
  3. Omit `--toolset` entirely to generate a skill from all tools
  4. Verify the loaded config file is the one containing the toolset (`--config-file` path)

Example fix

// before
toolbox skills-generate --toolset myTools
// after (toolset key in config is "my-tools")
toolbox skills-generate --toolset my-tools
Defensive patterns

Strategy: validation

Validate before calling

// Ensure the toolset key exists in the config
b, _ := os.ReadFile(cfgPath)
var cfg struct { Toolsets map[string]yaml.Node `yaml:"toolsets"` }
_ = yaml.Unmarshal(b, &cfg)
if _, ok := cfg.Toolsets["my-tools"]; !ok {
	return fmt.Errorf("toolset %q not defined in %s", "my-tools", cfgPath)
}

Try / catch

if _, ok := primitiveMgr.GetGroup(toolsetName); !ok {
	return fmt.Errorf("toolset %q not found; available: %v", toolsetName, primitiveMgr.GroupNames())
}

Prevention

When it happens

Trigger: `toolbox skills-generate --toolset <name>` where `<name>` is not a key in the config's `toolsets:` section (or equivalent prebuilt toolset), is misspelled, or the toolset failed to initialize; note the same `GetGroup` lookup backs both `--group` and `--toolset`.

Common situations: Typo in toolset name; passing a group name to `--toolset`; using a toolset removed/renamed in a newer config; forgetting that when neither flag is given all tools are included, so this only fires when the flag is set.

Related errors


AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05). Data as JSON: /api/errors/378b5184585e431a. Report an issue: GitHub.