Safe Terminal MCP Server

Kristos/safe-terminal-mcp
0 starsCommunity

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

A secure, controlled terminal MCP server that enables executing whitelisted shell commands safely with multiple security layers.

README.md

Safe Terminal MCP Server

A secure, controlled terminal MCP server with strict command whitelisting and multiple safety layers.

๐Ÿ›ก๏ธ Security Features

  • Command Whitelisting: Only pre-approved commands are allowed
  • Pattern Blocking: Blocks shell metacharacters and dangerous patterns
  • Path Sanitization: Prevents directory traversal attacks
  • Dangerous Command Control: Requires explicit permission for risky commands
  • Resource Limits: Timeouts and output size limits
  • File Type Restrictions: Only safe file extensions allowed

๐Ÿš€ Quick Setup

1. Install Dependencies

npm install

2. Build Project

npm run build

3. Test

npm start

๐Ÿ“ Project Structure

safe-terminal-mcp/
โ”œโ”€โ”€ src/
โ”‚   โ””โ”€โ”€ index.ts          # Main server code
โ”œโ”€โ”€ dist/                 # Compiled JavaScript (generated)
โ”œโ”€โ”€ package.json          # Project dependencies
โ”œโ”€โ”€ tsconfig.json         # TypeScript configuration
โ””โ”€โ”€ README.md            # This file

๐Ÿ”ง Configuration

Safe Commands (Built-in)

  • Read-only: ls, pwd, cat, head, tail, find, grep, wc
  • System info: date, whoami, uname, df, free, uptime
  • Development: git, npm, node, python (requires allowDangerous)

Dangerous Commands

These require allowDangerous: true:

  • File modification: touch, mkdir, cp, mv, rm
  • Network access: ping, curl, wget
  • Code execution: node, python, npm
  • System changes: chmod, chown

๐Ÿ”Œ Claude Desktop Integration

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "safe-terminal": {
      "command": "node",
      "args": ["/absolute/path/to/safe-terminal-mcp/dist/index.js"]
    }
  }
}

๐Ÿ”จ Available Tools

1. run_safe_command

Execute whitelisted commands with safety checks.

Parameters:

  • command (required): The command to execute
  • allowDangerous (optional): Allow dangerous commands (default: false)
  • workingDir (optional): Working directory (relative to server root)

Example: ``json { "command": "ls -la", "allowDangerous": false, "workingDir": "src" } ``

2. list_safe_commands

List all available commands and their danger levels.

3. read_file

Safely read text files with extension checking.

Parameters:

  • path (required): File path to read

4. list_directory

List directory contents safely.

Parameters:

  • path (optional): Directory path (default: current directory)

๐Ÿ›ก๏ธ Safety Features Explained

Command Whitelisting

Only pre-approved commands in SAFE_COMMANDS are allowed. Each command is categorized as safe or dangerous.

Pattern Blocking

Blocks dangerous shell patterns:

  • Shell metacharacters: ;, &, |, ` `, $, (), {}`
  • Directory traversal: ..
  • System directories: /etc/, /var/, /usr/bin/
  • Privilege escalation: sudo, su
  • File redirection: >, <

Path Sanitization

All file paths are resolved and checked to ensure they stay within the working directory.

Resource Limits

  • Timeout: 30 seconds max execution time
  • Output: 1MB max output size
  • File size: Files truncated at 1MB

๐Ÿงช Testing

Test the server manually: ```bash

Start the server

npm start

In another terminal, test with MCP inspector

npx @modelcontextprotocol/inspector node dist/index.js ```

๐Ÿ” Security Best Practices

  1. Run in Isolation: Use in a sandboxed environment or VM
  2. Monitor Commands: Review all command executions
  3. Limit Dangerous Commands: Only enable when absolutely necessary
  4. Regular Updates: Keep dependencies updated
  5. Principle of Least Privilege: Only grant necessary permissions

โš ๏ธ Important Notes

  • This is much safer than unrestricted terminal access, but still carries risks
  • Dangerous commands should only be enabled when necessary
  • Always review commands before execution in production
  • Consider running in a containerized environment for additional isolation

๐Ÿ”„ Customization

You can easily customize the server by:

  • Adding new safe commands to SAFE_COMMANDS
  • Modifying DANGEROUS_PATTERNS for additional blocking
  • Adjusting resource limits in CONFIG
  • Adding new tools for specific use cases

Related MCP servers

Browse all โ†’