This plugin requires configuration values that are prompted when the plugin is enabled. Sensitive values are stored in your system keychain.
Own 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.
api_tokenBearer token for MCP HTTP authentication. Matches LAB_MCP_HTTP_TOKEN on the server. Required when auth_mode is bearer. Generate with: openssl rand -hex 32 or just mcp-token in the lab Justfile.
${user_config.api_token}auth_modeAuthentication mode the lab server is running. bearer: static token auth (default, requires api_token). oauth: Google OAuth via the lab auth server (requires public_url and Google OAuth credentials on the server). Maps to LAB_AUTH_MODE on the server.
${user_config.auth_mode}log_filterTracing filter directive for labby serve, e.g. labby=debug,lab_apis=info. Maps to LAB_LOG on the server. Default keeps lab at info and SDK at warn to reduce noise.
${user_config.log_filter}log_formatLog output format for labby serve: text (human-readable with ANSI color when stderr is a TTY) or json (newline-delimited JSON for prod/CI). Maps to LAB_LOG_FORMAT on the server.
${user_config.log_format}public_urlPublic base URL of the lab server, e.g. https://lab.example.com. Required when auth_mode is oauth — used as the OAuth issuer and resource metadata base. Maps to LAB_PUBLIC_URL on the server.
${user_config.public_url}server_urlBase URL of the lab MCP HTTP server (labby serve). Default http://localhost:8765 for local access. Set to http://<hostname>:8765 when connecting from a remote machine or through a reverse proxy. Do NOT include a trailing /mcp — the plugin appends it.
${user_config.server_url}cors_originsAdditional CORS origins allowed for the lab API, comma-separated, e.g. https://lab.example.com,https://mcp.example.com. Loopback origins (localhost, 127.0.0.1, [::1]) are always included and do not need to be listed here. Maps to LAB_CORS_ORIGINS on the server.
${user_config.cors_origins}admin_enabledEnable the lab_admin MCP tool for operator-level administration. Requires the lab-admin feature gate compiled in. Maps to LAB_ADMIN_ENABLED=1 on the server.
${user_config.admin_enabled}mcp_gateway_urlSeparate public base URL for the MCP gateway when it runs on a different hostname from the lab UI, e.g. https://mcp.example.com. Leave empty when the app and gateway share a hostname (the common case). Maps to LAB_MCP_GATEWAY_URL on the server.
${user_config.mcp_gateway_url}auth_admin_emailBootstrap allowed Google account for OAuth mode. The server refuses to start OAuth without an allowlisted account. Maps to LAB_AUTH_ADMIN_EMAIL on the server.
${user_config.auth_admin_email}google_client_idGoogle OAuth Web Application client ID. Required when auth_mode is oauth. Create a Web application OAuth client in Google Cloud Console. Maps to LAB_GOOGLE_CLIENT_ID on the server.
${user_config.google_client_id}google_client_secretGoogle OAuth client secret. Required when auth_mode is oauth. Maps to LAB_GOOGLE_CLIENT_SECRET on the server.
${user_config.google_client_secret}lab is the Rust workspace behind Labby, a local-first control plane for
agent tooling and homelab operations. One binary, labby, exposes the same
operator capabilities through a CLI, an MCP server, an HTTP API, and the Labby
web UI.
The root README is the public entrypoint. The topic docs in docs/ own the detailed contracts; when this file and a topic doc disagree, fix the topic doc first and then refresh this summary.
Labby is centered on the current gateway/operator surface:
search and
execute.~/.lab/stash, edit
and version component snapshots, preview deployment diffs, and deploy saved
artifacts back to configured targets./chat web UI, and keep the backend service named
acp.labby serve as a controller or
node, enroll devices, search local/fleet logs, audit setup health, and deploy
the local release binary to SSH targets.Lab no longer exposes the old Radarr/Sonarr/Plex-style service catalog in this branch. Use the generated catalogs below for the current surface instead of copying command or action lists by hand.
Linux/macOS:
curl -fsSL https://raw.githubusercontent.com/jmagar/lab/main/scripts/install.sh | sh
labby setup
labby serve --host 127.0.0.1 --port 8765
Windows PowerShell:
irm https://raw.githubusercontent.com/jmagar/lab/main/scripts/install.ps1 | iex
labby setup
labby serve --host 127.0.0.1 --port 8765
The install scripts download the requested GitHub Release asset, verify its
checksum, and install labby onto the user PATH. Override with
LAB_INSTALL_DIR, LAB_INSTALL_VERSION, or LAB_INSTALL_REPO.
Prerequisites:
just for repo commands.cargo-nextest for the main test suite.pnpm 9.15.9 for the Labby web UI. The repo pins this in
.mise.toml and
apps/gateway-admin/package.json.openssl if you want to generate a bearer token manually.git clone https://github.com/jmagar/lab.git
cd lab
just install
just web-build
labby serve --host 127.0.0.1 --port 8765
just install builds the all-features release binary and symlinks it to
~/.local/bin/labby.
For loopback development, labby serve can bootstrap a missing bearer token for
you. If LAB_MCP_HTTP_TOKEN is absent and LAB_AUTH_MODE is not oauth, it
generates a token, writes a minimal ~/.lab/.env, reloads it into the running
process, prints the setup URL, and continues. The token itself is stored in
~/.lab/.env rather than printed.
For explicit setup:
mkdir -p ~/.lab
printf 'LAB_AUTH_MODE=bearer\nLAB_MCP_HTTP_TOKEN=%s\n' "$(openssl rand -hex 32)" > ~/.lab/.env
chmod 600 ~/.lab/.env
labby setup
labby serve --host 127.0.0.1 --port 8765
Open http://127.0.0.1:8765/setup or http://127.0.0.1:8765/.
Build static Labby assets with just web-build first when running from a source
checkout.
labby serve --host 127.0.0.1 --port 8765
labby mcp
labby serve starts the hosted HTTP runtime: /v1 product APIs, /mcp
streamable HTTP MCP, auth routes, node runtime endpoints, and static Labby web
assets when an export is available. labby mcp is the stdio MCP entrypoint for
local MCP clients.
labby gateway add \
--name github \
--url https://example.com/mcp \
--bearer-token-env GITHUB_MCP_TOKEN \
-y
labby gateway reload
labby gateway list
Query, 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.
npx claudepluginhub jmagar/dendrite --plugin labbyMemory compression system for Claude Code - persist context across sessions
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.
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.
Streamline people operations — recruiting, onboarding, performance reviews, compensation analysis, and policy guidance. Maintain compliance and keep your team running smoothly.
Write feature specs, plan roadmaps, and synthesize user research faster. Keep stakeholders updated and stay ahead of the competitive landscape.