legitAgent

legitAgent

An MCP server that scans web projects for Russian Federal Law 152-FZ compliance, identifying risks like missing consent checkboxes, cookie banners without opt-out, and unauthorized trackers, with legal references and fix suggestions.

Category
访问服务器

README

<p align="center"><img src="assets/logo.png" width="280" alt="legitAgent" /></p>

<p align="center"> <a href="https://github.com/kiruxich/legitAgent/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/kiruxich/legitAgent/actions/workflows/ci.yml/badge.svg" /></a> <a href="https://www.npmjs.com/package/@legit-agent/cli"><img alt="npm" src="https://img.shields.io/npm/v/@legit-agent/cli?label=@legit-agent/cli" /></a> <a href="LICENSE"><img alt="MIT" src="https://img.shields.io/badge/license-MIT-green" /></a> </p>

legitAgent

Проверка сайта на типичные риски 152-ФЗ, 38-ФЗ и ЗоЗПП прямо в Cursor, Claude, Kimi и в терминале.

Сайт: kiruxich.github.io/legitAgent. Каталог правил: docs/RULES.md. Сломанный пример: legitAgent-demo.

Подключите MCP — агент сам просканирует HTML/JSX/TSX/Vue/Svelte/Astro, покажет находки со статьёй закона и подскажет, как исправить. В Cursor после установки плагина те же действия доступны через /check, /scan, /scan-url. Либо одна команда в CI, GitHub Action с выгрузкой SARIF, либо scan-url для живой страницы: тот же каталог по DOM плюс cookie до согласия.

npx @legit-agent/cli scan

Это эвристическая проверка кода, а не юридическое заключение. legitAgent не заменяет юриста и не гарантирует соответствие закону. Решение принимает человек.


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

Нужен Node.js 20+. Пакеты ставить не обязательно — достаточно npx.

MCP (Cursor, Claude, Kimi и другие)

Один и тот же сервер. @latest и --prefer-online: при каждом запуске Cursor, Claude, Kimi и других IDE npx берёт текущий релиз с npm, а не кэш. Уже открытый чат сам не обновится — нужен перезапуск окна / MCP.

В Cursor одной кнопкой: Add to Cursor.

{
  "mcpServers": {
    "legitagent": {
      "command": "npx",
      "args": ["-y", "--prefer-online", "@legit-agent/mcp@latest"]
    }
  }
}
Клиент Куда вставить
Cursor User (все проекты): ~/.cursor/mcp.json — туда же пишет Add to Cursor. Проект (только этот репозиторий): .cursor/mcp.json. Скиллы /check … — Marketplace или ~/.cursor/plugins/local
Claude Code claude mcp add --transport stdio legitagent -- npx -y --prefer-online @legit-agent/mcp@latest
Claude Desktop тот же JSON в claude_desktop_config.json. Инструменты: scan, review, scan_url, list_rules, explain_rule, generate_policy, get_law. Слэша /check нет — пишете «проверь проект».
Kimi Code ~/.kimi-code/mcp.json или .kimi-code/mcp.json
Kimi CLI kimi mcp add --transport stdio legitagent -- npx -y --prefer-online @legit-agent/mcp@latest или ~/.kimi/mcp.json
Windsurf, Cline, Continue, Copilot тот же mcpServers; если спрашивают транспорт — stdio

После подключения: «проверь этот репозиторий на 152-ФЗ», «покажи каталог правил», «объясни PDN.FORM.NO_CONSENT».

В Cursor те же действия вызываются через / (скиллы плагина, карточка при наведении берётся из description). Локально: ~/.cursor/plugins/local/legitagent. В каталоге у всех — после публикации на Marketplace. В ChatGPT и Kimi слэша Cursor нет: там работают MCP-инструменты, не /check.

Команда MCP
/check scan + review текущего проекта
/fix scan + review, исправление confirm, перескан
/scan scan
/scan-url https://example.com scan_url
/list-rules list_rules
/explain-rule PDN.FORM.NO_CONSENT explain_rule
/generate-policy ООО Пример generate_policy
/get-law 152-fz 9 get_law

Slash-команда не заменяет MCP: она говорит агенту вызвать инструмент. Без включённого сервера legitagent скана не будет.

CLI

npx @legit-agent/cli scan
npx @legit-agent/cli scan ./my-site
npx @legit-agent/cli scan ./my-site --json
npx @legit-agent/cli scan ./my-site --sarif
npx @legit-agent/cli scan ./my-site --sarif findings.sarif
npx @legit-agent/cli scan ./my-site --lang en
npx @legit-agent/cli scan ./my-site --review --json
npx @legit-agent/cli scan-url https://example.com --json
npx @legit-agent/cli scan-url https://example.com --review --evidence legitagent-evidence
npx @legit-agent/cli scan-url https://example.com --review --evidence --notify-telegram
npx @legit-agent/cli scan-url https://example.com --sarif legitagent.sarif
npx @legit-agent/cli init-policy --operator "ООО Ромашка" --inn 123 --email privacy@site.ru --out privacy.md

--review добавляет второй проход LLM (confirm / reject / ask_human). Код выхода и SARIF по-прежнему считаются по сырым findings — CI остаётся детерминированным без LLM.

scan-url --evidence [dir] пишет evidence pack: скриншоты, имена cookie, evidence.json, evidence.sarif, evidence.pdf. В пачку попадают только confirm и ask_human.

Telegram (опционально): LEGITAGENT_TELEGRAM_BOT_TOKEN, LEGITAGENT_TELEGRAM_CHAT_ID + флаг --notify-telegram. Без credentials — код выхода 2.

LLM для --review: LEGITAGENT_LLM_API_KEY (опционально; без ключа — эвристический fallback). Базовый URL API: LEGITAGENT_LLM_BASE_URL (fallback: LEGITAGENT_LLM_API_BASE).

User rule для Cursor always-on: скопируйте текст из docs/cursor-user-rule.md в User rules.

Конфиг

В корне проекта можно положить legitagent.config.json:

{
  "ignore": ["**/vendor/**"],
  "disabled": ["PDN.COOKIE.NO_REJECT"],
  "severity": { "PDN.TRANSFER.FOREIGN_TRACKER": "low" }
}

Нет файла — как раньше. Невалидный JSON: код выхода 2.

Вывод по-русски по умолчанию; --lang en — английские сообщения. Файл, строка, что не так, как исправить, цитата нормы.

init-policy печатает черновик политики обработки ПДн (не юридический документ). Корпус 152-ФЗ / 38-ФЗ / ЗоЗПП лежит в packages/core/legal/corpus/; обновить с pravo.gov.ru: pnpm fetch-law.

--sarif без пути пишет legitagent.sarif (SARIF 2.1.0). scan-url открывает страницу в Chromium: ждёт гидрацию SPA, нажимает «отказ», если кнопка есть, смотрит cookie до и после этого, и прогоняет тот же каталог правил по HTML страницы (формы, политика, ERID, витрина, трекеры).

Код выхода Значение
0 Нет серьёзных находок (в том числе нечего сканировать)
1 Есть хотя бы одна находка high
2 Нет команды / scan-url без URL / невалидный legitagent.config.json / --notify-telegram без credentials

В CI достаточно npx @legit-agent/cli@0.7.1 scan --json: ненулевой код — стоп пайплайна. Source-scan не вызывает LLM. Для code scanning скопируйте examples/github-scan.yml в .github/workflows/legitagent.yml — он вызывает композитное действие .github/actions/legitagent-scan с пином @v0.7.1: пишет SARIF, загружает его в GitHub, комментирует PR с результатами и при push в main создаёт или обновляет issue при находках high. Для мониторинга живого сайта после деплоя — examples/github-watch.yml (scan-url --review --evidence, опционально Telegram). В URL/watch-режиме issues и fail-on-high используют сырой SARIF (--sarif legitagent.sarif); evidence pack остаётся отфильтрованным (confirm + ask_human).


Возможности

Один движок @legit-agent/core, живой сканер @legit-agent/live, оболочки @legit-agent/mcp и @legit-agent/cli.

Инструменты MCP

Инструмент Что делает
scan Сканирует проект. Необязательные root и lang (ru / en).
review Второй проход по findings: confirm, reject, ask_human. Необязательные root и lang.
scan_url Проверяет живой URL: cookie, баннер, формы, политика, ERID, витрина, иностранные трекеры; ждёт гидрацию SPA и кликает «отказ», если кнопка есть. Опционально evidenceDir.
list_rules Полный каталог правил.
explain_rule Правило, выдержка статьи, как исправить, дисклеймер. Нужен ruleId.
generate_policy Черновик политики обработки ПДн. Нужен operator. Не юридическое заключение.
get_law Текст из корпуса (152-fz, 38-fz, zozpp), опционально номер статьи.

Агент сам предлагает патч по находкам — MCP только проверяет и объясняет.

Ответ scan: список findings (правило, файл, строка, severity, сообщение, фикс, цитата), warnings по битым файлам, scannedFileCount. Если путь нечитаем: Укажите корень проекта.

Что проверяется в коде

Сканер читает .html, .jsx, .tsx, .vue, .svelte, .astro. Пропускает node_modules, .next, dist, build, coverage, .git. Синтаксически сломанный файл не роняет проверку — он уходит в предупреждение. Пустой проект — валидный результат, не ошибка.

id Что находит Норма
PDN.FORM.NO_CONSENT Форма с именем, email или телефоном без чекбокса согласия 152-ФЗ ст. 9
PDN.FORM.PRECHECKED_CONSENT Предзаполненный чекбокс согласия 152-ФЗ ст. 9
PDN.FORM.NO_POLICY_LINK Согласие без ссылки на политику 152-ФЗ ст. 9
PDN.POLICY.NO_LINK В проекте нет ссылки на политику обработки ПДн 152-ФЗ ст. 18.1
PDN.POLICY.INCOMPLETE Политика без оператора, целей, сроков или порядка отзыва 152-ФЗ ст. 18.1
PDN.TRACKER.NO_CONSENT Яндекс.Метрика, gtag, GA, Meta Pixel, VK.Retargeting без проверки согласия 152-ФЗ ст. 6
PDN.COOKIE.NO_REJECT Cookie-баннер без возможности отказа 152-ФЗ ст. 9
PDN.TRANSFER.FOREIGN_TRACKER Иностранный трекер / возможная трансграничная передача 152-ФЗ ст. 6
PDN.LOCALIZATION.UNCLEAR Форма с ПДн и иностранный трекер без указания локализации баз в РФ (low) 152-ФЗ ст. 18
PDN.ORG.RKN_NOTICE Форма с ПДн без следов уведомления РКН (low) 152-ФЗ ст. 22
ADV.ERID.MISSING Пометка «Реклама» без erid 38-ФЗ ст. 5
CONSUMER.OFFER.MISSING Витрина без оферты ЗоЗПП ст. 8
CONSUMER.REQUISITES.MISSING Витрина без ИНН/ОГРН ЗоЗПП ст. 7
CONSUMER.RETURN.MISSING Витрина без условий возврата ЗоЗПП ст. 18

Полный чек-лист

Помимо автопоиска агент знает весь каталог и по explain_rule разбирает каждый пункт: зачем правило, какая статья, что сделать.

Формы и согласие — PDN.FORM.NO_CONSENT, предзаполненный чекбокс (PDN.FORM.PRECHECKED_CONSENT), ссылка на политику рядом с согласием (PDN.FORM.NO_POLICY_LINK).

Политика ПДн — ссылка в проекте (PDN.POLICY.NO_LINK), состав документа: оператор, цели, сроки, отзыв (PDN.POLICY.INCOMPLETE).

Метрики и cookie — трекер без opt-in (PDN.TRACKER.NO_CONSENT), cookie до согласия (PDN.COOKIE.BEFORE_CONSENT, живой scan-url), баннер без отказа (PDN.COOKIE.NO_REJECT), иностранный трекер / трансграничная передача (PDN.TRANSFER.FOREIGN_TRACKER).

Организация — локализация баз в РФ (PDN.LOCALIZATION.UNCLEAR) и уведомление Роскомнадзора (PDN.ORG.RKN_NOTICE): только если есть форма с ПДн, серьёзность low. CMP вроде Cookiebot не считается «метрикой без согласия».

Реклама — пометка «Реклама» без идентификатора (ADV.ERID.MISSING).

Витрина — оферта, реквизиты, возврат (CONSUMER.*).

У каждого правила в репозитории есть короткая выдержка статьи. Без выдержки правило в каталог не попадает.

Полный каталог с выдержками закона: docs/RULES.md. На сайте — страница правил.

Проверить, что сканер вообще что-то находит: клонируйте legitAgent-demo (форма без согласия, метрика без opt-in, нет политики) и выполните npx @legit-agent/cli scan.


Разработка

git clone https://github.com/kiruxich/legitAgent.git
cd legitAgent
pnpm install
pnpm test
pnpm build

Монорепозиторий pnpm:

  • packages/core — каталог YAML, выдержки закона, парсеры, детекторы, scanProject
  • packages/cli — команды legitagent scan, scan-url, init-policy, вывод --json / --sarif / --lang
  • packages/live — Playwright-сканер живой страницы
  • packages/mcp — stdio-сервер для агентов

Правила: packages/core/rules/*.yaml. Выдержки: packages/core/legal/*.yaml. Корпус законов: packages/core/legal/corpus/ (pnpm fetch-law). Каталог для людей: pnpm catalog → docs/RULES.md и website/rules.html.


Релиз

Пакеты живут на npmjs.com/org/legit-agent, не в GitHub Packages.

Новая версия: одинаковый version в packages/*/package.json (core, cli, live, mcp), коммит в main, тег vX.Y.Z, git push origin vX.Y.Z. GitHub Actions публикует core → live → cli → mcp и открывает GitHub Release.


Лицензия

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选