By jmagar
Rust MCP server for Arcane Docker management — manage containers, images, networks, volumes, compose projects, GitOps, and vulnerability scanning across Docker environments.
This plugin requires configuration values that are prompted when the plugin is enabled. Sensitive values are stored in your system keychain.
no_authRun the MCP server without authentication. ONLY safe when the server is bound to 127.x (loopback). Use this for local development only — never expose an unauthed MCP server on a network interface.
${user_config.no_auth}api_tokenOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Bearer token for MCP HTTP authentication. Every request to /mcp includes: Authorization: Bearer <token>. Server mode: pick any value and use the same value in RARCANE_MCP_TOKEN. Client mode: paste the token your server admin configured. Generate one with: openssl rand -hex 32 or just gen-token.
${user_config.api_token}auth_modeServer auth mode. 'bearer' uses only the static API token. 'oauth' enables Google OAuth/JWT for clients like Codex while the static token remains accepted for this Claude Code plugin connection. OAuth mode requires public_url, google_client_id, google_client_secret, and auth_admin_email.
${user_config.auth_mode}public_urlPublic base URL for OAuth issuer metadata, e.g. https://rarcane.yourdomain.com. Required when auth_mode=oauth. If empty, setup derives it from an https server_url by stripping /mcp suffix. Server mode only.
${user_config.public_url}server_urlBase URL of the MCP HTTP server this Claude Code session connects to. If running locally: keep http://localhost:40060. If connecting to a remote server: set to http://hostname:40060 or https://rarcane.yourdomain.com. Do NOT include a trailing /mcp — the plugin appends it automatically.
${user_config.server_url}rarcane_api_keyAPI key or bearer token for authenticating to the upstream Arcane API. Generate one in the Arcane admin panel. Maps to the RARCANE_API_KEY env var. Never stored in config.toml.
${user_config.rarcane_api_key}rarcane_api_urlBase URL of the upstream Arcane API this server manages Docker through, e.g. https://arcane.example.com. Maps to the RARCANE_API_URL env var.
${user_config.rarcane_api_url}auth_admin_emailBootstrap allowed Google account for OAuth mode. The server refuses to start OAuth mode without at least one allowlisted email address. Server mode only.
${user_config.auth_admin_email}google_client_idGoogle OAuth client ID used when auth_mode=oauth. Create a Web application OAuth client in Google Cloud Console (console.cloud.google.com). The plugin setup script adds the required redirect URIs automatically. Server mode only.
${user_config.google_client_id}google_client_secretGoogle OAuth client secret from the same Google Cloud Console credential. Stored in the generated plugin env file with mode 600 (owner-read-only). Server mode only.
${user_config.google_client_secret}Rust MCP and CLI server for Arcane Docker management.
rarcane is a Rust implementation of the existing TypeScript arcane-mcp behavior. It proxies Arcane API operations through a consistent MCP tool and equivalent CLI commands while keeping auth, validation, destructive-operation confirmation, and response shaping in the Rust service layer.
| Surface | Status | Purpose |
|---|---|---|
| MCP | Required | Agent-facing Docker/Arcane operations through the arcane tool |
| CLI | Required | Scriptable parity surface for debugging and automation |
| REST | Not shipped | Upstream-client servers do not expose a local REST action API |
| Web | Not shipped | Upstream-client servers do not serve an embedded web UI |
The MCP tool is named arcane. Calls dispatch on action and, for most domains, subaction.
| Action | Examples | Scope |
|---|---|---|
help | action reference | public |
status | local rarcane and Arcane config status | rarcane:read |
environment | list, get, create, update, delete, test | read/write |
project | list, get, create, up, down, restart, pull, destroy, redeploy, build | read/write |
container | list, get, create, start, stop, restart, update, delete, stats | read/write |
image | list, get, pull, delete, prune, scan | read/write |
network | list, get, create, delete, prune | read/write |
volume | list, get, create, delete, prune, browse, backup/restore actions | read/write |
system | docker-info, prune, start-all, stop-all, convert | read/write |
image-update | check-all, check, check-batch, summary | read |
vulnerability | summary, list, scanner-status, ignore, unignore, list-ignored | read/write |
registry | list, get, create, update, delete, test | read/write |
gitops | list, get, create, update, delete, sync, status, browse | read/write |
Destructive subactions require explicit params.confirm=true or CLI --confirm.
RARCANE_API_URL=https://arcane.example.com
RARCANE_API_KEY=...
RARCANE_MCP_HOST=127.0.0.1
RARCANE_MCP_PORT=3100
RARCANE_MCP_TOKEN=change-me
Arcane API keys are read from config/env only. Do not pass credentials in MCP arguments.
cargo run -- status
cargo run -- help container
cargo run -- call --action container --subaction list --env-id default
cargo run -- call --action system --subaction docker-info --env-id default
cargo run -- call --action container --subaction stop --env-id default --id my-container --confirm
cargo run -- serve
cargo run -- mcp
MCP example:
{
"action": "container",
"subaction": "list",
"envId": "default"
}
ArcaneClient (src/arcane.rs) HTTP transport and redacted errors
↓
ArcaneService (src/app.rs) action validation, confirmation, response normalization
↓
MCP shim (src/mcp/tools.rs) JSON args -> service -> Value
CLI shim (src/cli.rs) argv -> service -> stdout
cargo fmt --check
cargo test
cargo clippy -- -D warnings
cargo build --release
Useful docs:
docs/API.md for action contractsdocs/CONFIG.md for environment and authdocs/QUICKSTART.md for smoke testsdocs/MCP_SCHEMA.md for schema drift rulesplugins/rarcane/skills/rarcane/SKILL.md for agent usage guidancenpx claudepluginhub jmagar/dendrite --plugin rarcaneQuery, monitor, and manage Unraid servers via GraphQL API through MCP tools. Supports system info, Docker, VMs, array/parity, notifications, plugins, rclone, and live telemetry.
Core homelab agents, commands, and setup/health skills for self-hosted service management. Includes interactive credential setup wizard and unified service health dashboard.
UniFi network management via MCP tools. Monitor devices, clients, network health, firewall rules, and perform management operations.
Gotify push notifications and management via MCP tools with HTTP fallback. Sends alerts for long-running tasks, plan completions, and blocked states.
Agents, commands, skills, and scripts for scaffolding, reviewing, aligning, and deploying homelab MCP server plugins. Includes canonical Python, TypeScript, and Rust server templates.
Memory compression system for Claude Code - persist context across sessions
Ultra-compressed communication mode. Cuts ~75% of tokens while keeping full technical accuracy by speaking like a caveman.
Multi-model consensus engine integrating OpenAI Codex CLI, Gemini CLI, and Claude CLI for collaborative code review and problem-solving.
Curate auto-memory, promote learnings to CLAUDE.md and rules, extract proven patterns into reusable skills.
Standalone image generation plugin using Nano Banana MCP server. Generates and edits images, icons, diagrams, patterns, and visual assets via Gemini image models. No Gemini CLI dependency required.