Manage local Docker without leaving BOSS.
A sidebar panel lists the open project's Dockerfiles and compose files alongside every
container, image, volume and network on the machine. Running services get a main-panel tab
with live logs, a preview of whatever they're serving, and docker inspect output.
Sidebar (lower-left slot)
- Project - Dockerfiles and compose files found in the open project. Build & run a
Dockerfile (with a port form pre-filled from its first
EXPOSE), or bring a compose project up and down. - Containers - running first, with image, published ports and status. Start, stop,
restart, remove, open the service tab, or jump straight to
localhost:<port>. - Images / Volumes / Networks - list and remove.
When Docker isn't installed, isn't running, or errors, the panel says so and offers the fix - including a Start Docker button that launches Docker Desktop and waits for the daemon.
Service tab (main panel, one per container)
- Logs - streamed
docker logs -f, ANSI stripped, with pause, auto-scroll, copy and clear. - Preview - the page the container serves, rendered inline. Falls back to opening a browser tab when no embedded browser is available.
- Inspect - full
docker inspectoutput.
Builds go to a terminal tab. docker build and compose up --build open a BossTerm tab
so you get BuildKit's live progress, real ANSI, and a Ctrl-C that works. Once the container is
up, the plugin takes over and its service tab opens automatically.
Agents running in BOSS terminals get mcp__boss__docker_*:
| Tool | Purpose |
|---|---|
docker_ps |
List containers with state, image, ports |
docker_images |
List images |
docker_project_files |
Dockerfiles / compose files in the open project |
docker_logs |
Recent log output of a container |
docker_build |
Build a Dockerfile and run it on a published port |
docker_start / docker_restart / docker_stop |
Container lifecycle |
docker_rm |
Remove a container |
docker_compose_up / docker_compose_down / docker_compose_ls |
Compose projects |
docker_open_service |
Open a container's service tab |
Every MCP tool that changes Docker state requires the docker.manage permission:
docker_build, docker_start, docker_restart, docker_stop, docker_rm,
docker_compose_up and docker_compose_down. The read-only tools need nothing, and
docker_open_service is deliberately ungated - it opens a BOSS tab and touches no Docker
state.
Two consequences worth knowing. Admins bypass every permission check, so on a
single-user desktop the per-tool kill-switch in Toolbox is the control that actually bites.
And before you sign in there are no permissions at all, so a signed-out session sees only
the read-only tools plus docker_open_service; the gated seven appear on sign-in and
disappear again on sign-out. That is a change from ≤ 1.0.3, where build/start/restart/compose
up worked signed-out.
DockerMcpToolRbacTest holds the list above to the code: it pins the complete tool surface,
so a tool added, removed, hidden behind a host-provider check, or contributed by a second
provider fails the build, as does one that mutates without a permission. What it cannot check
is a tool a human deliberately files as read-only, or an exemption added on purpose - those
are visible in the diff and reviewed there, not machine-verified. The test covers the MCP
surface only; see below for the sidebar.
- The Dockerfile path publishes on
127.0.0.1only.docker_buildand the panel's Build & run pin published ports to loopback, so a container BOSS starts that way is not reachable from your network. - Compose files run as written.
docker_compose_upisdocker compose up --build -don the project's own file - the plugin does not rewrite it, so a service declaring"8080:8080"ornetwork_mode: hostbinds exactly as declared. That is why compose up is permission-gated alongside the destructive tools. - The sidebar is not permission-gated - only the MCP tools are. Every button in the panel
(build & run, start, stop, restart, remove, compose up/down, remove image/volume/network)
runs without a permission check, so a signed-in user without
docker.managecan still do all of it by hand, including bringing up a compose stack that publishes on0.0.0.0. The gate is about what an agent may do unattended. Action-level RBAC for panels needs host support that does not exist yet (the only manifest-level gate is all-or-nothing and would hide the read-only sidebar too). - Every removal from the panel asks for confirmation first.
docker_rmover MCP does not: it honours aforceargument and never prompts - the permission is what stands in its way. - No
docker system pruneor bulk destructive operations. - The plugin observes the daemon; it never starts containers on its own.
- Docker Desktop, or the
dockerCLI with a reachable daemon - BOSS ≥ 9.2.35, boss-plugin-api ≥ 1.0.52 (
McpToolDefinition.withRbac, which every gated tool is built with, first exists in 1.0.52)
./gradlew buildPluginJar
cp build/libs/boss-plugin-docker-*.jar ~/.boss/plugins/Then reload from Toolbox. See AGENTS.md for architecture and conventions.