googleapis/mcp-toolbox · warning

unknown action: %s

Error message

unknown action: %s

What it means

RunPulse dispatches on the required `action` parameter and only supports check_db_connections, check_dashboard_performance, check_dashboard_errors, check_explore_performance, check_schedule_failures, and check_legacy_features. Any other value falls to the default branch and returns this error. This is a user-supplied input validation error at invocation time.

Source

Thrown at internal/tools/looker/lookerhealthpulse/lookerhealthpulse.go:202

	SdkClient   *v4.LookerSDK
}

func (t *pulseTool) RunPulse(ctx context.Context, source compatibleSource, params PulseParams) (interface{}, error) {
	switch params.Action {
	case "check_db_connections":
		return t.checkDBConnections(ctx, source)
	case "check_dashboard_performance":
		return t.checkDashboardPerformance(ctx, source)
	case "check_dashboard_errors":
		return t.checkDashboardErrors(ctx, source)
	case "check_explore_performance":
		return t.checkExplorePerformance(ctx, source)
	case "check_schedule_failures":
		return t.checkScheduleFailures(ctx, source)
	case "check_legacy_features":
		return t.checkLegacyFeatures(ctx, source)
	default:
		return nil, fmt.Errorf("unknown action: %s", params.Action)
	}
}

// Check DB connections and run tests
func (t *pulseTool) checkDBConnections(ctx context.Context, source compatibleSource) (interface{}, error) {
	logger, err := util.LoggerFromContext(ctx)
	if err != nil {
		return nil, fmt.Errorf("unable to get logger from ctx: %s", err)
	}
	logger.InfoContext(ctx, "Test 1/6: Checking connections")

	reservedNames := map[string]struct{}{
		"looker__internal__analytics__replica": {},
		"looker__internal__analytics":          {},
		"looker":                               {},
		"looker__ilooker":                      {},
	}

View on GitHub (pinned to 8cc6e09de2)

Solutions

  1. Set action to one of: check_db_connections, check_dashboard_performance, check_dashboard_errors, check_explore_performance, check_schedule_failures, check_legacy_features.
  2. Check spelling and casing — the switch is exact, case-sensitive matching.
  3. If calling via an LLM, constrain the action parameter to the documented enum in the tool description.
  4. If a new action is genuinely needed, add a case to RunPulse and a corresponding checkX method.

Example fix

// before
{"action": "check_dashboards"} // unknown
// after
{"action": "check_dashboard_performance"}
Defensive patterns

Strategy: validation

Validate before calling

validActions := map[string]bool{
    "check_db_connections": true, "check_dashboard_performance": true,
    "check_dashboard_errors": true, "check_explore_performance": true,
    "check_schedule_failures": true, "check_legacy_features": true,
}
if !validActions[params["action"]] {
    return errors.New("action must be one of the six supported pulse checks")
}

Try / catch

result, toolErr := tool.Invoke(ctx, src, params, token)
if toolErr != nil && strings.Contains(toolErr.Error(), "unknown action") {
    return fmt.Errorf("use one of: check_db_connections, check_dashboard_performance, check_dashboard_errors, check_explore_performance, check_schedule_failures, check_legacy_features")
}

Prevention

When it happens

Trigger: Invoking the looker-health-pulse tool with params.Action set to a value outside the supported switch cases (typo, wrong casing, or an action from a different tool).

Common situations: LLM hallucinating an action name, clients copying the `action` enum from looker-health-analyze (projects/models/explores), or case-sensitivity mistakes like "Check_DB_Connections".

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


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