A terminal, file search and surgical file edits for your assistant.
- Started in our test
- ★ 10.1K GitHub stars
- 394.7K downloads a week
- Last commit 26 Oct 2026
At a glance
Desktop Commander turns a chat assistant into something closer to a coding agent: it can run shell commands, keep long-running processes going, search across folders and edit files by replacing exact blocks of text instead of rewriting whole files.
It runs with your user account, so it can do anything you can do in a terminal. That is the point, and also the reason to add it to a client you watch rather than one that runs unattended.
- Made by
- Eduard Ruzga (wonderwhy-er) and contributors
- Licence
- MIT
- Latest version
- 0.3.1 (22 Oct 2026)
- npm package
- @wonderwhy-er/desktop-commander
- GitHub stars
- 10.1K
- Downloads
- 394.7K a week
- Last commit
- 26 Oct 2026
- Tools
- 25
- Runs on
- Your computer
Our check: We ran this exact config on 26 Oct 2026: it started and answered with 25 tools.
What's in the pod: its tools
We found 25 tools when we started it on 26 Oct 2026. 13 only read. The rest can change things, so keep your app's "ask before each tool call" setting on for them.
Runs commands3 tools · Can start programs or run code.
| Tool | What it is for |
|---|---|
interact_with_process | Types input into a running program, such as a Python or database prompt, and returns its reply. |
kill_process | Ends a process on your computer by its process id. |
start_process | Starts a terminal command and notices when it is waiting for input. |
Changes things9 tools · Can create, edit, send or delete.
| Tool | What it is for |
|---|---|
create_directory | Makes a folder, including any missing parent folders. |
edit_block | Swaps an exact piece of text in a file for new text, or updates a range of cells in an Excel sheet. |
force_terminate | Stops a terminal session that has hung or is no longer needed. |
give_feedback_to_desktop_commander | Opens the project's feedback form in your browser. |
move_file | Moves or renames a file or folder. |
set_config_value | Changes one setting, such as the allowed folders or the default shell. |
stop_search | Cancels a running search. |
write_file | Writes or appends to a file, in chunks of 50 lines by default, including Excel data. |
write_pdf | Builds a PDF from Markdown, or adds and removes pages in an existing one. |
Only reads13 tools · Looks things up and changes nothing.
| Tool | What it is for |
|---|---|
get_config | Shows the current settings: allowed folders, blocked commands, shell and line limits. |
get_file_info | Reports a file's size, dates and permissions, plus sheet names for Excel files. |
get_more_search_results | Pages through the results of a search that is still running. |
get_recent_tool_calls | Lists the last tool calls with their inputs and outputs, useful after a chat is cut off. |
get_usage_stats | Shows how often you have used each tool. |
list_directory | Lists the files and folders under a path, two levels deep by default. |
list_processes | Lists what is running on the computer, with memory and CPU use. |
list_searches | Shows which searches are still running. |
list_sessions | Lists the terminal sessions it has open. |
read_file | Reads a text file, Excel workbook, PDF or web address, a chunk of lines or pages at a time. |
read_multiple_files | Reads several files in one go. |
read_process_output | Collects the latest output from a command that is still running. |
start_search | Searches file names or file contents across a folder and streams back matches. |
Grouped and described by us. The README on GitHub lists the inputs each tool takes.
Set it up
Pick your app for the exact snippet and where it goes.
Where it goes: claude_desktop_config.json (Settings → Developer → Edit Config)
{
"mcpServers": {
"desktop-commander": {
"command": "npx",
"args": [
"-y",
"@wonderwhy-er/desktop-commander@latest"
]
}
}
}Where it goes: Your terminal, in the project folder
claude mcp add-json desktop-commander '{"command":"npx","args":["-y","@wonderwhy-er/desktop-commander@latest"]}'Where it goes: ~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
"mcpServers": {
"desktop-commander": {
"command": "npx",
"args": [
"-y",
"@wonderwhy-er/desktop-commander@latest"
]
}
}
}Where it goes: .vscode/mcp.json in your project
{
"servers": {
"desktop-commander": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@wonderwhy-er/desktop-commander@latest"
]
}
}
}Where it goes: ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"desktop-commander": {
"command": "npx",
"args": [
"-y",
"@wonderwhy-er/desktop-commander@latest"
]
}
}
}Where it goes: Not supported
ChatGPT only connects to remote servers by URL. This one runs on your computer, so use Claude, Cursor or VS Code.
New to this? See the setup guides for Claude Code, Cursor, Claude Desktop and ChatGPT.
Settings
Names are exactly as the project spells them. Required ones are marked.
| Setting | What it does |
|---|---|
allowedDirectoriesConfig | Folders the file tools may use. An empty list means the whole disk. Terminal commands are not limited by it.["/Users/you/projects"] |
blockedCommandsConfig | Shell commands it refuses to run.["rm", "sudo"] |
defaultShellConfig | The shell used for commands./bin/zsh |
fileReadLineLimitConfig | Most lines returned by one read. Defaults to 1000. |
fileWriteLineLimitConfig | Most lines written in one call. Defaults to 50, which nudges the model into small, recoverable edits.1000 |
telemetryEnabledConfig | Set to false to stop the pseudonymous usage data it sends. No file contents or paths are included either way.false |
What it can touch
It can read
- Files and folders on your computer, inside allowedDirectories for file tools
- Running processes and their output
- Web pages, Excel files and PDFs you point it at
It can change
- Writes, edits, moves and creates files and folders
- Runs any terminal command your user account can run
- Can kill processes
Safer setup: Run the Docker version for real isolation. The project says folder limits and blocked commands can be bypassed, for example through symlinks or command substitution.
Before you start
- Node.js 18 or newer
- Nothing else: no account or key
If it does not work
- The agent changes its own settings to get around a limit
- Change settings in a separate chat from the one where you work, then check them with get_config.
- Writes stop part way through a file
- That is fileWriteLineLimit at work. Let it continue in chunks, or raise the limit with set_config_value.
- Claude Desktop will not start after removing it
- Restore the config backup the uninstaller made, or fix the JSON in claude_desktop_config.json by hand.
Peas in a pod: similar servers
How Desktop Commander lines up against other developer tools servers on the shelf.
| Server | Tools | Runs on | Licence | Stars |
|---|---|---|---|---|
| Desktop Commander | 25 | Your computer | MIT | 10.1K |
| Serena | 3 | Your computer | – | 30.7K |
| Context7 | 2 | Your computer or hosted | MIT | 63.7K |
| GitHub | 46 | Hosted | – | 34K |
| MCP Inspector | – | Your computer | – | 11.2K |
Questions
Is it safe to give an AI my terminal?
It runs with your full user rights, so only use it where you would trust the model to type commands. Docker mode keeps it away from your real system.
How does it update?
The npx and Docker installs pull the latest version each time Claude restarts. A cloned copy needs a manual git pull.
Does it cost anything?
No. It is MIT licensed and free.
Can it work on a remote machine?
Yes. Its remote device mode lets a hosted client send commands to a computer running Desktop Commander, signed in with OAuth.
Something wrong on this page? Tell us.