Public log

@wonderwhy-er/desktop-commander

MCP server for terminal operations and file editing

npm · fingerprint b1bef4d56b9201e2d4390f83 · repository · RSS

26tools
2recorded versions
45dtracked
unchanged 12d

What changed

Changed between 3 September 2026 and 5 October 2026 (first seen 2026-10-05 14:43 UTC)

4 descriptions rewritten.

--- pinned/get_recent_tool_calls
+++ observed/get_recent_tool_calls
  {
    "annotations": {
      "readOnlyHint": true,
-   "description": "\n                        Get recent tool call history with their arguments and outputs.\n                        Returns chronological list of tool calls made during this session.\n                        \n                        Useful for:\n                        - Onboarding new chats about work already done\n                        - Recovering context after chat history loss\n                        - Debugging tool call sequences\n                        \n                        Note: Does not track its own calls or other meta/query tools.\n                        History kept in memory (last 1000 calls, lost on restart).\n                        \n                        This command can be referenced as \"DC: ...\" or \"use Desktop Commander to ...\" in your instructions.",
+   "description": "\n                        Get recent local tool call history with arguments and outputs.\n                        Returns a chronological list of recent calls loaded from the local history file.\n                        \n                        Useful for:\n                        - Onboarding new chats about work already done\n                        - Recovering context after chat history loss\n                        - Debugging tool call sequences\n                        \n                        Note: Does not track its own calls or track_ui_event.\n                        History is persisted locally in tool-history.jsonl, keeps up to the last 1000\n                        calls in memory, and trims older on-disk history. Stored outputs over 4 KiB\n                        are replaced with an omission marker.\n                        \n                        This command can be referenced as \"DC: ...\" or \"use Desktop Commander to ...\" in your instructions.",
    "inputSchema": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
--- pinned/interact_with_process
+++ observed/interact_with_process
  {
    "annotations": {
      "destructiveHint": true,
-   "description": "\n                        Send input to a running process and automatically receive the response.\n                        \n                        CRITICAL: THIS IS THE PRIMARY TOOL FOR ALL LOCAL FILE ANALYSIS\n                        For ANY local file analysis (CSV, JSON, data processing), ALWAYS use this instead of the analysis tool.\n                        The analysis tool CANNOT access local files and WILL FAIL - use processes for ALL file-based work.\n                        \n                        FILE ANALYSIS PRIORITY ORDER (MANDATORY):\n                        1. ALWAYS FIRST: Use this tool (start_process + interact_with_process) for local data analysis\n                        2. ALTERNATIVE: Use command-line tools (cut, awk, grep) for quick processing  \n                        3. NEVER EVER: Use analysis tool for local file access (IT WILL FAIL)\n                        \n                        REQUIRED INTERACTIVE WORKFLOW FOR FILE ANALYSIS:\n                        1. Start REPL: start_process(\"python3 -i\")\n                        2. Load libraries: interact_with_process(pid, \"import pandas as pd, numpy as np\")\n                        3. Read file: interact_with_process(pid, \"df = pd.read_csv('/absolute/path/file.csv')\")\n                        4. Analyze: interact_with_process(pid, \"print(df.describe())\")\n                        5. Continue: interact_with_process(pid, \"df.groupby('column').size()\")\n                        \n                        BINARY FILE PROCESSING WORKFLOWS:\n                        Use appropriate Python libraries (PyPDF2, pandas, docx2txt, etc.) or command-line tools for binary file analysis.\n                        \n                        SMART DETECTION:\n                        - Automatically waits for REPL prompt (>>>, >, etc.)\n                        - Detects errors and completion states\n                        - Early exit prevents timeout delays\n                        - Clean output formatting (removes prompts)\n                        \n                        SUPPORTED REPLs:\n                        - Python: python3 -i (RECOMMENDED for data analysis)\n                        - Node.js: node -i\n                        - R: R\n                        - Julia: julia\n                        - Shell: bash, zsh\n                        - Database: mysql, postgres\n                        \n                        PARAMETERS:\n                        - pid: Process ID from start_process\n                        - input: Code/command to execute\n                        - timeout_ms: Max wait (default: 8000ms)\n                        - wait_for_prompt: Auto-wait for response (default: true)\n                        - verbose_timing: Enable detailed performance telemetry (default: false)\n\n                        Returns execution result with status indicators.\n\n                        PERFORMANCE DEBUGGING (verbose_timing parameter):\n                        Set verbose_timing: true to get detailed timing information including:\n                        - Exit reason (early_exit_quick_pattern, early_exit_periodic_check, process_finished, timeout, no_wait)\n                        - Total duration and time to first output\n                        - Complete timeline of all output events with timestamps\n                        - Which detection mechanism triggered early exit\n                        Use this to identify slow interactions and optimize detection patterns.\n\n                        ALWAYS USE FOR: CSV analysis, JSON processing, file statistics, data visualization prep, ANY local file work\n                        NEVER USE ANALYSIS TOOL FOR: Local file access (it cannot read files from disk and WILL FAIL)\n\n                        This command can be referenced as \"DC: ...\" or \"use Desktop Commander to ...\" in your instructions.",
+   "description": "\n                        Send input to an existing terminal or REPL process and return newly available output.\n                        \n                        Useful for interactive shells, Python/Node/R/Julia REPLs, database consoles,\n                        and long-running commands started with start_process().\n                        \n                        Examples:\n                        - Interactive Python REPL sessions can be started with `python3 -i`.\n                        - Existing interactive sessions accept additional input such as imports or analysis commands.\n                        - Interactive sessions can return newly available output while they remain active.\n                        \n                        SMART DETECTION:\n                        - Automatically waits for a recognized prompt when requested\n                        - Detects errors and completion states\n                        - Early exit prevents unnecessary waiting\n                        - Cleans common REPL prompt text from returned output\n                        \n                        PARAMETERS:\n                        - pid: Process ID returned by start_process\n                        - input: Text or command to send to the process\n                        - timeout_ms: Maximum wait time (default: 8000ms)\n                        - wait_for_prompt: Whether to wait for a prompt before returning (default: true)\n                        - verbose_timing: Include detailed timing telemetry (default: false)\n\n                        Returns execution result with status indicators.\n\n                        PERFORMANCE DEBUGGING (verbose_timing parameter):\n                        When enabled, detailed timing includes:\n                        - Exit reason\n                        - Total duration and time to first output\n                        - Timeline of output events\n\n                        This command can be referenced as \"DC: ...\" or \"use Desktop Commander to ...\" in your instructions.",
    "inputSchema": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
--- pinned/read_file
+++ observed/read_file
  {
    "_meta": {
      "openai/outputTemplate": "ui://desktop-commander/file-preview",
-   "description": "\n                        Read contents from files and URLs.\n                        Read PDF files and extract content as markdown and images.\n                        \n                        Prefer this over 'execute_command' with cat/type for viewing files.\n                        \n                        Supports partial file reading with:\n                        - 'offset' (start line, default: 0)\n                          * Positive: Start from line N (0-based indexing)\n                          * Negative: Read last N lines from end (tail behavior)\n                        - 'length' (max lines to read, default: configurable via 'fileReadLineLimit' setting, initially 1000)\n                          * Used with positive offsets for range reading\n                          * Ignored when offset is negative (reads all requested tail lines)\n                        \n                        Examples:\n                        - offset: 0, length: 10     → First 10 lines\n                        - offset: 100, length: 5    → Lines 100-104\n                        - offset: -20               → Last 20 lines  \n                        - offset: -5, length: 10    → Last 5 lines (length ignored)\n                        \n                        Performance optimizations:\n                        - Large files with negative offsets use reverse reading for efficiency\n                        - Large files with deep positive offsets use byte estimation\n                        - Small files use fast readline streaming\n                        \n                        When reading from the file system, only works within allowed directories.\n                        Can fetch content from URLs when isUrl parameter is set to true\n                        (URLs are always read in full regardless of offset/length).\n                        \n                        FORMAT HANDLING (by extension):\n                        - Text: Uses offset/length for line-based pagination\n                        - Excel (.xlsx, .xls, .xlsm): Returns JSON 2D array\n                          * sheet: \"Sheet1\" (name) or \"0\" (index as string, 0-based)\n                          * range: ALWAYS use FROM:TO format (e.g., \"A1:D100\", \"C1:C1\", \"B2:B50\")\n                          * offset/length work as row pagination (optional fallback)\n                        - Images (PNG, JPEG, GIF, WebP): Base64 encoded viewable content\n                        - PDF: Extracts text content as markdown with page structure\n                          * offset/length work as page pagination (0-based)\n                          * Includes embedded images when available\n                        - DOCX (.docx): Two modes depending on parameters:\n                          * DEFAULT (no offset/length): Returns a text-bearing outline — shows paragraphs with text,\n                            tables with cell content, styles, image refs. Skips shapes/drawings/SVG noise.\n                            Each element shows its body index [0], [1], etc.\n                          * WITH offset/length: Returns raw pretty-printed XML with line pagination.\n                            Use this to drill into specific sections or see the actual XML for editing.\n                          * EDITING WORKFLOW: 1) read_file to get outline, 2) read_file with offset/length\n                            to see raw XML around what you want to edit, 3) edit_block with old_string/new_string\n                            using XML fragments copied from the read output.\n                          * IMPORTANT: offset MUST be non-zero to get raw XML (use offset=1 to start from line 1).\n                            offset=0 always returns the outline regardless of length.\n                          * For BULK changes (translation, mass replacements): use start_process with Python\n                            zipfile module to find/replace all <w:t> elements at once.\n\n                        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.\n                        This command can be referenced as \"DC: ...\" or \"use Desktop Commander to ...\" in your instructions.",
+   "description": "\n                        Read contents from files and URLs.\n                        Read PDF files and extract content as markdown and images.\n                        \n                        Suitable for reading authorized local files directly without starting a shell command.\n                        \n                        Supports partial file reading with:\n                        - 'offset' (start line, default: 0)\n                          * Positive: Start from line N (0-based indexing)\n                          * Negative: Read last N lines from end (tail behavior)\n                        - 'length' (max lines to read, default: configurable via 'fileReadLineLimit' setting, initially 1000)\n                          * Used with positive offsets for range reading\n                          * Ignored when offset is negative (reads all requested tail lines)\n                        \n                        Examples:\n                        - offset: 0, length: 10     → First 10 lines\n                        - offset: 100, length: 5    → Lines 100-104\n                        - offset: -20               → Last 20 lines  \n                        - offset: -5, length: 10    → Last 5 lines (length ignored)\n                        \n                        Performance optimizations:\n                        - Large files with negative offsets use reverse reading for efficiency\n                        - Large files with deep positive offsets use byte estimation\n                        - Small files use fast readline streaming\n                        \n                        When reading from the file system, only works within allowed directories.\n                        Can fetch content from URLs when isUrl parameter is set to true\n                        (URLs are always read in full regardless of offset/length).\n                        \n                        FORMAT HANDLING (by extension):\n                        - Text: Uses offset/length for line-based pagination\n                        - Excel (.xlsx, .xls, .xlsm): Returns JSON 2D array\n                          * sheet: \"Sheet1\" (name) or \"0\" (index as string, 0-based)\n                          * range: ALWAYS use FROM:TO format (e.g., \"A1:D100\", \"C1:C1\", \"B2:B50\")\n                          * offset/length work as row pagination (optional fallback)\n                        - Images (PNG, JPEG, GIF, WebP): Base64 encoded viewable content\n                        - PDF: Extracts text content as markdown with page structure\n                          * offset/length work as page pagination (0-based)\n                          * Includes embedded images when available\n                        - DOCX (.docx): Two modes depending on parameters:\n                          * DEFAULT (no offset/length): Returns a text-bearing outline — shows paragraphs with text,\n                            tables with cell content, styles, image refs. Skips shapes/drawings/SVG noise.\n                            Each element shows its body index [0], [1], etc.\n                          * WITH offset/length: Returns raw pretty-printed XML with line pagination.\n                            Use this to drill into specific sections or see the actual XML for editing.\n                          * EDITING WORKFLOW: 1) read_file to get outline, 2) read_file with offset/length\n                            to see raw XML around what you want to edit, 3) edit_block with old_string/new_string\n                            using XML fragments copied from the read output.\n                          * IMPORTANT: offset MUST be non-zero to get raw XML (use offset=1 to start from line 1).\n                            offset=0 always returns the outline regardless of length.\n                          * For BULK changes (translation, mass replacements): use start_process with Python\n                            zipfile module to find/replace all <w:t> elements at once.\n\n                        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.\n                        This command can be referenced as \"DC: ...\" or \"use Desktop Commander to ...\" in your instructions.",
    "inputSchema": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
--- pinned/start_process
+++ observed/start_process
  {
    "annotations": {
      "destructiveHint": true,
-   "description": "\n                        Start a new terminal process with intelligent state detection.\n                        \n                        PRIMARY TOOL FOR FILE ANALYSIS AND DATA PROCESSING\n                        This is the ONLY correct tool for analyzing local files (CSV, JSON, logs, etc.).\n                        The analysis tool CANNOT access local files and WILL FAIL - always use processes for file-based work.\n                        \n                        CRITICAL RULE: For ANY local file work, ALWAYS use this tool + interact_with_process, NEVER use analysis/REPL tool.\n                        \n                        Running on Linux. Default shell: bash.\n        \nLINUX-SPECIFIC NOTES:\n- Package managers vary by distro: apt, yum, dnf, pacman, zypper\n- Python 3 might be 'python3' command, not 'python'\n- Standard Unix shell tools available (grep, awk, sed, etc.)\n- File permissions and ownership important for many operations\n- Systemd services common on modern distributions\n                        \n                        REQUIRED WORKFLOW FOR LOCAL FILES:\n                        1. start_process(\"python3 -i\") - Start Python REPL for data analysis\n                        2. interact_with_process(pid, \"import pandas as pd, numpy as np\")\n                        3. interact_with_process(pid, \"df = pd.read_csv('/absolute/path/file.csv')\")\n                        4. interact_with_process(pid, \"print(df.describe())\")\n                        5. Continue analysis with pandas, matplotlib, seaborn, etc.\n                        \n                        COMMON FILE ANALYSIS PATTERNS:\n                        • start_process(\"python3 -i\") → Python REPL for data analysis (RECOMMENDED)\n                        • start_process(\"node -i\") → Node.js REPL for JSON processing\n                        • start_process(\"node:local\") → Node.js on MCP server (stateless, ES imports, all code in one call)\n                        • start_process(\"cut -d',' -f1 file.csv | sort | uniq -c\") → Quick CSV analysis\n                        • start_process(\"wc -l /path/file.csv\") → Line counting\n                        • start_process(\"head -10 /path/file.csv\") → File preview\n                        \n                        BINARY FILE SUPPORT:\n                        For PDF, Excel, Word, archives, databases, and other binary formats, use process tools with appropriate libraries or command-line utilities.\n                        \n                        INTERACTIVE PROCESSES FOR DATA ANALYSIS:\n                        For code/calculations, use in this priority order:\n                        1. start_process(\"python3 -i\") - Python REPL (preferred)\n                        2. start_process(\"node -i\") - Node.js REPL (when Python unavailable)\n                        3. start_process(\"node:local\") - Node.js fallback (when node -i fails)\n                        4. Use interact_with_process() to send commands\n                        5. Use read_process_output() to get responses\n                        When Python is unavailable, prefer Node.js over shell for calculations.\n                        Node.js: Always use ES import syntax (import x from 'y'), not require().\n\n                        SMART DETECTION:\n                        - Detects REPL prompts (>>>, >, $, etc.)\n                        - Identifies when process is waiting for input\n                        - Recognizes process completion vs timeout\n                        - Early exit prevents unnecessary waiting\n                        \n                        STATES DETECTED:\n                        Process waiting for input (shows prompt)\n                        Process finished execution\n                        Process running (use read_process_output)\n\n                        PERFORMANCE DEBUGGING (verbose_timing parameter):\n                        Set verbose_timing: true to get detailed timing information including:\n                        - Exit reason (early_exit_quick_pattern, early_exit_periodic_check, process_exit, timeout)\n                        - Total duration and time to first output\n                        - Complete timeline of all output events with timestamps\n                        - Which detection mechanism triggered early exit\n                        Use this to identify missed optimization opportunities and improve detection patterns.\n\n                        ALWAYS USE FOR: Local file analysis, CSV processing, data exploration, system commands\n                        NEVER USE ANALYSIS TOOL FOR: Local file access (analysis tool is browser-only and WILL FAIL)\n\n                        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.\n                        This command can be referenced as \"DC: ...\" or \"use Desktop Commander to ...\" in your instructions.",
+   "description": "\n                        Start a terminal process on the authorized device with intelligent state detection.\n                        \n                        Suitable for shell commands, interactive REPL sessions, data-processing scripts,\n                        programmatic file analysis, and other long-running terminal work.\n                        \n                        Running on Linux. Default shell: bash.\n        \nLINUX-SPECIFIC NOTES:\n- Package managers vary by distro: apt, yum, dnf, pacman, zypper\n- Python 3 might be 'python3' command, not 'python'\n- Standard Unix shell tools available (grep, awk, sed, etc.)\n- File permissions and ownership important for many operations\n- Systemd services common on modern distributions\n                        \n                        Examples:\n                        • start_process(\"python3 -i\") → Start an interactive Python REPL\n                        • start_process(\"node -i\") → Start an interactive Node.js REPL\n                        • start_process(\"node:local\") → Run stateless Node.js code on the MCP server\n                        • start_process(\"wc -l /path/file.csv\") → Run a one-shot shell command\n\n                        Interactive process sessions support follow-up input after they are started.\n                        Long-running process sessions expose newly available output while they remain active.\n                        Binary files can be processed with appropriate command-line tools or libraries available\n                        in the selected process environment.\n\n                        SMART DETECTION:\n                        - Detects REPL prompts (>>>, >, $, etc.)\n                        - Identifies when a process is waiting for input\n                        - Recognizes process completion vs timeout\n                        - Early exit prevents unnecessary waiting\n                        \n                        STATES DETECTED:\n                        Process waiting for input (shows prompt)\n                        Process finished execution\n                        Process running (use read_process_output)\n\n                        PERFORMANCE DEBUGGING (verbose_timing parameter):\n                        Set verbose_timing: true to get detailed timing information including:\n                        - Exit reason (early_exit_quick_pattern, early_exit_periodic_check, process_exit, timeout)\n                        - Total duration and time to first output\n                        - Complete timeline of all output events with timestamps\n                        - Which detection mechanism triggered early exit\n\n                        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.\n                        This command can be referenced as \"DC: ...\" or \"use Desktop Commander to ...\" in your instructions.",
    "inputSchema": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,

Current tools

Show all 26 tool fingerprints
create_directory
69ab85a2b301b1fe
edit_block
4aae7ec2e9061d3f
force_terminate
b51be669e0f9f870
get_config
8513a177f04fbbd0
get_file_info
58835e38fafd3643
get_more_search_results
7a7a360861f4dae4
get_prompts
ba680c46382cb9c7
get_recent_tool_calls
63e911ec35250b18
get_usage_stats
03b3a374b896a7bc
give_feedback_to_desktop_commander
850ddece1bdc0e68
interact_with_process
91aa26e23196b266
kill_process
b349a2b49e82bcb3
list_directory
5440ded503df698d
list_processes
447f97b5243afad4
list_searches
58ec9406859d0a8f
list_sessions
103726bc51d59d33
move_file
caecc9c62a00fedc
read_file
2f7c5abcd0be75df
read_multiple_files
01d4bb69d13422c9
read_process_output
93b59bd1af6d468a
set_config_value
a9830138c2a5638e
start_process
6530cbc609a269c4
start_search
37c2d74a920e2184
stop_search
c6022864ab0bcbd5
write_file
7ac6dce35902b9af
write_pdf
5c7b53a3c4d89881

Watch this server yourself

If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.

npx -y mcp-pin@0.2.3 -- <your @wonderwhy-er/desktop-commander command>

Or subscribe to this page's RSS feed to be told when it changes.

Badge

mcp-pin status badge for @wonderwhy-er/desktop-commander

The badge states one fact about time and nothing else. It never claims a server is safe.

[![mcp-pin](https://mcp-pin.gautamkhosla.com/badge/a3a04e35b9a0a4d3.svg)](https://mcp-pin.gautamkhosla.com/servers/a3a04e35b9a0a4d3.html)