loading…
Search for a command to run...
loading…
Terminal, filesystem, and background-job tools for Claude Desktop on Linux/macOS. Zero npm deps, pure Node.
Terminal, filesystem, and background-job tools for Claude Desktop on Linux/macOS. Zero npm deps, pure Node.
A Claude Desktop extension that gives Claude terminal, filesystem, and background-job access on your local Linux machine.
Addresses a gap on Linux Claude Desktop where claude_desktop_config.json-style MCP servers aren't loaded (that mechanism is macOS/Windows only); on Linux, the only way to add tools is via installable extensions.
Installing this extension grants Claude unrestricted shell access on your user account. Anything your user can do from a terminal, Claude can do through this tool: read any file your user can read, modify anything they can modify, install software, open network connections, etc.
Treat installing this the same way you'd treat giving someone an SSH session to your machine. Don't install it on machines with sensitive data you wouldn't want Claude to see or on shared systems.
There is a minimal built-in safety denylist that refuses a handful of obviously-destructive one-liners (rm -rf /, rm -rf ~, fork bombs, dd/mkfs on raw disk devices, shutdown/reboot). This is a last-resort safety net, not a sandbox. A determined command can trivially bypass it. It exists so that a moment's inattention doesn't wipe your home directory.
To tighten the rails, edit the DENYLIST array at the top of server.js and rebuild. To remove them entirely, set DENYLIST = [] and rebuild.
Exposes 8 tools to Claude:
| Tool | Purpose |
|---|---|
run_command(command, cwd?, timeout?, env?) |
Run a shell command via bash -lc. Pipes, redirects, source venv/bin/activate && … all work. Returns stdout/stderr/exit_code. Output is capped at 100KB per stream; full transcript is always saved to a file and the path returned as log_path. |
read_file(path, offset?, limit?) |
Read a text file with optional line-range slicing. |
list_directory(path) |
Entries with type (file/dir), size, and mtime. |
write_file(path, content, overwrite?) |
Create or overwrite a text file. Parent directories are created. |
run_background(command, cwd?) |
Spawn a detached subprocess; returns a job_id. Use for long-running work you don't want to block the chat on (builds, training runs, servers). |
read_background(job_id, tail?) |
Status and last N lines of stdout/stderr for a background job. |
list_background() |
All jobs (running, exited, killed). |
kill_background(job_id) |
SIGTERM the job; SIGKILL after 5 seconds if it's still alive. |
Run state (transcripts, job scratch files) lives under /tmp/claude-term-mcp/ and is wiped at reboot.
Terminal.mcpb from the Releases page.Terminal.mcpb file you downloaded.You can change the default working directory later from Settings → Extensions → Terminal.
bash on PATHNo npm install step — the extension is zero-dependency pure Node.
All configuration is done through Claude Desktop's UI at install time or under Settings → Extensions → Terminal.
| Field | Type | Purpose |
|---|---|---|
| Default working directory | Directory | Where shell commands run when Claude doesn't specify one. Leave blank for $HOME. |
To customize the denylist or other behavior, edit server.js and rebuild (see below).
Yellow banner: "Tool result could not be submitted. The request may have expired or the connection was interrupted." This fires on every turn that triggers Claude's dynamic tool-loading step. The 404 is on the tool-search result submission to the Anthropic backend, not on the MCP tool itself — your tool call runs and returns correctly immediately after the banner. It's cosmetic. Same issue also hits the stock Filesystem extension. Likely a client↔backend protocol mismatch that will be fixed in a future Claude Desktop release.
git clone https://github.com/LukeLamb/claude-terminal-mcp
cd claude-terminal-mcp
# Edit whatever you want in server.js / manifest.json.
# If you change the tool surface, update both places.
# Bump the version in manifest.json so Claude Desktop treats the install as an update.
# Build the bundle:
zip -j Terminal.mcpb manifest.json package.json server.js
# Then install Terminal.mcpb via Claude Desktop → Settings → Extensions → Install Extension.
Settings → Extensions → All extensions → Terminal → Remove.
No data leaves your machine. This extension runs entirely locally:
curl, wget, git push)./tmp/claude-term-mcp/runs/<timestamp>.log so Claude can reference them later in the same conversation. Background job state (command, pid, stdout/stderr log files, exit code, status) is written to /tmp/claude-term-mcp/jobs/<job-id>/./tmp/claude-term-mcp/ is cleared at every reboot. To clear it manually: rm -rf /tmp/claude-term-mcp.MIT. Use freely, attribution appreciated, no warranty.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"lukelamb-claude-terminal-mcp": {
"command": "npx",
"args": []
}
}
}