angular/angular-cli · warning

Unknown experimental tool: ${toolName}

Error message

Unknown experimental tool: ${toolName}

What it means

assembleToolDeclarations iterates the configured list of enabled experimental MCP tools. If a configured tool name matches neither a known experimental tool nor a stable tool declaration, the CLI warns that the tool is unknown and simply skips it.

Source

Thrown at packages/angular/cli/src/commands/mcp/mcp-server.ts:217

  const enabledExperimentalTools = new Set(options.experimentalTools);
  for (const [toolGroupName, toolGroup] of Object.entries(EXPERIMENTAL_TOOL_GROUPS)) {
    if (enabledExperimentalTools.delete(toolGroupName)) {
      for (const tool of toolGroup) {
        enabledExperimentalTools.add(tool.name);
      }
    }
  }

  if (enabledExperimentalTools.size > 0) {
    const experimentalToolsMap = new Map(experimentalDeclarations.map((tool) => [tool.name, tool]));

    for (const toolName of enabledExperimentalTools) {
      const tool = experimentalToolsMap.get(toolName);
      if (tool) {
        toolDeclarations.push(tool);
      } else if (!stableDeclarations.some((t) => t.name === toolName)) {
        options.logger.warn(`Unknown experimental tool: ${toolName}`);
      }
    }
  }

  return toolDeclarations;
}

View on GitHub (pinned to bb72145f9a)

Solutions

  1. Check the tool name spelling against the tools listed by the CLI version in use.
  2. Remove the unknown tool from the experimental tools configuration.
  3. Upgrade @angular/cli to a version that provides the referenced experimental tool.

Example fix

// before (angular.json cli mcp config)
"experimentalTools": ["find_filees"]
// after
"experimentalTools": ["find_files"]
Defensive patterns

Strategy: validation

Validate before calling

const known = new Set([...stableToolNames, ...experimentalToolNames]);
const bad = configuredExperimentalTools.filter((t) => !known.has(t));
if (bad.length) throw new Error(`Unknown experimental tools: ${bad.join(', ')}`);

Prevention

When it happens

Trigger: Setting an experimental tool name in the MCP tools configuration (e.g. in angular.json / .mcp.json options) that does not exist in experimentalToolsMap — usually a typo or a tool removed/renamed in a newer CLI.

Common situations: Configuration copied from blog posts or older CLI versions referencing renamed tools; typos in tool names; enabling experimental tools before upgrading to a CLI version that ships them.

Related errors


AI-assisted analysis of angular/angular-cli@bb72145f9a (2026-08-30). Data as JSON: /api/errors/91d1fbbd1bf37aba. Report an issue: GitHub.