Servidor RAG Personal con MCP
About
A server for Retrieval Augmented Generation (RAG), providing AI clients access to a private knowledge base built from user documents.
Details
- Author
- caagudelo
- Categories
- Database, Knowledge Base, Other
Jump to
Setup
Install Servidor RAG Personal con MCP in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/caagudelo/MCP_RAG
Follow the installation instructions in the repository README, then restart your MCP client.
A server for Retrieval Augmented Generation (RAG), providing AI clients access to a private knowledge base built from user documents.
Este proyecto implementa un servidor compatible con el Protocolo de Contexto de Modelo (MCP) que dota a los clientes de IA (como Cursor, Claude for Desktop, etc.) de una capacidad de Recuperación Aumentada por Generación (RAG). Permite al modelo de lenguaje acceder a una base de conocimiento privada y local, alimentada por tus propios textos y documentos.
- Memoria Persistente para tu IA:"Enseña" a tu IA nueva información que recordará entre sesiones.
- 🆕 Interfaz Gráfica de Usuario (GUI):Una aplicación de escritorio intuitiva con sistema de scripts organizados para facilitar la instalación y ejecución.
- 🚀 Procesamiento Avanzado de Documentos:Alimenta la base de conocimiento conmás de 25 formatos de archivoincluyendo PDF, DOCX, PPTX, XLSX, imágenes (con OCR), correos electrónicos, y más.
- 🧠 Procesamiento Inteligente con Unstructured:Sistema de procesamiento de documentos de nivel empresarial que preserva la estructura semántica, elimina ruido automáticamente y maneja formatos complejos.
- 🔄 Sistema de Fallbacks Robusto:Múltiples estrategias de procesamiento garantizan que cualquier documento sea procesado exitosamente.
- 📊 Metadatos Estructurales:Información detallada sobre la estructura del documento (títulos, tablas, listas) para mejor rastreabilidad.
- 🔍 Búsquedas Avanzadas con Filtros:Sistema de filtrado por metadatos para búsquedas más precisas y relevantes.
- 📈 Estadísticas de Base de Conocimientos:Información detallada sobre el contenido almacenado y su estructura.
- LLM Local y Privado:Utiliza modelos de lenguaje locales a través deOllama(ej. Llama 3, Mistral), asegurando que tus datos y preguntas nunca salgan de tu máquina.
- 100% Local y Offline:Tanto el modelo de lenguaje como los embeddings se ejecutan en tu máquina. Ningún dato sale a internet. Una vez descargados los modelos, funciona sin conexión.
- Ingesta Masiva:Scripts dedicados para procesar directorios enteros de documentos y construir la base de conocimiento de manera eficiente.
- Arquitectura Modular:La lógica del RAG está separada de los scripts de servidor y de ingesta, facilitando el mantenimiento y la expansión.
- Copias en Markdown:Cada documento procesado se guarda automáticamente en formato Markdown para verificación y reutilización.
- 🆕 Metadatos de Fuente:Rastreabilidad completa de información con atribución de fuentes en cada respuesta.
- 🆕 Optimizado para Agentes de IA:Descripciones detalladas y manejo de errores inteligente para uso efectivo por agentes de IA.
- 🆕 Sistema de Scripts Organizado:Estructura modular de scripts que separa instalación, ejecución y diagnóstico.
El proyecto está organizado en una estructura modular que separa claramente los componentes del servidor MCP y la interfaz gráfica de usuario (GUI). Esta organización facilita el mantenimiento, desarrollo y uso independiente de cada componente.
MCP_RAG/ ├── 📁 mcp_server_organized/ # Servidor MCP principal │ ├── 📄 server.py # Servidor MCP con herramientas RAG │ ├── 📄 run_server_organized.bat # Script para ejecutar el servidor │ ├── 📁 src/ # Código fuente del servidor │ │ ├── 📄 rag_core.py # Lógica principal del RAG │ │ ├── 📄 rag_server_bk.py # Servidor MCP (backup) │ │ ├── 📁 models/ # Modelos de datos │ │ ├── 📁 services/ # Servicios del servidor │ │ ├── 📁 tools/ # Herramientas MCP │ │ └── 📁 utils/ # Utilidades │ ├── 📁 tests/ # Pruebas del servidor │ ├── 📁 data/ # Datos del servidor │ │ ├── 📁 documents/ # Documentos procesados │ │ └── 📁 vector_store/ # Base de datos vectorial │ └── 📁 embedding_cache/ # Cache de embeddings │ ├── 📁 bulk_ingest_GUI/ # Interfaz gráfica de usuario │ ├── 📄 main.py # Punto de entrada principal │ ├── 📄 launch.py # Lanzador de la aplicación │ ├── 📄 start_app.py # Inicialización de la app │ ├── 📄 rag_core_wrapper.py # Wrapper para rag_core │ ├── 📁 views/ # Vistas de la interfaz │ │ └── 📄 main_view.py # Vista principal │ ├── 📁 controllers/ # Controladores │ │ └── 📄 main_controller.py # Controlador principal │ ├── 📁 services/ # Servicios de la GUI │ │ ├── 📄 document_service.py # Servicio de documentos │ │ └── 📄 configuration_service.py # Servicio de configuración │ ├── 📁 models/ # Modelos de la GUI │ ├── 📁 widgets/ # Widgets personalizados │ ├── 📁 gui_utils/ # Utilidades de la GUI │ ├── 📁 data/ # Datos de la GUI │ │ ├── 📁 documents/ # Documentos procesados │ │ └── 📁 vector_store/ # Base de datos vectorial │ └── 📁 embedding_cache/ # Cache de embeddings │ ├── 📄 start.bat # Script principal de arranque ├── 📄 run_gui.bat # Script para ejecutar la GUI ├── 📄 install_requirements.bat # Instalación de dependencias ├── 📄 requirements.txt # Dependencias del proyecto ├── 📄 README.md # Documentación principal ├── 📄 SCRIPTS_README.md # Guía de scripts ├── 📄 GUI_ADVANCED_README.md # Guía de la GUI para ingesta de documentos masivo └── 📄 AGENT_INSTRUCTIONS.md # Instrucciones para agentes IA
1. Servidor MCP (mcp_server_organized/)
- server.py: Servidor MCP principal que expone las herramientas RAG
- src/rag_core.py: El corazón del sistema RAG con toda la lógica de procesamiento
- src/tools/: Herramientas MCP (learn_text,learn_document,ask_rag, etc.)
- src/services/: Servicios del servidor (configuración, logging, etc.)
- src/models/: Modelos de datos para el servidor
- src/utils/: Utilidades compartidas
2. Interfaz Gráfica (bulk_ingest_GUI/)
- main.py: Punto de entrada principal de la aplicación GUI
- views/main_view.py: Interfaz de usuario principal con pestañas
- controllers/main_controller.py: Lógica de control de la interfaz
- services/document_service.py: Servicio para procesamiento de documentos
- services/configuration_service.py: Gestión de configuración
- widgets/: Componentes personalizados de la interfaz
- gui_utils/: Utilidades específicas de la GUI
- start.bat: Script principal que guía al usuario
- run_gui.bat: Ejecuta directamente la aplicación GUI
- install_requirements.bat: Instalación completa de dependencias
- check_system.bat: Diagnóstico del sistema
- fix_dependencies.bat: Reparación de dependencias
- Ingesta de Documentos: La GUI procesa documentos usandorag_core_wrapper.py
- Almacenamiento: Los documentos se guardan en la base de datos vectorial
- Consulta: El servidor MCP accede a la misma base de datos para responder consultas
- Respuesta: Las herramientas MCP devuelven respuestas con fuentes
- Servidor MCP: Se enfoca en exponer herramientas para clientes de IA
- GUI: Se enfoca en la experiencia de usuario para ingesta de documentos
- RAG Core: Lógica compartida entre ambos componentes
- Scripts: Automatización y gestión del entorno
- ✅ Desarrollo independiente de cada componente
- ✅ Reutilización de código entre servidor y GUI
- ✅ Fácil mantenimiento y debugging
- ✅ Escalabilidad para nuevas características
- ✅ Uso independiente del servidor o la GUI
- AGENT_INSTRUCTIONS.md: Guía completa para agentes de IA sobre cómo usar el sistema
- GUI_ADVANCED_README.md: Guía detallada para la interfaz gráfica para ingesta de documentos masivo
- SCRIPTS_README.md: Guía completa del sistema de scripts organizados
- STORAGE_PROGRESS_README.md: Documentación del sistema de progreso de almacenamiento
- test_enhanced_rag.py: Script de prueba para verificar el funcionamiento del sistema
Sigue estos pasos para poner en marcha el sistema.
- Python 3.10+
- Ollama:Asegúrate de queOllama esté instaladoy en ejecución en tu sistema.
- Tesseract OCR (Opcional):Para procesar imágenes con texto. Descarga desdeGitHubo usachoco install tesseract.
Gracias al sistema de scripts organizados, la instalación es increíblemente sencilla.
- Ejecuta el script principal:start.bat
- Selecciona "1"para instalar dependencias
- Esperaa que termine la instalación automática
- La aplicación se iniciaráautomáticamente
- Instalación completa:install_requirements.bat
- Ejecución:run_gui.bat
- Diagnóstico:check_system.bat
- ✅ Crea un entorno virtual de Python en una carpeta.venv
- ✅ Activa el entorno automáticamente
- ✅ Instala todas las dependencias necesarias desderequirements.txt
- ✅ Detecta automáticamente si tienes GPU NVIDIA y instala PyTorch apropiadamente
- ✅ Instala Unstructured con capacidades avanzadas
- ✅ Lanza la aplicación
En ejecuciones posteriores, el script simplemente activará el entorno y lanzará la aplicación directamente.
2. Instalación Manual de Dependencias (Opcional)
Si prefieres instalar las dependencias manualmente o necesitas capacidades específicas:
# Activar entorno virtual .\.venv\Scripts\activate # Instalación completa de Unstructured con todas las capacidades pip install "unstructured[local-inference,all-docs]" # Dependencias adicionales para mejor rendimiento pip install python-docx openpyxl beautifulsoup4 pytesseract
3. Configuración de Ollama (Paso Crítico)
Ollama es necesario para que el sistema RAG funcione, ya que proporciona el modelo de lenguaje local que genera las respuestas.
- Descarga Ollama desdeollama.com
- Ejecuta el instalador y sigue las instrucciones
- Ollama se ejecutará automáticamente como servicio
curl -fsSL https://ollama.ai/install.sh | sh
# Verificar que Ollama está funcionando ollama --version # Verificar que el servicio está ejecutándose ollama list
El sistema RAG necesita un modelo de lenguaje para generar respuestas. Se utiliza Ollama por ser gratis:
# Modelo recomendado (equilibrio entre velocidad y calidad) ollama pull llama3 # Alternativas más rápidas ollama pull phi3 ollama pull mistral # Alternativa más potente (requiere más recursos) ollama pull llama3.1:8b
Una vez descargado el modelo, asegúrate de querag_core.pyuse el modelo correcto:
# En rag_core.py, línea ~100, verifica que use tu modelo: llm = ChatOllama(model="llama3", temperature=0)
Nota:Si descargaste un modelo diferente, cambia"llama3"por el nombre de tu modelo.
# Probar que el modelo funciona ollama run llama3 "Hola, ¿cómo estás?"
Si ves una respuesta generada, Ollama está funcionando correctamente.
Error: "Ollama is not running"
# Iniciar Ollama manualmente ollama serve
# Verificar modelos disponibles ollama list # Descargar el modelo si no está ollama pull llama3
- Usa un modelo más pequeño:ollama pull phi3
- Cierra otras aplicaciones que consuman mucha RAM
- Considera aumentar la memoria virtual en Windows
Antes de continuar, vamos a verificar que todo esté funcionando correctamente:
# Verificar que Ollama está ejecutándose ollama list # Probar el modelo ollama run llama3 "Test de funcionamiento"
Paso 2: Verificar Dependencias de Python
# Verificar que todas las dependencias están instaladas python -c "import mcp; print('✅ MCP instalado correctamente')" python -c "import langchain; print('✅ LangChain instalado correctamente')" python -c "import chromadb; print('✅ ChromaDB instalado correctamente')" python -c "import unstructured; print('✅ Unstructured instalado correctamente')"
# Ejecutar el script de prueba mejorado python test_enhanced_rag.py
- ✅ Ollama respondiendo a comandos
- ✅ Todas las dependencias importándose sin errores
- ✅ El sistema RAG procesando preguntas y mostrando fuentes
El sistema soportamás de 25 formatos de archivocon procesamiento optimizado:
- PDF(.pdf) - Con procesamiento de alta resolución
- Word(.docx, .doc) - Documentos de Microsoft Word
- PowerPoint(.pptx, .ppt) - Presentaciones
- Excel(.xlsx, .xls) - Hojas de cálculo
- RTF(.rtf) - Formato de texto enriquecido
- ODT(.odt) - Documentos de texto (LibreOffice/OpenOffice)
- ODP(.odp) - Presentaciones (LibreOffice/OpenOffice)
- ODS(.ods) - Hojas de cálculo (LibreOffice/OpenOffice)
- HTML(.html, .htm) - Páginas web
- XML(.xml) - Datos estructurados
- Markdown(.md) - Documentación técnica
- TXT(.txt) - Texto simple
- CSV(.csv) - Datos tabulares
- TSV(.tsv) - Datos tabulares separados por tabulaciones
- JSON(.json) - Datos estructurados
- YAML(.yaml, .yml) - Configuraciones y datos
- PNG(.png) - Imágenes con texto
- JPG/JPEG(.jpg, .jpeg) - Fotografías con texto
- TIFF(.tiff) - Imágenes de alta calidad
- BMP(.bmp) - Imágenes de mapa de bits
- EML(.eml) - Archivos de correo
- MSG(.msg) - Mensajes de Outlook
Uso 1: Poblar la Base de Conocimiento con la GUI (Recomendado)
La forma más fácil e intuitiva de añadir documentos es usando la interfaz gráfica.
- Ejecuta el script principal:start.bat
- Selecciona "1"para ejecutar la aplicación
- La aplicación se iniciará(la primera vez puede tardar mientras instala las dependencias)
- Usa el botón "Explorar..."para seleccionar la carpeta con tus documentos
- Haz clic en "Iniciar Procesamiento". Los archivos se procesarán con el sistema avanzado de Unstructured
- Ve a la pestaña "Revisión", selecciona los archivos que quieres guardar y previsualiza su contenido
- Ve a la pestaña "Almacenamiento"y haz clic en "Iniciar Almacenamiento" para guardar los documentos seleccionados en la base de datos
✨GUI para ingesta de documentos masivo con Previsualización y Selección
Para un control total sobre el proceso de ingesta, hemos añadido unaGUI. Esta versión te permiteprevisualizarel contenido de cada documento procesado yseleccionar manualmentecuáles quieres incluir en la base de conocimiento.
- Procesamiento Inteligente:Usa Unstructured para limpiar ruido y preservar estructura
- Previsualización en Tiempo Real:Ve el contenido procesado antes de almacenar
- Selección Granular:Marca/desmarca documentos individualmente
- Metadatos Estructurales:Información sobre títulos, tablas, listas en cada documento
- Sistema de Fallbacks:Múltiples estrategias garantizan que todo documento se procese
- Sistema de Progreso:Seguimiento detallado del proceso de almacenamiento
➡️Para una guía completa sobre cómo usarla, consulta elGuia de Carga Masiva.
Uso 2: Poblar la Base de Conocimiento desde la Línea de Comandos
Si prefieres usar la línea de comandos o necesitas automatizar la ingesta.
- Abre una terminal
- Activa el entorno virtual:.\.venv\Scripts\activate
- Ejecuta el scriptbulk_ingest.pyapuntando a tu carpeta de documentos:
python bulk_ingest.py --directory "C:\Ruta\A\Tus\Documentos"
Características del Procesamiento Mejorado:
- Detección Automática de Formato:El sistema identifica y optimiza el procesamiento según el tipo de archivo
- Limpieza Inteligente:Elimina automáticamente cabeceras, pies de página y contenido irrelevante
- Preservación de Estructura:Mantiene títulos, listas y tablas organizadas
- Metadatos Enriquecidos:Información detallada sobre la estructura de cada documento
- Logs Detallados:Información completa sobre el proceso de cada archivo
Uso 3: Configuración del Cliente MCP (Ej. Cursor)
Para que tu editor de IA pueda usar el servidor, debes configurarlo.
-
Encuentra el archivo de configuración de servidores MCP de tu editor.Para Cursor, busca un archivo comomcp_servers.jsonen su directorio de configuración (%APPDATA%\cursoren Windows). Si no existe, puedes crearlo.
Añade la siguiente configuración al archivo JSON.
Este método utiliza el script del servidor MCP (run_server_organized.bat) para ejecutar el servidor RAG.
¡IMPORTANTE!Debes reemplazar"D:\\ruta\\completa\\a\\tu\\proyecto\\MCP_RAG"con la ruta absoluta real a la carpeta de este proyecto en tu máquina.
{ "mcpServers": { "rag": { "command": "D:\\ruta\\completa\\a\\tu\\proyecto\\MCP_RAG\\mcp_server_organized\\run_server_organized.bat", "args": [], "workingDirectory": "D:\\ruta\\completa\\a\\tu\\proyecto\\MCP_RAG" } } }
Reinicia tu editor.Al arrancar, debería detectar y lanzar el servidor MCP, que expondrá las herramientas RAG para uso en el chat.
Uso 4: Interactuando con las Herramientas
Una vez configurado, puedes usar las herramientas directamente en el chat de tu editor.
1.learn_text(text, source_name)- Añadir información textual
@rag learn_text("El punto de fusión del titanio es 1,668 °C.", "material_properties")
- Cuándo usar: Para añadir hechos, definiciones, notas de conversación, etc.
- Parámetros:
- text: El contenido a almacenar
- source_name: Nombre descriptivo de la fuente (opcional, por defecto "manual_input")
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





