File size: 2,252 Bytes
83ab69b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# dockroot-mcp — standalone "virtual docker root" MCP server
#
# Drop this container into ANY docker-compose stack and get an MCP server
# exposing read-only docker tools (ps / logs / inspect / stats / networks)
# over the containers on its network. The agent or tool that connects to
# it can SEE and DIAGNOSE the stack without needing host root.
#
# Usage (compose):
#   dockroot:
#     image: jpanasuk/dockroot-mcp:latest
#     container_name: dockroot
#     restart: unless-stopped
#     networks: [your-network]       # the network it can see
#     volumes:
#       - /var/run/docker.sock:/var/run/docker.sock   # read-only docker access
#     # expose to hermes: add to ~/.hermes/config.yaml
#     #   mcp_servers:
#     #     dockroot:
#     #       command: python3
#     #       args: ["/opt/dockroot/tavern_mcp.py"]
#     # or expose via MCPO: add to mcpo config.json mcpServers:
#     #   "dockroot": { "command": "python3", "args": ["/opt/dockroot/tavern_mcp.py"] }
#
# Security: the MCP server ONLY exposes read-only commands (ps/logs/
# inspect/stats/network). The docker socket gives it visibility, not
# control. Do NOT mount the socket if you don't want that visibility.

FROM python:3.12-slim

# docker CLI (read-only tooling needs it) — install the official static
# binary; Debian's docker.io package doesn't reliably install the CLI in
# slim images.
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl ca-certificates \
    && rm -rf /var/lib/apt/lists/* \
    && curl -fsSL -o /tmp/docker.tgz \
       https://download.docker.com/linux/static/stable/x86_64/docker-27.5.1.tgz \
    && tar -xzf /tmp/docker.tgz -C /tmp \
    && install -m 755 /tmp/docker/docker /usr/local/bin/docker \
    && rm -rf /tmp/docker /tmp/docker.tgz \
    && docker --version

# MCP SDK so hermes can connect to this server as a client
RUN pip3 install --no-cache-dir mcp

COPY tavern_mcp.py /opt/dockroot/tavern_mcp.py
COPY discover.py /opt/dockroot/discover.py
COPY recipes.py /opt/dockroot/recipes.py

WORKDIR /opt/dockroot

# Default: run the MCP server on stdio (hermes/mcpo connect via stdio).
# Override the command to run anything else (e.g. bash for debugging).
ENTRYPOINT ["python3", "/opt/dockroot/tavern_mcp.py"]