Troubleshooting Guide¶
Resolve common muster issues.
This guide uses only commands muster implements. The CLI is
muster serve | agent | standalone | list | get | check | call | create | start | stop | auth | context | events | test | version | self-update. There is nomuster status,muster logs,muster describe,muster validate,muster restart,muster metrics,muster backup/restore,muster support-bundle, ormuster configcommand. Configuration is file-based YAML and most read/inspect operations go throughmuster get/muster list/muster call.
All list/get/check/call/start/stop commands connect to a running
aggregator (muster serve) at the configured endpoint (default
http://localhost:8090/mcp). Override with --endpoint / MUSTER_ENDPOINT.
Debug Tool Discovery Issues¶
Issue: Tools not appearing in listings¶
Symptoms: muster list tools shows empty or incomplete results.
Diagnostic Steps¶
# List MCP servers and their status (include unreachable ones with errors)
muster list mcpserver
muster list mcpserver --all --verbose
# Inspect a specific server definition
muster get mcpserver <server-name>
# Check whether a specific server is available
muster check mcpserver <server-name>
# List the tools actually aggregated, optionally filtered
muster list tools
muster list tools --server <server-name>
muster list tools --filter "*<keyword>*"
Common Causes & Solutions¶
1. MCP Server Not Running
A server that fails to start appears in muster list mcpserver --all --verbose
with its error. Fix the command/URL in its definition and restart the aggregator.
2. Binary Path Issues
# Verify the server binary exists, is executable, and runs
which <mcp-server-binary>
ls -la "$(which <mcp-server-binary>)"
<mcp-server-binary> --version
3. Network Connectivity Problems (HTTP/SSE servers)
# Check the remote server is listening and reachable
curl -v <server-url>/health
ss -tlnp | grep <port>
Fix Configuration Issues¶
# A valid MCPServer definition
apiVersion: muster.giantswarm.io/v1alpha1
kind: MCPServer
metadata:
name: git-tools
namespace: default
spec:
description: "Git operations server"
toolPrefix: "git"
type: stdio
autoStart: true
command: ["npx", "@modelcontextprotocol/server-git"]
env:
GIT_ROOT: "/workspace"
Apply it as a CRD (kubectl apply -f) or create it with
muster create mcpserver .... Definitions also live under
{config-path}/mcpservers/.
Resolve Workflow Failures¶
Issue: Workflow execution fails or hangs¶
Symptoms: a workflow ends in a failed state, or a step errors with an
unclear message.
Diagnostic Steps¶
# List recent executions, then inspect one in full
muster list workflow-execution
muster get workflow-execution <execution-id> -o yaml
# Pull out only the failed steps
muster get workflow-execution <execution-id> -o json \
| jq '.status.steps[] | select(.status == "failed")'
The execution object records each step's status, inputs, and result — that is
where step-level detail lives (there is no muster logs).
Common Workflow Issues¶
1. Template Rendering Errors
The engine renders templates with missingkey=error, so a reference to a value
that does not exist fails the step. Reference workflow inputs as
{{ .input.<arg> }} and stored step results as {{ .results.<step-id> }}.
# Validate a stored workflow's structure and check its tools are available
muster check workflow <workflow-name>
muster call core_workflow_validate --name <workflow-name>
# Run a workflow, passing arguments
muster start workflow <workflow-name> --environment=staging
muster call workflow_<workflow-name> --json '{"environment":"staging"}'
Structural rules (e.g. exactly one of tool, forEach, or parallel per step)
are also enforced by the CRD at kubectl apply time.
2. Tool Not Found Errors
Confirm the tool a step calls is present with muster list tools --filter "<name>".
A workflow that references an unavailable tool is reported unavailable by
muster check workflow <name>.
3. Dependency Resolution Failures
# Inspect a service and the services it depends on
muster get service <service-name> -o json | jq '.spec.dependencies'
muster list service -o wide
Workflow Debugging Pattern¶
apiVersion: muster.giantswarm.io/v1alpha1
kind: Workflow
metadata:
name: debugged-workflow
namespace: default
spec:
description: "Workflow with a guarded recovery step"
steps:
- id: problematic_step
tool: <potentially-failing-tool>
args:
input: "{{ .input.user_input }}"
store: true
allowFailure: true # keep going so the recovery step can run
# Run recovery only when the previous step did not succeed
- id: conditional_recovery
tool: <recovery-tool>
condition:
fromStep: problematic_step
expectNot:
success: true
Fix Service Startup Problems¶
Issue: Services fail to start or remain pending¶
Symptoms: service status stuck in pending, starting, or failed.
Diagnostic Steps¶
# Service status (status detail is in the object itself)
muster get service <service-name> -o yaml
# Check dependencies
muster get service <service-name> -o json | jq '.status.dependencies'
Common Service Issues¶
1. Resource Constraints
df -h # disk
free -h # memory
top # CPU
# If muster runs under systemd
systemctl status muster
journalctl -u muster --since "1 hour ago"
Service Recovery¶
Handle Network Connectivity Issues¶
Issue: Cannot reach the aggregator¶
Symptoms: connection timeouts, unreachable endpoint, network errors.
Diagnostic Steps¶
# Health endpoint on the aggregator port (default 8090)
curl -v http://localhost:8090/health
# What is listening?
ss -tlnp | grep 8090
# Is a muster process running?
ps aux | grep '[m]uster'
Network Configuration Issues¶
1. Port Conflicts
# Find the process using the aggregator port
sudo lsof -i :8090
# The aggregator port is set in config.yaml. Edit it there, then restart
# the aggregator (muster has no --port flag).
$EDITOR ~/.config/muster/config.yaml
2. Firewall Issues
3. DNS Resolution Problems
nslookup <hostname>
dig <hostname>
# Use the explicit endpoint if name resolution is the problem
muster list tools --endpoint http://<ip>:8090/mcp
Common Error Messages and Solutions¶
"Tool not found"¶
# Verify the server is up and the tool is registered
muster list mcpserver --all --verbose
muster list tools --filter "<tool-name>"
# To restart a backing MCP server, fix/refresh its definition and restart
# the aggregator; there is no `muster restart`.
"Template rendering failed"¶
Fix the reference: inputs are{{ .input.<arg> }}, results are
{{ .results.<step-id> }}. Validate with muster check workflow <name>.
"Permission denied"¶
"authentication required" (exit code 2) / OAuth failure (exit code 3)¶
Exit codes:0 success, 1 error, 2 auth required, 3 auth failed.
Performance Troubleshooting¶
Issue: Slow workflow execution¶
# Per-step status and timing are recorded on the execution object
muster get workflow-execution <id> -o yaml
# System view while a workflow runs
htop
muster exports logs, traces, and metrics via OpenTelemetry (OTLP). Point the
standard OTEL_EXPORTER_OTLP_* environment variables at a collector for real
metrics and traces — there is no muster metrics/muster profile command.
Speed independent steps up by running them concurrently:
apiVersion: muster.giantswarm.io/v1alpha1
kind: Workflow
metadata:
name: optimized-workflow
namespace: default
spec:
description: "Run independent steps in parallel"
steps:
- id: parallel_group
parallel:
- id: task_1
tool: <independent-task-1>
- id: task_2
tool: <independent-task-2>
- id: combine_results
tool: <combine-task>
args:
input_1: "{{ .results.task_1 }}"
input_2: "{{ .results.task_2 }}"
Issue: High memory/CPU usage¶
System-Level Troubleshooting¶
Logs¶
muster logs to stderr (and to OTLP if configured). Increase verbosity with
--debug; silence the console with --silent.
# Verbose aggregator logs
muster serve --debug > /tmp/muster-debug.log 2>&1
# Under systemd
journalctl -u muster --since "1 hour ago" --follow
Health Checks¶
curl -fsS http://localhost:8090/health
muster list service
muster check mcpserver <server-name>
muster check workflow <workflow-name>
Recovery¶
Getting Help¶
Gathering Debug Information¶
muster version
cat ~/.config/muster/config.yaml # current configuration (it is just a file)
muster list service -o json > services.json
muster list mcpserver --all --verbose -o json > mcpservers.json
muster serve --debug > muster-debug.log 2>&1 # reproduce the issue, then attach the log
Back up / restore configuration¶
Configuration and entity definitions are plain files under your config directory
(~/.config/muster/ by default). Back up and restore by copying that directory:
Community Resources¶
- GitHub Issues: Report bugs and issues