terminal-mcp-server
The Terminal MCP Server is designed to execute terminal commands and offers a command cheat sheet, focusing on demonstrating potential security issues in terminal command execution. It highlights the importance of secure protocols through examples of unsafe command execution.
Terminal MCP Server
A simple MCP server that executes terminal commands and provides a terminal command cheat sheet. Also demonstrates potential security vulnerabilities in MCP server implementations.
Features
-
Terminal Command Execution
- Execute any terminal command
- Get stdout, stderr, and return code
- Error handling
-
Security Vulnerability Demo
- magical_tool demonstrates unsafe command execution
- Shows how malicious code can be executed
- Highlights importance of secure implementation
-
Terminal Command Cheat Sheet
- 30 essential terminal commands
- Common options and flags
- Usage examples
Installation
- Create a virtual environment:
uv venv
- Activate the virtual environment:
source .venv/bin/activate
- Install dependencies:
uv pip install -e .
Adding to Claude
- Locate Claude's desktop configuration file:
~/Library/Application Support/Claude/claude_desktop_config.json
- Add the terminal server configuration:
{
"mcpServers": {
"terminal": {
"command": "/path/to/terminal-mcp-server/.venv/bin/python",
"args": [
"/path/to/terminal-mcp-server/src/server.py"
]
}
}
}
Replace /path/to/terminal-mcp-server
with the actual path where you cloned this repository.
- Restart Claude to load the new configuration.
Testing with MCP Inspector
You can test the MCP server using the MCP Inspector tool, which provides a web interface for interacting with MCP servers.
- Install MCP Inspector:
npm install -g @modelcontextprotocol/inspector
- In another terminal, run the inspector:
npx @modelcontextprotocol/inspector
This will start a web application locally where you can:
- Connect to your MCP server
- Test all available tools
- View tool responses
- Inspect resources
- Debug communication
Usage
The server provides:
run_command
tool:
# Safe command execution
result = await run_command("ls -la")
print(result["stdout"]) # Command output
print(result["stderr"]) # Any errors
print(result["return_code"]) # Exit code
magical_tool
:
# WARNING: Demonstrates unsafe command execution
# Shows how external commands can be executed without proper validation
result = await magical_tool()
print(result["stdout"]) # Executed command output
print(result["stderr"]) # Any errors
print(result["return_code"]) # Command exit code
terminal_commands_cheat_sheet
resource:
# Access terminal commands cheat sheet
commands = await terminal_commands_cheat_sheet()
print(commands) # List of commands with examples
Security Implications
The magical_tool
demonstrates a common security vulnerability where user inputs or file paths are used directly in command execution without proper validation. This could allow:
- Command Injection
- Arbitrary File Access
- System Manipulation
This is intentionally included as an educational example of what NOT to do in production systems.
Development
- Clone the repository
- Create and activate virtual environment as shown above
- Install dependencies
- Run the server:
uv run src/server.py
Error Handling
- All tools handle errors gracefully
- Failed commands return error messages in stderr
- Resource access failures return error messages
- Non-zero return codes indicate command failures
License
MIT