Desktop Commander for Claude Code: What It Adds and Is It Safe?

Desktop Commander for Claude Code: What It Adds and Is It Safe?

Desktop Commander for Claude Code is one of the plugins in Anthropic’s official marketplace, and its description sounds big: terminal commands, process management and file operations across PDF, Word, Excel and more. Claude Code can already read files and run commands, so you may wonder what this plugin really adds. You may also wonder if handing it a shell is a good idea.

We loaded the plugin in a throwaway demo folder and ran it for real. We read a CSV, kept a Python session alive across turns, read a file outside the project, and tried a blocked command. Here is what it adds, what we saw, and how to use it without regrets.

This guide is part of our Claude Code tutorials. Find more add-ons in our Skills Directory.

Tested with Claude Code v2.1.318 on November 8, 2026, using Desktop Commander plugin 0.2.0 from wonderwhy-er/DesktopCommanderMCP at commit 7504827, with the npm server package 0.3.1, on macOS.

Quick Summary

QuestionShort answer
What is it?A plugin that starts a local helper program (an MCP server) and adds 6 skills
What does it add?25 tools for files, shells, searching and processes, plus guidance skills
Does it ask permission?Yes, Claude Code asks before each Desktop Commander tool call
Is it sandboxed?No. By default it can read files anywhere your user account can
Who should install it?People who need long-lived shells, REPLs or document reading that built-in tools do not give them
Who should skip it?Anyone whose work is plain code edits inside one project

What Is Desktop Commander?

Desktop Commander is an open-source MCP server. MCP is the standard way to plug extra tools into Claude Code, and you can read how it works in our guide to Claude Code MCP. The plugin version bundles that server together with six skills, which are short instruction files that tell Claude when and how to use the tools.

The plugin lives in the official marketplace as desktop-commander@claude-plugins-official. When it starts, it runs npx -y @wonderwhy-er/desktop-commander@latest, which downloads the latest published package from npm and runs it on your machine. That detail matters for safety, and we come back to it below.

What the plugin contains

We read the plugin folder before running anything. It has a manifest, a README and six skills. It has no hooks and no scripts of its own, so the only code that runs is the npm package it launches.

SkillWhat it is for
desktop-commander-overviewExplains when to reach for the Desktop Commander tools
terminalPersistent shells, REPLs, SSH and process or port checks
computer-health-checkA read-only check of CPU, memory, disk, battery and startup items
ai-tools-setupFixing MCP config files and local AI tools
knowledge-baseBuilding a Markdown notes folder an agent can navigate
obsidian-vaultOrganizing an Obsidian vault

How It Plugs Into Claude Code

The flow is simple. You ask for something, Claude Code asks for your permission to call the tool, the Desktop Commander server does the work on your Mac, and the result comes back. Nothing is hidden: the permission prompt is the same one you see for any MCP tool.

Flow diagram showing a request going from you to a Claude Code permission prompt, then to the Desktop Commander server, then to your Mac
Every Desktop Commander call passes through a Claude Code permission prompt first

How We Tested It Safely

The plugin can run commands, so we did not install it into our normal setup. We copied the plugin folder into a throwaway project and loaded it with --plugin-dir, and we used --setting-sources project so no personal settings applied. That is the same approach we describe in our plugins guide.

We made two changes to the plugin’s server entry for the test. We added the --no-onboarding flag, and we set two environment values: a separate home folder so the server’s config file landed in the demo folder, and DESKTOP_COMMANDER_DISABLE_TELEMETRY=1. Everything else, including the package and the skills, is as published.

claude --permission-mode default --plugin-dir ./dc-plugin --setting-sources project

One note on versions: the marketplace entry points at a September commit of the plugin. The npm package it launches uses @latest, so you run whatever is newest on npm, which was 0.3.1 for us.

Step 1: Confirm the Server and Skills Loaded

Start Claude Code with the plugin loaded, then type /mcp. The Desktop Commander server should show a green check and a tool count. In our run it showed 25 tools.

Claude Code MCP panel showing the desktop-commander plugin server connected with 25 tools
The /mcp panel lists the plugin’s server with 25 tools

Next, type /skills. You should see the six skills with the prefix desktop-commander:, each marked as managed by the plugin.

Claude Code skills list showing six desktop-commander skills locked by the plugin
The six plugin skills in the /skills list

Step 2: Read a File and Do Real Work

Our first test was ordinary on purpose. We made a small sales.csv with four products and asked Claude to total the revenue with Desktop Commander. Claude Code asked before calling the read tool, and the prompt shows the exact path.

Claude Code permission prompt for the Desktop Commander read tool with the sales.csv path and Yes and No options
Claude Code asks before the Desktop Commander tool runs

We chose Yes. The answer came back correct: 54.00, 69.93, 37.50 and 60.00 add up to 221.43.

Claude Code answer listing revenue per row and a total revenue of 221.43 dollars
The total matches our own arithmetic for the four rows

Honest note: Claude Code’s built-in tools can read a small CSV just as well. This test proves the plugin works, not that you need it for this job. The tool description says the read tool also handles PDFs, and the README lists Excel, Word and image support, but we did not test those formats in this run.

What Desktop Commander Really Adds

The real value shows up in the places where built-in tools are thinner. Here is what we could confirm and what we could not.

CapabilityOur result
Persistent Python sessionTested. A variable set in one call was still there in the next
Reading a file outside the projectTested. It worked with no folder limit configured
Command blocklistTested. sudo was refused
PDF, Excel and Word handlingNot tested. Listed in the README and tool descriptions
SSH sessions and long-running processesNot tested. Described in the plugin’s skills
Health check skillNot run. We only read its instructions, which say it is read-only by default

A shell that remembers things

We asked Claude to start a Python REPL, set x = 21, then send x * 2 to the same session. The answer was 42, and Claude reported that the session kept x between calls. This is the clearest benefit: you can run a dev server, a database shell or an SSH connection and keep talking to it across turns.

Claude Code reporting that a Python REPL kept the variable x between two Desktop Commander calls and returned 42
The same REPL session answered both calls, so x was still set

The plugin’s own README is careful here. Persistence lives inside one session. Separate start_process calls open separate sessions that do not share state.

Is Desktop Commander Safe?

Let us be direct. The plugin has no hooks, the project is open source, and its security page is frank about its limits. But it is a powerful tool with open default settings, and three things we saw matter most.

Default settings have no folder limit

We asked Claude to read the config. The allowedDirectories value was an empty list, and the first blocked commands were mkfs, format, mount, umount, fdisk, dd, parted and diskpart. The README says an empty allowedDirectories list grants access to your entire filesystem for file operations.

Claude Code showing allowedDirectories is empty and listing the first eight blocked commands
Out of the box, allowedDirectories is empty, so no folder limit is set

It can read outside your project

To prove that, we put a harmless note in a folder next to the demo project and asked Claude to read it with Desktop Commander. It worked. The permission prompt still appeared, and you should read it every time, but the tool itself did not stop at the project boundary.

Claude Code reading a note from a folder outside the project with Desktop Commander and explaining that no directory restrictions are set
A file outside the project folder was readable because no limit was set

The blocklist works, but it is a speed bump

We asked it to run sudo whoami. The call came back with Command not allowed: sudo whoami, and Claude confirmed that nothing ran and it did not look for a way around the block.

Claude Code explaining that Desktop Commander refused to run sudo whoami because sudo is on the blocked commands list
sudo is on the default blocked list, so the command never ran

Do not read that as a wall. The project’s security page calls the allowed folders, the blocklist and the symlink checks guardrails against accidents, not a sandbox. It says they can be bypassed through shell substitution, absolute paths or another interpreter.

We did not try to bypass them.

Layer diagram: Claude Code permission prompt, allowedDirectories, blockedCommands, then Docker or a virtual machine as the only real isolation
Your permission click is the control you always have; Docker or a VM is the only real wall

Two things that happen by default

Reading the source, we found two defaults you may not expect. First, telemetry is opt-out, according to the project’s privacy policy. It describes a random client ID and usage details such as the base command name and file extensions, but not file contents or paths.

You can switch it off with the DESKTOP_COMMANDER_DISABLE_TELEMETRY variable, which we did. Second, the code can open a welcome page in your browser on first use, and --no-onboarding turns that off. We used both settings, so we did not observe either behavior ourselves.

How to Install It Normally

If you decide you want it, the normal route is the plugin command inside Claude Code. Our guide on plugin marketplaces explains where this comes from.

/plugin install desktop-commander@claude-plugins-official

This installs into your own Claude Code setup, which we did not do for this test. Because the server is fetched with @latest, plan to re-check it now and then, and read the release notes of the npm package when it updates.

Make it safer after installing

  1. Ask Claude to set allowedDirectories to your project folder only, using the set_config_value tool. The README suggests doing config changes in a separate chat, because Claude may try to change limits when it hits one.
  2. Keep Claude Code in a permission mode that asks. Our guide to permission modes shows the options, and deny rules lets you block specific tool calls.
  3. Remember that terminal commands are not limited by allowedDirectories. The README says that setting only restricts file operations.
  4. For anything sensitive, run the whole thing in a container. See a devcontainer.

Desktop Commander vs Built-In Tools

NeedBuilt-in Claude CodeWith Desktop Commander
Edit code in your projectWorks wellNot needed
Run a one-off commandBash tool, with its own permission rulesAlso possible, with its own blocklist
Keep a REPL or server session open across turnsLimitedConfirmed in our test
Work with files in many foldersAsks per folderNo folder limit until you set one
Strong isolationOptional sandboxed BashNone built in; use Docker

If your main goal is working with documents, also see how we handled splitting PDF files, and compare other servers in our list of the best MCP servers.

Our Verdict

Treat the Desktop Commander blocklist as a seatbelt, not a vault.

Desktop Commander works as described for what we ran. The server loaded, the tools were called through normal permission prompts, the Python session persisted, and the blocklist refused sudo. The plugin is clean: no hooks, no extra scripts.

Install it if you need long-lived shells, REPLs, remote sessions or document reading across many folders. Skip it if you mostly edit code in one repository, because the built-in tools already cover that. Whatever you choose, set allowedDirectories first and treat the blocklist as a seatbelt, not a vault.

Try It Yourself

Practice in a demo folder, never a real project. Create a folder with a small CSV and run Claude Code with the plugin loaded as shown above. Then paste this prompt:

Use Desktop Commander to start a python3 REPL, load sales.csv with the csv module, then in the same session tell me which product made the most revenue.

After that, ask Claude to show your allowedDirectories value, then restrict it to the demo folder in a separate chat and try reading a file outside it.

Common Mistakes

  • Installing it into your main setup before reading what it does. Try it with --plugin-dir first.
  • Assuming allowedDirectories protects you from terminal commands. It does not.
  • Clicking Yes on permission prompts without reading the path or command.
  • Forgetting that @latest means the server can change between sessions.
  • Using it for jobs the built-in tools already do well.

Pro Tips

  • Add --no-onboarding to the server arguments if you do not want a welcome page to open.
  • Set DESKTOP_COMMANDER_DISABLE_TELEMETRY=1 if you prefer no usage analytics.
  • Check /mcp and /skills after every update to see what changed.
  • The default fileWriteLineLimit is 50 lines per write, so expect Claude to write big files in chunks.

Cheat Sheet

Cheat sheet card for Desktop Commander in Claude Code covering load commands, first prompts, safety settings and rules of thumb
Desktop Commander in Claude Code on one card

Frequently Asked Questions

Is Desktop Commander an official Anthropic product?

No. It is made by the Desktop Commander project. It is listed in Anthropic’s official plugin marketplace, but the server is third-party code fetched from npm.

Does it ask before running commands?

Claude Code asks before each Desktop Commander tool call unless you have allowed that tool in your permission rules. In our test we saw the prompt every time.

Can it access my whole computer?

By default, yes for file operations, because allowedDirectories is empty. Terminal commands can also reach outside any allowed folder. Use Docker or a virtual machine if you need a hard boundary.

Does Desktop Commander send my data anywhere?

The project says it runs locally and collects opt-out telemetry such as usage events, not file contents. You can disable it with DESKTOP_COMMANDER_DISABLE_TELEMETRY. Read the project’s privacy policy for the full list.

Do I need it if I already use Claude Code?

Often no. It helps most with persistent shells, long-running processes and working with documents across many folders.

Conclusion

Desktop Commander gives Claude Code a longer reach: a shell that stays alive, tools for files anywhere on your Mac and skills that guide common jobs. In our demo it did exactly that, and its blocklist stopped sudo. The catch is that its default limits are guardrails, so lock down allowedDirectories, read every prompt and use a container when the stakes are high. For more add-ons, browse our Claude page and the plugin directory, and read the official docs on plugins and discovering plugins.

Newsletter

New AI tools in your inbox

The best new tools and the AI news that matters, in one short email. Unsubscribe any time.

Free · No spam · Unsubscribe any time

✓ Looks like you’re subscribed

Loading Google’s sign-up form…

Looks like you’re already subscribed

Thanks for reading! New AI tools and the AI news that matters will land in your inbox.

Not subscribed yet? Refresh the page to load the sign-up form.

The sign-up form couldn’t load. If you use an ad or content blocker, allow news.google.com and reload the page.

Free instant check before you pay. Takes a few seconds.

Scroll to Top