ITIS Navigator MCP Server
ИТИС Навигатор
Локальный помощник по документам ИТИС КФУ на Python с RAG, Qwen3:4b и настоящим MCP-сервером. Документы индексируются локально, а ответы проверяются по JSON-схеме и сопровождаются ссылками на найденные фрагменты. Проект не является официальным сервисом КФУ.
Требования
Windows 11, Python 3.12 или 3.13; код поддерживает Python >=3.11.
Git для клонирования.
Ollama для Windows и модель
qwen3:4b.Интернет для первой установки Python-пакетов, скачивания моделей и получения документов. После загрузки поиск и Qwen работают локально; расписание требует сети.
NVIDIA GPU не обязательна. Эмбеддинги работают на CPU. Генерация Qwen на CPU может быть заметно медленнее; скорость зависит от памяти, процессора и ускорителя. Оставьте несколько гигабайт диска для Python-зависимостей и эмбеддингов, отдельно — для Qwen.
Основной RAG не требует Docker, Node.js, Google API, GitHub-токена или ключей OpenRouter/Gemini. Node.js >=22.13 и npm нужны только для необязательного расписания.
Related MCP server: university_rules_mcp_server
Установка
Команды выполняются в PowerShell. Активация окружения, права администратора и изменение глобальной ExecutionPolicy не нужны.
Склонируйте репозиторий и перейдите в него:
git clone https://github.com/AveryanovKirill/itis-navigator-rag.git cd itis-navigator-ragСоздайте своё окружение и установите зависимости. Если установлен Python 3.13, замените
-3.12на-3.13:py -3.12 -m venv .venv .\.venv\Scripts\python.exe -m pip install --cache-dir .cache/pip -r requirements-lock.txt .\.venv\Scripts\python.exe -m pip check Copy-Item .env.example .env $env:PYTHONIOENCODING = 'utf-8'Не перезаписывайте существующую
.env.requirements-lock.txtфиксирует версии зависимостей;requirements.txtсодержит допустимые диапазоны.Установите и запустите Ollama, затем загрузите Qwen:
ollama pull qwen3:4bЭто загрузка модели на вашем компьютере, а не обращение к облачной генерации. Если фоновая Ollama не запущена, откройте приложение или
ollama serveв отдельном окне.Подготовьте документы. Полные копии материалов КФУ и готовый индекс с ними не распространяются в репозитории. Адреса, ограничения и ручной способ описаны в SOURCES.md. Для получения официальных текстов в пустую
docs/:.\.venv\Scripts\python.exe -m src.bootstrap --fetch-officialПервая загрузка эмбеддингов требует доступа к Hugging Face;
HF_HUB_OFFLINE=1на этом этапе не нужен. Импорт не обходит ограничения сайта. Если сайт недоступен, сохраните разрешённые UTF-8.txt/.mdвdocs/, заполнитеdata/sources.jsonпоdata/sources.example.jsonи выполните:.\.venv\Scripts\python.exe -m src.bootstrapСоздаются chunks и NumPy-индекс. Уже готовый совместимый индекс проверяется без перестроения. Для намеренного обновления корпуса вашей копии используйте
--rebuild-index. Стартовый THRESHOLD из.env.exampleтребует проверки на новых данных.Проверьте Ollama и наличие модели без генерации:
.\.venv\Scripts\python.exe -m src.cli doctor
Альтернатива шагам установки Python-зависимостей и индекса — ./setup.ps1 -FetchOfficial.
Он создаёт .venv, устанавливает зависимости, создаёт .env, получает тексты при пустой
docs/, загружает эмбеддинги и готовит отсутствующий индекс. Ollama устанавливается
отдельно, Qwen загружается командой выше. Скрипт не меняет глобальные настройки Windows.
Если политика PowerShell запрещает локальные .ps1, используйте пошаговые команды Python;
обход или изменение политики не требуется.
Запуск
В .env по умолчанию LLM_PROVIDER=ollama, адрес — OLLAMA_BASE_URL=http://127.0.0.1:11434.
Модель зафиксирована как qwen3:4b. На медленном CPU можно увеличить
OLLAMA_TIMEOUT_SECONDS; ускорение от этого не появляется. API-ключи для этих команд не нужны.
# Проверка сервера и наличия Qwen, без генерации
.\.venv\Scripts\python.exe -m src.cli doctor
# Настоящий поиск по сохранённому индексу, без LLM
.\.venv\Scripts\python.exe -m src.cli search 'К какому заместителю директора ИТИС обращаться по академическим стипендиям?'
# Одинаковый вопрос без документов и с RAG
.\.venv\Scripts\python.exe -m src.cli ask v1 'К какому заместителю директора ИТИС обращаться по академическим стипендиям?'
.\.venv\Scripts\python.exe -m src.cli ask v2 'К какому заместителю директора ИТИС обращаться по академическим стипендиям?'
# initialize/list_tools/call_tool настоящего MCP по stdio, без LLM
.\.venv\Scripts\python.exe -m src.cli mcp-check 'К какому заместителю директора ИТИС обращаться по академическим стипендиям?'
# Тесты алгоритмов, схем и MCP; модель для unit-тестов не нужна
.\.venv\Scripts\python.exe -m pytest -qПо желанию используйте оболочку: ./run.ps1 doctor или ./run.ps1 --help.
v1 намеренно не получает документы и может отказаться отвечать; v2 использует
MCP-поиск. Наличие номера источника ещё не доказывает правильность каждого утверждения.
Актуальность сохранённых правил проверяйте по официальному источнику и области применения.
Для необязательного расписания выполните ./scripts/setup_schedule.ps1, затем
python -m src.cli schedule 11-307 понедельник через Python из .venv.
Без этой настройки основной RAG продолжает работать. Источник и ограничения
расписания описаны в SOURCES.md; точное «завтра» не гарантируется без проверки условий.
Структура проекта
src/ эмбеддинги, нарезка, индекс, поиск, MCP, Qwen, схемы и CLI
prompts/ системные инструкции
scripts/ настройка необязательного инструмента расписания
docs/ локальные разрешённые UTF-8 документы; изначально пусто
index/ локально создаваемые chunks, векторы и метаданные
data/ локальные сведения об источниках и исходные загрузки
eval/ место для собственных вопросов и эталонов
reports/ локальные результаты команд; не публикуются
tests/ алгоритмы, схемы, API и реальное MCP-соединение
setup.ps1 первый запуск и подготовка отсутствующего индекса
run.ps1 оболочка основного CLIДокументы, индекс, кэши и результаты команд исключены из Git. Вымышленные данные
в tests/fixtures/demo/ предназначены только для тестов и не становятся правилами КФУ.
Как работает система
Вопрос пользователя → MCP search_docs → эмбеддинг вопроса → векторный поиск NumPy →
до трёх фрагментов → Qwen3:4b → проверка JSON Pydantic → ответ с источниками.
Поиск выполняется внутри MCP-инструмента, клиент соединяется с отдельным процессом
через stdio официального Python SDK MCP. Для ручного запуска сервера: python -m src.mcp_server
из .venv; он ожидает MCP-сообщения, это не интерактивный чат.
Документы сначала нарезаются по 800 символов с перекрытием 150. Одна и та же
intfloat/multilingual-e5-small кодирует документы и вопросы в 384-мерные векторы.
Векторы нормализованы; скалярное произведение даёт косинусное сходство. Индекс хранится
на диске. Qwen не обучается заново: найденный текст добавляется в контекст запроса.
Данные документов не должны переопределять системные инструкции.
Частые проблемы
Ollama не запущена: откройте приложение, проверьте адрес в
.env, выполнитеdoctor.Qwen не скачана: выполните
ollama pull qwen3:4b. Проект не выбирает другую модель автоматически.Не найдены Python-модули: используйте именно
.venv/Scripts/python.exeи повторите установку зависимостей.Не скачались эмбеддинги: проверьте доступ к Hugging Face; уберите
HF_HUB_OFFLINE=1для первой загрузки и выполнитеpython -m src.bootstrap --download-embeddings-onlyиз.venv.Нет индекса: добавьте документы и выполните
python -m src.bootstrap. После осознанного изменения корпуса или модели индекса используйте--rebuild-indexв своей копии.Медленно без GPU: это допустимый режим. Закройте лишние приложения, дождитесь первой загрузки Qwen и при необходимости увеличьте timeout. Одинаковая скорость на разных ПК не обещается.
This server cannot be deployed
Maintenance
Related MCP Connectors
Query your own PDFs and documents from any MCP client. Every answer cites the page it came from.
Query any docs site via MCP. Submit a URL, ask questions, get cited answers.
Read-only search over the public Sikaru documentation: managed agents, inference, evals and traces.
11Make your knowledge agent-ready. One MCP endpoint, 5 connectors, 3 search modes.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI tools to securely search and retrieve relevant, source-attributed chunks from private local documents via MCP, without sending document content to third-party services.2MIT
- FlicenseNot gradedqualityCmaintenanceEnables agents to search university rules via hybrid retrieval and reranking, returning the top three relevant source clauses for downstream use.2-
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to search technical document collections using hybrid BM25 and embedding retrieval, returning cited page-level passages to support grounded, evidence-based answers.MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to ask questions over the indexed document corpus and search handbook passages, returning cited answers and ranked results.MIT