mattermost-dl
Локальная выгрузка истории Mattermost в JSON и поиск по ней (SQLite FTS и MCP).
mattermost-dl.py— скачивает каналы вresults/YYYYMMDD/mm_index.py— индексирует выгрузки вmattermost_index.sqlitemm_search.py— поиск из командной строкиmm_search_mcp.py— тот же поиск как MCP-серверrenew.sh— инкрементальная выгрузка команд и обновление индекса
config.json, cookies.pkl, results/ и база индекса в git не попадают.
Быстрый старт
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) и логин. Пароль в файл не пишется.
Первый запуск интерактивный: скрипт спросит недостающие поля и сохранит токен.
.venv/bin/python mattermost-dl.py
Дальше выгрузка без вопросов — оба флага обязательны. --channel all берёт все каналы команды, иначе список имён через запятую.
.venv/bin/python mattermost-dl.py --team esr-daily --channel all
После первого успешного прогона в конфиг пишутся incremental, last_export_at и output_base. Следующие запуски дописывают только новые сообщения в ту же папку.
Индекс (для быстрого поиска и вложений):
.venv/bin/python mm_index.py
Поиск:
.venv/bin/python mm_search.py "текст" --user sergey.marinkevich --limit 20
Обновить все настроенные команды и индекс одной командой:
./renew.sh
renew.sh выгружает esr-daily, esr-developers и esr-dev-and-qa, затем вызывает mm_index.py.
Crontab
Каждые 15 минут в рабочие часы будней — выгрузка и инкрементальный индекс. По субботам в 10:15 — полная переиндексация.
*/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.