# Провенанс-вет внешних инструментов 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.
