Files
Сергей Маринкевич eb2c9bab19 Add README with quick start and crontab example.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-01 11:55:13 +07:00

4.1 KiB
Raw Permalink Blame History

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 не попадают.

Быстрый старт

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.