DIRECTORY_ACCESS_GUIDE.md•5.25 kB
# Guía de Acceso al Directorio E:\VentanaExterior
## Descripción
Este servidor MCP ahora incluye funcionalidades para acceder de forma segura al directorio `E:\VentanaExterior` mediante autenticación OAuth2 con Google o GitHub.
## Características de Seguridad
- ✅ **Autenticación OAuth2 requerida** (Google/GitHub)
- ✅ **Control de acceso basado en emails/dominios**
- ✅ **Validación de paths** para prevenir directory traversal
- ✅ **Límites de tamaño** para archivos (1MB por defecto)
- ✅ **Solo lectura** de archivos de texto
- ✅ **Logging completo** de todas las operaciones
## Herramientas Disponibles
### 1. `directory_list`
Lista el contenido de un directorio.
**Parámetros:**
- `path` (opcional): Ruta relativa dentro del directorio protegido
**Ejemplo:**
```json
{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "directory_list",
"arguments": {
"path": "subdirectorio"
}
}
}
```
### 2. `file_read`
Lee el contenido de un archivo de texto.
**Parámetros:**
- `path` (requerido): Ruta relativa del archivo
- `max_size` (opcional): Tamaño máximo en bytes (por defecto 1MB)
**Ejemplo:**
```json
{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "file_read",
"arguments": {
"path": "documento.txt",
"max_size": 2097152
}
}
}
```
### 3. `file_info`
Obtiene información detallada de un archivo o directorio.
**Parámetros:**
- `path` (requerido): Ruta relativa del archivo o directorio
**Ejemplo:**
```json
{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "file_info",
"arguments": {
"path": "archivo.txt"
}
}
}
```
## Proceso de Autenticación
### Paso 1: Obtener Token de Acceso
1. Ve a `http://localhost:8001/login`
2. Selecciona un proveedor (Google o GitHub)
3. Completa el proceso de autenticación OAuth2
4. Copia el `access_token` de la URL de éxito
### Paso 2: Usar el Token
Incluye el token en el header `Authorization`:
```
Authorization: Bearer <tu_access_token>
```
## Ejemplos de Uso
### Con cURL
```bash
# Listar directorio raíz
curl -X POST http://localhost:8001/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <tu_token>" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "directory_list",
"arguments": {}
}
}'
```
### Con Python
```python
import requests
# Configurar
base_url = "http://localhost:8001"
access_token = "tu_access_token_here"
# Listar directorio
response = requests.post(
f"{base_url}/mcp",
json={
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "directory_list",
"arguments": {"path": ""}
}
},
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {access_token}"
}
)
if response.status_code == 200:
result = response.json()
print(result["result"]["content"][0]["text"])
```
## Configuración de Acceso
### Variables de Entorno
Configura en tu archivo `.env`:
```env
# Emails específicos permitidos (separados por comas)
ALLOWED_EMAILS=usuario1@example.com,usuario2@example.com
# Dominios permitidos (separados por comas)
ALLOWED_DOMAINS=gmail.com,github.com
# Requerir aprobación manual para nuevos usuarios
REQUIRE_MANUAL_APPROVAL=false
```
### Sin Restricciones
Si no configuras `ALLOWED_EMAILS` ni `ALLOWED_DOMAINS`, todos los usuarios autenticados tendrán acceso.
## Limitaciones
1. **Solo lectura**: No se pueden modificar archivos
2. **Solo texto**: Los archivos binarios no se pueden leer
3. **Tamaño limitado**: Por defecto 1MB por archivo
4. **Un directorio**: Solo acceso a `E:\VentanaExterior` y subdirectorios
5. **Autenticación requerida**: Todos los accesos requieren token válido
## Pruebas
### Cliente de Prueba
Usa el script incluido:
```bash
# Sin autenticación (debería fallar)
python test_directory_access.py
# Con token de autenticación
python test_directory_access.py <tu_access_token>
```
### Verificación Manual
1. Inicia el servidor: `python src/server.py`
2. Ve a `http://localhost:8001/login`
3. Autentícate con Google/GitHub
4. Usa las herramientas desde la documentación de la API en `http://localhost:8001/docs`
## Solución de Problemas
### Error 401 - Unauthorized
- Verifica que tienes un token válido
- Asegúrate de incluir `Bearer ` antes del token
- El token puede haber expirado (60 minutos por defecto)
### Error 403 - Forbidden
- Verifica que tu email está en la lista permitida
- Contacta al administrador si necesitas acceso
### Error - Acceso denegado - path fuera del directorio autorizado
- Solo puedes acceder a `E:\VentanaExterior` y sus subdirectorios
- Verifica que el path no contiene `..` o caracteres especiales
### Error - El archivo es demasiado grande
- Aumenta el parámetro `max_size` o usa archivos más pequeños
- Por defecto el límite es 1MB
## Logs
Todos los accesos se registran en los logs del servidor. Busca mensajes como:
- `Herramienta directory_list llamada`
- `Usuario autenticado: usuario@email.com`
- `directory_list completada: X elementos`