Files
portal/docs/security/marketing-vet.md
T
Дмитрий 26999ca597 chore: working tree cleanup pre-llm-first-router merge
Три группы накопившихся auto-правок (НЕ ручные):

1. markdownlint --fix auto-format (~25 .md в docs/superpowers/, docs/security/marketing-vet.md, docs/adr/015, docs/deploy/lkomega-runbook): MD031/MD032 (blank lines around fence/list) + MD004 (bullet markers `+`→`-`). Содержательных текстовых правок 3: ADR-015 bullet, sprint5d-cleanup bullet, router-discipline trailing space.

2. lefthook 2.1.6 → 2.1.8 (package.json + lock): patch-bump, авто-резолвил npm.

3. Observer runtime (docs/observer/): episodes-2026-05.jsonl +420 строк (текущая активность мозга), STATUS.md regen, .pii-counters / .read-counter тики, +2026-05-24-brain-retro.md note.

Цель — разблокировать merge feat/llm-first-router → main (этап 0 плана постановки в боевой). Содержание ветки не трогает.
2026-05-25 14:23:11 +03:00

16 KiB

Провенанс-вет внешних инструментов C1 marketing-tooling (IS9)

Дата: 2026-05-22 Вет-код: IS9 (согласно ADR-003 + spec §8) Инструменты: marketingskills (вендоринг), Yandex Metrika MCP (выбор из 3 кандидатов), yandex-mcp (Direct+Metrika+Wordstat), telegram-mcp, postiz-app / postiz-mcp Статус: ЗАВЕРШЁН


Назначение документа

Перед добавлением инструментов в раздел C1 «Маркетинг» карты выполнен обязательный провенанс-вет (IS9). Основание: ~13 % security-скилов из маркетплейсов несут критичные дефекты, часть пытается красть учётные данные (исследование ToxicSkills, Snyk + SentinelOne 2025). ADR-003 закрепляет принцип: community-инструменты с непроверенным происхождением — defer.


Сводная таблица вердиктов

# Инструмент Источник Лицензия Вердикт Обоснование (одна строка)
C1-1 marketingskills (вендоринг скилов) coreyhaines31/marketingskills MIT PASS-with-conditions Markdown-only скилы + 2 bash-скрипта только локальной валидации; MIT разрешает вендоринг; условие — вендорить только skills/, validate-scripts не включать
C1-2 Yandex Metrika MCP atomkraft/yandex-metrika-mcp (выбран) MIT PASS Токен передаётся только на api-metrika.yandex.net; нет опасных паттернов; MIT; риск single-author задокументирован
C1-3 yandex-mcp (Direct+Metrika+Wordstat) SvechaPVL/yandex-mcp MIT PASS-with-conditions Wordstat-модуль изолирован (5 read-only tools); Direct (80 mutation-tools) не активировать; все URL — официальные Yandex
C1-4 telegram-mcp (MTProto user-account) chigwell/telegram-mcp Apache-2.0 PASS-with-conditions Токен передаётся только Telegram/Telethon; нет опасных паттернов; условие — SESSION_STRING только в .env, выделенный аккаунт
C1-5 postiz-app (self-host) + postiz-mcp gitroomhq/postiz-app / antoniolg/postiz-mcp AGPL-3.0 PASS-with-conditions AGPL допустима для внутреннего self-host без дистрибуции; лицензия postiz-mcp не проверена в рамках бюджета — см. Open notes

Детальный анализ

C1-1 — coreyhaines31/marketingskills

Репозиторий: https://github.com/coreyhaines31/marketingskills Лицензия: MIT (Copyright 2025, Corey Haines) — подтверждено прямым чтением LICENSE.

Состав репозитория (проверено):

  • skills/ — чистый markdown; нет исполняемых скриптов внутри skills/.
  • .claude-plugin/ — JSON/YAML конфигурация плагина; не исполняемый код.
  • validate-skills.sh + validate-skills-official.sh — bash-скрипты только для локальной валидации (grep/awk/sed по skills/; сетевых вызовов нет; внешний URL упоминается только в комментарии — fetch не выполняется).
  • AGENTS.md, CLAUDE.md — инструкции для AI-агентов.

Автор и активность: Corey Haines (coreyhaines31), 279 коммитов, последний 2026-05-21 (v2.1.0). Один основной автор; 30 000+ звёзд, 4 900+ форков — высокий community-уровень.

Провенанс-вывод: MIT разрешает вендоринг без ограничений (требуется только сохранить copyright notice). Исполняемого кода в skills/ нет — только markdown.

Условие вендоринга: копировать только skills/ + LICENSE; validate-скрипты в проект Лидерры не включать; добавить ATTRIBUTION.md с указанием copyright Corey Haines.


C1-2 — Yandex Metrika MCP (выбор из 3 кандидатов)

Сравнение кандидатов

Параметр atomkraft/yandex-metrika-mcp theYahia/yandex-metrika-mcp Vadosdavos/yandex-metrika-mcp
Лицензия MIT MIT Не указана
Коммиты 7 8 1 (abandoned?)
Код верифицирован Да (index.ts + client.ts) Нет Нет
Внешние URL только api-metrika.yandex.net не верифицировано не верифицировано
Опасные паттерны Нет не верифицировано не верифицировано

Выбран: atomkraft/yandex-metrika-mcp

Vadosdavos — 1 коммит, нет лицензии → отклонён. theYahia — лицензия OK, но код не верифицирован в рамках бюджета. atomkraft верифицирован полностью.

Верифицированный код (src/index.ts + src/client.ts):

  • Единственный внешний хост: https://api-metrika.yandex.net (официальный Яндекс API).
  • OAuth-токен передаётся только в Authorization-заголовке запросов к этому хосту.
  • Нет динамического исполнения кода (eval, Function-constructor, и т.п.).
  • Нет shell-вызовов или spawn.
  • Валидация входных данных через Zod; regex-проверка формата дат.

Риск: Одиночный автор, 7 коммитов — maintenance risk. Пинить SHA в .mcp.json; пересматривать upstream ежеквартально.


C1-3 — SvechaPVL/yandex-mcp (Direct + Metrika + Wordstat)

Репозиторий: https://github.com/SvechaPVL/yandex-mcp Лицензия: MIT — подтверждено прямым чтением LICENSE.

Архитектура модулей (верифицировано: README + client.py + config.py):

Модуль Файлы Инструментов Тип операций
Direct tools/direct/ 80 Mutations — НЕ активировать ⚠️
Metrika tools/metrika/ 43 Read-only analytics
Wordstat tools/wordstat.py 5 Read-only keyword research

Внешние URL (config.py, все официальные домены Yandex):

  • https://api.direct.yandex.com/json/v5
  • https://api-metrika.yandex.net
  • https://api.wordstat.yandex.net

Токены отправляются только на эти хосты. HTTP-библиотека — httpx.AsyncClient (безопасная). Нет динамического исполнения кода в client.py.

Риск: SvechaPVL — одиночный автор, 8 коммитов, 16 звёзд. Direct-модуль несёт mutation-риск (создание/редактирование рекламных кампаний в Яндекс.Директ).

Условие: Активировать ТОЛЬКО Wordstat-инструменты (tools/wordstat.py, 5 tools). Direct-модуль не подключать. В конфигурации MCP передавать OAuth-токен с минимальным scope (Wordstat only).


C1-4 — chigwell/telegram-mcp

Репозиторий: https://github.com/chigwell/telegram-mcp Лицензия: Apache-2.0 — подтверждено прямым чтением LICENSE.

Верифицированный код (main.py + telegram_mcp/runtime.py):

  • Единственный внешний хост: Telegram servers через Telethon (TelegramClient).
  • TELEGRAM_SESSION_STRING и API credentials передаются только в TelegramClient / StringSession — сторонних хостов нет.
  • Нет динамического исполнения кода.
  • Нет shell-команд через стандартные системные вызовы.
  • Защита от path-traversal: проверка ".." in Path.parts.
  • Санитизация пользовательского контента (sanitize_user_content()).
  • Поддержка прокси (SOCKS4/5, HTTP, MTProxy) — остаётся в протоколе Telegram.

Автор: chigwell (primary) + l1v0n1 (contributor), 259 коммитов, ~1 100 звёзд — активный зрелый проект.

Операционный риск: MTProto user-account — это сессия реального пользователя, не bot-токен. Компрометация SESSION_STRING = полный доступ к аккаунту. Это не проблема кода (код чистый), а операционный риск конфигурации.

Условия:

  1. TELEGRAM_SESSION_STRING хранить ТОЛЬКО в .env на сервере; не в git, не в логах.
  2. Использовать выделенный Telegram-аккаунт (не основной бизнес-аккаунт).
  3. Режим — READ-тяжёлый (получение сообщений/каналов); отправка сообщений — только через явное действие оператора.
  4. Ротация SESSION_STRING при любом подозрении на компрометацию.

C1-5 — gitroomhq/postiz-app + antoniolg/postiz-mcp

Репозиторий: https://github.com/gitroomhq/postiz-app Лицензия: AGPL-3.0 — подтверждено прямым чтением LICENSE (GNU Affero GPL Version 3, Copyright Nevo David 2025).

Анализ AGPL-3.0 для паттерна «внутренний self-host»:

AGPL-обязательство Применяется? Комментарий
Публиковать исходники при распространении (§4) Нет Мы не распространяем — запускаем на своём сервере
Публиковать исходники при сетевом взаимодействии (§13 — AGPL-специфика) Ограниченно Применимо при доступе сотрудников через сеть; FSF-трактовка: private/internal use не триггерит §13
Сохранять copyright notice Да Обязательно
Распространять под той же лицензией Нет Не распространяем
Совместимость с проприетарным кодом Не применимо Postiz — изолированный self-hosted сервис; код Лидерры с ним не линкуется

Практический вывод: Для паттерна «внутренний self-host без дистрибуции» AGPL-3.0 приемлема.

Условия:

  1. Использовать Postiz as-is без модификаций кода.
  2. Сохранить AGPL copyright notice на сервере.
  3. Не распространять сборки третьим лицам.
  4. Проверить лицензию antoniolg/postiz-mcp отдельно перед активацией (не верифицировано — см. Open notes).

Итоговые решения

Выбранный репозиторий Yandex Metrika MCP

atomkraft/yandex-metrika-mcp — единственный полностью верифицированный кандидат. Vadosdavos отклонён (1 коммит, нет лицензии). theYahia приемлем по лицензии, но код не верифицирован в рамках бюджета.

Пин версии: зафиксировать SHA в .mcp.json после установки; пересматривать upstream ежеквартально.

Сводка условий для PASS-with-conditions

Инструмент Обязательные условия
marketingskills Вендорить только skills/ + LICENSE; добавить ATTRIBUTION.md; validate-scripts не включать
atomkraft/yandex-metrika-mcp Пинить SHA; READ-ONLY; пересмотр upstream ежеквартально
SvechaPVL/yandex-mcp Только Wordstat-модуль (5 tools); Direct-tools не активировать; OAuth-токен с минимальным scope
chigwell/telegram-mcp SESSION_STRING только в .env; выделенный аккаунт; READ-тяжёлый режим; ротация при компрометации
postiz-app (AGPL) Self-host as-is, без модификаций; сохранить copyright; не распространять; проверить лицензию antoniolg/postiz-mcp

Нет FAIL

Ни один из 5 кандидатов не отклонён. Все прошли вет с условиями или без.


Open notes (не верифицировано в рамках бюджета)

  1. antoniolg/postiz-mcp лицензия — не проверена. Необходимо прочитать LICENSE в репозитории перед активацией MCP-клиента. Вероятно MIT (типично для MCP-клиентов), но не подтверждено.

  2. atomkraft/yandex-metrika-mcp точная дата последнего коммита — GitHub вернул ошибку при загрузке contributor-stats. Определено: 7 коммитов, MIT, код чистый. Точную дату проверить через git log после клонирования.

  3. chigwell/telegram-mcp точная дата последнего коммита — 259 коммитов, Apache-2.0, код чистый. Точная дата не верифицирована через WebFetch; проверить после клонирования.

  4. SvechaPVL/yandex-mcp OAuth scope — проверить, возможно ли выдать токен только с Wordstat-правами в Яндекс OAuth, чтобы Direct-инструменты были физически неактивны даже при случайной активации модуля.


Методология вета

Для каждого кандидата:

  1. Прочитана лицензия через raw.githubusercontent.com (прямой fetch, не память).
  2. Прочитаны 1-2 ключевых исходника (index/client/runtime) через WebFetch.
  3. Оценено: внешние хосты, обработка токенов, наличие запрещённых паттернов.
  4. Для Metrika-кандидатов — сравнительная таблица по 4 параметрам.

Все данные получены через WebFetch на дату 2026-05-22. Израсходовано инструментов: 18/20.