merge: quick/improve-init-jupyter-skill — mejoras en skills init-jupyter y db-reader

This commit is contained in:
2026-03-23 13:03:08 +01:00
2 changed files with 157 additions and 83 deletions
+71 -33
View File
@@ -3,21 +3,6 @@ name: db-reader
description: Agente especializado en bases de datos SQLite y DuckDB. Puede crear, consultar, insertar y analizar datos. description: Agente especializado en bases de datos SQLite y DuckDB. Puede crear, consultar, insertar y analizar datos.
model: sonnet model: sonnet
tools: Read, Write, Bash, Glob, Grep tools: Read, Write, Bash, Glob, Grep
mcpServers:
- sqlite:
type: stdio
command: uvx
args:
- mcp-server-sqlite
- --db-path
- "${SQLITE_DB_PATH:-./data.sqlite}"
- duckdb:
type: stdio
command: uvx
args:
- mcp-server-duckdb
- --db-path
- "${DUCKDB_DB_PATH:-./data.duckdb}"
--- ---
# Agente DB Reader # Agente DB Reader
@@ -43,22 +28,60 @@ Eres un experto en bases de datos SQLite y DuckDB. Tu rol es ayudar al usuario a
## Flujo de trabajo ## Flujo de trabajo
1. **Identificar la base de datos**: Pregunta al usuario qué DB usar (sqlite o duckdb) 1. **Identificar la base de datos**: Pregunta al usuario qué DB usar (sqlite o duckdb)
2. **Verificar conexión**: Usa las herramientas MCP para conectar 2. **Determinar la ruta**: Usa la ruta proporcionada por el usuario o el directorio de trabajo actual
3. **Ejecutar operación**: CREATE, INSERT, SELECT, UPDATE, DELETE 3. **Crear la base de datos**: Usa Python con los módulos `sqlite3` o `duckdb`
4. **Mostrar resultados**: Formatea los resultados de forma legible 4. **Ejecutar operaciones**: CREATE, INSERT, SELECT, UPDATE, DELETE
5. **Mostrar resultados**: Formatea los resultados de forma legible
## Herramientas MCP disponibles ## REGLAS CRÍTICAS - RUTAS DE ARCHIVOS
### SQLite (mcp-server-sqlite) **NUNCA** crees archivos o directorios con nombres que contengan:
- `read_query`: Ejecutar SELECT queries - Variables de entorno: `${VAR}`, `$VAR`, `${VAR:-default}`
- `write_query`: Ejecutar INSERT/UPDATE/DELETE - Caracteres especiales: `{`, `}`, `$`
- `create_table`: Crear nuevas tablas
- `list_tables`: Listar tablas existentes
- `describe_table`: Ver esquema de una tabla
- `append_insight`: Guardar análisis
### DuckDB (mcp-server-duckdb) **SIEMPRE**:
- `query`: Ejecutar cualquier query SQL - Usa rutas absolutas expandidas (ej: `/home/user/proyecto/data.duckdb`)
- O rutas relativas simples sin variables (ej: `./data.duckdb`)
- Si el usuario proporciona una ruta con variables, **expándela primero** usando `echo` o Python
**Ejemplo CORRECTO**:
```bash
# Obtener ruta absoluta del directorio de trabajo
DB_PATH="$(pwd)/data.duckdb"
echo "Base de datos: $DB_PATH"
```
**Ejemplo INCORRECTO** (NUNCA hacer esto):
```bash
# PROHIBIDO - crea archivos con nombres literales de variables
mkdir "${DUCKDB_DB_PATH:-."
touch "${SQLITE_DB_PATH:-./data.sqlite}"
```
## Herramientas disponibles
### Python + SQLite (sqlite3)
```python
import sqlite3
con = sqlite3.connect('/ruta/absoluta/data.sqlite')
cursor = con.cursor()
cursor.execute("SELECT * FROM tabla")
results = cursor.fetchall()
con.close()
```
### Python + DuckDB
```python
import duckdb
con = duckdb.connect('/ruta/absoluta/data.duckdb')
results = con.execute("SELECT * FROM tabla").fetchall()
con.close()
```
### Instalación de dependencias
```bash
pip install duckdb # DuckDB (sqlite3 viene incluido en Python)
```
## Convenciones ## Convenciones
@@ -96,13 +119,28 @@ GROUP BY 1
ORDER BY 1; ORDER BY 1;
``` ```
## Variables de entorno ## Rutas de bases de datos
- `SQLITE_DB_PATH`: Ruta a la base de datos SQLite (default: ./data.sqlite) Por defecto, crear las bases de datos en el directorio de trabajo actual:
- `DUCKDB_DB_PATH`: Ruta a la base de datos DuckDB (default: ./data.duckdb) - SQLite: `{directorio_trabajo}/data.sqlite`
- DuckDB: `{directorio_trabajo}/data.duckdb`
**IMPORTANTE**: Siempre construir rutas usando Python o comandos bash expandidos:
```python
import os
# CORRECTO - ruta absoluta
db_path = os.path.join(os.getcwd(), "data.duckdb")
print(f"Creando DB en: {db_path}")
# CORRECTO - con ruta del usuario
user_path = "/home/lucas/proyecto"
db_path = os.path.join(user_path, "data.duckdb")
```
## Notas ## Notas
- DuckDB es mejor para análisis de datos grandes - DuckDB es mejor para análisis de datos grandes (OLAP)
- SQLite es mejor para datos transaccionales - SQLite es mejor para datos transaccionales (OLTP)
- Ambos soportan SQL estándar - Ambos soportan SQL estándar
- **NUNCA** usar strings con `${...}` como nombres de archivo
+86 -50
View File
@@ -1,80 +1,116 @@
--- ---
name: init-jupyter name: init-jupyter
description: Inicializa un proyecto Python con uv, Jupyter Lab y configura MCP para Claude description: Inicializa o inicia Jupyter Lab via MCP. Detecta notebooks existentes automáticamente.
argument-hint: [ruta-proyecto] argument-hint: [ruta-proyecto]
disable-model-invocation: true disable-model-invocation: true
user-invocable: true user-invocable: true
allowed-tools: Bash, Read, Write, Edit allowed-tools: Bash, Read, Write, Edit, Glob
--- ---
# Inicializar Proyecto Jupyter # Inicializar/Iniciar Proyecto Jupyter via MCP
Este skill automatiza la configuración completa de un entorno de análisis de datos con Jupyter Lab integrado con Claude via MCP. Este skill gestiona entornos Jupyter Lab integrados con Claude via MCP. Detecta automáticamente si ya existe un proyecto configurado.
## Pasos a ejecutar ## Flujo de decisión
1. **Validar ubicación** ### 1. Detectar notebooks existentes
- Si se proporciona `$1`, usar esa ruta
- Si no, usar el directorio actual
2. **Inicializar proyecto con uv** Buscar archivos `.ipynb` en:
```bash - Raíz del proyecto
cd [ruta] && uv init - Carpeta `notebooks/`
``` - Cualquier subcarpeta
3. **Crear entorno virtual** ```bash
```bash find [ruta] -name "*.ipynb" -type f 2>/dev/null | head -5
uv venv ```
```
4. **Instalar dependencias** ### 2. Si HAY notebooks existentes → Iniciar directamente
```bash
uv add jupyter jupyter-collaboration
```
5. **Instalar jupyter-mcp-server** **2a. Verificar que MCP está configurado**
```bash - Comprobar si existe `.claude/settings.local.json` con configuración de jupyter
uv tool install jupyter-mcp-server - Si no existe, crearlo (ver paso 6 del flujo de inicialización)
```
6. **Configurar MCP para Claude** **2b. Verificar que jupyter-mcp-server está instalado**
- Crear o actualizar `.claude/settings.local.json` con la configuración del servidor MCP de Jupyter: ```bash
```json which jupyter-mcp-server || uv tool install jupyter-mcp-server
{ ```
"mcpServers": {
"jupyter": {
"command": "jupyter-mcp-server",
"args": []
}
}
}
```
7. **Crear script de lanzamiento** `start-jupyter.sh`: **2c. Iniciar Jupyter via MCP**
```bash ```bash
#!/bin/bash source .venv/bin/activate 2>/dev/null || true
source .venv/bin/activate jupyter lab --no-browser --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.disable_check_xsrf=True
.venv/bin/jupyter lab --no-browser --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.disable_check_xsrf=True ```
```
8. **Mostrar resumen al usuario** con los comandos para: **2d. Informar al usuario** que Jupyter está corriendo y puede usar las herramientas MCP de Jupyter desde Claude.
- Activar el entorno: `source .venv/bin/activate`
- Lanzar Jupyter: `./start-jupyter.sh` o el comando directo ### 3. Si NO hay notebooks → Inicializar proyecto completo
Seguir estos pasos:
**3a. Validar ubicación**
- Si se proporciona `$1`, usar esa ruta
- Si no, usar el directorio actual
**3b. Inicializar proyecto con uv** (si no existe pyproject.toml)
```bash
cd [ruta] && uv init
```
**3c. Crear entorno virtual**
```bash
uv venv
```
**3d. Instalar dependencias**
```bash
uv add jupyter jupyter-collaboration
```
**3e. Instalar jupyter-mcp-server**
```bash
uv tool install jupyter-mcp-server
```
**3f. Configurar MCP para Claude**
Crear o actualizar `.claude/settings.local.json`:
```json
{
"mcpServers": {
"jupyter": {
"command": "jupyter-mcp-server",
"args": []
}
}
}
```
**3g. Crear carpeta notebooks** (opcional)
```bash
mkdir -p notebooks
```
**3h. Iniciar Jupyter via MCP**
```bash
source .venv/bin/activate
jupyter lab --no-browser --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.disable_check_xsrf=True
```
## Ejemplos de uso ## Ejemplos de uso
**Inicializar en directorio actual:** **Iniciar/inicializar en directorio actual:**
```bash ```bash
/init-jupyter /init-jupyter
``` ```
**Inicializar en ruta específica:** **Iniciar/inicializar en ruta específica:**
```bash ```bash
/init-jupyter ~/proyectos/mi-analisis /init-jupyter ~/proyectos/mi-analisis
``` ```
## Notas ## Notas importantes
- Si el proyecto ya tiene `pyproject.toml`, preguntar antes de sobrescribir - **Siempre usa MCP**: Jupyter se ejecuta siempre de forma que Claude pueda interactuar via MCP
- El script `start-jupyter.sh` se crea con permisos de ejecución - Si detecta notebooks existentes, NO reinicializa el proyecto, solo inicia Jupyter
- Si el proyecto ya tiene `pyproject.toml`, no ejecuta `uv init`
- La configuración MCP se guarda en `.claude/settings.local.json` del proyecto - La configuración MCP se guarda en `.claude/settings.local.json` del proyecto
- El servidor MCP permite a Claude crear, editar y ejecutar celdas de notebooks