fix: handle root directory startup error from Claude Desktop

- When started from Claude Desktop, working directory might be "/"
- Now defaults to user home directory if cwd is "/"
- Startup scripts change to script directory for consistency
- Simplified README to remove implementation details about PROJECT_ROOT

This fixes the "MCP_PROJECT_ROOT cannot be set to '/'" error
while maintaining security by preventing filesystem-wide access.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Fahad
2025-06-09 20:18:24 +04:00
parent 00b805e0f5
commit 0b424cdd6a
4 changed files with 22 additions and 18 deletions

View File

@@ -741,21 +741,11 @@ Different tools use optimized temperature settings:
**All file paths must be absolute paths.**
### Setup
1. **Use absolute paths** in all tool calls:
```
"Use gemini to analyze /Users/you/project/src/main.py"
❌ "Use gemini to analyze ./src/main.py" (will be rejected)
```
2. **Set MCP_PROJECT_ROOT** to your project directory for security:
```json
"env": {
"GEMINI_API_KEY": "your-key",
"MCP_PROJECT_ROOT": "/Users/you/project"
}
```
The server only allows access to files within this directory.
When using any Gemini tool, always provide absolute paths:
```
✅ "Use gemini to analyze /Users/you/project/src/main.py"
"Use gemini to analyze ./src/main.py" (will be rejected)
```
## Installation

View File

@@ -4,6 +4,9 @@ REM Windows batch script to run Gemini MCP server
REM Get the directory where this script is located
set SCRIPT_DIR=%~dp0
REM Change to script directory to ensure proper working directory
cd /d "%SCRIPT_DIR%"
REM Check if virtual environment exists
if exist "%SCRIPT_DIR%venv\Scripts\activate.bat" (
REM Activate the virtual environment

View File

@@ -15,5 +15,8 @@ else
PYTHON_EXEC="python3"
fi
# Change to script directory to ensure proper working directory
cd "$SCRIPT_DIR"
# Run the server
exec "$PYTHON_EXEC" "$SCRIPT_DIR/server.py"

View File

@@ -27,15 +27,23 @@ from .token_utils import estimate_tokens, MAX_CONTEXT_TOKENS
# Get project root from environment or use current directory
# This defines the sandbox directory where file access is allowed
# Security: All file operations are restricted to this directory and its children
PROJECT_ROOT = Path(os.environ.get("MCP_PROJECT_ROOT", os.getcwd())).resolve()
default_root = os.environ.get("MCP_PROJECT_ROOT", os.getcwd())
# If current directory is "/" (can happen when launched from Claude Desktop),
# use the user's home directory as a safe default
if default_root == "/" or os.getcwd() == "/":
default_root = os.path.expanduser("~")
PROJECT_ROOT = Path(default_root).resolve()
# Critical Security Check: Prevent running with overly permissive root
# Setting PROJECT_ROOT to "/" would allow access to the entire filesystem,
# which is a severe security vulnerability
if str(PROJECT_ROOT) == "/":
raise RuntimeError(
"Security Error: MCP_PROJECT_ROOT cannot be set to '/'. "
"This would give access to the entire filesystem."
"Security Error: PROJECT_ROOT cannot be '/'. "
"This would give access to the entire filesystem. "
"Please set MCP_PROJECT_ROOT environment variable to a specific directory."
)