Atlas / MCP servers / luckysolanki902 / local-terminal-mcp

local-terminal-mcpSAFE

mcp/luckysolanki902/local-terminal-mcp

Run local commands from ChatGPT or Claude via a safe, allowlisted MCP server. Work on your codebase and generate images/sprites/assets locally from ChatGPT without spending Codex/API tokens. stdio for Claude Desktop/Code; capability-URL or bearer auth over HTTP for ChatGPT via ngrok or cloudflared.

Verdict
SAFE
Grade
B
Trust score
89 /100
Exposed tools
3 3r · 0w · 0d
Transport
stdio · streamable-http
License
MIT
Stars
1
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

A small, security-first MCP server that lets an AI assistant — ChatGPT, Claude Desktop, Claude Code, or any other MCP client — run a set of allowlisted commands and read files from a local directory on your machine.

The motivating use case: point ChatGPT (or Claude) at a local codebase so it can run git, rg, cat, etc. and analyse the repo — without copying files around by hand, and, for ChatGPT, using your flat-rate subscription instead of metered API/agent tokens.

⚠️ This runs commands on your computer. It is built to be safe by default (read-only, allowlisted, no shell, path-contained, auth-required over the network), but you are responsible for how you configure and expose it. Read Security model before exposing it to the internet.
🚀 Just want to get going? Follow the install & setup checklist.

Table of contents

  • Why this exists
  • How it works
  • Security model
  • Install
  • Quick start (local / stdio)
  • Connect to Claude Desktop
  • Connect to Claude Code
  • Connect to ChatGPT (over the internet) · exact step-by-step guide
  • Configuration reference
  • Tools exposed
  • Development
  • FAQ

Why this exists

Running a coding agent against a large repo through a metered API burns tokens fast. If you already pay for a ChatGPT or Claude subscription, you can instead give the assistant a tool to read files and run read-only commands on your machine, and let it analyse the code conversationally. That is what this server provides, with a security model strong enough that you can leave write access turned off and expose only read access.

What

Read from source at commit effebf30c383OBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add local-terminal-mcp -- uvx local-terminal-mcp
claude-desktop
{
  "mcpServers": {
    "local-terminal-mcp": {
      "command": "uvx",
      "args": [
        "local-terminal-mcp"
      ]
    }
  }
}
03

Exposed tools (3)

3 read · 0 write · 0 destructive.

ToolRiskDescription
close_terminalreadreturn (
list_directoryreadtry:
list_terminalsreadlines = [
04

Trust audit

SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (3 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (12)

LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_matching.py:84
["cat", "../../etc/passwd"],
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_matching.py:85
["cat", "src/../../outside"],
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_policy.py:126
policy.resolve_path("../../etc/passwd")
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
browser-extension/background.js:8
const bin = atob(b64);
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/local_terminal_mcp/executor.py:160
raw = base64.b64decode(payload, validate=True)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
tests/test_imaging.py:15
PNG_1X1 = base64.b64decode(
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
tests/test_imaging.py:207
"data = base64.b64decode(sys.argv[1])\n"
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
tests/test_integration_stdio.py:189
png = base64.b64decode(
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
README.md:461
and POSTs it to the server's `/upload` endpoint (secret-gated, write-mode,
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
browser-extension/README.md:16
→  POST to  http://localhost:PORT/mcp/<secret>/upload?path=assets/x.png
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
browser-extension/README.md:62
- The `/upload` endpoint is gated by the **secret path** (same capability as the
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
docs/CHATGPT_SETUP.md:132
`POST /mcp/<SECRET> ... 200 OK` in the server log, while any `POST /mcp` is
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha effebf30c383full audit observations/trust-audit/mcp-server/luckysolanki902__local-terminal-mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11effebf30c383SAFEB89first audit
06

Questions

What is the local-terminal-mcp MCP server?

Run local commands from ChatGPT or Claude via a safe, allowlisted MCP server. Work on your codebase and generate images/sprites/assets locally from ChatGPT without spending Codex/API tokens. stdio for Claude Desktop/Code; capability-URL or bearer auth over HTTP for ChatGPT via ngrok or cloudflared.

What tools does local-terminal-mcp expose?

3 in total: 3 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is local-terminal-mcp safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.

What credentials does local-terminal-mcp need?

No credential environment variables were found in its source, so it appears to need none.

How does local-terminal-mcp run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on PyPI as local-terminal-mcp.

How current is this page?

The grade is for one exact copy of the source (effebf30c383), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement