alibaba/arthas · error · IllegalArgumentException
Unsupported action: ${input}. Supported actions: ${supported
Error message
Unsupported action: ${input}. Supported actions: ${supportedList} What it means
After trimming and case-insensitive matching against the 15 supported actions (SUPPORTED_ACTIONS array), normalizeAction rejects any unrecognized value and lists all valid options in the message. Matching is case-insensitive, so 'START' and 'start' both pass.
Source
Thrown at core/src/main/java/com/taobao/arthas/core/mcp/tool/function/monitor200/ProfilerTool.java:240
if (action == null || action.trim().isEmpty()) {
throw new IllegalArgumentException("action is required");
}
String input = action.trim();
for (String supported : SUPPORTED_ACTIONS) {
if (supported.equalsIgnoreCase(input)) {
return supported;
}
}
StringBuilder supportedList = new StringBuilder();
for (int i = 0; i < SUPPORTED_ACTIONS.length; i++) {
if (i > 0) {
supportedList.append(", ");
}
supportedList.append(SUPPORTED_ACTIONS[i]);
}
throw new IllegalArgumentException("Unsupported action: " + input + ". Supported actions: " + supportedList);
}
private void addOption(StringBuilder cmd, String option, String value) {
if (value == null || value.trim().isEmpty()) {
return;
}
cmd.append(" ").append(option);
addParameter(cmd, value);
}
private void addOption(StringBuilder cmd, String option, Long value) {
if (value == null) {
return;
}
cmd.append(" ").append(option).append(" ").append(value);
}
private void addOption(StringBuilder cmd, String option, Integer value) {View on GitHub (pinned to 21cf2e9ba5)
Solutions
- Use one of the listed supported actions exactly (case-insensitive).
- Call profiler(action="actions") to see the full list at runtime.
- Check spelling: common mistakes include 'stopAll', 'pause', 'reset' which are not supported.
Example fix
// before profiler(action="pause") // after profiler(action="stop")
Defensive patterns
Strategy: validation
Validate before calling
// Before calling profiler, validate action against the supported list
Set<String> supported = Set.of("start","resume","stop","dump","status","meminfo",
"list","version","load","execute","dumpCollapsed","dumpFlat","dumpTraces","getSamples","actions");
if (action == null || supported.stream().noneMatch(s -> s.equalsIgnoreCase(action.trim()))) {
throw new IllegalArgumentException("Unsupported profiler action: " + action);
} Try / catch
try {
String result = profiler(action, ...);
} catch (IllegalArgumentException e) {
if (e.getMessage().startsWith("Unsupported action")) {
// action not in the supported list — check the message for valid options
}
} Prevention
- Use action=actions to list all valid profiler actions at runtime.
- Maintain a client-side allowlist of supported actions.
- Be aware that CLI profiler subcommand names may differ from MCP action names.
When it happens
Trigger: Passing an action string not in {start, resume, stop, dump, status, meminfo, list, version, load, execute, dumpCollapsed, dumpFlat, dumpTraces, getSamples, actions}. Case-insensitive matching still applies, so only genuinely unknown names trigger this.
Common situations: Typo in the action name; using an Arthas CLI profiler subcommand name that differs from the MCP tool's mapping; version mismatch where a newer action is not yet supported in this build.
Related errors
- actionArg is required when action=execute
- Unsupported action: ${action}
- Can not find libasyncProfiler so, please check the arthas di
- action is required
- Current OS do not support AsyncProfiler, Only support Linux/
AI-assisted analysis of alibaba/arthas@21cf2e9ba5 (2026-08-14).
Data as JSON: /api/errors/e55f999fe69925d1.
Report an issue: GitHub.