Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 105 additions & 1 deletion docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -1289,6 +1289,7 @@ <h2>Installation</h2>
<button class="tab-btn" onclick="openTab(event, 'smithery')" style="color: #121212; font-weight: 300;">Smithery Install</button>
<button class="tab-btn" onclick="openTab(event, 'manual')" style="color: #121212; font-weight: 300;">Manual Configuration</button>
<button class="tab-btn" onclick="openTab(event, 'local')" style="color: #121212; font-weight: 300;">Local Installation</button>
<button class="tab-btn" onclick="openTab(event, 'docker')" style="color: #121212; font-weight: 300;">🐳 Docker Install</button>
</div>

<div id="smithery" class="tab-content">
Expand Down Expand Up @@ -1381,8 +1382,111 @@ <h3>Local Installation</h3>
</div>
</div>
</div>

<div id="docker" class="tab-content">
<div class="step">
<div class="step-content">
<h3>🐳 Docker Installation</h3>
<p><strong>Perfect for complete isolation and no Node.js required!</strong></p>
<p>Desktop Commander runs in a sandboxed Docker container with persistent development environment.</p>

<h4>Prerequisites</h4>
<ul style="margin-bottom: 15px; padding-left: 20px;">
<li><a href="https://www.docker.com/products/docker-desktop/" target="_blank">Docker Desktop</a> installed <strong>and running</strong></li>
<li>Claude Desktop app installed</li>
</ul>

<h4>Automated Installation (Recommended)</h4>

<div style="margin-bottom: 20px;">
<strong>macOS/Linux:</strong>
<pre style="background: #f4f4f4; padding: 10px; overflow-x: auto; border-radius: 5px; margin-top: 10px; white-space: pre-wrap; word-break: break-word;">bash <(curl -fsSL https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.sh)</pre>
</div>

<div style="margin-bottom: 20px;">
<strong>Windows PowerShell (Run as Administrator):</strong>
<pre style="background: #f4f4f4; padding: 10px; overflow-x: auto; border-radius: 5px; margin-top: 10px; white-space: pre-wrap; word-break: break-word;">iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.ps1'))</pre>
</div>

<div style="background: #e8f4f8; padding: 15px; border-radius: 8px; margin: 15px 0;">
<h4 style="margin-top: 0; color: #0078D7;">How Docker Persistence Works</h4>
<p>Desktop Commander creates a persistent work environment that remembers everything between sessions:</p>
<ul style="margin-bottom: 0; padding-left: 20px;">
<li><strong>Your development tools:</strong> Any software you install stays installed</li>
<li><strong>Your configurations:</strong> Git settings, SSH keys, shell preferences preserved</li>
<li><strong>Your work files:</strong> Projects and files in workspace persist across restarts</li>
<li><strong>Package caches:</strong> Downloaded packages cached for faster installs</li>
</ul>
</div>

<h4>Manual Docker Configuration</h4>
<p>If you prefer manual setup, add this to your claude_desktop_config.json:</p>

<strong>Basic setup (no file access):</strong>
<pre style="background: #f4f4f4; padding: 10px; overflow-x: auto; border-radius: 5px; margin-top: 10px; white-space: pre-wrap; word-break: break-word;">{
"mcpServers": {
"desktop-commander-docker": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"mcp/desktop-commander:latest"
]
}
}
}</pre>
Comment on lines +1425 to +1436

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Align server name with installer and ensure image auto-update pulls

  • The installer (install-docker.sh) registers the MCP under desktop-commander, while docs show desktop-commander-docker. This mismatch can confuse users and lead to duplicate entries in Claude config.
  • Also, “latest” won’t auto-update unless you docker pull or use --pull=always.

Apply this diff to the JSON example inside the pre block:

-    "desktop-commander-docker": {
+    "desktop-commander": {
       "command": "docker",
       "args": [
-        "run", "-i", "--rm",
+        "run", "--pull=always", "-i", "--rm",
         "mcp/desktop-commander:latest"
       ]
     }

Please confirm the desired MCP server key. If you want a distinct Docker-only entry, consider standardizing both script and docs on the same key (e.g., desktop-commander-docker) and update install-docker.sh accordingly.


Let’s verify the server key used in the Docker installer script.


🏁 Script executed:

#!/bin/bash
# Locate and inspect install-docker.sh for the registered MCP key
script=$(fd install-docker.sh | head -n 1)
if [ -z "$script" ]; then
  echo "install-docker.sh not found"
  exit 1
fi
echo "Found installer at: $script"
grep -n "desktop-commander" "$script" || echo "No 'desktop-commander' reference found"

Length of output: 534


Update JSON example to use “desktop-commander” and enable auto-pull

Align the docs with install-docker.sh (which registers the container as desktop-commander) and add --pull=always so the image is always updated.

• Change the MCP server key from "desktop-commander-docker" to "desktop-commander".
• Insert --pull=always into the Docker run arguments.

Apply this diff in docs/index.html (around lines 1425–1436):

-    "desktop-commander-docker": {
+    "desktop-commander": {
       "command": "docker",
       "args": [
-        "run", "-i", "--rm",
+        "run", "--pull=always", "-i", "--rm",
         "mcp/desktop-commander:latest"
       ]
     }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<strong>Basic setup (no file access):</strong>
<pre style="background: #f4f4f4; padding: 10px; overflow-x: auto; border-radius: 5px; margin-top: 10px; white-space: pre-wrap; word-break: break-word;">{
"mcpServers": {
"desktop-commander-docker": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"mcp/desktop-commander:latest"
]
}
}
}</pre>
<strong>Basic setup (no file access):</strong>
<pre style="background: #f4f4f4; padding: 10px; overflow-x: auto; border-radius: 5px; margin-top: 10px; white-space: pre-wrap; word-break: break-word;">{
"mcpServers": {
"desktop-commander": {
"command": "docker",
"args": [
"run", "--pull=always", "-i", "--rm",
"mcp/desktop-commander:latest"
]
}
}
}</pre>
🤖 Prompt for AI Agents
In docs/index.html around lines 1425 to 1436, update the JSON example so the MCP
server key is "desktop-commander" (instead of "desktop-commander-docker") and
add the Docker image auto-pull flag by inserting "--pull=always" into the "args"
array for the docker run command; keep the existing argument order and
formatting but ensure the new key name and the added "--pull=always" entry are
reflected in the JSON snippet to match install-docker.sh.


<strong>With folder mounting:</strong>
<pre style="background: #f4f4f4; padding: 10px; overflow-x: auto; border-radius: 5px; margin-top: 10px; white-space: pre-wrap; word-break: break-word;">{
"mcpServers": {
"desktop-commander-docker": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "dc-system:/usr",
"-v", "dc-home:/root",
"-v", "dc-workspace:/workspace",
"-v", "dc-packages:/var",
"-v", "/Users/username/Projects:/home/Projects",
"mcp/desktop-commander:latest"
]
}
}
}</pre>
Comment on lines +1438 to +1454

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Volume mounts and workspace path consistency; add auto-pull; align server key

  • Use a consistent key name (see previous comment).
  • Add --pull=always to actually get newer “latest” images automatically.
  • Prefer mounting into /workspace (already used for persistence) to avoid split locations (/home vs /workspace).
  • The host path example is macOS-specific; add a brief note for Windows/Linux equivalents or keep it clearly as a placeholder.

Apply this diff to the JSON example inside the pre block:

-    "desktop-commander-docker": {
+    "desktop-commander": {
       "command": "docker", 
       "args": [
-        "run", "-i", "--rm",
+        "run", "--pull=always", "-i", "--rm",
         "-v", "dc-system:/usr",
         "-v", "dc-home:/root", 
         "-v", "dc-workspace:/workspace",
         "-v", "dc-packages:/var",
-        "-v", "/Users/username/Projects:/home/Projects",
+        "-v", "/Users/username/Projects:/workspace/Projects",
         "mcp/desktop-commander:latest"
       ]
     }
  • Cross-check these volume targets with the container’s expected paths and the DOCKER_ARGS used in install-docker.sh to prevent drift.
  • Consider adding a short comment under the snippet: “Replace /Users/username/Projects with your path (e.g., C:\Users\you\Projects on Windows, /home/you/Projects on Linux).”

🏁 Script executed:

#!/bin/bash
# Locate install-docker.sh in the repository
fd install-docker.sh

# If found, print the first 200 lines for context and search for DOCKER_ARGS
file_path=$(fd install-docker.sh | head -n1)
if [[ -n "$file_path" ]]; then
  echo "== Contents of $file_path =="
  head -n 200 "$file_path"
  echo
  echo "== DOCKER_ARGS definitions =="
  rg -n 'DOCKER_ARGS' "$file_path"
else
  echo "install-docker.sh not found"
  exit 1
fi

Length of output: 7570


🏁 Script executed:

#!/bin/bash
# Print definitions of volume mappings and how $volume is set
echo "== Lines 100-180 for initial volume setup =="
sed -n '100,180p' install-docker.sh
echo
echo "== Lines 180-240 for folder mounting logic =="
sed -n '180,240p' install-docker.sh

Length of output: 5375


🏁 Script executed:

#!/bin/bash
# Show build_docker_args implementation and volume mounting logic
echo "== build_docker_args (240-330) =="
sed -n '240,330p' install-docker.sh

Length of output: 2992


Align JSON example with installation script and improve mount consistency

To keep the docs in sync with install-docker.sh and make mounting clearer:

  • Use the same server key as the script (desktop-commander).
  • Include --pull=always so Claude always fetches the latest image.
  • Mount your workspace under /workspace (the script’s persistent workspace volume), not /home.
  • Clarify that /Users/username/Projects is a placeholder—show Windows/Linux equivalents.

Locations:

  • File: docs/index.html
  • Lines: 1438–1454 (the JSON example inside the <pre>)

Apply this diff:

--- a/docs/index.html
+++ b/docs/index.html
@@ Lines 1438-1454 inside the `<pre>` block
-  "mcpServers": {
-    "desktop-commander-docker": {
+  "mcpServers": {
+    "desktop-commander": {
       "command": "docker",
       "args": [
-        "run", "-i", "--rm",
+        "run", "--pull=always", "-i", "--rm",
         "-v", "dc-system:/usr",
         "-v", "dc-home:/root",
         "-v", "dc-workspace:/workspace",
-        "-v", "/Users/username/Projects:/home/Projects",
+        "-v", "/Users/username/Projects:/workspace/Projects",
         "mcp/desktop-commander:latest"
       ]
     }

Below the snippet, add a brief note:

Replace /Users/username/Projects with your path—e.g., C:\\Users\\you\\Projects on Windows or /home/you/Projects on Linux.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<strong>With folder mounting:</strong>
<pre style="background: #f4f4f4; padding: 10px; overflow-x: auto; border-radius: 5px; margin-top: 10px; white-space: pre-wrap; word-break: break-word;">{
"mcpServers": {
"desktop-commander-docker": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "dc-system:/usr",
"-v", "dc-home:/root",
"-v", "dc-workspace:/workspace",
"-v", "dc-packages:/var",
"-v", "/Users/username/Projects:/home/Projects",
"mcp/desktop-commander:latest"
]
}
}
}</pre>
<pre style="background: #f4f4f4; padding: 10px; overflow-x: auto; border-radius: 5px; margin-top: 10px; white-space: pre-wrap; word-break: break-word;">{
"mcpServers": {
"desktop-commander": {
"command": "docker",
"args": [
"run", "--pull=always", "-i", "--rm",
"-v", "dc-system:/usr",
"-v", "dc-home:/root",
"-v", "dc-workspace:/workspace",
"-v", "/Users/username/Projects:/workspace/Projects",
"mcp/desktop-commander:latest"
]
}
}
}</pre>
🤖 Prompt for AI Agents
In docs/index.html around lines 1438–1454, the JSON example is out of sync with
install-docker.sh and mounts the example workspace to /home; change the server
key to "desktop-commander", add the docker arg "--pull=always" to ensure the
image is always fetched, move the host workspace mount into the container path
"/workspace" (use -v "/Users/username/Projects:/workspace"), and keep other
persistent volume mounts the same; then, directly below the <pre> snippet add a
short note saying "Replace /Users/username/Projects with your path — e.g.,
C:\\Users\\you\\Projects on Windows or /home/you/Projects on Linux."


<h4>Docker Benefits</h4>
<ul style="margin-bottom: 15px; padding-left: 20px;">
<li><strong>✅ Complete Isolation:</strong> Runs in sandboxed environment</li>
<li><strong>✅ No Node.js Required:</strong> Everything included in container</li>
<li><strong>✅ Cross-Platform:</strong> Same experience on all operating systems</li>
<li><strong>✅ Persistent Environment:</strong> Your tools and files survive restarts</li>
</ul>

<h4>Management Commands</h4>

<strong>macOS/Linux:</strong>
<pre style="background: #f4f4f4; padding: 10px; overflow-x: auto; border-radius: 5px; margin-top: 10px; white-space: pre-wrap; word-break: break-word;"># Check status
bash <(curl -fsSL https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.sh) --status

# Reset persistent data
bash <(curl -fsSL https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.sh) --reset</pre>

<strong>Windows PowerShell:</strong>
<pre style="background: #f4f4f4; padding: 10px; overflow-x: auto; border-radius: 5px; margin-top: 10px; white-space: pre-wrap; word-break: break-word;"># Check status
$script = (New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.ps1'); & ([ScriptBlock]::Create("$script")) -Status

# Reset data
$script = (New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.ps1'); & ([ScriptBlock]::Create("$script")) -Reset</pre>

<br />
<p>✅ <strong>Auto-Updates:</strong> <code>latest</code> tag automatically gets newer versions</p>
<p>🔄 <strong>Manual Update:</strong> <code>docker pull mcp/desktop-commander:latest</code> then restart Claude</p>
<p>🗑️ <strong>Uninstall:</strong> Remove Docker configuration from Claude config and optionally run reset command to clear persistent data</p>
Comment on lines +1481 to +1483

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

“Auto-Updates” claim is misleading for latest without pulls

Docker will not automatically fetch newer images for latest unless explicitly pulled or using --pull=always on run. Update the wording and/or include the flag in examples (see prior diffs).

Apply this diff to clarify:

-<p>✅ <strong>Auto-Updates:</strong> <code>latest</code> tag automatically gets newer versions</p>
+<p>✅ <strong>Auto-Updates:</strong> Add <code>--pull=always</code> to your Docker args to automatically fetch newer <code>latest</code> images when starting.</p>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<p><strong>Auto-Updates:</strong> <code>latest</code> tag automatically gets newer versions</p>
<p>🔄 <strong>Manual Update:</strong> <code>docker pull mcp/desktop-commander:latest</code> then restart Claude</p>
<p>🗑️ <strong>Uninstall:</strong> Remove Docker configuration from Claude config and optionally run reset command to clear persistent data</p>
<p><strong>Auto-Updates:</strong> Add <code>--pull=always</code> to your Docker args to automatically fetch newer <code>latest</code> images when starting.</p>
<p>🔄 <strong>Manual Update:</strong> <code>docker pull mcp/desktop-commander:latest</code> then restart Claude</p>
<p>🗑️ <strong>Uninstall:</strong> Remove Docker configuration from Claude config and optionally run reset command to clear persistent data</p>
🤖 Prompt for AI Agents
In docs/index.html around lines 1481 to 1483, the "Auto-Updates" copy
incorrectly implies Docker will automatically fetch newer images for the latest
tag; change the wording to clarify Docker does not auto-pull tags and either
suggest using an explicit pull or add the --pull=always flag in the run example,
and update the Manual Update line to show the recommended command (e.g., include
docker pull or --pull=always) and add a short note that automatic fetch requires
external tooling or container runtime options.

</div>
</div>
</div>

<div style="text-align: left; background: #f8f8f8; padding: 12px; overflow-x: auto; border-radius: 5px; margin-top: 15px; margin-bottom: 15px; border: 1px solid #ccc; box-shadow: 0 1px 3px rgba(0,0,0,0.05);">
<p style="margin-top: 0; color: #171717;">To install DesktopCommanderMCP you need to have Node.js v18.18.0+ and Claude Desktop installed on your system:</p>
<p style="margin-top: 0; color: #171717;">To install DesktopCommanderMCP you need to have Node.js v18.18.0+ and Claude Desktop installed on your system (except Docker installation which doesn't require Node.js but Docker):</p>
<p><strong>Download Node.js:</strong> <a href="https://nodejs.org/en/download" target="_blank">https://nodejs.org/en/download</a></p>
<p style="margin-bottom: 0;"><strong>Download Claude Desktop:</strong> <a href="https://claude.ai/download" target="_blank">https://claude.ai/download</a></p>
</div>
Expand Down