fayna-rag-mcp
Officialfayna-rag-mcp — base de conocimiento local con RAG y MCP
Desarrollado por Fayna Digital Autor: Volodymyr Shevchenko
Problema: el equipo acumula documentación (políticas, manuales, notas) en archivos y pierde rápidamente el acceso a ella en lenguaje natural — la búsqueda por nombre de archivo o Ctrl+F no escala, y enviar documentos internos a un servicio LLM en la nube no siempre es aceptable por privacidad.
Solución: un pipeline RAG local (FAISS + embeddings multilingües) sobre un LLM local (Ollama) — y ese mismo buscador/Q&A expuesto como servidor MCP, para que pueda usarlo cualquier cliente MCP (Claude Desktop/Code, etc.) o un flujo de trabajo externo automatizado mediante rutas REST simples. Ningún dato sale de la máquina donde se ejecuta.
Resultado: cinco herramientas MCP y cuatro rutas REST para búsqueda semántica, Q&A RAG con fuentes, lectura de documentos y catalogación offline — listas para conectar a Claude o n8n en minutos, sin dependencias en la nube.
Capacidades
Herramienta (MCP) | Propósito |
| lectura del archivo completo desde la base (con protección contra path-traversal dentro de |
| lista de todos los documentos ( |
| búsqueda semántica FAISS → fragmentos más relevantes |
| respuesta RAG: recuperación FAISS + LLM Ollama, con fuentes |
| catálogo de solo lectura de etiquetas de documentos (tema/tipo/idioma/audiencia) |
Ruta REST | Body | Qué hace |
|
| recuperación FAISS → |
|
| respuesta RAG → |
|
| búsqueda exacta de subcadena en |
|
| híbrido: transliteración cirílico↔latino + coincidencia de tokens, selección por semántica |
Related MCP server: Nümtema Private Knowledge MCP
Stack
Python 3.10+ · FAISS (faiss-cpu) · sentence-transformers · tiktoken ·
Ollama · FastMCP · Tesseract/poppler/Whisper para ingesta multi-formato ·
Docker.
Pipeline RAG
docs/ → load (.txt/.md/.pdf/.docx) → chunk (tiktoken) → embed (mpnet) → FAISS → retrieve → Ollama → answer + sourcesFragmentación — por tokens
tiktoken(cl100k_base), no por caracteres. Por defectoCHUNK_SIZE=700tokens,CHUNK_OVERLAP=100tokens.Embeddings:
paraphrase-multilingual-mpnet-base-v2— modelo multilingüe (UA/PL/EN/RU y otros), para que la búsqueda funcione independientemente del idioma de la consulta.LLM: cualquier modelo de Ollama, por defecto
qwen2.5:7b.Índice: FAISS
IndexFlatIP(similitud coseno),TOP_K=5.
Inicio rápido
pip install -r src/requirements.txt
# Przykład: demo-korpus na kilka dokumentów (sample-docs/)
export DOCUMENTS_DIR=./sample-docs
python -m src.main build-index # → src/index/index.faiss + chunks.pkl
# Interaktywne Q&A (CLI)
python -m src.main
# Serwer MCP (transport z env MCP_TRANSPORT: stdio|http)
python -m src.mcp.serverPruebas:
pip install -r tests/requirements-dev.txt
pytest -qDocker
docker compose up -dLos valores por defecto en docker-compose.yml/Dockerfile están diseñados para Ollama
ejecutándose en el host (a través de host.docker.internal); ajusta OLLAMA_URL a
tu propia red (dirección bridge en Linux, contenedor Ollama separado, etc.).
Configuración (src/config.py, todo mediante env)
Env | Por defecto | Descripción |
|
| raíz de la base de conocimiento |
|
| modelo de embeddings |
|
| LLM para respuestas RAG |
|
| endpoint de Ollama |
|
| tokens ( |
|
| cuántos fragmentos devuelve la recuperación |
|
|
|
|
| dirección con |
Conexión a un cliente MCP (p. ej. Claude Code) — mediante su configuración de servidores MCP,
con el comando python -m src.mcp.server (stdio) o la URL del contenedor (http).
Estructura
src/
├── config.py # wszystkie env-zmienne + domyślne
├── main.py # CLI: build-index | interaktywne Q&A
├── assistant.py # CompanyKBAssistant (LLM decyduje czy wołać MCP-toolki)
├── catalog.py # offline-klasyfikacja dokumentów przez Ollama → JSON+HTML
├── ingest.py # multi-formatowy ingest: OCR skanów, vision-opis diagramów, Whisper-transkrypcja
├── rag/
│ ├── ingest.py # load_document (.txt/.md/.pdf/.docx)
│ ├── chunk.py # chunk_text (tiktoken cl100k_base, overlap)
│ ├── embed.py # embed_chunks (sentence-transformers)
│ ├── build_index.py # build_index → FAISS + pickle
│ └── query.py # retrieve / build_prompt / ask
└── mcp/
├── server.py # FastMCP: 5 MCP-toolków + 4 trasy REST
└── client.py # MCPClient (JSON-RPC przez subprocess)Ingesta multi-formato (OCR de escaneos con Tesseract, descripción de dibujos/esquemas con modelo de visión, transcripción de audio/vídeo con Whisper) — una ruta separada, más pesada en dependencias, innecesaria para el corpus de texto básico anterior.
Licencia
MIT — ver LICENSE. © Fayna Digital.
This server cannot be deployed
Maintenance
Related MCP Connectors
Cloud or self-hosted knowledge for AI agents: hybrid search, reranking, GraphRAG, scoped MCP tools.
Personal knowledge base MCP server with semantic search, auto-categorization, metadata extraction
Make your knowledge agent-ready. One MCP endpoint, 5 connectors, 3 search modes.
The knowledge base your AI reads and writes, under your rules — over MCP, EU-hosted.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA knowledge base MCP server backed by Qdrant vector database with local embeddings for semantic search and document management.4 npm1ISC
- FlicenseNot gradedqualityDmaintenanceEnables users to build and query a private knowledge base by uploading documents, which are embedded and stored locally, then accessible via MCP for semantic search and retrieval.-
- FlicenseNot gradedqualityDmaintenanceEnables local document question-answering and retrieval via MCP, supporting multi-turn conversation, intent recognition, and tools for document search, Q&A, and summarization.5-
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to manage, upload, chunk, and semantically search local documents through MCP tools and a REST API, with a built-in web dashboard and optional Gemini-powered AI search.1-