Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mulerouter.ai/docs/llms.txt

Use this file to discover all available pages before exploring further.

Every command supports --json. The schema is small and stable, which makes the CLI a comfortable building block for shell pipelines, automation, and LLM-driven tools.

Output schemas

mulerouter list --json

{
  "models": [
    {
      "model_id": "alibaba/wan2.6-t2v",
      "action": "generation",
      "provider": "alibaba",
      "model_name": "wan2.6-t2v",
      "description": "...",
      "input_types": ["text"],
      "output_type": "video",
      "api_path": "/vendors/alibaba/v1/wan2.6-t2v/generation",
      "available_on": ["mulerouter", "mulerun"],
      "result_key": "videos",
      "tags": ["SOTA"]
    }
  ],
  "site": null
}
With --providers:
{ "providers": ["alibaba", "bytedance", "google", "klingai", "midjourney", "minimax", "openai"] }

mulerouter params --json

{
  "model_id": "alibaba/wan2.6-t2v",
  "action": "generation",
  "description": "...",
  "api_path": "/vendors/alibaba/v1/wan2.6-t2v/generation",
  "output_type": "video",
  "result_key": "videos",
  "available_on": ["mulerouter", "mulerun"],
  "parameters": [
    {
      "name": "prompt",
      "type": "string",
      "description": "Text prompt describing the video to generate",
      "required": true
    }
  ]
}

mulerouter run --json

When waiting for completion:
{
  "task_id": "9d2b8c1a-...",
  "status": "succeeded",
  "videos": [
    "https://cdn.mulerouter.ai/.../video-0.mp4"
  ],
  "data": { ... }
}
The result key (videos, images, audios) matches the endpoint’s result_key. With --no-wait, the response includes task_id, api_path, and the full task info payload as returned by the upstream API.

mulerouter status --json

{
  "task_id": "9d2b8c1a-...",
  "status": "running"
}
When the task succeeds, a results array appears. When it fails, an error string explains why.

Recipes

Pick a random SOTA model
mulerouter list --tag SOTA --json \
  | jq -r '.models[].model_id + "/" + .models[].action' \
  | shuf -n 1
Extract the first result URL
URL=$(mulerouter run openai/gpt-image-2/generation --prompt "A sunset" --json --quiet \
  | jq -r '.images[0]')
echo "$URL"
Download every generated asset
mulerouter run alibaba/wan2.6-t2v --prompt "Ocean waves" --json --quiet \
  | jq -r '.videos[]' \
  | xargs -n1 curl -sSLO
Validate a prompt without spending credits (dry-run) There is no built-in dry-run, but mulerouter params <endpoint> --json plus ajv on the parameter list lets you validate locally before submitting. Pin a model from package.json
{
  "scripts": {
    "thumb": "mulerouter run google/nano-banana-2 --prompt $npm_config_prompt --resolution 2K --quiet --json | jq -r '.images[0]'"
  }
}
npm run thumb --prompt="A vector logo of a fox"

Stdout vs stderr

  • stdout is reserved for the JSON or text result. Safe to pipe.
  • stderr carries progress lines ([12s] status: queued), warnings, and errors. Use --quiet to suppress progress lines while keeping real errors.
mulerouter run alibaba/wan2.6-t2v --prompt "..." --json --quiet 2>errors.log

Exit codes

CodeMeaning
0Success
1Validation, configuration, network, or terminal task failure
Check $? before parsing JSON — a failed call may still emit JSON, but the shape will contain an error field instead of results.

Using the CLI from an AI agent

The CLI’s combination of --json output, stable subcommand surface, and deterministic exit codes makes it a clean tool to expose to an LLM agent. A minimal tool spec:
{
  "name": "mulerouter_run",
  "description": "Generate an image, video, or audio asset with MuleRouter.",
  "input_schema": {
    "type": "object",
    "properties": {
      "endpoint": { "type": "string", "description": "provider/model[/action]" },
      "args":     { "type": "array",  "items": { "type": "string" } }
    },
    "required": ["endpoint", "args"]
  }
}
The agent shells out mulerouter run <endpoint> <args...> --json --quiet and reads the resulting JSON. Pair with mulerouter list --json and mulerouter params <endpoint> --json so the model can discover available options without hardcoding them.