laws
by Totopolis
README.md
# Кодексы и законы РФ: поиск по смыслу
Поиск по законодательству Российской Федерации (24 кодекса и 563 закона) обычными словами. Спрашиваете «что грозит
за неуплату алиментов» — получаете статью 115 Семейного кодекса, хотя дословно этих слов
в ней нет. Работает **без интернета**, целиком на вашей машине: ни запросы, ни тексты никуда
не уходят.
Искать можно двумя способами: из терминала одной командой или подключив репозиторий
к Claude Code как MCP-сервер — тогда поиск доступен прямо в разговоре.
## Что внутри
```
data/ тексты документов, разобранные по статьям (29 039 статей, каждая — отдельный JSON)
CATALOG.md перечень всех документов сборки: редакция, число статей, slug для поиска
index/ векторный индекс: по нему и идёт поиск
src/ сам поиск — MCP-сервер, команда для терминала и общий код под ними
```
**Тексты выгружены 17 сентября 2026 года** — редакции актуальны на эту дату. Источник — официальный
портал `pravo.gov.ru`, консолидированные тексты из «Эталонного банка правовой информации».
Дата редакции каждого документа по отдельности видна командой `--codes-list` (см. ниже)
и в `CATALOG.md`: документы меняются в разное время, и у некоторых последняя редакция заметно
старше даты выгрузки.
## Подготовка (один раз)
Нужен **Python 3.11 или новее**. Видеокарта не нужна — всё считается на процессоре.
```bash
# создать виртуальное окружение
python -m venv .venv
```
Дальше самое простое — попросить Claude Code: **`/x-prepare-system`**. Скилл поставит
библиотеки, скачает модели и проверит, что всё работает.
То же самое одной командой, если Claude Code под рукой нет:
```bash
# Windows
.\setup.cmd --install
# Linux и macOS
./setup --install
```
Скачается поисковая модель (~2,3 ГБ) и вспомогательная модель-переоценщик (~0,5 ГБ).
Это единственный шаг, которому нужен интернет. В репозиторий модели не входят — они слишком
велики для git.
Проверить готовность в любой момент: та же команда **без** `--install` ничего не меняет,
только рассказывает, что на месте, а чего не хватает.
```bash
# Windows
.\setup.cmd
# Linux и macOS
./setup
```
## Попробовать прямо в терминале
В комплекте есть короткая обёртка — она сама подставляет пути и кодировку:
```bash
# Windows
.\laws.cmd "что грозит за неуплату алиментов"
# Linux и macOS
./laws "что грозит за неуплату алиментов"
```
Ответ выглядит так:
```
=== что грозит за неуплату алиментов ===
1. sk-rf ст. 115 — Ответственность за несвоевременную уплату алиментов [0.0164]
РАЗДЕЛ V. АЛИМЕНТНЫЕ ОБЯЗАТЕЛЬСТВА > ГЛАВА 17. ПОРЯДОК УПЛАТЫ И ВЗЫСКАНИЯ | действует
1. При образовании задолженности по вине лица, обязанного уплачивать алименты...
```
Что ещё умеет команда (на Linux и macOS вместо `.\laws.cmd` пишите `./laws`):
```bash
# несколько вопросов за один запуск: так быстрее, модель грузится один раз
.\laws.cmd "увольнение по собственному желанию" "продолжительность отпуска"
# статья целиком, по номеру
.\laws.cmd --article uk-rf:105
# искать только в одном документе
.\laws.cmd --code=koap-rf "превышение скорости"
# список документов с датами редакций
.\laws.cmd --codes-list
# точнее на расплывчатых вопросах, но на 4 секунды медленнее
.\laws.cmd --rerank "сосед залил квартиру кто возмещает ущерб"
# показать и статьи, утратившие силу: по умолчанию они скрыты
.\laws.cmd --repealed "запрос"
```
Первый запрос занимает около 6 секунд — столько грузится модель. Дальше, если вопросов
несколько в одной команде, каждый следующий считается за 0,2 секунды.
Совет по формулировкам: пишите вопрос так, как спросили бы человека, а не ключевыми словами.
И помните, что одно и то же слово живёт в разных документах — «испытательный срок» найдёт
и трудовой, и условное осуждение из Уголовного кодекса. Если знаете, где искать, добавьте
`--code=tk-rf`.
Если обёртка почему-то не подходит, то же самое полной командой:
```powershell
# Windows, PowerShell
$env:PYTHONPATH="src"; $env:PYTHONIOENCODING="utf-8"
.venv\Scripts\python.exe -m laws_mcp.cli "вопрос"
```
```bash
# Linux и macOS
PYTHONPATH=src .venv/bin/python -m laws_mcp.cli "вопрос"
```
## Подключить к Claude Code (MCP-сервер)
Если поиском пользуетесь часто, удобнее поднять сервер: модель останется в памяти,
и каждый запрос будет занимать доли секунды вместо шести.
Проще всего попросить Claude Code: **`/x-run-mcp`** — скилл подключит и проверит.
Вручную — одной строкой:
```powershell
# Windows, PowerShell
claude mcp add laws -e PYTHONPATH=C:\путь\к\репозиторию\src -e LAWS_ROOT=C:\путь\к\репозиторию -e PYTHONIOENCODING=utf-8 -- C:\путь\к\репозиторию\.venv\Scripts\python.exe -m laws_mcp.server
```
```bash
# Linux и macOS
claude mcp add laws -e PYTHONPATH=/путь/к/репозиторию/src -e LAWS_ROOT=/путь/к/репозиторию -- /путь/к/репозиторию/.venv/bin/python -m laws_mcp.server
```
Пути обязательно полные: Claude Code запускает сервер из своего каталога, и относительные
пути не найдутся. После подключения перезапустите сессию — список инструментов читается
при старте.
Сервер даёт три инструмента: найти статьи по смыслу, показать статью целиком по номеру
и перечислить документы сборки.
## Что этот поиск не умеет
Стоит знать заранее, чтобы не полагаться на него зря:
- **Только законы, и не всё законодательство.** Внутри — кодексы и федеральные законы
(24 кодекса и 563 закона), их перечень целиком лежит в `CATALOG.md`. Подзаконных актов (постановлений
Правительства, приказов ведомств), регионального законодательства, судебной практики
и разъяснений Пленума Верховного Суда здесь нет и найти их нельзя.
- **Ответ верен на дату выгрузки.** Право меняется; дату показывает `--codes-list`.
- **Это поиск, а не юридическая консультация.** Он показывает, что написано в законе;
выводы и решения остаются за человеком.
- По умолчанию ищутся только действующие статьи. Утратившие силу — с флагом `--repealed`.
## Развернуть на сервере или доработать под себя
Claude Code с этим поможет: репозиторий устроен так, чтобы агент мог сам разобраться —
рядом лежит `CLAUDE.md` с описанием внутреннего устройства, а в комплекте есть `Dockerfile`
для сборки образа с поиском внутри.
Попросите его словами, например:
- «разверни этот поиск на моём сервере в docker»
- «подними MCP-сервер и подключи к моему Claude Code»
- «сделай веб-интерфейс к этому поиску»
- «проверь, всё ли готово к работе» — он запустит проверку и объяснит, чего не хватает
Из коробки есть образ, который включает и данные, и модели, так что контейнеру не нужен
интернет:
```bash
# собрать образ и запустить сервер
docker build -t laws-mcp .
docker run -i --rm laws-mcp
```
Флаг `-i` у `docker run` обязателен: MCP-сервер общается через стандартный ввод и вывод,
без него контейнер сразу завершится. Перед сборкой образа выполните подготовку — модели
копируются в образ из папки `models/`.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues