Minima

RAG local (on-premises) con servidor MCP.

Documentación

MNMA Logo

Minima es un RAG de código abierto en contenedores on-premises, con capacidad de integrarse con ChatGPT y MCP. Minima también puede usarse como un RAG completamente local o con tu propio LLM desplegado.

Minima actualmente soporta cuatro modos:

  1. Instalación aislada (Ollama) – Opera completamente on-premises con contenedores, libre de dependencias externas como ChatGPT o Claude. Todas las redes neuronales (LLM, reranker, embedding) se ejecutan en tu nube o PC, asegurando que tus datos permanezcan seguros.

  2. LLM personalizado (API compatible con OpenAI) – Usa tu propio LLM desplegado con API compatible con OpenAI (vLLM, servidor Ollama, TGI, etc.). El indexador se ejecuta localmente mientras que el LLM puede estar en tu servidor, nube o máquina local. No se necesita despliegue de Ollama, uso más ligero de recursos y control total sobre tu infraestructura de LLM.

  3. GPT personalizado – Consulta tus documentos locales usando la aplicación o web de ChatGPT con GPTs personalizados. El indexador se ejecuta en tu nube o PC local, mientras que el LLM principal sigue siendo ChatGPT.

  4. Anthropic Claude – Usa la aplicación de Anthropic Claude para consultar tus documentos locales. El indexador opera en tu PC local, mientras que Anthropic Claude sirve como LLM principal.


Ejecución como Contenedores

Inicio rápido con run.sh

La forma más fácil de iniciar Minima es usando el script run.sh:

./run.sh

Verás las siguientes opciones:

Select an option:
1) Fully Local Setup (Ollama)
2) Custom LLM (OpenAI-compatible API)
3) ChatGPT Integration
4) MCP usage
5) Quit

Comandos manuales de Docker Compose

  1. Crea un archivo .env en el directorio raíz del proyecto (donde encontrarás .env.sample). Coloca .env en la misma carpeta y copia todas las variables de entorno de .env.sample a .env.

  2. Asegúrate de que tu archivo .env incluya las siguientes variables:

  • LOCAL_FILES_PATH
  • EMBEDDING_MODEL_ID
  • EMBEDDING_SIZE
  • OLLAMA_MODEL (solo para modo Ollama)
  • RERANKER_MODEL (solo para modo Ollama)
  • LLM_BASE_URL (solo para modo LLM personalizado)
  • LLM_MODEL (solo para modo LLM personalizado)
  • LLM_API_KEY (opcional para modo LLM personalizado)
  • USER_ID
  • - requerido para integración con ChatGPT, solo usa tu correo electrónico
  • PASSWORD
  • - requerido para integración con ChatGPT, solo usa cualquier contraseña
  1. Para instalación completamente local usa: docker compose -f docker-compose-ollama.yml --env-file .env up --build.

  2. Para despliegue con LLM personalizado (API compatible con OpenAI) usa: docker compose -f docker-compose-custom-llm.yml --env-file .env up --build.

  3. Para instalación con ChatGPT habilitado usa: docker compose -f docker-compose-chatgpt.yml --env-file .env up --build.

  4. Para integración con MCP (uso de la aplicación de escritorio de Anthropic): docker compose -f docker-compose-mcp.yml --env-file .env up --build.

  5. En caso de instalación con ChatGPT habilitado, copia el OTP desde la terminal donde iniciaste docker y usa Minima GPT

  6. Si usas Anthropic Claude, solo agrega lo siguiente a /Library/Application\ Support/Claude/claude_desktop_config.json

{
    "mcpServers": {
      "minima": {
        "command": "uv",
        "args": [
          "--directory",
          "/path_to_cloned_minima_project/mcp-server",
          "run",
          "minima"
        ]
      }
    }
  }
  1. Para usar la instalación completamente local, ve a cd electron, luego ejecuta npm install y npm start que lanzarán la aplicación electron de Minima.

  2. Pregunta cualquier cosa, y obtendrás respuestas basadas en los archivos locales en la carpeta {LOCAL_FILES_PATH}.


Variables Explicadas

LOCAL_FILES_PATH: Especifica la carpeta raíz para indexar (en tu nube o PC local). La indexación es un proceso recursivo, lo que significa que todos los documentos dentro de subcarpetas de esta carpeta raíz también serán indexados. Tipos de archivo soportados: .pdf, .xls, .docx, .txt, .md, .csv.

EMBEDDING_MODEL_ID: Especifica el modelo de embedding a usar. Actualmente, solo se soportan modelos Sentence Transformer. Se ha probado con sentence-transformers/all-mpnet-base-v2, pero se pueden usar otros modelos Sentence Transformer.

EMBEDDING_SIZE: Define la dimensión del embedding proporcionada por el modelo, que se necesita para configurar el almacenamiento vectorial de Qdrant. Asegúrate de que este valor coincida con el tamaño real del embedding del EMBEDDING_MODEL_ID especificado.

OLLAMA_MODEL: Configura el modelo de Ollama, usa un ID disponible en el sitio de Ollama. Por favor, usa aquí el modelo LLM, no un embedding. Esto solo se requiere cuando se usa Ollama (no es necesario cuando se usa un LLM personalizado).

LLM_BASE_URL: (Opcional) URL base para tu endpoint de API de LLM personalizado compatible con OpenAI. Cuando esto está configurado, Ollama no se usará y no necesitas desplegarlo.

LLM_MODEL: (Opcional) Nombre del modelo para tu LLM personalizado. Requerido cuando LLM_BASE_URL está configurado.

LLM_API_KEY: (Opcional) Clave API para tu LLM personalizado. Si tu LLM no requiere autenticación, puedes omitirla o configurarla con cualquier valor.

RERANKER_MODEL: Especifica el modelo de reranker para el modo Ollama. Actualmente, hemos probado con rerankers de BAAI. Puedes explorar todos los rerankers disponibles usando este enlace. Nota: Esto NO es requerido para el modo LLM personalizado - el modelo de reranker no se descargará si estás usando LLM_BASE_URL.

USER_ID: Solo usa tu correo electrónico aquí, esto es necesario para autenticar el GPT personalizado para buscar en tus datos.

PASSWORD: Pon cualquier contraseña aquí, esto se usa para crear una cuenta de firebase para el correo electrónico especificado arriba.


Ejemplos

Ejemplo de archivo .env para uso on-premises/local con Ollama:

LOCAL_FILES_PATH=/Users/davidmayboroda/Downloads/PDFs/
EMBEDDING_MODEL_ID=sentence-transformers/all-mpnet-base-v2
EMBEDDING_SIZE=768
OLLAMA_MODEL=qwen2:0.5b # must be LLM model id from Ollama models page
RERANKER_MODEL=BAAI/bge-reranker-base # please, choose any BAAI reranker model

Ejemplo de archivo .env para despliegue con LLM personalizado (API compatible con OpenAI):

LOCAL_FILES_PATH=/Users/davidmayboroda/Downloads/PDFs/
EMBEDDING_MODEL_ID=sentence-transformers/all-mpnet-base-v2
EMBEDDING_SIZE=768
LLM_BASE_URL=http://your-llm-address:port/v1 # Your custom LLM endpoint
LLM_MODEL=Qwen/Qwen-1.7B # Your model name
LLM_API_KEY=not-needed # Optional: API key if required

# NOTE: OLLAMA_MODEL and RERANKER_MODEL are NOT needed for custom LLM mode
# The Docker build will skip reranker download automatically

Importante: Cuando se usa el modo LLM personalizado, NO necesitas configurar las variables OLLAMA_MODEL o RERANKER_MODEL. El flujo de trabajo con LLM personalizado usa recuperación directa sin reranking para mejor rendimiento. El Dockerfile omitirá automáticamente la descarga del modelo de reranker durante la compilación.

Para usar una interfaz de chat, navega a http://localhost:3000

El modo LLM personalizado usa un flujo de trabajo diferente comparado con Ollama:

Flujo de trabajo Ollama:

  1. Consulta del usuario → Mejora de consulta (llamada al LLM)
  2. Recuperación de documentos con reranking (HuggingFace CrossEncoder)
  3. Generación de respuesta (llamada al LLM)

Flujo de trabajo LLM personalizado:

  1. Consulta del usuario → El LLM decide si se necesita búsqueda de documentos (llamada a función)
  2. Si es necesario: Búsqueda vectorial directa (sin reranking)
  3. El LLM genera respuesta con o sin contexto recuperado

Servidores LLM compatibles:

  • vLLM - Servidor de inferencia de alto rendimiento (http://your-server:8000/v1)
  • Text Generation Inference (TGI) - Servidor de inferencia de Hugging Face
  • Servidor Ollama - Ollama ejecutándose en modo API
  • LiteLLM - Proxy para múltiples proveedores de LLM
  • LocalAI - Inferencia local compatible con OpenAI
  • API de OpenAI - Usa directamente la API de OpenAI
  • Cualquier endpoint compatible con OpenAI

Esto usará automáticamente docker-compose-custom-llm.yml que despliega solo los servicios necesarios (sin contenedor de Ollama).

Ejemplo de archivo .env para la aplicación de Claude:

LOCAL_FILES_PATH=/Users/davidmayboroda/Downloads/PDFs/
EMBEDDING_MODEL_ID=sentence-transformers/all-mpnet-base-v2
EMBEDDING_SIZE=768

Para la aplicación de Claude, aplica los cambios al archivo claude_desktop_config.json como se indicó anteriormente.

Para usar MCP con GitHub Copilot:

  1. Crea un archivo .env en el directorio raíz del proyecto (donde encontrarás env.sample). Coloca .env en la misma carpeta y copia todas las variables de entorno de env.sample a .env.

  2. Asegúrate de que tu archivo .env incluya las siguientes variables:

    • LOCAL_FILES_PATH
    • EMBEDDING_MODEL_ID
    • EMBEDDING_SIZE
  3. Crea o actualiza el .vscode/mcp.json con la siguiente configuración:

{
  "servers": {
    "minima": {
      "type": "stdio",
      "command": "path_to_cloned_minima_project/run_in_copilot.sh",
      "args": [
        "path_to_cloned_minima_project"
      ]
    }
  }
}

Ejemplo de archivo .env para uso con GPT personalizado de ChatGPT:

LOCAL_FILES_PATH=/Users/davidmayboroda/Downloads/PDFs/
EMBEDDING_MODEL_ID=sentence-transformers/all-mpnet-base-v2
EMBEDDING_SIZE=768
USER_ID=user@gmail.com # your real email
PASSWORD=password # you can create here password that you want

También, puedes ejecutar minima usando run.sh.


Para uso con MCP, asegúrate de que el python de tu máquina local sea >=3.10 y que 'uv' esté instalado.

Minima (https://github.com/dmayboroda/minima) está licenciado bajo la Licencia Pública de Mozilla v2.0 (MPLv2).