File size: 4,538 Bytes
bcc50e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>dockroot-mcp — Virtual Docker Root for AI Agents</title>
<style>
  body { font-family: -apple-system, "Segoe UI", Roboto, sans-serif; margin: 0; background: #0f172a; color: #e2e8f0; line-height: 1.6; }
  .wrap { max-width: 860px; margin: 0 auto; padding: 32px 20px 60px; }
  h1 { font-size: clamp(1.7rem, 4vw, 2.2em); margin: 0.2em 0; background: linear-gradient(90deg,#818cf8,#22d3ee); -webkit-background-clip: text; background-clip: text; color: transparent; }
  h2 { margin-top: 2em; border-bottom: 1px solid #334155; padding-bottom: .3em; color: #a5b4fc; font-size: 1.15rem; }
  h3 { color: #c7d2fe; margin: 1.2em 0 .4em; }
  code, pre { background: #1e293b; border-radius: 6px; }
  code { padding: 2px 6px; }
  pre { padding: 14px; overflow-x: auto; }
  table { border-collapse: collapse; width: 100%; margin: 1em 0; font-size: .88rem; }
  th, td { border: 1px solid #334155; padding: 8px 12px; text-align: left; }
  th { background: #1e293b; }
  .badge { display: inline-block; background: #312e81; border: 1px solid #6366f1; border-radius: 20px; padding: 2px 12px; font-size: .8em; margin: 0 6px 8px 0; color:#c7d2fe; }
  .sec { background: #111c33; border-left: 3px solid #22d3ee; padding: 14px 18px; border-radius: 0 8px 8px 0; margin: 1.2em 0; }
  .warn { border-left-color: #f59e0b; }
  a { color: #22d3ee; }
  ul, ol { padding-left: 1.25em; }
  .muted { opacity:.75; font-size:.85em; margin-top:3em; }
</style>
</head>
<body>
<div class="wrap">
  <p><span class="badge">v2.0</span><span class="badge">MCP</span><span class="badge">read-only</span><span class="badge">Tabby Tavern companion</span></p>
  <h1>dockroot-mcp</h1>
  <p><strong>Virtual Docker Root for AI Agents.</strong> Read-only power over the compose stack — without host root. Companion to <a href="https://huggingface.co/jpanasuk/tabby-tavern-stack">Tabby Tavern v2.0.0</a>.</p>
  <div class="sec">
    <strong>docker_ps · docker_logs · docker_inspect · docker_stats · docker_networks</strong><br>
    plus the tavern connectivity toolkit (status, self_check, wire, rediscover, models, chat).
  </div>

  <h2>Why this exists</h2>
  <p>Agents get asked “why is Open WebUI broken?” Without docker access they invent commands. With dockroot they:</p>
  <ol>
    <li><strong>List</strong> containers (<code>docker_ps</code>)</li>
    <li><strong>Read logs</strong> (<code>docker_logs</code>)</li>
    <li><strong>Inspect</strong> env / mounts / health (<code>docker_inspect</code>)</li>
    <li><strong>Watch</strong> CPU / memory (<code>docker_stats</code>)</li>
    <li><strong>See</strong> networks (<code>docker_networks</code>)</li>
  </ol>
  <p>Then they answer from evidence. The fixer sees the box.</p>

  <h2>Security model</h2>
  <div class="sec warn">
    <strong>Read-only by design.</strong> No start/stop/rm/exec. Diagnose, never destroy.<br>
    <strong>Opt-in.</strong> No socket mount, no docker access — the server reports that honestly.<br>
    <strong>Internal only.</strong> Socket access is still powerful. Do not publish this port.
  </div>

  <h2>Quick start</h2>
  <pre>services:
  dockroot:
    image: jpanasuk/dockroot-mcp:latest
    container_name: dockroot
    restart: unless-stopped
    networks: [ai-network]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock</pre>

  <h3>Hermes</h3>
  <pre># ~/.hermes/config.yaml
mcp_servers:
  dockroot:
    command: python3
    args: ["/opt/dockroot/tavern_mcp.py"]</pre>

  <h3>MCPO (Open WebUI / Tabby Tavern)</h3>
  <pre>{
  "mcpServers": {
    "dockroot": { "command": "python3", "args": ["/opt/dockroot/tavern_mcp.py"] }
  }
}</pre>
  <p>Tabby Tavern v2.0.0 already runs MCPO at <code>:8001</code> with the FastMCP stack tools. Dockroot is the optional “see the Docker daemon” add-on.</p>

  <h2>Links</h2>
  <p>
    <a href="https://huggingface.co/jpanasuk/tabby-tavern-stack">Tabby Tavern stack</a> ·
    <a href="https://huggingface.co/spaces/jpanasuk/tabby-tavern-sell-sheet">Sell sheet</a> ·
    <a href="https://huggingface.co/spaces/jpanasuk/local-ai-stack-connectivity">Connectivity skill</a> ·
    <a href="https://huggingface.co/jpanasuk/dockroot-mcp-source">Source</a> ·
    <a href="https://hub.docker.com/r/jpanasuk/dockroot-mcp">Docker Hub</a>
  </p>
  <p class="muted">Jeremy Panasuk. Read-only docker vision for local AI labs. Hermes Agent by Nous Research under the hood.</p>
</div>
</body>
</html>