npm JavaScript analyzed 0.2.51

wonderwhy-er/DesktopCommanderMCP

v0.2.51
npm

MCP server for terminal operations and file editing

maintainer
wonderwhy-er
licence
MIT
first seen
2026-06-01
last seen
2026-09-17
releases · 30d
6
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 0 tools
transport stdio · http counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed v0.2.51 · analyzer v33 · 8h ago

skills & prompt files 18

code evidence v0.2.51 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 219

filesystem 80

  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/build-mcpb.cjs :14 const fs = require('fs');
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/build-ui-runtime.cjs :6 const fs = require('fs/promises');
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/download-all-ripgrep.cjs :11 const fs = require('fs');
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/export-fuzzy-logs.js :4 import fs from 'fs/promises';
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/publish-release.cjs :24 const fs = require('fs');
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/ripgrep-wrapper.js :14 import fs from 'fs';
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/sync-version.js :1 import { readFileSync, writeFileSync } from 'fs';
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/validate-tools-sync.js :9 import { readFile } from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/setup-claude-server.js :2 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/config-manager.ts :1 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/npm-scripts/remote.ts :2 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/remote-device/desktop-commander-integration.ts :3 import fs from 'fs/promises';
show 28 more
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/remote-device/device.ts :8 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/search-manager.ts :3 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/config.ts :6 import { access, readFile } from 'node:fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/edit.ts :19 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/filesystem.ts :1 import fs from "fs/promises";
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/improved-process-tools.ts :10 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/pdf/manipulations.ts :1 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/pdf/markdown.ts :1 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/prompts.ts :4 import * as fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/ui/resources.ts :4 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/feature-flags.ts :1 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/files/binary.ts :8 import fs from "fs/promises";
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/files/docx.ts :19 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/files/excel.ts :7 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/files/image.ts :6 import fs from "fs/promises";
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/files/pdf.ts :6 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/files/text.ts :16 import fs from "fs/promises";
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/fuzzySearchLogger.ts :1 import fs from 'fs/promises';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/ripgrep-resolver.ts :2 import { existsSync, chmodSync } from 'fs';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/system-info.ts :2 import fs from 'fs';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/toolHistory.ts :2 import * as fs from 'fs';
  • fs wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/trackTools.ts :1 import * as fs from 'fs';
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/integration/edit-block-performance.js :11 import fs from 'fs/promises';
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/integration/read-file-unknown-params.js :20 import fs from 'fs/promises';
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/integration/run-all-integration-tests.js :9 import fs from 'fs/promises';
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/modified-test.js :18 await fs.writeFile(LARGE_FILE_LF, lines.join(''));
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/repro/test-bootstrap-threadpool.js :6 import fs from 'fs/promises';
  • fs (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/repro/test-dc-tracking-gate.js :4 // .setValue -> saveConfig -> fs.writeFile (libuv threadpool).

40 more not shown — this panel samples each group; the count above is the real total.

shell / exec 42

  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/build-mcpb.cjs :16 const { execSync } = require('child_process');
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/count-tokens.js :13 import { spawn } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/download-all-ripgrep.cjs :124 const { execSync } = require('child_process');
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/publish-release.cjs :23 const { execSync } = require('child_process');
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/validate-tools-sync.js :12 import { spawn } from 'child_process';
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/setup-claude-server.js :8 import { exec } from "node:child_process";
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/remote-device/desktop-commander-integration.ts :1 import { spawn } from 'child_process';
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/remote-device/remote-channel.ts :1303 const { spawnSync } = await import('child_process');
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/search-manager.ts :1 import { spawn, ChildProcess } from 'child_process';
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/terminal-manager.ts :1 import { spawn } from 'child_process';
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/feedback.ts :5 import { exec } from 'child_process';
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/filesystem.ts :5 import { execFile } from 'child_process';
show 28 more
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/improved-process-tools.ts :9 import { spawn } from 'child_process';
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/process.ts :1 import { exec } from 'child_process';
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/types.ts :1 import { ChildProcess } from 'child_process';
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/open-browser.ts :1 import { execFile, spawn } from 'child_process';
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/ripgrep-resolver.ts :1 import { execSync } from 'child_process';
  • shell wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/system-info.ts :4 import { execSync } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test-listener-bug.js :15 import { spawn } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/integration/run-all-integration-tests.js :8 import { spawn } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/repro/test-bootstrap-threadpool.js :5 import { execSync } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/repro/test-dc-tracking-gate.js :9 import { execSync } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/repro/test-env-threadpool-timing.js :5 import { execSync } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/repro/test-read-abort-frees-thread.js :16 import { execSync } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/repro/test-threadpool-starvation.js :7 import { execSync } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/repro/test-withtimeout-leak.js :7 import { execSync } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/run-all-tests.js :6 import { spawn } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-config-atomic-write.js :2 import { fork } from 'node:child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-config-client-id-cross-process.js :2 import { fork } from 'node:child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-config-cross-process-clobber.js :2 import { fork } from 'node:child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-config-mutation-recovery.js :2 import { fork } from 'node:child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-config-stale-lock-recovery.js :2 import { fork } from 'node:child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-config-usage-cross-process.js :2 import { fork } from 'node:child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-config-watch-cross-process.js :2 import { fork } from 'node:child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-enhanced-repl.js :2 import { execSync } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-node-repl.js :7 import { spawn } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-onboarding-injection-flag.js :24 import { spawn } from 'child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-spawn-error-no-crash.js :4 * spawn() reports failure asynchronously via an 'error' event rather than by
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-usage-stats-partial.js :2 import { fork } from 'node:child_process';
  • shell (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-welcome-onboarding-legacy-config.js :11 import { spawn } from 'node:child_process';

2 more not shown — this panel samples each group; the count above is the real total.

network 14

  • net (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/scripts/download-all-ripgrep.cjs :10 const https = require('https');
  • net wonderwhy-er-DesktopCommanderMCP-092ce0b/setup-claude-server.js :10 import * as https from 'https';
  • net wonderwhy-er-DesktopCommanderMCP-092ce0b/src/remote-device/device-authenticator.ts :70 const response = await fetch(`${this.baseServerUrl}/device/start`, {
  • net wonderwhy-er-DesktopCommanderMCP-092ce0b/src/remote-device/device.ts :357 const response = await fetch(`${this.baseServerUrl}/api/mcp-info`);
  • net wonderwhy-er-DesktopCommanderMCP-092ce0b/src/remote-device/remote-channel.ts :123 const response = await fetch(input, init);
  • net wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/filesystem.ts :367 const response = await fetch(url, {
  • net wonderwhy-er-DesktopCommanderMCP-092ce0b/src/tools/pdf/markdown.ts :264 const response = await fetch(source);
  • net wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/capture.ts :2 import * as https from 'https';
  • net wonderwhy-er-DesktopCommanderMCP-092ce0b/src/utils/feature-flags.ts :180 const fetchPromise = fetch(this.flagUrl, {
  • net (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-feature-flags-timeout.js :14 import { createServer } from 'net';
  • net (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-onboarding-injection-flag.js :26 import { createServer } from 'http';
  • net (weak) wonderwhy-er-DesktopCommanderMCP-092ce0b/test/test-remote-clock-skew-before-session.js :41 import http from 'node:http';
show 2 more
  • net wonderwhy-er-DesktopCommanderMCP-092ce0b/track-installation.js :15 import * as https from 'https';
  • net wonderwhy-er-DesktopCommanderMCP-092ce0b/uninstall-claude-server.js :10 import * as https from 'https';

install hooks 2

  • postinstall (suspicious) wonderwhy-er-DesktopCommanderMCP-092ce0b/package.json :29 node dist/track-installation.js && node dist/npm-scripts/verify-ripgrep.js || node -e "process.exit(0)"
  • prepare wonderwhy-er-DesktopCommanderMCP-092ce0b/package.json :45 npm run build

declared dependencies 49

  • @modelcontextprotocol/sdk@^1.9.0
  • @modelcontextprotocol/ext-apps@^1.0.1
  • @opendocsg/pdf2md@^0.2.2
  • @supabase/supabase-js@^2.89.0
  • @tiptap/core@^3.22.3
  • @tiptap/extension-image@^3.22.3
  • @tiptap/extension-table@^3.22.4
  • @tiptap/extension-table-cell@^3.22.4
  • @tiptap/extension-table-header@^3.22.4
  • @tiptap/extension-table-row@^3.22.4
  • @tiptap/pm@^3.22.3
  • @tiptap/starter-kit@^3.22.3
show 28 more
  • @vscode/ripgrep@^1.15.9
  • cross-fetch@^4.1.0
  • exceljs@^4.4.0
  • fastest-levenshtein@^1.0.16
  • file-type@^21.1.1
  • glob@^10.3.10
  • highlight.js@^11.11.1
  • isbinaryfile@^5.0.4
  • markdown-it@^14.1.0
  • md-to-pdf@^5.2.5
  • open@^10.2.0
  • pdf-lib@^1.17.1
  • pizzip@^3.2.0
  • proper-lockfile@^4.1.2
  • remark@^15.0.1
  • remark-gfm@^4.0.1
  • remark-parse@^11.0.0
  • sharp@^0.34.5
  • tiptap-markdown@^0.9.0
  • unified@^11.0.5
  • unpdf@^1.4.0
  • zod@^3.24.1
  • zod-to-json-schema@^3.23.5
  • @anthropic-ai/mcpb@^1.2.0
  • @types/node@^20.17.24
  • @types/proper-lockfile@^4.1.4
  • commander@^13.1.0
  • esbuild@^0.27.2

9 more not shown — this panel samples each group; the count above is the real total.