stela-mcp
by Sachin-Bhat
README.md
# STeLA MCP
[](https://smithery.ai/server/@Sachin-Bhat/stela-mcp)
> A Python implementation of a Model Context Protocol server that provides secure access to local system operations via a standardized API interface.
STeLA (Simple Terminal Language Assistant) MCP is a lightweight server that provides secure access to local machine commands and file operations via a standardized API interface. It acts as a bridge between applications and your local system, implementing the Model Context Protocol (MCP) architecture.
## Overview
STeLA MCP implements the Model Context Protocol (MCP) architecture to provide a secure, standardized way for applications to execute commands and perform file operations on a local machine. It serves as an intermediary layer that accepts requests through a well-defined API, executes operations in a controlled environment, and returns formatted results.
## Features
* **Command Execution**: Run shell commands on the local system with proper error handling
* **File Operations**: Read, write, and manage files on the local system
* **Directory Visualization**: Generate recursive tree views of file systems
* **Working Directory Support**: Execute commands in specific directories
* **Robust Error Handling**: Detailed error messages and validation
* **Comprehensive Output**: Capture and return both stdout and stderr
* **Simple Integration**: Standard I/O interface for easy integration with various clients
* **Multi-Directory Support**: Configure multiple allowed directories for file operations
* **Security-First Design**: Strict path validation and command execution controls
* **File Search**: Search for files matching a pattern
* **File Edit**: Make selective edits to a file
* **Type Safety**: Strong type checking with Pydantic models for all tool inputs
* **Path Validation**: Enhanced symlink and parent directory validation
## Installation
### Installing via Smithery
To install STeLA for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@Sachin-Bhat/stela-mcp):
```bash
npx -y @smithery/cli install @Sachin-Bhat/stela-mcp --client claude
```
### Prerequisites
* Python 3.10 - 3.12
* pip or uv package manager
* Pydantic v2.x
### Installation Steps
1. Clone the repository:
```bash
git clone <repository-url>
cd stela-mcp
```
2. Create and activate a virtual environment:
```bash
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
```
3. Install dependencies:
```bash
pip install -e .
```
### Creating a Binary Distribution
To create a self-contained binary:
1. Install PyInstaller:
```bash
pip install pyinstaller
```
2. Create the binary:
```bash
pyinstaller --onefile src/stella_mcp//server.py --name stela-mcp
```
The binary will be created in the `dist` directory.
## Configuration
STeLA MCP can be configured using environment variables:
### Directory Access Control
* `ALLOWED_DIRS` (Required): Comma-separated list of directories where file operations are allowed
* Example: `/home/user/project,/home/user/docs`
* Default: Current working directory if not specified
* Note: All paths must be absolute
* `ALLOWED_DIR` (Optional): Primary directory for command execution context
* Example: `/home/user/project`
* Default: First directory from `ALLOWED_DIRS` or current working directory
* Note: This is separate from `ALLOWED_DIRS` and controls command execution context
### Command Execution Security
* `ALLOWED_COMMANDS` (Optional): Comma-separated list of allowed shell commands
* Example: `ls,cat,pwd,echo`
* Default: `ls,cat,pwd,echo`
* Special value: `all` to allow any command (not recommended)
* `ALLOWED_FLAGS` (Optional): Comma-separated list of allowed command flags
* Example: `-l,-a,-h,--help`
* Default: `-l,-a,-h,--help`
* Special value: `all` to allow any flag (not recommended)
* `MAX_COMMAND_LENGTH` (Optional): Maximum length of command strings
* Example: `1024`
* Default: `1024`
* Note: Prevents command injection via overly long strings
* `COMMAND_TIMEOUT` (Optional): Maximum execution time for commands in seconds
* Example: `60`
* Default: `60`
* Note: Prevents hanging commands
### Example Configuration
```bash
# Directory access
export ALLOWED_DIRS="/home/user/project,/home/user/docs"
export ALLOWED_DIR="/home/user/project"
# Command execution
export ALLOWED_COMMANDS="ls,cat,pwd,echo"
export ALLOWED_FLAGS="-l,-a,-h,--help"
export MAX_COMMAND_LENGTH=1024
export COMMAND_TIMEOUT=60
```
## Project Structure
```
stela-mcp/
├── src/
│ ├── stela_mcp/
│ │ ├── __init__.py
│ │ ├── shell.py # Shell command execution
│ │ ├── filesystem.py # File system operations
│ │ └── security.py # Security configuration
│ └── server.py # Main server implementation
├── pyproject.toml # Project configuration
└── README.md
```
## Usage
### Starting the Server
Run the server using:
```bash
uv run python -m src.stella_mcp.server
```
The server will start and listen for connections through standard I/O.
### Using with Claude Desktop
To use STeLA MCP with Claude Desktop:
1. Option 1: Using Python directly
- Start the server using:
```bash
uv run python -m src.stela_mcp.server
```
- In Claude Desktop:
- Go to Settings
- Under "Tools", click "Add Tool"
- Select "MCP Server"
- Enter the following configuration:
- **Name**: STeLA MCP
- **Path**: The absolute path to your Python executable (e.g., `/home/username/.venv/bin/python`)
- **Arguments**: `-m src.stela_mcp.server`
- **Working Directory**: The path to your STeLA MCP project directory
2. Option 2: Using the binary
- Copy the binary from `dist/stela-mcp` to a location in your PATH
- In Claude Desktop:
- Go to Settings
- Under "Tools", click "Add Tool"
- Select "MCP Server"
- Enter the following configuration:
- **Name**: STeLA MCP
- **Path**: The absolute path to the binary (e.g., `/usr/local/bin/stela-mcp`)
- **Arguments**: (leave empty)
- **Working Directory**: (leave empty)
3. Once configured, you can use STeLA MCP tools in your conversations with Claude. For example:
- "Show me the contents of my home directory"
- "Create a new file called 'test.txt' with some content"
- "Run the command 'ls -la' in my current directory"
4. Claude will automatically use the appropriate tools based on your requests and display the results in the conversation.
### Available Tools
#### Command Tools
##### execute_command
Executes shell commands on the local system.
**Parameters:**
* `command` (string, required): The shell command to execute
* `working_dir` (string, optional): Directory where the command should be executed
**Returns:**
* On success: Command output (stdout)
* On failure: Error message and any command output (stderr)
##### change_directory
Changes the current working directory.
**Parameters:**
* `path` (string, required): Path to change to
**Returns:**
* On success: Success message with new path
* On failure: Error message
#### File System Tools
##### read_file
Reads the contents of a file.
**Parameters:**
* `path` (string, required): Path to the file to read
**Returns:**
* On success: File contents
* On failure: Error message
##### read_multiple_files
Reads multiple files simultaneously.
**Parameters:**
* `paths` (array, required): List of file paths to read
**Returns:**
* On success: Combined contents of all files
* On failure: Error message and partial results
##### write_file
Writes content to a file.
**Parameters:**
* `path` (string, required): Path where the file will be written
* `content` (string, required): Content to write to the file
**Returns:**
* On success: Success message
* On failure: Error message
##### edit_file
Makes selective edits to a file.
**Parameters:**
* `path` (string, required): Path to the file to edit
* `edits` (array, required): List of edit operations
* Each edit contains `oldText` and `newText`
* `dryRun` (boolean, optional): Preview changes without applying
**Returns:**
* On success: Git-style diff of changes
* On failure: Error message
##### list_directory
Lists contents of a directory.
**Parameters:**
* `path` (string, required): Path for the directory to list
**Returns:**
* On success: List of files and directories
* On failure: Error message
##### create_directory
Creates a new directory.
**Parameters:**
* `path` (string, required): Path for the directory to create
**Returns:**
* On success: Success message
* On failure: Error message
##### move_file
Moves or renames files and directories.
**Parameters:**
* `source` (string, required): Source path of the file or directory to move
* `destination` (string, required): Destination path where the file or directory will be moved to
**Returns:**
* On success: Success message
* On failure: Error message
##### search_files
Searches for files matching a pattern.
**Parameters:**
* `path` (string, required): Starting path for the search
* `pattern` (string, required): Search pattern to match file and directory names
* `excludePatterns` (array, optional): List of glob patterns to exclude
**Returns:**
* On success: List of matching files
* On failure: Error message
##### directory_tree
Generates a recursive tree view of files and directories.
**Parameters:**
* `path` (string, required): Path for the directory to generate tree from
**Returns:**
* On success: JSON structure representing the directory tree
* On failure: Error message
##### get_file_info
Retrieves detailed metadata about a file or directory.
**Parameters:**
* `path` (string, required): Path to the file or directory
**Returns:**
* On success: File/directory metadata
* On failure: Error message
##### list_allowed_directories
Lists all directories the server is allowed to access.
**Parameters:**
* None
**Returns:**
* On success: List of allowed directories
* On failure: Error message
##### show_security_rules
Shows current security configuration.
**Parameters:**
* None
**Returns:**
* On success: Security configuration details
* On failure: Error message
## Security Considerations
STeLA MCP provides direct access to execute commands and file operations on the local system. Consider the following security practices:
* Run with appropriate permissions (avoid running as root/administrator)
* Use in trusted environments only
* Consider implementing additional authorization mechanisms for production use
* Be cautious about which directories you allow command execution and file operations in
* Implement path validation to prevent unauthorized access to system files
* Use the most restrictive configuration possible for your use case
* Regularly review and update allowed commands and directories
* Validate symlinks to prevent access outside allowed directories
* Ensure parent directory checks for file creation operations
### Platform-Specific Security Notes
#### Linux/macOS
* Run with a dedicated user with limited permissions
* Consider using a chroot environment to restrict file system access
* Use `chmod` to restrict executable permissions
* Consider using SELinux/AppArmor for additional security
#### Windows
* Run as a standard user, not an administrator
* Consider using Windows Security features to restrict access
* Use folder/file permissions to limit access to sensitive directories
* Consider using Windows Defender Application Control
## Development
### Adding New Tools
To extend STeLA MCP with additional functionality, follow this pattern:
1. Define a Pydantic model for the tool's input parameters in `server.py`
2. Add a new method to the appropriate class in `shell.py` or `filesystem.py`
3. Register the tool in `server.py` using the `@server.call_tool()` decorator
4. Implement the tool handler with proper error handling and return types
Example:
```python
from pydantic import BaseModel, Field
class MyToolInput(BaseModel):
param1: str = Field(description="Description of param1")
param2: int = Field(description="Description of param2")
@server.call_tool()
async def my_tool(request: Request[MyToolInput, str], arguments: MyToolInput) -> Dict[str, Any]:
"""Description of the tool."""
try:
# Tool implementation
result = await do_something(arguments.param1, arguments.param2)
return {"success": True, "result": result}
except Exception as e:
return {"error": str(e)}
```
## License
Apache-2.0 License
## Acknowledgements
* Built with the MCP Python SDK
TDQS
A3.9/5.0
Scored across 14 tools
Disambiguation5/5
Each tool has a clearly distinct purpose: navigation, reading, writing, editing, searching, moving, listing, and command execution. No overlap or ambiguity between tools.
Naming Consistency4/5
Most tools follow a verb_noun pattern (e.g., create_directory, read_file). The only slight inconsistency is 'directory_tree' which lacks a verb, but it remains clear.
Tool Count5/5
14 tools is appropriate for a file system MCP server, covering essential operations without being excessive.
Completeness3/5
Covers most CRUD-like operations but lacks a delete/remove file tool, which is a notable gap for file system tasks. Also missing copy functionality.
Maintenance
ActivityInactive
ResponsivenessNo issues