arcane_run
Execute arcane-cli commands against an Arcane instance and return JSON results, with confirmation prompts and filters for safe Docker homelab inspection and management.
Instructions
Run an arcane-cli command against the Arcane instance and return its JSON output.
args is the command and its arguments WITHOUT the binary name. The server adds --json, --env <env_id>
(for environment-scoped commands) and, only when confirm=true, --yes. Any --yes/-y/--force/--json/
--output you pass is stripped. Use env_id (an id or an environment name such as "homelab") instead of
--env. Flags that read local files (--file, --env-file, ...) are rejected: to create a project use
arcane_project_create, to change its compose file arcane_project_compose. --help is answered as by
arcane_cli_help.
Result: {ok, exit_code, data, error, stderr_tail, command}. On failure error holds the CLI's message.
List commands return {data, pagination}; use --limit/--start or filters when output is truncated (--all
cannot be combined with --limit).
With compact=true (default):
list commands for containers, projects, images, volumes, networks, activities and vulnerabilities return one short summary per item (name, image, state, health, project, ports, hasUpdate, ...). A container whose image is only a sha256 id has image_untagged=true: Arcane can't check it for updates.
activities listfolds consecutive identical entries into one with repeated/firstAt/lastAt.volumes sizesreturns a summary plus the largest named and anonymous volumes;jobs listreturns {id, name, enabled, schedule, nextRun, lastRun, currentRun, unmetPrerequisites} per job;containers getdrops image-metadata labels (org.opencontainers.*, ...). Pass compact=false for the full objects.
Filters, applied by the server to the items the CLI returned (use --all so they see every page):
filter_state (e.g. running, exited, created), filter_has_update, filter_project, name_contains.
exclude_types (activities list only), e.g. ["job_run", "image_update_check"], drops noisy activity types
and with it --limit N (default 20) is the number of rows returned, after excluding and folding repeats
(the server fetches more activities to fill them).
Streaming commands (projects up/redeploy/pull/build, images pull/build, containers update) can take up to 30 minutes and return an array of progress frames when done.
If the result has needs_confirmation=true, NOTHING was changed: show the user the command and ask. Retry with confirm=true only after they approve. Blocked commands fail even with confirm=true. If the result has self_target=true, the command would restart this MCP server itself (its own project or containers) and the call would drop. Suggest the Arcane UI; only if the user explicitly insists, retry with confirm=true and allow_self=true.
To know whether a newer Arcane exists, use version (updateAvailable). system upgrade --check reports
canUpgrade, which only means the upgrade mechanism works.
Examples:
{"args": ["containers", "list", "--all"], "filter_has_update": true}
{"args": ["containers", "updates"], "env_id": "homelab"}
{"args": ["projects", "redeploy", "immich"], "env_id": "0"}
{"args": ["projects", "destroy", "old-stack", "--remove-files=false"], "confirm": true} (only after the user explicitly approved this exact command)
{"args": ["activities", "list", "--status", "failed", "--limit", "10"], "exclude_types": ["job_run"]}
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"args": "<args>"
},
"name": "arcane_run"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | ||
| env_id | No | ||
| compact | No | ||
| confirm | No | ||
| allow_self | No | ||
| filter_state | No | ||
| exclude_types | No | ||
| name_contains | No | ||
| filter_project | No | ||
| filter_has_update | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||