Claude Desktop Commander MCP
The Desktop Commander MCP server enables Claude Desktop to interact with your local filesystem and terminal, providing comprehensive tools for task automation, code editing, and system management.
Terminal operations: Execute commands with timeout and background options, manage sessions, read output, list and kill processes by PID
File system management: Read, write, create, list, move files/directories, search by name or content, get metadata
Code editing: Apply surgical text replacements with
edit_blockformat or full file rewritesConfiguration control: Set default shell, define allowed directories, block specific commands, configure read/write limits
Security features: Restrict operations to allowed directories, block dangerous commands
Additional capabilities: Read content from URLs, comprehensive audit logging
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Claude Desktop Commander MCPshow me the last 10 lines of my application.log file"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Desktop Commander MCP
Search, update, manage files and run terminal commands with AI
Work with code and text, run processes, and automate tasks, going far beyond other AI editors - while using host client subscriptions instead of API token costs.
🖥️ Try the Desktop Commander App (Beta)
Want a better experience? The Desktop Commander App gives you everything the MCP server does, plus:
Use any AI model — Claude, GPT-4.5, Gemini 2.5, or any model you prefer
See file changes live — visual file previews as AI edits your files
Add custom MCPs and context — extend with your own tools, no config files
Coming soon — skills system, dictation, background scheduled tasks, and more
👉 Download the App (macOS & Windows)
The MCP server below still works great with Claude Desktop and other MCP clients — the app is for those who want a dedicated, polished experience.
Related MCP server: Desktop Commander MCP
Table of Contents
All of your AI development tools in one place. Desktop Commander puts all dev tools in one chat. Execute long-running terminal commands on your computer and manage processes through Model Context Protocol (MCP). Built on top of MCP Filesystem Server to provide additional search and replace file editing capabilities.
Features
Remote AI Control - Use Desktop Commander from ChatGPT, Claude web, and other AI services via Remote MCP
File Preview UI - Visual file previews in Claude Desktop with rendered markdown, inline images, expandable content, built-in markdown editor, and quick "Open in folder" access
Enhanced terminal commands with interactive process control
Execute code in memory (Python, Node.js, R) without saving files
Instant data analysis - just ask to analyze CSV/JSON/Excel files
Native Excel file support - Read, write, edit, and search Excel files (.xlsx, .xls, .xlsm) without external tools
PDF support - Read PDFs with text extraction, create new PDFs from markdown, modify existing PDFs
DOCX support - Read, create, edit, and search Word documents (.docx) with surgical XML editing and markdown-to-DOCX conversion
Interact with running processes (SSH, databases, development servers)
Execute terminal commands with output streaming
Command timeout and background execution support
Process management (list and kill processes)
Session management for long-running commands
Process output pagination - Read terminal output with offset/length controls to prevent context overflow
Server configuration management:
Get/set configuration values
Update multiple settings at once
Dynamic configuration changes without server restart
Full filesystem operations:
Read/write files (text, Excel, PDF, DOCX)
Create/list directories
Recursive directory listing with configurable depth and context overflow protection for large folders
Move files/directories
Search files and content (including Excel content)
Get file metadata
Negative offset file reading: Read from end of files using negative offset values (like Unix tail)
Code editing capabilities:
Surgical text replacements for small changes
Full file rewrites for major changes
Multiple file support
Pattern-based replacements
vscode-ripgrep based recursive code or text search in folders
Comprehensive audit logging:
All tool calls are automatically logged
Log rotation with 10MB size limit
Detailed timestamps and arguments
Safety guardrails (not a sandbox — see SECURITY.md):
Symlink traversal prevention on file operations
Command blocklist for accidental execution
Docker isolation for complete isolation
How to install
Install in Claude Desktop
Desktop Commander offers multiple installation methods for Claude Desktop.
📋 Update & Uninstall Information: Options 1, 2, 3, 4, and 6 have automatic updates. Option 5 requires manual updates. See below for details.
Just run this in terminal:
npx @wonderwhy-er/desktop-commander@latest setupFor debugging mode (allows Node.js inspector connection):
npx @wonderwhy-er/desktop-commander@latest setup --debugCommand line options during setup:
--debug: Enable debugging mode for Node.js inspector--no-onboarding: Disable onboarding prompts for new users
Restart Claude if running.
✅ Auto-Updates: Yes - automatically updates when you restart Claude
🔄 Manual Update: Run the setup command again
🗑️ Uninstall: Run npx @wonderwhy-er/desktop-commander@latest remove
curl -fsSL https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install.sh | bashThis script handles all dependencies and configuration automatically.
✅ Auto-Updates: Yes
🔄 Manual Update: Re-run the bash installer command above
🗑️ Uninstall: Run npx @wonderwhy-er/desktop-commander@latest remove
Visit: https://smithery.ai/server/@wonderwhy-er/desktop-commander
Login to Smithery if you haven't already
Select your client (Claude Desktop) on the right side
Install with the provided key that appears after selecting your client
Restart Claude Desktop
✅ Auto-Updates: Yes - automatically updates when you restart Claude
🔄 Manual Update: Visit the Smithery page and reinstall
Add this entry to your claude_desktop_config.json:
On Mac:
~/Library/Application Support/Claude/claude_desktop_config.jsonOn Windows:
%APPDATA%\Claude\claude_desktop_config.jsonOn Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"desktop-commander": {
"command": "npx",
"args": [
"-y",
"@wonderwhy-er/desktop-commander@latest"
]
}
}
}Restart Claude if running.
✅ Auto-Updates: Yes - automatically updates when you restart Claude
🔄 Manual Update: Run the setup command again
🗑️ Uninstall: Run npx @wonderwhy-er/desktop-commander@latest remove or remove the entry from your claude_desktop_config.json
git clone https://github.com/wonderwhy-er/DesktopCommanderMCP.git
cd DesktopCommanderMCP
npm run setupRestart Claude if running.
The setup command will install dependencies, build the server, and configure Claude's desktop app.
❌ Auto-Updates: No - requires manual git updates
🔄 Manual Update: cd DesktopCommanderMCP && git pull && npm run setup
🗑️ Uninstall: Run npx @wonderwhy-er/desktop-commander@latest remove or remove the cloned directory and MCP server entry from Claude config
Perfect for users who want isolation or don't have Node.js installed. Runs in a sandboxed Docker container with a persistent work environment.
Prerequisites: Docker Desktop installed and running, Claude Desktop app installed.
macOS/Linux:
bash <(curl -fsSL https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.sh)Windows PowerShell:
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.ps1'))The installer will check Docker, pull the image, prompt for folder mounting, and configure Claude Desktop.
Docker persistence: Your tools, configs, work files, and package caches all survive restarts.
Basic setup (no file access):
{
"mcpServers": {
"desktop-commander-in-docker": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp/desktop-commander:latest"]
}
}
}With folder mounting:
{
"mcpServers": {
"desktop-commander-in-docker": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/Users/username/Desktop:/mnt/desktop",
"-v", "/Users/username/Documents:/mnt/documents",
"mcp/desktop-commander:latest"
]
}
}
}Advanced folder mounting:
{
"mcpServers": {
"desktop-commander-in-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:/mnt/Projects",
"-v", "/Users/username/Downloads:/mnt/Downloads",
"mcp/desktop-commander:latest"
]
}
}
}macOS/Linux:
# Check status
bash <(curl -fsSL https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.sh) --status
# Reset all persistent data
bash <(curl -fsSL https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.sh) --resetWindows PowerShell:
# 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 all 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
# Show help
$script = (New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.ps1'); & ([ScriptBlock]::Create("$script")) -HelpTroubleshooting: Reset and reinstall from scratch:
bash <(curl -fsSL https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.sh) --reset && bash <(curl -fsSL https://raw.githubusercontent.com/wonderwhy-er/DesktopCommanderMCP/refs/heads/main/install-docker.sh)✅ Auto-Updates: Yes - latest tag automatically gets newer versions
🔄 Manual Update: docker pull mcp/desktop-commander:latest then restart Claude
Install in Other Clients
Desktop Commander works with any MCP-compatible client. The standard JSON configuration is:
{
"mcpServers": {
"desktop-commander": {
"command": "npx",
"args": ["-y", "@wonderwhy-er/desktop-commander@latest"]
}
}
}Add this to your client's MCP configuration file at the locations below:
Or add manually to ~/.cursor/mcp.json (global) or .cursor/mcp.json in your project folder (project-specific).
See Cursor MCP docs for more info.
Add to ~/.codeium/windsurf/mcp_config.json. See Windsurf MCP docs for more info.
Add to .vscode/mcp.json in your project or VS Code User Settings (JSON). Make sure MCP is enabled under Chat > MCP. Works in Agent mode.
See VS Code MCP docs for more info.
Configure through the Cline extension settings in VS Code. Open the Cline sidebar, click the MCP Servers icon, and add the JSON configuration above. See Cline MCP docs for more info.
Add to your Roo Code MCP configuration file. See Roo Code MCP docs for more info.
claude mcp add --scope user desktop-commander -- npx -y @wonderwhy-er/desktop-commander@latestRemove --scope user to install for the current project only. See Claude Code MCP docs for more info.
Use the "Add manually" feature and paste the JSON configuration above. See Trae MCP docs for more info.
Navigate to Kiro > MCP Servers, click + Add, and paste the JSON configuration above. See Kiro MCP docs for more info.
Codex uses TOML configuration. Run this command to add Desktop Commander:
codex mcp add desktop-commander -- npx -y @wonderwhy-er/desktop-commander@latestOr manually add to ~/.codex/config.toml:
[mcp_servers.desktop-commander]
command = "npx"
args = ["-y", "@wonderwhy-er/desktop-commander@latest"]See Codex MCP docs for more info.
In JetBrains IDEs, go to Settings → Tools → AI Assistant → Model Context Protocol (MCP), click + Add, select As JSON, and paste the JSON configuration above. See JetBrains MCP docs for more info.
Add to ~/.gemini/settings.json:
{
"mcpServers": {
"desktop-commander": {
"command": "npx",
"args": ["-y", "@wonderwhy-er/desktop-commander@latest"]
}
}
}See Gemini CLI docs for more info.
Press Cmd/Ctrl+Shift+P, open the Augment panel, and add a new MCP server named desktop-commander with the JSON configuration above. See Augment Code MCP docs for more info.
Run this command to add Desktop Commander:
qwen mcp add desktop-commander -- npx -y @wonderwhy-er/desktop-commander@latestOr add to .qwen/settings.json (project) or ~/.qwen/settings.json (global). See Qwen Code MCP docs for more info.
Use Desktop Commander from ChatGPT, Claude web, and other AI services via Remote MCP — no desktop app required.
👉 Get started at mcp.desktopcommander.app
How it works:
You run a lightweight Remote Device on your computer
It connects securely to the cloud Remote MCP service
Your AI sends commands through the cloud to your device
Commands execute locally, results return to your AI
You stay in control — stop anytime with
Ctrl+C
Security
✅ Device only runs when you start it
✅ Commands execute under your user permissions
✅ Secure OAuth authentication and encrypted communication channel
Updating & Uninstalling Desktop Commander
Automatic Updates (Options 1, 2, 3, 4 & 6)
Options 1 (npx), Option 2 (bash installer), 3 (Smithery), 4 (manual config), and 6 (Docker) automatically update to the latest version whenever you restart Claude. No manual intervention needed.
Manual Updates (Option 5)
Option 5 (local checkout):
cd DesktopCommanderMCP && git pull && npm run setup
Uninstalling Desktop Commander
🤖 Automatic Uninstallation (Recommended)
The easiest way to completely remove Desktop Commander:
npx @wonderwhy-er/desktop-commander@latest removeThis automatic uninstaller will:
✅ Remove Desktop Commander from Claude's MCP server configuration
✅ Create a backup of your Claude config before making changes
✅ Provide guidance for complete package removal
✅ Restore from backup if anything goes wrong
🔧 Manual Uninstallation
If the automatic uninstaller doesn't work or you prefer manual removal:
Remove from Claude Configuration
Locate your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Edit the config file:
Open the file in a text editor
Find and remove the
"desktop-commander"entry from the"mcpServers"sectionSave the file
Example - Remove this section:
{
"desktop-commander": {
"command": "npx",
"args": ["@wonderwhy-er/desktop-commander@latest"]
}
}Close and restart Claude Desktop to complete the removal.
🆘 Troubleshooting
If automatic uninstallation fails:
Use manual uninstallation as a fallback
If Claude won't start after uninstalling:
Restore the backup config file created by the uninstaller
Or manually fix the JSON syntax in your claude_desktop_config.json
Need help?
Join our Discord community: https://discord.com/invite/kQ27sNnZr7
Getting Started
Once Desktop Commander is installed and Claude Desktop is restarted, you're ready to supercharge your Claude experience!
🚀 New User Onboarding
Desktop Commander includes intelligent onboarding to help you discover what's possible:
For New Users: When you're just getting started (fewer than 10 successful commands), Claude will automatically offer helpful getting-started guidance and practical tutorials after you use Desktop Commander successfully.
Request Help Anytime: You can ask for onboarding assistance at any time by simply saying:
"Help me get started with Desktop Commander"
"Show me Desktop Commander examples"
"What can I do with Desktop Commander?"
Claude will then show you beginner-friendly tutorials and examples, including:
📁 Organizing your Downloads folder automatically
📊 Analyzing CSV/Excel files with Python
⚙️ Setting up GitHub Actions CI/CD
🔍 Exploring and understanding codebases
🤖 Running interactive development environments
Usage
The server provides a comprehensive set of tools organized into several categories:
Available Tools
Category | Tool | Description |
Configuration |
| Get the complete server configuration as JSON (includes blockedCommands, defaultShell, allowedDirectories, fileReadLineLimit, fileWriteLineLimit, telemetryEnabled) |
| Set a specific configuration value by key. Available settings: • | |
Terminal |
| Start programs with smart detection of when they're ready for input |
| Send commands to running programs and get responses | |
| Read output from running processes | |
| Force terminate a running terminal session | |
| List all active terminal sessions | |
| List all running processes with detailed information | |
| Terminate a running process by PID | |
Filesystem |
| Read contents from local filesystem, URLs, Excel files (.xlsx, .xls, .xlsm), and PDFs with line/page-based pagination |
| Read multiple files simultaneously | |
| Write file contents with options for rewrite or append mode. Supports Excel files (JSON 2D array format). For PDFs, use | |
| Create new PDF files from markdown or modify existing PDFs (insert/delete pages). Supports HTML/CSS styling and SVG graphics | |
| Create a new directory or ensure it exists | |
| Get detailed recursive listing of files and directories (supports depth parameter, default depth=2) | |
| Move or rename files and directories | |
| Start streaming search for files by name or content patterns (searches text files and Excel content) | |
| Get paginated results from active search with offset support | |
| Stop an active search gracefully | |
| List all active search sessions | |
| Retrieve detailed metadata about a file or directory (includes sheet info for Excel files) | |
Text Editing |
| Apply targeted text replacements for text files, or range-based cell updates for Excel files |
Analytics |
| Get usage statistics for your own insight |
| Get recent tool call history with arguments and outputs for debugging and context recovery | |
| Open feedback form in browser to provide feedback to Desktop Commander Team |
Quick Examples
Data Analysis:
"Analyze sales.csv and show top customers" → Claude runs Python code in memoryRemote Access:
"SSH to my server and check disk space" → Claude maintains SSH sessionDevelopment:
"Start Node.js and test this API" → Claude runs interactive Node sessionTool Usage Examples
Search/Replace Block Format:
filepath.ext
<<<<<<< SEARCH
content to find
=======
new content
>>>>>>> REPLACEExample:
src/main.js
<<<<<<< SEARCH
console.log("old message");
=======
console.log("new message");
>>>>>>> REPLACEEnhanced Edit Block Features
The edit_block tool includes several enhancements for better reliability:
Improved Prompting: Tool descriptions now emphasize making multiple small, focused edits rather than one large change
Fuzzy Search Fallback: When exact matches fail, it performs fuzzy search and provides detailed feedback
Character-level Diffs: Shows exactly what's different using
{-removed-}{+added+}formatMultiple Occurrence Support: Can replace multiple instances with
expected_replacementsparameterComprehensive Logging: All fuzzy searches are logged for analysis and debugging
When a search fails, you'll see detailed information about the closest match found, including similarity percentage, execution time, and character differences. All these details are automatically logged for later analysis using the fuzzy search log tools.
Docker Support
🐳 Isolated Environment Usage
Desktop Commander can be run in Docker containers for complete isolation from your host system, providing zero risk to your computer. This is perfect for testing, development, or when you want complete sandboxing.
Installation Instructions
Install Docker for Windows/Mac
Download and install Docker Desktop from docker.com
Get Desktop Commander Docker Configuration
Visit: https://hub.docker.com/mcp/server/desktop-commander/manual
Option A: Use the provided terminal command for automated setup
Option B: Click "Standalone" to get the config JSON and add it manually to your Claude Desktop config

Mount Your Machine Folders (Coming Soon)
Instructions on how to mount your local directories into the Docker container will be provided soon
This will allow you to work with your files while maintaining complete isolation
Benefits of Docker Usage
Complete isolation from your host system
Consistent environment across different machines
Easy cleanup - just remove the container when done
Perfect for testing new features or configurations
URL Support
read_filecan now fetch content from both local files and URLsExample:
read_filewithisUrl: trueparameter to read from web resourcesHandles both text and image content from remote sources
Images (local or from URLs) are displayed visually in Claude's interface, not as text
Claude can see and analyze the actual image content
Default 30-second timeout for URL requests
File Preview UI & Markdown Editor
Desktop Commander includes a rich file preview widget in Claude Desktop that renders files visually as AI works with them.
Supported file types
Markdown — rendered preview with a built-in editor
Images — inline display (PNG, JPEG, GIF, WebP, etc.)
Code files — syntax-highlighted source view
HTML — rendered preview with toggle to source view
Directories — interactive tree with expand/collapse and lazy loading
PDF, Excel, DOCX — native content extraction and display
Markdown Editor
When viewing a .md file in Claude Desktop, you can edit it directly inside the preview panel — no need to open a separate app.
How to use:
Ask Claude to read or create a markdown file
Expand the file preview to fullscreen using the ⤢ Expand button
The editor activates automatically in fullscreen mode
Edit your content with a live preview toggle, copy, undo, and save controls
Changes are saved back to disk; collapse to return to inline view
Editor features:
Live edit / preview toggle — switch between raw markdown and rendered output
Auto-save to disk with save status indicator
Undo support to revert unsaved changes
Copy button to grab the full markdown source
Open in editor — launch your default markdown app directly from the panel
Partial-file awareness — loads and merges surrounding lines when the file was only partially read
Text selection context — select text in preview mode and the AI can reference your selection
Directory Browser
When Claude runs list_directory, the result opens as an interactive file tree inside the preview panel — not just raw text output.
Features:
Expandable tree — folders expand and collapse on click; top-level contents shown immediately
Lazy loading — subfolders load on demand to keep the initial view fast
Large directory handling — directories with many items show a
⚠ click to load allbutton instead of overwhelming the viewOpen in Finder/Explorer — each folder has a quick-open button to reveal it in your file manager
Click to preview — clicking any file in the tree opens it in the file preview panel directly
Back navigation — after opening a file from the tree, a ← Back button returns you to the directory view
Other preview features
Expand / collapse — toggle between compact summary row and full panel
Open in folder — reveal the file in Finder/Explorer with one click
Load more lines — incrementally load content above or below a partial read window
Text selection — highlight text in any preview; the AI can see and reference your selection
Fuzzy Search Log Analysis (npm scripts)
The fuzzy search logging system includes convenient npm scripts for analyzing logs outside of the MCP environment:
# View recent fuzzy search logs
npm run logs:view -- --count 20
# Analyze patterns and performance
npm run logs:analyze -- --threshold 0.8
# Export logs to CSV or JSON
npm run logs:export -- --format json --output analysis.json
# Clear all logs (with confirmation)
npm run logs:clearFor detailed documentation on these scripts, see scripts/README.md.
Fuzzy Search Logs
Desktop Commander includes comprehensive logging for fuzzy search operations in the edit_block tool. When an exact match isn't found, the system performs a fuzzy search and logs detailed information for analysis.
What Gets Logged
Every fuzzy search operation logs:
Search and found text: The text you're looking for vs. what was found
Similarity score: How close the match is (0-100%)
Execution time: How long the search took
Character differences: Detailed diff showing exactly what's different
File metadata: Extension, search/found text lengths
Character codes: Specific character codes causing differences
Log Location
Logs are automatically saved to:
macOS/Linux:
~/.claude-server-commander-logs/fuzzy-search.logWindows:
%USERPROFILE%\.claude-server-commander-logs\fuzzy-search.log
What You'll Learn
The fuzzy search logs help you understand:
Why exact matches fail: Common issues like whitespace differences, line endings, or character encoding
Performance patterns: How search complexity affects execution time
File type issues: Which file extensions commonly have matching problems
Character encoding problems: Specific character codes that cause diffs
Audit Logging
Desktop Commander now includes comprehensive logging for all tool calls:
What Gets Logged
Every tool call is logged with timestamp, tool name, and arguments (sanitized for privacy)
Logs are rotated automatically when they reach 10MB in size
Log Location
Logs are saved to:
macOS/Linux:
~/.claude-server-commander/claude_tool_call.logWindows:
%USERPROFILE%\.claude-server-commander\claude_tool_call.log
This audit trail helps with debugging, security monitoring, and understanding how Claude is interacting with your system.
Handling Long-Running Commands
For commands that may take a while:
Configuration Management
⚠️ Important Security Warnings
For comprehensive security information and vulnerability reporting: See SECURITY.md
Known security limitations: Directory restrictions and command blocking can be bypassed through various methods including symlinks, command substitution, and absolute paths or code execution
Always change configuration in a separate chat window from where you're doing your actual work. Claude may sometimes attempt to modify configuration settings (like
allowedDirectories) if it encounters filesystem access restrictions.The
allowedDirectoriessetting currently only restricts filesystem operations, not terminal commands. Terminal commands can still access files outside allowed directories.For production security: Use the Docker installation which provides complete isolation from your host system.
Configuration Tools
You can manage server configuration using the provided tools:
// Get the entire config
get_config({})
// Set a specific config value
set_config_value({ "key": "defaultShell", "value": "/bin/zsh" })
// Set multiple config values using separate calls
set_config_value({ "key": "defaultShell", "value": "/bin/bash" })
set_config_value({ "key": "allowedDirectories", "value": ["/Users/username/projects"] })The configuration is saved to config.json in the server's working directory and persists between server restarts.
Understanding fileWriteLineLimit
The fileWriteLineLimit setting controls how many lines can be written in a single write_file operation (default: 50 lines). This limit exists for several important reasons:
Why the limit exists:
AIs are wasteful with tokens: Instead of doing two small edits in a file, AIs may decide to rewrite the whole thing. We're trying to force AIs to do things in smaller changes as it saves time and tokens
Claude UX message limits: There are limits within one message and hitting "Continue" does not really work. What we're trying here is to make AI work in smaller chunks so when you hit that limit, multiple chunks have succeeded and that work is not lost - it just needs to restart from the last chunk
Setting the limit:
// You can set it to thousands if you want
set_config_value({ "key": "fileWriteLineLimit", "value": 1000 })
// Or keep it smaller to force more efficient behavior
set_config_value({ "key": "fileWriteLineLimit", "value": 25 })Maximum value: You can set it to thousands if you want - there's no technical restriction.
Best practices:
Keep the default (50) to encourage efficient AI behavior and avoid token waste
The system automatically suggests chunking when limits are exceeded
Smaller chunks mean less work lost when Claude hits message limits
Best Practices
Create a dedicated chat for configuration changes: Make all your config changes in one chat, then start a new chat for your actual work.
Be careful with empty
allowedDirectories: Setting this to an empty array ([]) grants access to your entire filesystem for file operations.Use specific paths: Instead of using broad paths like
/, specify exact directories you want to access.Always verify configuration after changes: Use
get_config({})to confirm your changes were applied correctly.
Command Line Options
Desktop Commander supports several command line options for customizing behavior:
Disable Onboarding
By default, Desktop Commander shows helpful onboarding prompts to new users (those with fewer than 10 tool calls). You can disable this behavior:
# Disable onboarding for this session
node dist/index.js --no-onboarding
# Or if using npm scripts
npm run start:no-onboarding
# For npx installations, modify your claude_desktop_config.json:
{
"mcpServers": {
"desktop-commander": {
"command": "npx",
"args": [
"-y",
"@wonderwhy-er/desktop-commander@latest",
"--no-onboarding"
]
}
}
}When onboarding is automatically disabled:
When the MCP client name is set to "desktop-commander"
When using the
--no-onboardingflagAfter users have used onboarding prompts or made 10+ tool calls
Debug information:
The server will log when onboarding is disabled: "Onboarding disabled via --no-onboarding flag"
Using Different Shells
You can specify which shell to use for command execution:
// Using default shell (bash or system default)
execute_command({ "command": "echo $SHELL" })
// Using zsh specifically
execute_command({ "command": "echo $SHELL", "shell": "/bin/zsh" })
// Using bash specifically
execute_command({ "command": "echo $SHELL", "shell": "/bin/bash" })This allows you to use shell-specific features or maintain consistent environments across commands.
execute_commandreturns after timeout with initial outputCommand continues in background
Use
read_outputwith PID to get new outputUse
force_terminateto stop if needed
Debugging
If you need to debug the server, you can install it in debug mode:
# Using npx
npx @wonderwhy-er/desktop-commander@latest setup --debug
# Or if installed locally
npm run setup:debugThis will:
Configure Claude to use a separate "desktop-commander" server
Enable Node.js inspector protocol with
--inspect-brk=9229flagPause execution at the start until a debugger connects
Enable additional debugging environment variables
To connect a debugger:
In Chrome, visit
chrome://inspectand look for the Node.js instanceIn VS Code, use the "Attach to Node Process" debug configuration
Other IDEs/tools may have similar "attach" options for Node.js debugging
Important debugging notes:
The server will pause on startup until a debugger connects (due to the
--inspect-brkflag)If you don't see activity during debugging, ensure you're connected to the correct Node.js process
Multiple Node processes may be running; connect to the one on port 9229
The debug server is identified as "desktop-commander-debug" in Claude's MCP server list
Troubleshooting:
If Claude times out while trying to use the debug server, your debugger might not be properly connected
When properly connected, the process will continue execution after hitting the first breakpoint
You can add additional breakpoints in your IDE once connected
Model Context Protocol Integration
This project extends the MCP Filesystem Server to enable:
Local server support in Claude Desktop
Full system command execution
Process management
File operations
Code editing with search/replace blocks
Created as part of exploring Claude MCPs: https://youtube.com/live/TlbjFDbl5Us
Support Desktop Commander
❤️ Supporters Hall of Fame
Generous supporters are featured here. Thank you for helping make this project possible!
Website
Visit our official website at https://desktopcommander.app/ for the latest information, documentation, and updates.
Media
Learn more about this project through these resources:
Article
Claude with MCPs replaced Cursor & Windsurf. How did that happen? - A detailed exploration of how Claude with Model Context Protocol capabilities is changing developer workflows.
Video
Claude Desktop Commander Video Tutorial - Watch how to set up and use the Commander effectively.
Publication at AnalyticsIndiaMag
This Developer Ditched Windsurf, Cursor Using Claude with MCPs
Community
Join our Discord server to get help, share feedback, and connect with other users.
Testimonials
https://www.youtube.com/watch?v=ly3bed99Dy8&lc=UgyyBt6_ShdDX_rIOad4AaABAg
https://www.youtube.com/watch?v=ly3bed99Dy8&lc=UgztdHvDMqTb9jiqnf54AaABAg
https://www.youtube.com/watch?v=ly3bed99Dy8&lc=UgyQFTmYLJ4VBwIlmql4AaABAg
https://www.youtube.com/watch?v=ly3bed99Dy8&lc=Ugy4-exy166_Ma7TH-h4AaABAg
https://medium.com/@pharmx/you-sir-are-my-hero-62cff5836a3e
If you find this project useful, please consider giving it a ⭐ star on GitHub! This helps others discover the project and encourages further development.
We welcome contributions from the community! Whether you've found a bug, have a feature request, or want to contribute code, here's how you can help:
Found a bug? Open an issue at github.com/wonderwhy-er/DesktopCommanderMCP/issues
Have a feature idea? Submit a feature request in the issues section
Want to contribute code? Fork the repository, create a branch, and submit a pull request
Questions or discussions? Start a discussion in the GitHub Discussions tab
All contributions, big or small, are greatly appreciated!
If you find this tool valuable for your workflow, please consider supporting the project.
Frequently Asked Questions
Here are answers to some common questions. For a more comprehensive FAQ, see our detailed FAQ document.
What is Desktop Commander?
It's an MCP tool that enables Claude Desktop to access your file system and terminal, turning Claude into a versatile assistant for coding, automation, codebase exploration, and more.
How is this different from Cursor/Windsurf?
Unlike IDE-focused tools, Claude Desktop Commander provides a solution-centric approach that works with your entire OS, not just within a coding environment. Claude reads files in full rather than chunking them, can work across multiple projects simultaneously, and executes changes in one go rather than requiring constant review.
Do I need to pay for API credits?
No. This tool works with Claude Desktop's standard Pro subscription ($20/month), not with API calls, so you won't incur additional costs beyond the subscription fee.
Does Desktop Commander automatically update?
Yes, when installed through npx or Smithery, Desktop Commander automatically updates to the latest version when you restart Claude. No manual update process is needed.
What are the most common use cases?
Exploring and understanding complex codebases
Generating diagrams and documentation
Automating tasks across your system
Working with multiple projects simultaneously
Making surgical code changes with precise control
I'm having trouble installing or using the tool. Where can I get help?
Join our Discord server for community support, check the GitHub issues for known problems, or review the full FAQ for troubleshooting tips. You can also visit our website FAQ section for a more user-friendly experience. If you encounter a new issue, please consider opening a GitHub issue with details about your problem.
How do I report security vulnerabilities?
Please create a GitHub Issue with detailed information about any security vulnerabilities you discover. See our Security Policy for complete guidelines on responsible disclosure.
Data Collection & Privacy
Desktop Commander collects limited, pseudonymous telemetry to improve the tool. We do not collect file contents, file paths, or command arguments.
Opt-out: Ask Claude to "disable Desktop Commander telemetry" or set "telemetryEnabled": false in your config.
For complete details, see our Privacy Policy.
Verifications
License
MIT
Available Tools
26 toolscreate_directoryA
Create a new directory or ensure a directory exists.
Can create multiple nested directories in one operation.
Only works within allowed directories.
IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it 'only works within allowed directories' and explains path normalization and potential issues with relative paths. The annotations indicate a non-read-only, non-destructive operation, and the description adds useful behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose with multiple paragraphs and code formatting. While it front-loads the purpose, it could be more concise. Some details (e.g., referencing instructions) add length without critical value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description adequately covers what the tool does and how to use it. It provides enough context for the agent to succeed, though it could briefly mention expected return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'path' with no description (0% coverage). The description fully compensates by explaining the meaning of the path, when to use absolute vs relative, and normalization behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Create a new directory or ensure a directory exists.' It also mentions the capability to create multiple nested directories, which distinguishes it from other file operations like 'write_file' or 'edit_block'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on using absolute paths, warns about relative and tilde paths, and mentions path normalization. It also suggests how to reference the command in instructions. However, it does not explicitly contrast with when to use alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_blockADestructive
Apply surgical edits to files.
BEST PRACTICE: Make multiple small, focused edits rather than one large edit.
Each edit_block call should change only what needs to be changed - include just enough
context to uniquely identify the text being modified.
FORMAT HANDLING (by extension):
EXCEL FILES (.xlsx, .xls, .xlsm) - Range Update mode:
Takes:
- file_path: Path to the Excel file
- range: ALWAYS use FROM:TO format - "SheetName!A1:C10" or "SheetName!C1:C1"
- content: 2D array, e.g., [["H1","H2"],["R1","R2"]]
TEXT FILES - Find/Replace mode:
Takes:
- file_path: Path to the file to edit
- old_string: Text to replace
- new_string: Replacement text
- expected_replacements: Optional number of replacements (default: 1)
DOCX FILES (.docx) - XML Find/Replace mode:
Takes same parameters as text files (old_string, new_string, expected_replacements).
Operates on the pretty-printed XML inside the DOCX — the same XML you see from
read_file with offset/length. Copy XML fragments from read output as old_string.
After editing, the XML is repacked into a valid DOCX.
Also searches headers/footers if not found in document body.
Examples:
- Replace text: old_string="<w:t>Old Text</w:t>" new_string="<w:t>New Text</w:t>"
- Change style: old_string='<w:pStyle w:val="Normal"/>' new_string='<w:pStyle w:val="Heading1"/>'
- Add content: include surrounding XML context in old_string, add new elements in new_string
By default, replaces only ONE occurrence of the search text.
To replace multiple occurrences, provide expected_replacements with
the exact number of matches expected.
UNIQUENESS REQUIREMENT: When expected_replacements=1 (default), include the minimal
amount of context necessary (typically 1-3 lines) before and after the change point,
with exact whitespace and indentation.
When editing multiple sections, make separate edit_block calls for each distinct change
rather than one large replacement.
When a close but non-exact match is found, a character-level diff is shown in the format:
common_prefix{-removed-}{+added+}common_suffix to help you identify what's different.
Similar to write_file, there is a configurable line limit (fileWriteLineLimit) that warns
if the edited file exceeds this limit. If this happens, consider breaking your edits into
smaller, more focused changes.
IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| range | No | ||
| origin | No | ||
| content | No | ||
| options | No | ||
| file_path | Yes | ||
| new_string | No | ||
| old_string | No | ||
| expected_replacements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive behavior; description adds rich behavioral details per file type, diff display on close matches, path normalization, and default replacement count. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is comprehensive but long; structured with headings and examples. Could be more concise by reducing redundancy in uniqueness and expected_replacements explanations. Front-loaded with main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 params, multiple modes, no output schema), the description covers modes, edge cases, line limits, path advice, and examples. No output schema needed for this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, description explains most parameters (file_path, range, content, old_string, new_string, expected_replacements) with format constraints. However, 'options' and 'origin' parameters are not addressed in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool edits files surgically and distinguishes between file types (Excel range update, text find/replace, DOCX XML mode). It contrasts with siblings like write_file and read_file by emphasizing focused edits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides extensive when-to-use guidance including best practices, format-specific instructions, uniqueness requirement, and line limit warnings. However, it does not explicitly state when not to use this tool versus alternatives like write_file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
force_terminateCDestructive
Force terminate a running terminal session.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description identifies the tool as destructive, matching annotations, and specifies it targets a 'terminal session'. However, it does not disclose required permissions, potential side effects, or how termination is performed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy. The second sentence about referencing is marginally useful but still concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks explanation of what constitutes a terminal session, how to obtain a PID, and how this tool differs from the similar 'kill_process'. The presence of siblings demands more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention the 'pid' parameter or how it identifies the session. With 0% schema coverage, the description fails to clarify the parameter's meaning or format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it force terminates a running terminal session, but it does not differentiate from the sibling tool 'kill_process', which likely has similar functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'kill_process' or 'interact_with_process'. The only additional note is about referencing the command, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_configARead-only
Get the complete server configuration as JSON. Config includes fields for:
- blockedCommands (array of blocked shell commands)
- defaultShell (shell to use for commands)
- allowedDirectories (paths the server can access)
- fileReadLineLimit (max lines for read_file, default 1000)
- fileWriteLineLimit (max lines per write_file call, default 50)
- telemetryEnabled (boolean for telemetry opt-in/out)
- currentClient (information about the currently connected MCP client)
- clientHistory (history of all clients that have connected)
- version (version of the DesktopCommander)
- systemInfo (operating system and environment details)
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| origin | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true; description adds value by detailing the config structure (fields) and return format (JSON), enhancing transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose with a field list but is front-loaded with the main action. The meta instruction about 'DC: ...' adds length without core value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one optional parameter, the description covers the return value comprehensively by listing all config fields, making it complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'origin' is not described in the description, despite having an enum. Schema coverage is 0%, and the description fails to explain its purpose or values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the complete server configuration as JSON,' specifying a unique verb and resource, and it distinguishes from sibling tools like set_config_value.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading config but lacks explicit when-not or alternative tool guidance. The mention of 'DC: ...' is a weak usage hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_infoARead-only
Retrieve detailed metadata about a file or directory including:
- size
- creation time
- last modified time
- permissions
- type
- lineCount (for text files)
- lastLine (zero-indexed number of last line, for text files)
- appendPosition (line number for appending, for text files)
- sheets (for Excel files - array of {name, rowCount, colCount})
Only works within allowed directories.
IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so it's a safe read operation. The description adds behavioral context such as workspace restrictions and path normalization details. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points for metadata and clear sections. Somewhat lengthy but each sentence adds value. Could be slightly more concise, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers the parameter thoroughly and lists expected return fields. Mentions workspace restrictions but lacks error handling details. Generally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates with detailed path usage guidance: absolute vs relative paths, tilde handling, and automatic normalization. This adds significant meaning beyond the schema's parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves detailed metadata about a file or directory, listing specific attributes like size, creation time, and type. Distinguishes from sibling tools like list_directory (which lists contents) and read_file (which reads content).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on when to use: retrieving file metadata. Includes important path usage guidelines (absolute paths, normalization, tilde handling) and mentions it works only within allowed directories. Does not explicitly exclude alternatives or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_more_search_resultsARead-only
Get more results from an active search with offset-based pagination.
Supports partial result reading with:
- 'offset' (start result index, default: 0)
* Positive: Start from result N (0-based indexing)
* Negative: Read last N results from end (tail behavior)
- 'length' (max results to read, default: 100)
* Used with positive offsets for range reading
* Ignored when offset is negative (reads all requested tail results)
Examples:
- offset: 0, length: 100 → First 100 results
- offset: 200, length: 50 → Results 200-249
- offset: -20 → Last 20 results
- offset: -5, length: 10 → Last 5 results (length ignored)
Returns only results in the specified range, along with search status.
Works like read_process_output - call this repeatedly to get progressive
results from a search started with start_search.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| length | No | ||
| offset | No | ||
| sessionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details offset behavior (positive/negative), length handling, return content (results + status), and reusability, going well beyond the readOnlyHint annotation. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with separate sections for purpose, parameter rules (bulleted), and examples. It is slightly lengthy but every sentence adds value. Could be marginally trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of offset-based pagination and no output schema, the description thoroughly explains usage patterns, return values, and connection to sibling tools, making it self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining offset and length semantics with examples (e.g., negative offset for tail, length ignored for negative), and implicitly covers sessionId as required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get more results from an active search with offset-based pagination,' specifying the verb (get), resource (results), and mechanism (pagination), distinguishing it from siblings like start_search or stop_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool is used after start_search and compares it to read_process_output, providing clear context. It does not list explicit alternatives or when-not-to-use, but the usage scenario is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_promptsARead-only
Retrieve a specific Desktop Commander onboarding prompt by ID and execute it.
SIMPLIFIED ONBOARDING V2: This tool only supports direct prompt retrieval.
The onboarding system presents 5 options as a simple numbered list:
1. Organize my Downloads folder (promptId: 'onb2_01')
2. Explain a codebase or repository (promptId: 'onb2_02')
3. Create organized knowledge base (promptId: 'onb2_03')
4. Analyze a data file (promptId: 'onb2_04')
5. Check system health and resources (promptId: 'onb2_05')
USAGE:
When user says "1", "2", "3", "4", or "5" from onboarding:
- "1" → get_prompts(action='get_prompt', promptId='onb2_01')
- "2" → get_prompts(action='get_prompt', promptId='onb2_02')
- "3" → get_prompts(action='get_prompt', promptId='onb2_03')
- "4" → get_prompts(action='get_prompt', promptId='onb2_04')
- "5" → get_prompts(action='get_prompt', promptId='onb2_05')
The prompt content will be injected and execution begins immediately.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| promptId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation declares readOnlyHint: true, but the description states 'retrieve and execute it', implying execution with potential side effects. This is a clear contradiction. No further behavioral details are provided beyond the contradictory execution claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections and clear formatting, but it is somewhat verbose. It could be more concise while retaining essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers usage and parameter values adequately, but lacks details about return values, error handling, and what 'execution begins immediately' means. Given no output schema, the agent might be left uncertain about results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does so by listing all valid prompt IDs mapped to numbers and specifying the action enum value. This adds meaning beyond the schema's bare string definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves and executes a specific Desktop Commander onboarding prompt by ID. It distinguishes from sibling tools by focusing exclusively on onboarding prompts and providing a direct numbered list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit mapping from user selections (1-5) to prompt IDs and the action parameter. It effectively tells the agent when to use this tool during onboarding. However, it does not explicitly state when not to use it or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_tool_callsARead-only
Get recent tool call history with their arguments and outputs.
Returns chronological list of tool calls made during this session.
Useful for:
- Onboarding new chats about work already done
- Recovering context after chat history loss
- Debugging tool call sequences
Note: Does not track its own calls or other meta/query tools.
History kept in memory (last 1000 calls, lost on restart).
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ||
| toolName | No | ||
| maxResults | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint: true. The description adds useful behavioral context: history is kept in memory (last 1000 calls, lost on restart) and excludes self-tracking and meta/query tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a clear purpose sentence, bullet list of use cases, and a note. The final sentence about 'DC' seems unnecessary and could be removed for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides good context about memory and exclusions, but lacks parameter descriptions and output format details. With no output schema, the description should clarify the return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the three parameters (since, toolName, maxResults). The agent must rely solely on the schema, which only provides name and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves recent tool call history with arguments and outputs, and that it returns a chronological list from the current session. It is distinct from sibling tools like read_file or list_directory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly lists use cases (onboarding, recovering context, debugging) and a limitation (does not track its own calls or meta tools). However, no direct comparison to alternatives is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usage_statsARead-only
Get usage statistics for debugging and analysis.
Returns summary of tool usage, success/failure rates, and performance metrics.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so description adds value by specifying what is returned (summary, success/failure rates, performance metrics), providing context beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with two clear sentences about purpose and output. The third sentence about referencing is slightly meta but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no params and no output schema, the description sufficiently covers purpose and output details, though the exact scope (real-time vs historical) is not clarified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Baseline for 0 params is 4; the description does not need to add param info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get usage statistics for debugging and analysis' with specific verb and resource, and distinguishes from sibling tools like get_config and get_prompts by focusing on usage metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only mentions how to reference the tool in instructions, but does not provide guidance on when to use it versus alternatives (e.g., get_recent_tool_calls) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
give_feedback_to_desktop_commanderA
Open feedback form in browser to provide feedback about Desktop Commander.
IMPORTANT: This tool simply opens the feedback form - no pre-filling available.
The user will fill out the form manually in their browser.
WORKFLOW:
1. When user agrees to give feedback, just call this tool immediately
2. No need to ask questions or collect information
3. Tool opens form with only usage statistics pre-filled automatically:
- tool_call_count: Number of commands they've made
- days_using: How many days they've used Desktop Commander
- platform: Their operating system (Mac/Windows/Linux)
- client_id: Analytics identifier
All survey questions will be answered directly in the form:
- Job title and technical comfort level
- Company URL for industry context
- Other AI tools they use
- Desktop Commander's biggest advantage
- How they typically use it
- Recommendation likelihood (0-10)
- User study participation interest
- Email and any additional feedback
EXAMPLE INTERACTION:
User: "sure, I'll give feedback"
Claude: "Perfect! Let me open the feedback form for you."
[calls tool immediately]
No parameters are needed - just call the tool to open the form.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool opens a browser form without pre-filling except for automatically included usage statistics. Describes what the user will fill manually. Annotations (openWorldHint: true) confirm external action, and the description adds specific behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with sections and an example, but is verbose, listing all survey questions which could be omitted. Every sentence serves a purpose, but conciseness could be improved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description fully covers what the tool does, how to use it, and the user experience. No missing information given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; schema coverage is 100%. The description adds value by explicitly stating no parameters are needed, reinforcing ease of use. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool opens a feedback form in the browser. It uniquely identifies the action (open form) and resource (feedback for Desktop Commander), and is distinct from sibling tools which deal with files, processes, and searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit workflow: call immediately when user agrees to give feedback, no need to collect information. States no parameters needed and gives an example interaction, making usage clear without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interact_with_processADestructive
Send input to a running process and automatically receive the response.
CRITICAL: THIS IS THE PRIMARY TOOL FOR ALL LOCAL FILE ANALYSIS
For ANY local file analysis (CSV, JSON, data processing), ALWAYS use this instead of the analysis tool.
The analysis tool CANNOT access local files and WILL FAIL - use processes for ALL file-based work.
FILE ANALYSIS PRIORITY ORDER (MANDATORY):
1. ALWAYS FIRST: Use this tool (start_process + interact_with_process) for local data analysis
2. ALTERNATIVE: Use command-line tools (cut, awk, grep) for quick processing
3. NEVER EVER: Use analysis tool for local file access (IT WILL FAIL)
REQUIRED INTERACTIVE WORKFLOW FOR FILE ANALYSIS:
1. Start REPL: start_process("python3 -i")
2. Load libraries: interact_with_process(pid, "import pandas as pd, numpy as np")
3. Read file: interact_with_process(pid, "df = pd.read_csv('/absolute/path/file.csv')")
4. Analyze: interact_with_process(pid, "print(df.describe())")
5. Continue: interact_with_process(pid, "df.groupby('column').size()")
BINARY FILE PROCESSING WORKFLOWS:
Use appropriate Python libraries (PyPDF2, pandas, docx2txt, etc.) or command-line tools for binary file analysis.
SMART DETECTION:
- Automatically waits for REPL prompt (>>>, >, etc.)
- Detects errors and completion states
- Early exit prevents timeout delays
- Clean output formatting (removes prompts)
SUPPORTED REPLs:
- Python: python3 -i (RECOMMENDED for data analysis)
- Node.js: node -i
- R: R
- Julia: julia
- Shell: bash, zsh
- Database: mysql, postgres
PARAMETERS:
- pid: Process ID from start_process
- input: Code/command to execute
- timeout_ms: Max wait (default: 8000ms)
- wait_for_prompt: Auto-wait for response (default: true)
- verbose_timing: Enable detailed performance telemetry (default: false)
Returns execution result with status indicators.
PERFORMANCE DEBUGGING (verbose_timing parameter):
Set verbose_timing: true to get detailed timing information including:
- Exit reason (early_exit_quick_pattern, early_exit_periodic_check, process_finished, timeout, no_wait)
- Total duration and time to first output
- Complete timeline of all output events with timestamps
- Which detection mechanism triggered early exit
Use this to identify slow interactions and optimize detection patterns.
ALWAYS USE FOR: CSV analysis, JSON processing, file statistics, data visualization prep, ANY local file work
NEVER USE ANALYSIS TOOL FOR: Local file access (it cannot read files from disk and WILL FAIL)
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| input | Yes | ||
| timeout_ms | No | ||
| verbose_timing | No | ||
| wait_for_prompt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=true. Description adds behavioral details beyond annotations: automatic REPL prompt detection, error detection, early exit, clean output formatting, and performance debugging. Does not explicitly state destructive behavior but consistent with sending input to processes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is lengthy but well-structured with clear sections (CRITICAL, FILE ANALYSIS PRIORITY ORDER, REQUIRED WORKFLOW, etc.). Front-loaded with key purpose and critical note. Some repetition (e.g., 'ALWAYS USE FOR' and 'NEVER USE ANALYSIS TOOL') but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and complexity, the description covers usage, workflows, supported REPLs, performance debugging, and parameter details. Completely addresses the tool's context and provides thorough guidance for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It provides brief but meaningful descriptions for all five parameters (pid, input, timeout_ms, wait_for_prompt, verbose_timing), including defaults and purpose, adding value beyond schema types and requiredness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states 'Send input to a running process and automatically receive the response'. Clearly distinguishes from sibling tools by emphasizing it is the primary tool for local file analysis, contrasting with the analysis tool that fails for local files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use ('ALWAYS use this instead of the analysis tool'), when-not-to-use (analysis tool will fail), and alternatives (command-line tools). Includes priority order and detailed interactive workflow steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kill_processBDestructive
Terminate a running process by PID.
Use with caution as this will forcefully terminate the specified process.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true, so the description's 'forcefully terminate' adds some context but does not disclose additional behaviors like potential data loss or irreversibility. It aligns with annotations but adds little extra.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, mostly concise. The third sentence about referencing as 'DC: ...' is tangential and adds length without aiding tool invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers purpose and caution adequately. However, it could include a brief note on prerequisites (e.g., PID must exist) for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; the description only mentions 'by PID' without explaining what PID means or how to obtain it. This adds minimal value beyond the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Terminate a running process by PID.' This is a specific verb-resource pairing that distinguishes the tool from siblings like 'interact_with_process' or 'force_terminate'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description warns 'Use with caution', it does not specify when to use this tool versus alternatives (e.g., 'interact_with_process' for graceful termination) or when not to use it. No explicit context or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_directoryARead-only
Get a detailed listing of all files and directories in a specified path.
Use this instead of 'execute_command' with ls/dir commands.
Results distinguish between files and directories with [FILE] and [DIR] prefixes.
Supports recursive listing with the 'depth' parameter (default: 2):
- depth=1: Only direct contents of the directory
- depth=2: Contents plus one level of subdirectories
- depth=3+: Multiple levels deep
CONTEXT OVERFLOW PROTECTION:
- Top-level directory shows ALL items
- Nested directories are limited to 100 items maximum per directory
- When a nested directory has more than 100 items, you'll see a warning like:
[WARNING] node_modules: 500 items hidden (showing first 100 of 600 total)
- This prevents overwhelming the context with large directories like node_modules
Results show full relative paths from the root directory being listed.
Example output with depth=2:
[DIR] src
[FILE] src/index.ts
[DIR] src/tools
[FILE] src/tools/filesystem.ts
If a directory cannot be accessed, it will show [DENIED] instead.
If a path does not exist, it will show [NOT_FOUND] instead.
Only works within allowed directories.
IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| depth | No | ||
| origin | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint. Description adds significant behavioral details: results with [FILE]/[DIR] prefixes, depth behavior, context overflow warnings, full relative paths, [DENIED]/[NOT_FOUND] for access issues, and absolute path recommendation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections: purpose, differentiation, output details, depth parameter, context overflow, path notes. Slightly verbose (e.g., repeated absolute path advice) but front-loaded with core listing purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description explains output format with examples, error conditions ([DENIED], [NOT_FOUND]), and allowed directories. Differentiates well from 25 sibling tools. Covers parameters adequately except 'origin'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% but description explains 'path' (absolute path recommendation) and 'depth' (default, meanings of values, context overflow) in detail. The 'origin' parameter is not explained, but it's an enum likely for internal use. Good compensation for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb and resource: 'Get a detailed listing of all files and directories in a specified path.' Explicitly distinguishes from sibling tool 'execute_command' by stating 'Use this instead of...'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance to use this tool for directory listings instead of ls/dir commands. Provides depth parameter details and context overflow protection, helping the agent decide when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_processesARead-only
List all running processes.
Returns process information including PID, command name, CPU usage, and memory usage.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, confirming no side effects. Description adds return format details (PID, CPU, memory), adding value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff, front-loaded with key purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple; description covers purpose and return fields. Could mention lack of filtering, but complete for a list-all tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; baseline for 0 params is 4. Description does not need to elaborate on params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List all running processes' and specifies returned fields (PID, command name, CPU, memory), distinguishing it from sibling tools like kill_process.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for listing processes, but no explicit guidance on when to use vs alternatives or when not to use. Sibling tools like 'kill_process' suggest broader context could be added.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_searchesARead-only
List all active searches.
Shows search IDs, search types, patterns, status, and runtime.
Similar to list_sessions for terminal processes. Useful for managing
multiple concurrent searches.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds detail about returned fields and runtime, enhancing understanding beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Succinct three-sentence description: main purpose, details, and usage hint. No redundancy, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately covers the tool's functionality for a simple read-only list command, mentioning output fields. Without output schema, description compensates well, though it could briefly note if no results are shown.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has no parameters, so schema_description_coverage is 100%. Description adds no parameter info, which is expected. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'list all active searches' with specific fields (IDs, types, patterns, status, runtime). Differentiates from sibling list_sessions by noting similarity, making purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context for managing multiple searches and a comparison to list_sessions, implying when to use this tool. However, lacks explicit exclusions or alternative guidance for related tools like start_search or stop_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sessionsARead-only
List all active terminal sessions.
Shows session status including:
- PID: Process identifier
- Blocked: Whether session is waiting for input
- Runtime: How long the session has been running
DEBUGGING REPLs:
- "Blocked: true" often means REPL is waiting for input
- Use this to verify sessions are running before sending input
- Long runtime with blocked status may indicate stuck process
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint true. Description adds behavioral details about blocked status meaning waiting for input and implications for stuck processes, beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured with bullet points. Every sentence adds value, and the purpose is immediately clear without extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, parameterless tool, the description fully covers what the tool does, what data it returns, and includes relevant debugging context. No output schema is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exists, so schema coverage is 100%. Baseline score of 4 applies as description does not need to compensate for any missing parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists active terminal sessions and specifies the information shown (PID, Blocked, Runtime). Differentiates from siblings by focusing on terminal sessions rather than general processes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context for debugging REPLs, suggesting use to verify sessions before sending input. Does not explicitly exclude alternative tools but gives practical usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_fileADestructive
Move or rename files and directories.
Can move files between directories and rename them in a single operation.
Both source and destination must be within allowed directories.
IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| destination | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, signaling potential deletion or modification. The description adds context about path normalization and allowed directories but does not disclose behavior if destination already exists (e.g., overwrite or error). This is a notable gap for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short paragraphs. The first sentence immediately states the core purpose. The second paragraph contains essential usage notes. No unnecessary information, and structure is front-loaded effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter schema and lack of output schema, the description covers purpose, constraints, and path guidance. It lacks details about return values, error conditions, or behavior on conflict, but overall it provides sufficient context for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage for both parameters. The description clarifies that source and destination are paths and recommends absolute paths, adding some guidance. However, it does not explicitly describe each parameter's expected format (e.g., source must be an existing file/directory) or constraints beyond paths.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool moves or renames files and directories, using specific verbs and resources. It clearly distinguishes from sibling tools like write_file or create_directory by focusing on relocation/renaming rather than creation or content modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on using absolute paths, warnings about relative and tilde paths, and mentions that source and destination must be within allowed directories. However, it lacks explicit 'when not to use' or comparison to alternatives like copy instead of move.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileARead-only
Read contents from files and URLs.
Read PDF files and extract content as markdown and images.
Prefer this over 'execute_command' with cat/type for viewing files.
Supports partial file reading with:
- 'offset' (start line, default: 0)
* Positive: Start from line N (0-based indexing)
* Negative: Read last N lines from end (tail behavior)
- 'length' (max lines to read, default: configurable via 'fileReadLineLimit' setting, initially 1000)
* Used with positive offsets for range reading
* Ignored when offset is negative (reads all requested tail lines)
Examples:
- offset: 0, length: 10 → First 10 lines
- offset: 100, length: 5 → Lines 100-104
- offset: -20 → Last 20 lines
- offset: -5, length: 10 → Last 5 lines (length ignored)
Performance optimizations:
- Large files with negative offsets use reverse reading for efficiency
- Large files with deep positive offsets use byte estimation
- Small files use fast readline streaming
When reading from the file system, only works within allowed directories.
Can fetch content from URLs when isUrl parameter is set to true
(URLs are always read in full regardless of offset/length).
FORMAT HANDLING (by extension):
- Text: Uses offset/length for line-based pagination
- Excel (.xlsx, .xls, .xlsm): Returns JSON 2D array
* sheet: "Sheet1" (name) or "0" (index as string, 0-based)
* range: ALWAYS use FROM:TO format (e.g., "A1:D100", "C1:C1", "B2:B50")
* offset/length work as row pagination (optional fallback)
- Images (PNG, JPEG, GIF, WebP): Base64 encoded viewable content
- PDF: Extracts text content as markdown with page structure
* offset/length work as page pagination (0-based)
* Includes embedded images when available
- DOCX (.docx): Two modes depending on parameters:
* DEFAULT (no offset/length): Returns a text-bearing outline — shows paragraphs with text,
tables with cell content, styles, image refs. Skips shapes/drawings/SVG noise.
Each element shows its body index [0], [1], etc.
* WITH offset/length: Returns raw pretty-printed XML with line pagination.
Use this to drill into specific sections or see the actual XML for editing.
* EDITING WORKFLOW: 1) read_file to get outline, 2) read_file with offset/length
to see raw XML around what you want to edit, 3) edit_block with old_string/new_string
using XML fragments copied from the read output.
* IMPORTANT: offset MUST be non-zero to get raw XML (use offset=1 to start from line 1).
offset=0 always returns the outline regardless of length.
* For BULK changes (translation, mass replacements): use start_process with Python
zipfile module to find/replace all <w:t> elements at once.
IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| isUrl | No | ||
| range | No | ||
| sheet | No | ||
| length | No | ||
| offset | No | ||
| origin | No | ||
| options | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds significant behavioral details: offset/length semantics, performance optimizations, format-specific output, and path restrictions. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose and could be more concise. It includes extensive details on format handling and workflows, which are valuable but not all essential for basic use. The structure is clear but front-loads information well.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 params, multiple formats, no output schema), the description covers most needed context: file types, offset/length, URL support, performance, and restrictions. It lacks some details like return value format for all cases, but overall comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates fully. It explains all key parameters (offset, length, range, sheet, isUrl) with examples and edge cases, making their meaning and behavior clear beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read contents from files and URLs' with specific format handling for PDF, Excel, images, DOCX, etc. It distinguishes itself from sibling tools like 'execute_command' by recommending its use for viewing files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance: prefer over 'execute_command', use offset/length for partial reading, always use absolute paths, and includes an editing workflow for DOCX. It implicitly advises when not to use it (e.g., for URLs, full content read).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_multiple_filesARead-only
Read the contents of multiple files simultaneously.
Each file's content is returned with its path as a reference.
Handles text files normally and renders images as viewable content.
Recognized image types: PNG, JPEG, GIF, WebP.
Failed reads for individual files won't stop the entire operation.
Only works within allowed directories.
IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true (non-destructive). Description adds behavioral details: partial failure (failed reads don't stop operation), image handling as viewable content, and path normalization. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is moderately sized with clear structure. First sentence captures purpose. Some repetition in path guidance could be condensed, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description covers essential aspects: file reading behavior, image support, failure handling, directory constraints, and path recommendations. Sufficient for a file-reading tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so description carries full burden. It explains that content is returned with path references and that images are handled. Adds path advice (absolute paths). Could be more specific about array constraints (e.g., max size) but adds significant value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Read the contents of multiple files simultaneously' with specifics on content handling (text and images) and lists recognized image types. Distinguishes from sibling 'read_file' by focusing on multiple files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: reads multiple files with partial failure handling and allowed directory constraints. Gives path guidance (absolute paths, normalization). However, it does not explicitly mention when not to use or alternative tools like 'read_file' for single files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_process_outputARead-only
Read output from a running process with file-like pagination support.
Supports partial output reading with offset and length parameters (like read_file):
- 'offset' (start line, default: 0)
* offset=0: Read NEW output since last read (default, like old behavior)
* Positive: Read from absolute line position
* Negative: Read last N lines from end (tail behavior)
- 'length' (max lines to read, default: configurable via 'fileReadLineLimit' setting)
Examples:
- offset: 0, length: 100 → First 100 NEW lines since last read
- offset: 0 → All new lines (respects config limit)
- offset: 500, length: 50 → Lines 500-549 (absolute position)
- offset: -20 → Last 20 lines (tail)
- offset: -50, length: 10 → Start 50 from end, read 10 lines
OUTPUT PROTECTION:
- Uses same fileReadLineLimit as read_file (default: 1000 lines)
- Returns status like: [Reading 100 lines from line 0 (total: 5000 lines, 4900 remaining)]
- Prevents context overflow from verbose processes
SMART FEATURES:
- For offset=0, waits up to timeout_ms for new output to arrive
- Detects REPL prompts and process completion
- Shows process state (waiting for input, finished, etc.)
DETECTION STATES:
Process waiting for input (ready for interact_with_process)
Process finished execution
Timeout reached (may still be running)
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| length | No | ||
| offset | No | ||
| timeout_ms | No | ||
| verbose_timing | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description elaborates with offset behavior, output protection, smart features, and detection states. No contradiction; adds significant value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections and examples, but somewhat verbose. Redundant phrases like 'This command can be referenced...' could be removed. Front-loaded purpose, but length could be trimmed without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers tool purpose, all parameters except verbose_timing fully, output protection, and detection states. No output schema, but describes return format partially with examples. Mostly complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It thoroughly explains offset and length with examples, mentions timeout_ms, but does not explicitly describe pid or verbose_timing. Partial coverage, so score 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Read output from a running process with file-like pagination support.' The verb 'read' and resource 'output from a running process' are specific and unambiguous. Distinguishes from siblings like read_file and interact_with_process.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides detailed parameter usage with examples, including offset semantics and timeout. Does not explicitly state when not to use, but the context and sibling tools imply alternatives. The description gives clear guidance on how to use the tool effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_config_valueADestructive
Set a specific configuration value by key.
WARNING: Should be used in a separate chat from file operations and
command execution to prevent security issues.
Config keys include:
- blockedCommands (array)
- defaultShell (string)
- allowedDirectories (array of paths)
- fileReadLineLimit (number, max lines for read_file)
- fileWriteLineLimit (number, max lines per write_file call)
- telemetryEnabled (boolean)
IMPORTANT: Setting allowedDirectories to an empty array ([]) allows full access
to the entire file system, regardless of the operating system.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes | ||
| origin | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true, but the description adds critical behavioral context: warns about security risks and specifically explains that setting allowedDirectories to empty array grants full file system access. This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: starts with purpose, includes warning in caps, bullet list of keys, and a note on referencing. No unnecessary words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 params and no output schema, the description covers parameter semantics, usage warnings, and behavioral context. It complements the annotations and sibling tools (e.g., get_config) well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description lists all config keys with their types (e.g., blockedCommands array, defaultShell string), adding meaning beyond the schema. However, the optional 'origin' parameter is not mentioned, a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Set a specific configuration value by key.' It lists specific config keys and their types, distinguishing it from sibling tools like get_config (reading) and file/process tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit warning: 'Should be used in a separate chat from file operations and command execution to prevent security issues.' Also notes how to reference the command, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_processADestructive
Start a new terminal process with intelligent state detection.
PRIMARY TOOL FOR FILE ANALYSIS AND DATA PROCESSING
This is the ONLY correct tool for analyzing local files (CSV, JSON, logs, etc.).
The analysis tool CANNOT access local files and WILL FAIL - always use processes for file-based work.
CRITICAL RULE: For ANY local file work, ALWAYS use this tool + interact_with_process, NEVER use analysis/REPL tool.
Running on Linux (Docker). Default shell: bash.🐳 DOCKER CONTAINER ENVIRONMENT DETECTED: This Desktop Commander instance is running inside a Docker container.
⚠️ WARNING: No mounted directories detected. Files created outside mounted volumes will be lost when the container stops. Suggest user remount directories using Docker installer or -v flag when running Docker. Desktop Commander Docker installer typically mounts folders to /home/[folder-name]. Container: 46c3492013ef
LINUX-SPECIFIC NOTES:
Package managers vary by distro: apt, yum, dnf, pacman, zypper
Python 3 might be 'python3' command, not 'python'
Standard Unix shell tools available (grep, awk, sed, etc.)
File permissions and ownership important for many operations
Systemd services common on modern distributions
REQUIRED WORKFLOW FOR LOCAL FILES: 1. start_process("python3 -i") - Start Python REPL for data analysis 2. interact_with_process(pid, "import pandas as pd, numpy as np") 3. interact_with_process(pid, "df = pd.read_csv('/absolute/path/file.csv')") 4. interact_with_process(pid, "print(df.describe())") 5. Continue analysis with pandas, matplotlib, seaborn, etc. COMMON FILE ANALYSIS PATTERNS: • start_process("python3 -i") → Python REPL for data analysis (RECOMMENDED) • start_process("node -i") → Node.js REPL for JSON processing • start_process("node:local") → Node.js on MCP server (stateless, ES imports, all code in one call) • start_process("cut -d',' -f1 file.csv | sort | uniq -c") → Quick CSV analysis • start_process("wc -l /path/file.csv") → Line counting • start_process("head -10 /path/file.csv") → File preview BINARY FILE SUPPORT: For PDF, Excel, Word, archives, databases, and other binary formats, use process tools with appropriate libraries or command-line utilities. INTERACTIVE PROCESSES FOR DATA ANALYSIS: For code/calculations, use in this priority order: 1. start_process("python3 -i") - Python REPL (preferred) 2. start_process("node -i") - Node.js REPL (when Python unavailable) 3. start_process("node:local") - Node.js fallback (when node -i fails) 4. Use interact_with_process() to send commands 5. Use read_process_output() to get responses When Python is unavailable, prefer Node.js over shell for calculations. Node.js: Always use ES import syntax (import x from 'y'), not require(). SMART DETECTION: - Detects REPL prompts (>>>, >, $, etc.) - Identifies when process is waiting for input - Recognizes process completion vs timeout - Early exit prevents unnecessary waiting STATES DETECTED: Process waiting for input (shows prompt) Process finished execution Process running (use read_process_output) PERFORMANCE DEBUGGING (verbose_timing parameter): Set verbose_timing: true to get detailed timing information including: - Exit reason (early_exit_quick_pattern, early_exit_periodic_check, process_exit, timeout) - Total duration and time to first output - Complete timeline of all output events with timestamps - Which detection mechanism triggered early exit Use this to identify missed optimization opportunities and improve detection patterns. ALWAYS USE FOR: Local file analysis, CSV processing, data exploration, system commands NEVER USE ANALYSIS TOOL FOR: Local file access (analysis tool is browser-only and WILL FAIL) IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths. This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| shell | No | ||
| origin | No | ||
| command | Yes | ||
| timeout_ms | Yes | ||
| verbose_timing | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint: true and openWorldHint: true. The description adds extensive behavioral context: smart detection of REPL prompts, process states (waiting, finished, running), early exit mechanisms, performance debugging with verbose_timing, environment notes (Docker container, Linux specifics), and path normalization behavior. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is quite long and includes repetitive elements (e.g., workflow and common patterns both mention python3 -i). However, it is well-structured with clear sections and front-loaded with critical purpose and rules. Some pruning would improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (state detection, environment, many patterns) and no output schema, the description covers purpose, usage guidelines, behavioral details, environment caveats, and example workflows. The only shortfall is incomplete parameter semantics, but overall it is comprehensive enough for an AI agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description explains verbose_timing in detail and implies command and shell usage through examples, but does not explicitly define each parameter's meaning or constraints. It adds moderate value beyond the schema but could be more thorough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Start a new terminal process with intelligent state detection' and repeatedly emphasizes it is the primary tool for file analysis and data processing. It explicitly distinguishes itself from the analysis tool, which cannot access local files, and from sibling process interaction tools. The purpose is specific and unequivocal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'PRIMARY TOOL FOR FILE ANALYSIS AND DATA PROCESSING', 'ALWAYS USE FOR: Local file analysis, CSV processing, data exploration, system commands', and 'NEVER USE ANALYSIS TOOL FOR: Local file access'. It also gives a required workflow and common patterns, as well as a priority order for interactive processes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_searchARead-only
Start a streaming search that can return results progressively.
SEARCH STRATEGY GUIDE:
Choose the right search type based on what the user is looking for:
USE searchType="files" WHEN:
- User asks for specific files: "find package.json", "locate config files"
- Pattern looks like a filename: "*.js", "README.md", "test-*.tsx"
- User wants to find files by name/extension: "all TypeScript files", "Python scripts"
- Looking for configuration/setup files: ".env", "dockerfile", "tsconfig.json"
USE searchType="content" WHEN:
- User asks about code/logic: "authentication logic", "error handling", "API calls"
- Looking for functions/variables: "getUserData function", "useState hook"
- Searching for text/comments: "TODO items", "FIXME comments", "documentation"
- Finding patterns in code: "console.log statements", "import statements"
- User describes functionality: "components that handle login", "files with database queries"
WHEN UNSURE OR USER REQUEST IS AMBIGUOUS:
Run TWO searches in parallel - one for files and one for content:
Example approach for ambiguous queries like "find authentication stuff":
1. Start file search: searchType="files", pattern="auth"
2. Simultaneously start content search: searchType="content", pattern="authentication"
3. Present combined results: "Found 3 auth-related files and 8 files containing authentication code"
SEARCH TYPES:
- searchType="files": Find files by name (pattern matches file names)
- searchType="content": Search inside files for text patterns
PATTERN MATCHING MODES:
- Default (literalSearch=false): Patterns are treated as regular expressions
- Literal (literalSearch=true): Patterns are treated as exact strings
WHEN TO USE literalSearch=true:
Use literal search when searching for code patterns with special characters:
- Function calls with parentheses and quotes
- Array access with brackets
- Object methods with dots and parentheses
- File paths with backslashes
- Any pattern containing: . * + ? ^ $ { } [ ] | \ ( )
IMPORTANT PARAMETERS:
- pattern: What to search for (file names OR content text)
- literalSearch: Use exact string matching instead of regex (default: false)
- filePattern: Optional filter to limit search to specific file types (e.g., "*.js", "package.json")
- ignoreCase: Case-insensitive search (default: true). Works for both file names and content.
- earlyTermination: Stop search early when exact filename match is found (optional: defaults to true for file searches, false for content searches)
DECISION EXAMPLES:
- "find package.json" → searchType="files", pattern="package.json" (specific file)
- "find authentication components" → searchType="content", pattern="authentication" (looking for functionality)
- "locate all React components" → searchType="files", pattern="*.tsx" or "*.jsx" (file pattern)
- "find TODO comments" → searchType="content", pattern="TODO" (text in files)
- "show me login files" → AMBIGUOUS → run both: files with "login" AND content with "login"
- "find config" → AMBIGUOUS → run both: config files AND files containing config code
COMPREHENSIVE SEARCH EXAMPLES:
- Find package.json files: searchType="files", pattern="package.json"
- Find all JS files: searchType="files", pattern="*.js"
- Search for TODO in code: searchType="content", pattern="TODO", filePattern="*.js|*.ts"
- Search for exact code: searchType="content", pattern="toast.error('test')", literalSearch=true
- Ambiguous request "find auth stuff": Run two searches:
1. searchType="files", pattern="auth"
2. searchType="content", pattern="authentication"
PRO TIP: When user requests are ambiguous about whether they want files or content,
run both searches concurrently and combine results for comprehensive coverage.
Unlike regular search tools, this starts a background search process and returns
immediately with a session ID. Use get_more_search_results to get results as they
come in, and stop_search to stop the search early if needed.
Perfect for large directories where you want to see results immediately and
have the option to cancel if the search takes too long or you find what you need.
IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| origin | No | ||
| pattern | Yes | ||
| ignoreCase | No | ||
| maxResults | No | ||
| searchType | No | files | |
| timeout_ms | No | ||
| filePattern | No | ||
| contextLines | No | ||
| includeHidden | No | ||
| literalSearch | No | ||
| earlyTermination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds that it returns immediate session ID for background search, uses absolute paths, and handles path normalization. Could mention it does not modify files but readOnlyHint covers that. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized with headings and bullet points, but very verbose. Multiple repeated points (e.g., pro tip about ambiguous queries appears twice, the path note is at the end). Could be shortened while retaining clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects for a complex tool: types of searches, pattern matching modes, parameter details, handling ambiguous requests, path requirements, and integration with related tools. No output schema so no missing return info.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for property descriptions, so the description must compensate. It explains each parameter's meaning, default values, and usage patterns (e.g., literalSearch for special characters, earlyTermination defaults). Comprehensive coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states that it starts a streaming search returning results progressively. Distinguishes from sibling tools like stop_search and get_more_search_results. Specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit decision criteria for searchType, literalSearch, and ambiguous queries. Includes multiple examples and when-not-to-use scenarios. References sibling tools for post-search actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_searchA
Stop an active search.
Stops the background search process gracefully. Use this when you've found
what you need or if a search is taking too long. Similar to force_terminate
for terminal processes.
The search will still be available for reading final results until it's
automatically cleaned up after 5 minutes.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are neutral (readOnlyHint=false, destructiveHint=false). Description adds gracefulness, background process, and 5-minute cleanup behavior. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is mostly concise, but includes extraneous meta-comment about referencing format, which adds little value for tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose and behavior well, but lacks parameter guidance. For a simple one-param tool, it is moderately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% so description bears full burden. The single required parameter 'sessionId' is not mentioned or explained in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool stops an active search using specific verbs and resource. It distinguishes from sibling 'force_terminate' by describing a graceful stop.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says when to use it: when found what you need or search is taking too long, and compares to force_terminate. Lacks explicit when-not-to-use but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_fileADestructive
Write or append to file contents.
IMPORTANT: DO NOT use this tool to create PDF files. Use 'write_pdf' for all PDF creation tasks.
DO NOT use this tool to edit DOCX files. Use 'edit_block' with old_string/new_string instead.
To CREATE a new DOCX, use write_file with .docx extension — text content with markdown headings (#, ##, ###) is converted to styled DOCX paragraphs.
CHUNKING IS STANDARD PRACTICE: Always write files in chunks of 25-30 lines maximum.
This is the normal, recommended way to write files - not an emergency measure.
STANDARD PROCESS FOR ANY FILE:
1. FIRST → write_file(filePath, firstChunk, {mode: 'rewrite'}) [≤30 lines]
2. THEN → write_file(filePath, secondChunk, {mode: 'append'}) [≤30 lines]
3. CONTINUE → write_file(filePath, nextChunk, {mode: 'append'}) [≤30 lines]
ALWAYS CHUNK PROACTIVELY - don't wait for performance warnings!
WHEN TO CHUNK (always be proactive):
1. Any file expected to be longer than 25-30 lines
2. When writing multiple files in sequence
3. When creating documentation, code files, or configuration files
HANDLING CONTINUATION ("Continue" prompts):
If user asks to "Continue" after an incomplete operation:
1. Read the file to see what was successfully written
2. Continue writing ONLY the remaining content using {mode: 'append'}
3. Keep chunks to 25-30 lines each
FORMAT HANDLING (by extension):
- Text files: String content
- Excel (.xlsx, .xls, .xlsm): JSON 2D array or {"SheetName": [[...]]}
Example: '[["Name","Age"],["Alice",30]]'
Files over 50 lines will generate performance notes but are still written successfully.
Only works within allowed directories.
IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | rewrite | |
| path | Yes | ||
| origin | No | ||
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint and readOnlyHint, and the description adds behavioral details: chunking is standard, files over 50 lines generate performance notes, only works within allowed directories, paths are normalized. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy with redundancy (chunking instructions repeated) and includes overly detailed process steps. While front-loaded with purpose, it could be streamlined to improve clarity and reduce verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers all essential aspects: file types, modes, chunking strategy, continuation, path handling, and format specifics for DOCX and Excel. Tailored to the tool's complexity and sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so the description fully compensates. It explains mode (rewrite vs append), content format (string, with Excel and DOCX specifics), path (absolute recommended), and provides examples. Adds meaning for all key parameters beyond schema enumeration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Write or append to file contents', clearly stating the verb and resource. It distinguishes from siblings by explicitly saying not to use for PDFs (write_pdf) and not for editing DOCX (edit_block), and explains when write_file is appropriate for creating DOCX.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (writing text, creating DOCX, Excel) and when-not-to-use (PDFs, editing DOCX), including alternative tool names. Also details chunking process, continuation handling, and path recommendations, giving comprehensive usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_pdfADestructive
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, 'outputPath' MUST be provided and MUST use a new unique filename (e.g., "result_01.pdf", "analysis_2025_01.pdf", etc.).
MODES:
1. CREATE NEW PDF:
- Pass a markdown string as 'content'.
write_pdf(path="doc.pdf", content="# Title\n\nBody text...")
2. MODIFY EXISTING PDF:
- Pass array of operations as 'content'.
- NEVER overwrite the original file.
- ALWAYS provide a new filename in 'outputPath'.
- After modifying, show original file path and new file path to user.
write_pdf(path="doc.pdf", content=[
{ type: "delete", pageIndexes: [0, 2] },
{ type: "insert", pageIndex: 1, markdown: "# New Page" }
])
OPERATIONS:
- delete: Remove pages by 0-based index.
{ type: "delete", pageIndexes: [0, 1, 5] }
- insert: Add pages at a specific 0-based index.
{ type: "insert", pageIndex: 0, markdown: "..." }
{ type: "insert", pageIndex: 5, sourcePdfPath: "/path/to/source.pdf" }
PAGE BREAKS:
To force a page break, use this HTML element:
<div style="page-break-before: always;"></div>
Example:
"# Page 1\n\n<div style=\"page-break-before: always;\"></div>\n\n# Page 2"
ADVANCED STYLING:
HTML/CSS and inline SVG are supported for:
- Text styling: colors, sizes, alignment, highlights
- Boxes: borders, backgrounds, padding, rounded corners
- SVG graphics: charts, diagrams, icons, shapes
- Images: <img src="/absolute/path/image.jpg" width="300" /> or 
Supports standard markdown features including headers, lists, code blocks, tables, and basic formatting.
Only works within allowed directories.
IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths.
This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes | ||
| options | No | ||
| outputPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description details behavioral traits: file naming rules, modes, operations, page breaks, styling support, path handling (absolute paths recommended, relative may fail), and directory restrictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and rules, then details modes and operations. While comprehensive, it is lengthy; however, the complexity of the tool justifies the verbosity. Remains well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two modes, multiple operations, and advanced styling, the description is exceptionally complete. It covers all critical aspects including page breaks, styling, path guidance, and examples, leaving no significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description thoroughly explains 'path' (via examples), 'content' (with modes and operation schemas), and 'outputPath' (mandatory for modify). However, 'options' parameter is not explained, slightly reducing completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new PDF file or modify an existing one' and explicitly declares 'THIS IS THE ONLY TOOL FOR CREATING AND MODIFYING PDF FILES,' distinguishing it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance, including rules for filenames, modes (create vs modify), and contrasts with other tools by declaring exclusivity. Also includes instructions like never overwrite original files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct operation: file management (create_directory, read_file, write_file, edit_block, move_file), process management (start_process, interact_with_process, read_process_output, kill_process, list_processes, list_sessions), search (start_search, get_more_search_results, list_searches, stop_search), configuration (get_config, set_config_value, get_prompts, get_usage_stats, get_recent_tool_calls, give_feedback_to_desktop_commander), and PDF creation (write_pdf). There is no functional overlap despite high number of tools.
All tool names follow a consistent verb_noun snake_case pattern (e.g., create_directory, edit_block, force_terminate, get_config, start_process). No mixing of conventions or irregular naming.
26 tools is slightly high but appropriate for a comprehensive desktop commander server covering file operations, process management, search, configuration, and PDF creation. Each tool serves a clear purpose, though some consolidation could reduce count slightly.
The tool set covers file CRUD but notably misses delete (no delete_file or remove_directory) and copy operations. Process management lacks suspend/resume. Search and configuration are well-covered. The missing delete and copy operations are significant gaps for a file management server.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An agent-first office suite Claude & ChatGPT read and write over one MCP URL.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Related MCP Servers
- AlicenseAqualityDmaintenanceAllows Claude to execute terminal commands on your computer and perform file system operations including surgical code editing with diff-based replacements.1938,9237MIT
- AlicenseAqualityDmaintenanceA server that lets Claude desktop app execute terminal commands on your computer and edit files through Model Context Protocol, featuring command execution, process management, and advanced file operations.1938,9236MIT
- AlicenseAqualityDmaintenanceGive Claude Desktop terminal, filesystem, and background-job access on your local Linux machine. Zero-dependency MCP extension, MIT-licensed.83MIT
- AlicenseNot gradedqualityBmaintenanceExposes an interactive terminal over MCP, enabling remote shell command execution, file operations, and directory management via ChatGPT or Claude Desktop.2MIT
Appeared in Searches
- MCP server for file system access (read, write, execute) on Windows for Claude Desktop
- File Editing Tools and Services
- Testing Local AI Agents in LMStudio for Computer Use and Code Execution Tasks
- AI-powered IDEs for project analysis and development
- Official Google MCP server for transferring Markdown files to Google Sheets
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/wonderwhy-er/DesktopCommanderMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server