local-terminal-mcpSAFE
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.
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
effebf30c383OBSERVED · 2026-10-11Connect
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 mcp add local-terminal-mcp -- uvx local-terminal-mcp
{
"mcpServers": {
"local-terminal-mcp": {
"command": "uvx",
"args": [
"local-terminal-mcp"
]
}
}
}Exposed tools (3)
3 read · 0 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
close_terminal | read | return ( |
list_directory | read | try: |
list_terminals | read | lines = [ |
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.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (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)
["cat", "../../etc/passwd"],
["cat", "src/../../outside"],
policy.resolve_path("../../etc/passwd")const bin = atob(b64);
raw = base64.b64decode(payload, validate=True)
PNG_1X1 = base64.b64decode(
"data = base64.b64decode(sys.argv[1])\n"
png = base64.b64decode(
and POSTs it to the server's `/upload` endpoint (secret-gated, write-mode,
→ POST to http://localhost:PORT/mcp/<secret>/upload?path=assets/x.png
- The `/upload` endpoint is gated by the **secret path** (same capability as the
`POST /mcp/<SECRET> ... 200 OK` in the server log, while any `POST /mcp` is
Gates applied: no_behavioural_pass.
effebf30c383full audit observations/trust-audit/mcp-server/luckysolanki902__local-terminal-mcp.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | effebf30c383 | SAFE | B | 89 | first audit |
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.