# mattermost-dl Локальная выгрузка истории Mattermost в JSON и поиск по ней (SQLite FTS и MCP). - `mattermost-dl.py` — скачивает каналы в `results/YYYYMMDD/` - `mm_index.py` — индексирует выгрузки в `mattermost_index.sqlite` - `mm_search.py` — поиск из командной строки - `mm_search_mcp.py` — тот же поиск как MCP-сервер - `renew.sh` — инкрементальная выгрузка команд и обновление индекса `config.json`, `cookies.pkl`, `results/` и база индекса в git не попадают. ## Быстрый старт ```bash cd /home/grayhook/Documents/mattermost-dl python3 -m venv .venv .venv/bin/pip install mattermostdriver requests beautifulsoup4 fastmcp cp config.json.example config.json ``` В `config.json` укажите хост Mattermost (без `https://`), `login_mode` (`gitlab`, `token` или `password`) и логин. Пароль в файл не пишется. Первый запуск интерактивный: скрипт спросит недостающие поля и сохранит токен. ```bash .venv/bin/python mattermost-dl.py ``` Дальше выгрузка без вопросов — оба флага обязательны. `--channel all` берёт все каналы команды, иначе список имён через запятую. ```bash .venv/bin/python mattermost-dl.py --team esr-daily --channel all ``` После первого успешного прогона в конфиг пишутся `incremental`, `last_export_at` и `output_base`. Следующие запуски дописывают только новые сообщения в ту же папку. Индекс (для быстрого поиска и вложений): ```bash .venv/bin/python mm_index.py ``` Поиск: ```bash .venv/bin/python mm_search.py "текст" --user sergey.marinkevich --limit 20 ``` Обновить все настроенные команды и индекс одной командой: ```bash ./renew.sh ``` `renew.sh` выгружает `esr-daily`, `esr-developers` и `esr-dev-and-qa`, затем вызывает `mm_index.py`. ## Crontab Каждые 15 минут в рабочие часы будней — выгрузка и инкрементальный индекс. По субботам в 10:15 — полная переиндексация. ```cron */15 8-22 * * 1-5 cd /home/grayhook/Documents/mattermost-dl && /usr/bin/bash renew.sh >> /tmp/mattermost-dl.log 2>&1 15 10 * * 6 cd /home/grayhook/Documents/mattermost-dl && ./.venv/bin/python3 mm_index.py --reindex-all >> /tmp/mattermost-dl-weekly.log 2>&1 ``` ## Поиск | Задача | Команда | |---|---| | Текст сообщения | `mm_search.py "запрос"` | | Пользователь, канал, команда | `--user`, `--channel`, `--team` | | Даты | `--after 2026-01-01 --before 2026-02-01` | | Имя вложения | `--file-name` (нужен индекс) | | Текст внутри вложения | `--file-content` (нужен индекс, только UTF-8) | | Каталог пользователей | `--resolve-user "Фамилия"` / `--search-users "запрос"` | Корень выгрузки по умолчанию `results`, база — `mattermost_index.sqlite`. Переопределение: `-r` / `--root` и `--db`. Полный проход без кэша файлов: `mm_index.py --reindex-all`. ## MCP `mm_search_mcp.py` по умолчанию работает через stdio. Общий HTTP-процесс: `MM_MCP_TRANSPORT=http`, хост и порт — `MM_MCP_HOST` / `MM_MCP_PORT` (по умолчанию `127.0.0.1` и `8766`), путь — `MM_MCP_PATH` (`/mcp`). Пример юнита — `mm-search-mcp.service`. Переменные поиска: `MM_SEARCH_ROOT` (по умолчанию `results`), `MM_SEARCH_DB` (`mattermost_index.sqlite`), `MM_CONFIG_PATH` (`config.json`). Подробности инструментов — в `mattermost-search/SKILL.md`.