MCP server · Audited from source
Desktop Commander MCP server
by wonderwhy-er/desktopcommandermcpMIT licenceAudited 20 Sep 2026 · source d7ae9c4abb15
Is it safe? No — BLOCK, grade F (49/100). It exposes 12 tools: 7 read, 3 write and 2 destructive. The audit recorded 32 findings (0 critical, 6 high, 4 medium, 21 low). Maintainer's description: This is MCP server for Claude that gives it terminal control, file system search and diff file editing capabilities
Cite
Cite this page
ModelsAtlas. “Desktop Commander MCP server (wonderwhy-er/desktopcommandermcp)”. Retrieved 20 Sep 2026. https://modelsatlas.com/mcp/wonderwhy-er/desktop-commander-1
Why this is BLOCK. The audit found 0 critical and 6 high findings; the most severe is Inventory / provenance at src/ui/file-preview/src/payload-utils.ts. Each finding is listed below with its file and line.
Why this page is still public. People search for this server by name. Hiding it would leave them with the README's word alone; here they see what the code does. We list it so you can decide, and we do not show connect commands for BLOCK servers.
Trust audit
Audit 0.4.1 · full source read 20 Sep 2026
32 findings, listed below with the file and line each was found on. Grade A needs a sandboxed behavioural run too; this audit read the source only.
What the source does
- FilesystemDeclared16 observations
- NetworkDeclared5 observations
- ShellDeclared10 observations
- DependenciesNot pinnedSome ranges float
- SecretsNone foundNo keys in source
Findings (32)
Sorted by severity · the 25 most severe of 32 are listed
HIGHInventory / provenanceinv.suspicious_name · src/ui/file-preview/src/payload-utils.ts
payload-utils.ts
- Why
- member named after an attack tool
- Fix
- remove or justify
HIGHCode injectioncode.eval_exec · scripts/publish-release.cjs:70
return exec(command, { silent: true, ...options });- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
HIGHCode injectioncode.eval_exec · scripts/publish-release.cjs:291
exec(command);
- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
HIGHCode injectioncode.eval_exec · scripts/publish-release.cjs:329
exec(`git tag -f ${tag}`);- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
HIGHCode injectioncode.eval_exec · scripts/publish-release.cjs:330
exec(`git push -f origin ${tag}`);- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
HIGHCode injectioncode.eval_exec · scripts/publish-release.cjs:413
exec(options.skipTests ? 'npm run build' : 'npm test');
- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
MEDIUMInformation disclosuredisclose.log_secret · scripts/count-tokens.js:104
console.log(`${colors.cyan}🔢 Desktop Commander MCP — Token Counter${colors.reset}`);- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMSupply chainprompt.pipe_to_shell · plugins/claude/skills/terminal/SKILL.md:112
(`curl ... | sh`) — that's untrusted code execution; show it and confirm first.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMSupply chainprompt.pipe_to_shell · plugins/claude/skills/terminal/SKILL.md:166
- Anything piping remote content into a shell (`curl ... | sh`).
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMFilesystem / pathmcp.destructive_tools
force_terminate, kill_process
- Why
- 2 tool(s) can delete or overwrite
- Fix
- prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInformation disclosuredisclose.log_secret · test/test-remote-token-rotation-persisted.js:284
console.log(`\n${failures ? '🔴' : '✅'} remote token rotation persistence: ${failures} failing test(s).`);- Why
- No further detail recorded for this rule.
- Fix
- —
LOWInformation disclosuredisclose.log_secret · test/test-symlink-security.js:63
console.log(` Symlink (file): ${SYMLINK_TO_RESTRICTED_FILE} → ${RESTRICTED_DIR}/secret.txt`);- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · src/remote-device/desktop-commander-integration.ts:170
const devPath = path.resolve(__dirname, '../../dist/index.js');
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · src/tools/pdf/markdown.ts:7
import { CONFIG_FILE } from '../../config.js';- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · src/ui/config-editor/src/app.ts:2
import { createToolBridge } from '../../shared/tool-bridge.js';- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · src/ui/config-editor/src/app.ts:3
import { createCompactRowShellController, type ToolShellController } from '../../shared/tool-shell.js';- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · src/ui/config-editor/src/app.ts:4
import { renderCompactRow } from '../../shared/compact-row.js';- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · plugins/claude/skills/ai-tools-setup/references/openclaw.md:26
The Control UI default is `http://127.0.0.1:18789/`. (Some versions/setups use a
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · plugins/cursor/skills/ai-tools-setup/references/openclaw.md:26
The Control UI default is `http://127.0.0.1:18789/`. (Some versions/setups use a
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · skills/ai-tools-setup/references/openclaw.md:26
The Control UI default is `http://127.0.0.1:18789/`. (Some versions/setups use a
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · test/test-feature-flags-timeout.js:139
await fetch(`http://127.0.0.1:${port}/test`, {- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · test/test-feature-flags-timeout.js:186
await currentFetchPattern(`http://127.0.0.1:${port}/flags.json`);- Why
- No further detail recorded for this rule.
- Fix
- —
LOWObfuscation / stealthobf.base64_blob · test/large_test_file.txt:1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWSupply chainsupply.unpinned · package.json
@modelcontextprotocol/sdk, @opendocsg/pdf2md, @supabase/supabase-js, @tiptap/core, @tiptap/extension-image, @tiptap/extension-table, @tiptap/extension-table-cell, @tiptap/extension-table-header
- Why
- 49 dependency range(s) float
- Fix
- pin exact versions or ship a lockfile
Tools it exposes
12 declared in source · 2 destructive
2 tools can delete or overwrite. An agent that can be talked into calling a tool can be talked into calling this one, so give it a token scoped to what you need.
| Tool | What it does | Risk |
|---|---|---|
force_terminate | Force terminate a running terminal session. ${CMD_PREFIX_DESCRIPTION} | destructive |
kill_process | Terminate a running process by PID. Use with caution as this will forcefully terminate the specified process. ${CMD_PREFIX_DESCRIPTION} | destructive |
stop_search | Stop an active search. Stops the background search process gracefully. Use this when you | write |
write_file | Write or append to file contents. IMPORTANT: DO NOT use this tool to create PDF files. Use | write |
write_pdf | Create a new PDF file or modify an existing one. THIS IS THE ONLY TOOL FOR CREATING AND MODIFYING PDF FILES. RULES ABOUT FILENAMES: - When creating a new PDF, | write |
get_more_search_results | Get more results from an active search with offset-based pagination. Supports partial result reading with: - | read |
get_usage_stats | Get usage statistics for debugging and analysis. Returns summary of tool usage, success/failure rates, and performance metrics. ${CMD_PREFIX_DESCRIPTION} | read |
list_directory | Get a detailed listing of all files and directories in a specified path. Use this instead of | read |
list_processes | List all running processes. Returns process information including PID, command name, CPU usage, and memory usage. ${CMD_PREFIX_DESCRIPTION} | read |
read_file | Read contents from files and URLs. Read PDF files and extract content as markdown and images. Prefer this over | read |
read_multiple_files | Read the contents of multiple files simultaneously. Each file | read |
read_process_output | Read output from a running process with file-like pagination support. Supports partial output reading with offset and length parameters (like read_file): - | read |
Safer alternatives
All code intelligence servers →evalops/deep-code-reasoning-mcp
A Model Context Protocol (MCP) server that provides advanced code analysis and reasoning capabilities powered by Google's Gemini AI
harshkedia177/axon
Graph-powered code intelligence engine — indexes codebases into a knowledge graph, exposed via MCP tools for AI agents and a CLI for developers.
hyperb1iss/lucidity-mcp
AI-powered code quality analysis using MCP to help AI assistants review code more effectively. Analyze git changes for complexity, security issues, and more through structured prompts.
Audit history
- ✕BLOCK F 49 / 100
Source changed, verdict held ·
d7ae9c4abb15
README badge
Badges show the current verdict, BLOCK included
A badge cannot be hidden by the maintainer while the verdict is BLOCK. Fix the findings, push, and the re-audit updates it.
Questions about Desktop Commander MCP server
What is the Desktop Commander MCP server?
What tools does Desktop Commander expose?
Is Desktop Commander safe to connect to an agent?
What credentials does Desktop Commander need?
How does Desktop Commander run?
How current is this page?
I already installed Desktop Commander. What should I do?
Can the verdict change?
Sources
- wonderwhy-er/desktopcommandermcp on GitHub — the source we read, its licence, stars and activityObserved · 20 Sep 2026
- ModelsAtlas trust audit — BLOCK verdict for commit d7ae9c4abb15Observed · 20 Sep 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What is the Desktop Commander MCP server?
- What tools does Desktop Commander expose?
- Is Desktop Commander safe to connect to an agent?