fayna-rag-mcp
Officialfayna-rag-mcp — локальная база знаний с RAG и MCP
Разработано Fayna Digital Автор: Volodymyr Shevchenko
Проблема: команда накапливает документацию (политики, руководства, заметки) в файлах и быстро теряет доступ к ней на естественном языке — поиск по названию файла или Ctrl+F не масштабируется, а отправка внутренних документов в облачный LLM-сервис не всегда приемлема с точки зрения конфиденциальности.
Решение: локальный пайплайн RAG (FAISS + мультиязычные эмбеддинги) на базе локального LLM (Ollama) — а тот же поисковик/Q&A предоставляется как сервер MCP, чтобы им мог воспользоваться любой MCP-клиент (Claude Desktop/Code и т. п.) или внешний автоматизированный workflow через простые REST-маршруты. Никакие данные не покидают машину, на которой это работает.
Результат: пять инструментов MCP и четыре REST-маршрута для семантического поиска, RAG Q&A с источниками, чтения документов и офлайн-каталогизации — готовые к подключению к Claude или n8n за несколько минут, без облачных зависимостей.
Возможности
Инструмент (MCP) | Назначение |
| чтение полного файла из базы (с защитой от path-traversal в пределах |
| список всех документов ( |
| семантический поиск FAISS → топ-релевантные чанки |
| ответ RAG: FAISS-retrieve + Ollama LLM, с источниками |
| read-only каталог тегов документов (тема/тип/язык/аудитория) |
REST-маршрут | Body | Что делает |
|
| FAISS-поиск → |
|
| ответ RAG → |
|
| точный поиск подстроки по |
|
| гибрид: транслитерация кириллица↔латиница + token-match, отбор по семантике |
Related MCP server: Nümtema Private Knowledge MCP
Стек
Python 3.10+ · FAISS (faiss-cpu) · sentence-transformers · tiktoken ·
Ollama · FastMCP · Tesseract/poppler/Whisper для мультиформатного ингеста ·
Docker.
Пайплайн RAG
docs/ → load (.txt/.md/.pdf/.docx) → chunk (tiktoken) → embed (mpnet) → FAISS → retrieve → Ollama → answer + sourcesЧанкинг — по токенам
tiktoken(cl100k_base), не по символам. По умолчаниюCHUNK_SIZE=700токенов,CHUNK_OVERLAP=100токенов.Эмбеддинги:
paraphrase-multilingual-mpnet-base-v2— мультиязычная модель (UA/PL/EN/RU и другие), чтобы поиск работал независимо от языка запроса.LLM: любая модель Ollama, по умолчанию
qwen2.5:7b.Индекс: FAISS
IndexFlatIP(косинусная близость),TOP_K=5.
Быстрый старт
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.serverТесты:
pip install -r tests/requirements-dev.txt
pytest -qDocker
docker compose up -dЗначения по умолчанию в docker-compose.yml/Dockerfile рассчитаны на Ollama,
работающую на хосте (через host.docker.internal); настройте OLLAMA_URL под
свою сеть (bridge-адрес на Linux, отдельный контейнер Ollama и т.п.).
Конфигурация (src/config.py, всё через env)
Env | По умолчанию | Описание |
|
| корень базы знаний |
|
| модель эмбеддингов |
|
| LLM для ответов RAG |
|
| конечная точка Ollama |
|
| токены ( |
|
| сколько чанков возвращает retrieve |
|
|
|
|
| адрес при |
Подключение к MCP-клиенту (например, Claude Desktop) — через его конфигурацию MCP-серверов,
командой python -m src.mcp.server (stdio) или URL контейнера (http).
Структура
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)Мультиформатный ингест (OCR сканов через Tesseract, описание рисунков/схем через vision-модель, транскрипция аудио/видео через Whisper) — отдельный, более тяжёлый по зависимостям путь, который не требуется для базового текстового корпуса выше.
Лицензия
MIT — см. 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-