garant-mcp
This MCP server connects Claude to the Russian legal database Garant: search legal documents, retrieve texts and articles with verifiable provenance, explore document structure and revisions, and find high-court practice.
garant_search — keyword/requisite search over Garant documents with paging, result-type distribution, and optional cache bypass.
garant_toc — get the table of contents of a document (sections and articles with IDs).
garant_document — fetch the full text of a document by doc_id, with provenance (edition, effective date, amending act, text hash) and normalization warnings.
garant_article — retrieve the verbatim text of a specific article/point, with full provenance and warnings about possible incomplete or extra text.
garant_revisions — list all editions of an act, their validity periods, and the acts that introduced them.
garant_revision_on_date — determine which edition was in force on a given date (returns edition metadata, not the norm text).
garant_kinds — browse Garant's information-type tree to get exact kind names for practice filtering.
garant_practice — search judicial practice of the RF Constitutional Court and Supreme Court, with optional kind, court, date, and limit filters; responses warn that the result set is intentionally incomplete.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@garant-mcpнайди в Гаранте статью 108 УПК РФ"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
garant-mcp
Подключает правовую базу «Гарант» к Claude: поиск документов, дословный текст статьи, оглавление, список редакций, судебная практика высших судов.
Отвечает на один вопрос: можно ли поставить полученное в документ. К тексту
статьи прикладывается блок provenance — редакция, дата начала её действия,
изменяющий акт, отпечаток ровно того текста, который отдан. Цитату с таким
блоком можно сверить, а не принять на веру.
Доступ даёт ваша собственная подписка «Гаранта». Репозиторий не содержит содержимого базы, не хранит и не передаёт учётные данные и не проксирует доступ через чужой аккаунт. Вы входите сами, в своём браузере; сессия живёт в профиле браузера на вашей машине. Нет действующей подписки — этот сервер бесполезен.
Что нужно знать до установки
Нужен один из трёх: Claude Desktop, Claude Code или Codex. Это программы, которые умеют запускать MCP-сервер на вашей машине. Первым двум установщик прописывает сервер сам, Codex — отдельной командой; и сразу оговорка: на живом Codex это не проверялось никем, подробности в разделе «Codex (подписка ChatGPT)».
Чат ChatGPT не подойдёт, а Codex — подойдёт. Локальные MCP-серверы чат
ChatGPT не запускает: инструменты «Гаранта» в нём не появятся ни в браузере,
ни в приложении. Запускает их Codex — агент OpenAI (командная строка
и расширение для редактора), доступный по той же подписке ChatGPT; для него
есть отдельная команда регистрации, и как она устроена — в разделе
«Codex (подписка ChatGPT)». Другие MCP-клиенты,
умеющие запускать локальную программу, работать могут, но запись в их
конфигурацию придётся вписать руками: garant register знает только Claude
Desktop, Claude Code, Codex и .mcp.json конкретного проекта.
Чего продукт не умеет — четыре строки, подробно ниже. Он не даёт текст статьи в редакции на прошлую дату — только говорит, какая редакция тогда действовала. Он отдаёт нормализованный рендер страницы, а не выгрузку нормы. Судебную практику показывает заведомо неполно. Провенанса нет у четырёх инструментов из восьми.
О надёжности здесь не сказано ничего — намеренно: замеров нет, а заявление без замера это то же враньё, только вежливое.
Related MCP server: CanLII MCP Server
Установка: три шага
Перед началом нужны три вещи:
действующая подписка «Гаранта» — логин и пароль, которыми вы входите в обычном браузере;
установленный один из трёх: Claude Desktop, Claude Code или Codex. Первым двум установщик прописывает сервер сам; Codex прописывается отдельной командой
garant register --codex, и на живом Codex это никем не проверялось — подробности в разделе «Codex (подписка ChatGPT)»;установленный git. Пакет ставится прямо из репозитория GitHub, а скачать его без git невозможно. Установщик проверяет git непосредственно перед установкой пакета и, не найдя, ничего не пытается делать: он называет команду установки git, пропускает оставшиеся шаги и заканчивается ненулевым кодом. Поставьте заранее — на Windows:
winget install --id Git.Git -e; на macOS:brew install git; на Debian/Ubuntu:sudo apt install git. После установки git откройте новое окно консоли: в текущем его ещё нет в PATH.
Python ставить заранее не нужно — установщик поставит его сам, вместе
с менеджером пакетов uv. Прав администратора не требуется.
Шаг 1. Одна команда
Windows. Нажмите клавишу Win, наберите «PowerShell», откройте её и вставьте эту строку целиком:
powershell -NoProfile -ExecutionPolicy Bypass -Command "& ([scriptblock]::Create((irm https://raw.githubusercontent.com/semenboss95-design/garant-mcp/main/install.ps1).TrimStart([char]0xFEFF)))"Строка длиннее обычной не для красоты. Установщик написан по-русски и хранится
с меткой кодировки в начале файла — без неё Windows PowerShell прочитал бы
русский текст как мусор; но при загрузке из сети он эту метку не отбрасывает
и спотыкается о неё раньше, чем возьмётся за установку. Срезает её кусок
TrimStart в середине команды: без него не устанавливается ничего вовсе
(проверено 09.09.2026). Копируйте строку целиком, со всеми скобками.
macOS и Linux. Откройте Терминал (на macOS — Cmd+Пробел, набрать
«Терминал», Enter) и вставьте эту строку; файл install.sh скачается
в текущий каталог, обычно домашний:
curl -LsSf https://raw.githubusercontent.com/semenboss95-design/garant-mcp/main/install.sh -o install.sh && sh install.shУстановщик делает четыре шага и печатает про каждый, получилось или нет:
ставит менеджер пакетов uv, ставит сам пакет, вызывает garant setup
и печатает сводку «сделано / пропущено / не удалось». garant setup, в свою
очередь, заводит каталог состояния, ставит браузер Chromium, прописывает сервер
в Claude Desktop и Claude Code, открывает окно входа и заканчивается
диагностикой.
Код возврата ноль — только если сделано всё. Повторный запуск безопасен: ничего не дублируется, а вход в подписку не сбрасывается.
Шаг 2. Войдите в подписку в открывшемся окне
Установщик сам откроет окно браузера на странице входа «Гаранта». Введите свой логин и пароль, как обычно. Страница входа грузится долго; программа ждёт вас до пяти минут и потом закрывает окно сама.
Когда вошли — просто закройте окно. Ничего вводить в консоль не нужно.
Два случая, и лечатся они одинаково: окно было, но вы закрыли его раньше времени — или окна не появилось вовсе, потому что установка до входа не дошла. И там, и там вход делается отдельной командой:
garant loginЗакрытое окно ещё не доказывает, что вход удался. Программа видит только то, что окно закрылось, и честно об этом говорит. Доказывает вход один запрос — он же и есть первая настоящая проверка всей установки:
garant doctor --живойШаг 3. Перезапустите Claude
Claude читает список серверов при старте, поэтому уже открытое окно нового сервера не увидит. Закройте его полностью и откройте снова: на Windows — обычным закрытием окна, на macOS — сочетанием Cmd+Q, потому что крестик там окно закрывает, а программу оставляет в доке, и никакого перезапуска не происходит.
Готово. Спросите у Claude что-нибудь вроде «найди в Гаранте статью 108 УПК РФ». При первом обращении Claude спросит разрешение на использование инструмента — это нормально, разрешите: без разрешения он в «Гарант» не пойдёт.
Codex (подписка ChatGPT)
Codex — агент OpenAI: командная строка и расширение для редактора, доступные по подписке ChatGPT. От чата он отличается тем, что запускает на вашей машине локальные программы, а значит и MCP-сервер. Отсюда и вся разница: в чате инструментов «Гаранта» не будет никогда, а в Codex после регистрации и перезапуска они должны появиться.
«Должны» — не оборот вежливости. Форма записи взята из документации Codex;
живой Codex при разработке не запускался ни разу, и того, что он действительно
поднимает по этой записи сервер, здесь не видел никто. Если инструменты
не появились, начните с garant doctor: он показывает, что записано и в какой
файл. Этот вывод и стоит приложить к сообщению о неполадке.
Что нужно. Установленный Codex — CLI или расширение — и его файл настроек
~/.codex/config.toml. Каталог настроек можно переопределить переменной
окружения CODEX_HOME: задана — файл берётся оттуда, не задана — из ~/.codex.
Регистрация — отдельная команда:
garant register --codexОна дописывает в файл настроек одну таблицу:
[mcp_servers.garant]
command = "garant-mcp"
env = { PYTHONIOENCODING = "utf-8" }В command стоит имя команды, а не путь к ней: путь устарел бы с первым же
обновлением пакета, а имя ищется в PATH и переживает обновление.
PYTHONIOENCODING стоит здесь ради кириллицы — сервер отвечает по-русски,
и кодировку его вывода лучше назвать явно, чем полагаться на ту, что окажется
у процесса, запущенного клиентом.
Чужое в файле остаётся целым. Рядом с нашей записью в config.toml живут
другие MCP-серверы и прочие настройки Codex; команда дописывает своё, а не
переписывает файл заново, и перед записью кладёт рядом копию .bak. Запись,
как и у Claude, читается при старте клиента — уже открытый Codex её не увидит.
Снять запись:
garant unregister --codexgarant unregister без ключей и garant uninstall снимают её тоже, если она
есть: запись наша, и оставить у Codex ссылку на снятую программу значило бы
оставить после себя мусор. Обратной симметрии нет намеренно: прописывается
Codex только по явному ключу. В config.toml не заглядывают ни установщик,
ни garant setup, ни garant register без ключей — это файл чужой программы,
и трогать его без прямой просьбы мы не считаем себя вправе.
Диагностика. garant doctor показывает Codex отдельной строкой.
Отсутствие регистрации ошибкой не считается: Codex необязателен, и у того, кто
пользуется только Claude, красных пунктов из-за него не появится — в строке
просто названа команда garant register --codex. Если config.toml
не разбирается как TOML, не записывается ничего и файл не трогается вовсе —
ровно так же, как с битым JSON у Claude: скорее всего, в нём сломана одна
строка, а чужие настройки целы, и перезапись уничтожила бы их.
Одна оговорка, про редкий случай. Если запись garant в файле уже есть,
но задана не таблицей [mcp_servers.garant] — в другой форме записи
TOML, — команда откажется и попросит снять её руками. Причина в том, как
устроена запись: файл читается разбором TOML, а меняется слиянием текста,
и переписать чужую запись неизвестной формы, не испортив остального файла,
команда не берётся.
Если не работает
Все команды этого раздела набираются там же, где вы запускали установку: в PowerShell на Windows, в Терминале на macOS и Linux.
Первое, что стоит набрать:
garant doctorЭто диагностика всей установки: python, наличие команд в PATH, браузер Chromium, каталог состояния, версия пакета, демон, сессия подписки, keepalive, регистрация у Claude Desktop, Claude Code и Codex, автозапуск, отпечаток браузера. На каждый красный пункт печатается точная команда, которой он чинится — её можно скопировать и выполнить. Красный пункт без команды починки в этом пульте невозможен: он падает как дефект самого пульта.
Демон — это фоновая программа, которая держит ваш вход в подписку живым;
дальше в этом файле и в выводе garant doctor он называется именно так.
Отдельно: garant doctor --живой дополнительно делает настоящий запрос
к «Гаранту». Только он доказывает, что подписка отвечает; всё остальное
доказывает лишь то, что программа установлена. Сам doctor это и говорит
в последней строке.
Четыре частых случая.
«garant» не находится как команда. Случаев два, и починка у них разная.
Первый: окно консоли то же, в котором шла установка. Менеджер uv дописал
свой каталог команд в постоянный PATH уже после того, как это окно открылось,
а PATH достаётся процессу при старте и задним числом не меняется. Откройте
новое окно консоли — больше ничего не требуется.
Второй: окно новое, а команды всё равно нет. Значит, каталога нет и в постоянном PATH, и следующее окно ничего не изменит. Постоянный PATH правит тот менеджер пакетов, которым ставили:
uv tool update-shellСтавили через pipx — pipx ensurepath. И только после этого откройте новое
окно консоли: PATH достанется ему при старте.
Ту же развилку держит диагностика — пунктом «пакет в PATH». Она различает
«пакет установлен, но каталог его команд не в PATH» и «пакета нет вовсе»:
это разные состояния, и переустановка чинит только второе. Оговорка
очевидная: набрать garant doctor можно лишь там, где команда уже находится;
в конце обычной установки диагностику зовёт сам установщик.
Windows: установка Chromium упала непонятной ошибкой Python. Почти наверняка выключены длинные пути Windows (проверено 06.09.2026 на глубоком пути; на коротком установка проходит). Установщик проверяет это в самом начале и предупреждает, но включить сам не может: нужны права администратора. Нажмите Win, наберите «PowerShell», щёлкните по найденному значку правой кнопкой и выберите «Запуск от имени администратора». В открывшемся окне выполните:
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name LongPathsEnabled -Value 1 -PropertyType DWord -ForceПосле этого закройте административное окно и откройте обычное — установку повторяйте в нём. Работать дальше от администратора не нужно и не стоит: установка рассчитана на обычные права.
Claude не видит инструменты «Гаранта». Пропишите сервер заново и сразу посмотрите, что получилось:
garant register
garant doctordoctor показывает состояние регистрации тремя отдельными пунктами: Claude
Desktop, Claude Code и Codex. Отсутствие записи у Codex ошибкой не считается
и красным пунктом не станет — он необязателен, и garant register без ключей
его не трогает вовсе; нужен он — garant register --codex. После этого
перезапустите Claude (шаг 3). Форма записи зависит от клиента: у Claude
это одна строка JSON {"command": "garant-mcp"}, у Codex — таблица TOML,
показанная в разделе «Codex (подписка ChatGPT)».
Всё остальное в конфигурации клиента остаётся нетронутым, а рядом кладётся
копия .bak.
«Сессия недействительна» или «Unauthorized». Вход истёк — войдите заново:
garant loginЕсли вы проверяете установку, а не пользуетесь ею
Этот раздел не нужен тому, у кого есть подписка и кто ставит продукт себе. Он адресован другому человеку: тому, кто хочет убедиться, что установщик работает, но не имеет подписки и не хочет, чтобы трогали настройки его машины — конфигурации MCP-клиентов, автозапуск. Пока таких ключей не было, пройти установку целиком мог ровно один человек — тот, у кого есть и подписка, и не жалко настроек, то есть автор установщика.
Сразу и прямо: установка с --no-register и --no-login рабочего продукта
не даёт. Она доказывает ровно одно — что пакет ставится и команда garant
запускается. Браузер Chromium при этом не ставится, записи у Claude
не появляется, вход не выполняется. Инструментов «Гаранта» в Claude после такой
установки не будет, и это не поломка, а именно то, о чём просили ключом.
Довести до рабочего состояния — garant setup, а следом garant login.
Ключи передаются файлу установщика, а команда из шага 1 исполняет его содержимое на лету, не сохраняя файла. Проверенный способ передать ключи один — скачать файл и запустить его:
irm https://raw.githubusercontent.com/semenboss95-design/garant-mcp/main/install.ps1 -OutFile install.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1 -БезРегистрации -БезВходаcurl -LsSf https://raw.githubusercontent.com/semenboss95-design/garant-mcp/main/install.sh -o install.sh
sh install.sh --no-register --no-loginчто нужно | Windows ( | macOS и Linux ( |
ставить не из GitHub, а из своего каталога |
|
|
не открывать окно входа в подписку |
|
|
не прикасаться к конфигурациям MCP-клиентов |
|
|
сверить, что автозапуск не появился (запретить его установщик не может — см. ниже) |
|
|
показать список ключей и выйти |
|
|
У ключей PowerShell русские имена основные, английские — псевдонимы, и это не украшение: ключ, который нельзя набрать без смены раскладки, в чужой командной строке чаще всего просто не набирают, а проверку пропускают.
Справка называет и сам ключ справки. Каждый из двух файлов по своему ключу
(-Справка на Windows, --help на macOS и Linux) печатает синопсис, где ключ
справки стоит наравне с остальными: о ключе, узнать про который можно, только
уже набрав его правильно с первого раза, пришедший со стороны не узнаёт
никогда. На Windows годится и короткое -h: PowerShell дополняет имя ключа
по началу, а на «h» здесь начинается только -Help. Справка не делает ничего:
печатается до всех шагов, без сводки, код возврата 0.
--source нужен не одному проверяющему. Годится всё, что понимает
пакетный менеджер: git-адрес, имя пакета, файл .whl и каталог распакованного
репозитория. Последнее — обычный случай для форка и для того, кто проверяет
установку до публикации: адрес ему взять негде. Указывать надо корень
репозитория, тот, где лежит pyproject.toml, — иначе установщик так и скажет,
вместо того чтобы отдать невнятную ошибку пакетного менеджера. И ещё: если
ваш источник не git-адрес, git не нужен вовсе — требование git привязано
к виду адреса, а не стоит безусловно.
--no-register устроен грубее, чем можно ожидать, и сказано это нарочно.
С ним garant setup не вызывается вообще. Отдельного ключа «пропустить
только регистрацию» у setup нет, а неизвестный ключ он принимает молча —
получился бы ключ, который ничего не запрещает и об этом не сообщает. Вместо
этого установщик зовёт garant --version, помечает шаг «пропущено»
и перечисляет в сводке всё, что осталось несделанным.
--no-autostart ничего не предотвращает — он сверяет
Разница существенная, и знать её надо до того, как вы прочтёте сводку.
Установщик автозапуска не заводит ни при каких ключах, и с этим ключом
не меняется ничего. garant setup автозапуска не касается вовсе: его пять
шагов — каталог состояния, Chromium, регистрация у MCP-клиентов, вход
в подписку и диагностика. Предотвращать, стало быть, нечего; да и запретить
что-либо отдельной программе установщик не может. Имя ключа оставлено
намеренно — оно называет намерение того, кто ставит, — но обещает оно больше,
чем ключ делает.
Что ключ делает на самом деле: снимает состояние командой
garant autostart status до вызова setup и после и сравнивает две строки.
Исходов три, и все три названы в сводке своими словами:
совпало — строка «пропущено»: «автозапуск не появился — сверено
garant autostart statusдо и после setup», и тут же, в той же строке, сказано, что предотвращать было нечего;разошлось —
[X]и ненулевой код возврата всей установки;спросить состояние не удалось (команда вернула ненулевой код или пустой ответ) — «ключ не проверен», прямым текстом. Это не то же самое, что «всё сошлось», и написано именно так, чтобы их нельзя было спутать.
--no-autostart вместе с --no-register не сверяет ничего, и сводка
теперь это говорит отдельной строкой «пропущено»: setup в такой связке
не вызывается вовсе, значит и менять автозапуск было нечему, и сверки «до
и после» не было. Раньше сводка об этом молчала, и молчание можно было
прочесть как «автозапуск проверен». Состояние автозапуска вашей машины
установщик при таком сочетании ключей не смотрит ни разу; посмотреть самому —
garant autostart status.
Сводка и код возврата во всех режимах одни и те же: ноль — только если в графе
«не удалось» пусто. Неизвестный ключ install.sh не прощает — печатает его
и завершается кодом 2, не сделав ничего.
Что он умеет: восемь инструментов
инструмент | что делает | provenance |
| поиск по реквизитам или контексту, постранично | источник и дата |
| оглавление документа: разделы и статьи | нет |
| полный текст документа | полный |
| текст конкретной статьи или пункта | полный |
| все редакции акта, периоды действия, изменяющие акты | нет |
| какая редакция действовала на дату | нет |
| дерево видов информации — для фильтров практики | нет |
| судебная практика: КС РФ, ВС РФ | источник и дата |
Три уровня различаются не по важности, а по природе ответа. Полный — там, где в ответе есть текст: его есть к чему привязать и что хешировать. Источник и дата — у перечней найденного. Нет — там, где текста нет вовсе.
Что стоит в полном блоке provenance:
ключ | что означает |
| идентификатор документа в «Гаранте» |
| в какой редакции взят текст |
| с какой даты эта редакция действует |
| каким актом она введена |
| откуда и когда получено |
| отпечаток ровно того текста, который отдан, и версия правила его вычисления |
| появляется, когда есть повод усомниться в редакции, и поводов три рода: действующую редакцию найти не удалось (взята первая из списка, либо список пуст, либо статус пришёл кодом, которого нет в карте эндпоинтов); непрерывность действия не доказана (между периодами разрыв, либо стык посчитать нечем, либо смежность держится на нашем чтении границы, либо периоды не прочитаны вовсе); значение в |
Перечни находок поиска кэшируются (тексты норм — никогда). Ответ из кэша несёт
пометку из_кэша, дату записи и возраст в часах; просроченная запись
не отдаётся вовсе, а не отдаётся с пометкой. Срок годности по умолчанию —
сутки. Пустая выдача не кэшируется.
Чего он не умеет
Это не оговорки мелким шрифтом. Это ровно та причина, по которой остальному в ответе можно верить.
Текста нормы в редакции на прошлую дату нет
garant_revision_on_date отвечает на вопрос «какая редакция действовала»
и только на него: название редакции, статус, период действия, изменяющий акт.
Дословный текст в той редакции взять сегодня нечем: garant_article
и garant_document параметра редакции не принимают и собирают провенанс
по действующей.
Ставить их ответы рядом как цитату на прошлую дату нельзя. Инструменты
говорят это прямо в своих описаниях, кода это не чинит. Открытый вопрос,
разбор — docs/DECISIONS.md, решение 12.
Текст статьи — рендер страницы, а не выгрузка нормы
Оригинал в машинном виде «Гарант» не отдаёт; есть только HTML страницы, и текст получается его нормализацией. Поэтому редакционные врезки «Гаранта» («Статья … дополнена … с … г.») могут попасть внутрь цитаты неотмеченными.
Вырезать их эвристикой мы намеренно не стали: распознавание по редакционной
фразеологии угадывает, а угадывание, выдающее себя за факт, — худшее, что может
случиться в таком инструменте. Вместо этого в каждом ответе с текстом стоит
безусловная оговорка _нормализация. Перед подачей сверяйте цитату с окном
подписки.
Отдельно у garant_article бывает ключ _предупреждение, и риск в нём двух
родов: текст неполный либо, наоборот, избыточный — в вырезку попало начало
соседней статьи. Избыточность опаснее: цитата выглядит целой.
Судебная практика показывается неполно
И говорит об этом сама, ключом _предупреждение в каждом ответе: берётся
только первая страница отфильтрованного списка, список режется по limit,
а уточнение по конкретному суду делается отбором по заголовку уже на нашей
стороне — серверного фильтра по суду у «Гаранта» в этой цепочке нет. Значит,
акт нужного суда, чей заголовок назван иначе, в выдачу не попадёт.
Вывод «у этого суда практики нет» из такого ответа не следует.
Отдельно: акты кассационных судов общей юрисдикции в подписке недоступны — они лежат в другой базе. Рабочий канал один: КС РФ и ВС РФ.
Провенанса нет у четырёх инструментов из восьми
И это не недоделка. У оглавления (garant_toc) и дерева видов
(garant_kinds) понятие редакции неприменимо: они возвращают структуру.
garant_revisions и garant_revision_on_date возвращают сведения о
редакциях, а не норму. Полный провенанс есть ровно там, где есть текст.
Клиент восстановлен по записанному трафику
У «Гаранта» нет публичного API. Клиент собран по записи запросов живой сессии, а карта эндпоинтов лежит отдельным файлом рядом с кодом.
Что из этого проверяется без подписки — разбор записанных ответов: что клиент правильно достаёт из них текст, редакцию и предупреждения. Чего проверить нельзя — что сам «Гарант» отвечает сегодня так же, как отвечал в записи.
Практическое следствие, и оно неприятное: когда «Гарант» поменяет своё API, поломка будет молчаливой — не исключением, а неполным или пустым результатом. Никакое число тестов этого не отменяет: тесты проверяют разбор известного ответа, а не то, что ответ прежний. Сверяйте цитаты глазами, как и положено при подаче документа.
Управление: команда garant
Всё делается одной командой, и одинаково на Windows, macOS и Linux.
garant doctor диагностика; --живой добавляет запрос к «Гаранту»
garant status коротко: демон, сессия, версия, каталог состояния
garant login войти в подписку (откроется окно браузера)
garant setup повторить установочные шаги: chromium, регистрация,
вход, диагностика
garant start | stop | restart
garant logs [N] последние N строк лога демона (по умолчанию 40)
garant register прописать сервер у Claude Desktop и Claude Code;
ключ --codex добавляет Codex (подписка ChatGPT)
garant unregister снять эту запись; без ключей — и у Codex тоже
garant autostart on поднимать демона при входе в систему
garant update обновить пакет и перезапустить демона
garant uninstall снять поставленное
garant migrate ПУТЬ перенести профиль старой установкиgarant без аргументов печатает полный список с пояснениями. Разбор каждой
команды — docs/ARCHITECTURE.md, § 7.
Автозапуск — то, чего установка не делает никогда: он заводится единственным
способом, командой garant autostart on, и только тогда, когда вы её набрали.
Посмотреть его состояние — garant autostart status или garant doctor.
Обновление вход в подписку не сбрасывает: профиль браузера живёт в отдельном
каталоге состояния, а обновляется каталог кода. Команда garant update
работает, только если пакет поставлен через uv или pipx; если она этого
не выяснила — она ничего не трогает и говорит об этом, потому что неверная
команда обновления поставит вторую копию рядом с работающей.
Снятие. garant uninstall спрашивает подтверждение, снимает регистрации,
автозапуск и останавливает демона, а затем печатает, что осталось на машине:
каталог состояния, кэш браузеров playwright и сам пакет. Профиль подписки
он не трогает — вход сохраняется. Удалить профиль можно только отдельным
ключом --purge и только ответив «удалить» на вопрос.
Если garant-mcp уже стоял у вас раньше и вы хотите сохранить сделанный тогда вход, вместо повторного:
garant stop
garant migrate ПУТЬ_К_СТАРОЙ_ПАПКЕ
garant startВместо ПУТЬ_К_СТАРОЙ_ПАПКЕ подставьте путь к папке, где garant-mcp стоял
раньше. Команда делает копию; старая папка не изменяется. Демон при этом
обязан быть остановлен: копирование профиля Chromium на ходу ломает профиль.
Подробности и на что смотреть после переноса —
docs/ACCEPTANCE.md, пункт 4.
Границы, о которых лучше знать заранее
Один профиль браузера — один процесс. Профилем владеет единственный демон,
а MCP-сервер ходит к нему по HTTP на 127.0.0.1. Отсюда два следствия: демон
должен работать, и нельзя одновременно держать открытым окно входа и работать
через сервер. Пока открыто окно входа, продление сессии не идёт.
Вход руками. «Гарант» авторизуется через OAuth, и автоматизировать это здесь никто не пытается: вы входите в окне браузера сами. Сессия продлевается периодическим запросом (по умолчанию раз в 120 секунд) — поэтому демон и работает постоянно, а не поднимается на время запроса.
Сессия привязана к отпечатку браузера. User-Agent, локаль, часовой пояс
и размер окна у окна входа и у демона обязаны совпадать. Отпечаток снимается
с вашей машины при первом входе и записывается в файл; расхождение выглядит
как «сессия истекла», и garant doctor показывает его отдельным пунктом —
предупреждением, а не ошибкой: менять записанный отпечаток нельзя, к нему
привязана живая сессия.
Демон слушает только 127.0.0.1, и это не настройка, а граница
безопасности: он держит авторизованную сессию платной подписки.
Как устроено
Claude → garant-mcp → HTTP на 127.0.0.1 → garant-daemon → браузер → «Гарант»Демон — единственный владелец профиля браузера; он же продлевает сессию
по таймеру, независимо от того, открыт ли Claude. MCP-сервер браузера
не поднимает вовсе, а демона поднимает сам при первом вызове инструмента.
Карта эндпоинтов «Гаранта» лежит в src/garant_mcp/endpoints.json отдельно
от кода: клиент читает шаги запросов и пути извлечения оттуда.
Подробно — docs/ARCHITECTURE.md. Почему сделано
именно так — docs/DECISIONS.md: журнал решений, каждое
с ценой ошибки.
Если вы клонируете репозиторий
Пользователю пакета это не нужно — только тому, кто собирается править код.
Первым делом в свежем клоне включите защиту от утечки:
git config core.hooksPath hooksВ репозитории лежит hooks/pre-commit: он проверяет содержимое индекса
и не даёт закоммитить живую сессию подписки, токен доступа или путь вашей
машины. Настройка core.hooksPath живёт в .git/config, а он не клонируется —
при клоне приедет файл хука, но не его включение, и без команды выше защита
у вас выключена. Что именно проверяется — hooks/README.md.
Ставить пакет из своего клона, не обращаясь к GitHub, умеет ключ --source
установщика — он и остальные ключи разобраны
выше.
Протокол работы над репозиторием — docs/TEAM.md, живая
приёмка — docs/ACCEPTANCE.md.
Лицензия
Apache License 2.0. Копия — в файле LICENSE, обязательные
уведомления — в NOTICE; при распространении, в том числе в форке,
NOTICE сохраняется.
Два следствия, о которых стоит знать заранее. Лицензия не даёт прав
на товарные знаки (§ 6): «Гарант» — чужой знак, и никаких прав на него этот
репозиторий не передаёт и передать не может. И форк обязан отметить, что файлы
изменены (§ 4(b)) — потому что продукт заявляет проверяемость нормы, а форк,
тихо ослабивший provenance, выглядел бы как оригинал.
Отдельно и прямо: лицензия описывает права на этот код и ничего не говорит
об отношениях с «Гарантом». Допустимость автоматизированного обращения
к чужому сервису — вопрос его правил и вашей подписки, а не нашей лицензии.
Разбор — docs/DECISIONS.md, решение 13.
About tools/ (English)
tools/ is not tied to «Гарант», to Russian, or to law. It is a small pipeline
for building an API client for a web application that has no public API:
record_api.py → record every XHR/fetch of a live session with Playwright
build_endpoints.py → derive an endpoint map from those recordingsThe result is a JSON map — request steps, placeholders, extraction paths — that
a thin client reads at runtime instead of hardcoding URLs. src/garant_mcp/ is
the reference consumer of such a map: see src/garant_mcp/endpoints.json.
Recordings are truncated on capture (1500 chars per string, 5 items per list) and are never committed — they contain a live authenticated session. Anything the generator is unsure about goes into a report for manual review rather than into the map.
If you need a client for a site whose API is undocumented, this half of the repository is the part you want. It requires a browser and your own credentials for the target site.
Available Tools
8 toolsgarant_articleA
Дословный текст конкретной статьи или пункта.
article — номер статьи или пункта: "97", "109", "5". Собирается цепочкой: оглавление → определение страницы → текст страниц → вырезка от заголовка статьи до следующего (отдельного эндпоинта «статья» у Гаранта нет).
Основной инструмент сверки цитат перед подачей документа; обрывать цитату
на середине запрещено. Два ключа ответа читать обязательно:
_предупреждение — конец фрагмента не подтверждён, и риск бывает ДВУХ
родов: текст неполный (конец не поместился в загруженные страницы) либо
ИЗБЫТОЧНЫЙ — в вырезку попал чужой текст, начало соседней статьи. Какой
именно риск остался, сказано в самом предупреждении; избыточность опаснее
тем, что цитата выглядит целой;
_нормализация — присутствует ВСЕГДА: текст получен нормализацией HTML
страницы «Гаранта», и редакционные врезки («Статья … дополнена … с … г.»)
могли попасть в вырезку неотмеченными. Сверяйте с окном подписки.
Дословного сличения с оригиналом инструмент не обещает и обещать не может:
оригинал в машинном виде ему не отдают, есть только нормализованный HTML.
Что именно нормализация ставит в тексте и что в нём меняет, перечислено
в самом ключе _нормализация каждого ответа; второго его написания
здесь нет намеренно: оно разошлось бы с первым молча — и разошлось бы
там, где читатель переносит цитату в подаваемый документ.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | ||
| article | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden, and it does so exceptionally well. It reveals that output is normalized HTML rather than a machine-readable original, that `_нормализация` is always present, that editorial inserts may appear unchecked, that `_предупреждение` can indicate either incomplete or redundant text, and that exact verbatim comparison is not guaranteed. This is far beyond typical behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but almost every sentence adds necessary context for a high-stakes legal citation tool. It is front-loaded with the core purpose and then adds dense, non-redundant caveats. The meta-comment about not repeating `_нормализация` details is slightly verbose but serves a real purpose in preventing instruction drift.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with response warnings, normalization caveats, and chain requirements, the description covers nearly all critical operational context: when to use it, how the cut is made, what the two response keys mean, and what the tool cannot guarantee. The only notable omission is doc_id semantics, but the output schema exists and the most subtle behaviors are already explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description gives article thorough semantics: it is a number like '97', '109', or '5', and it explains how the cut is assembled. However, doc_id is never mentioned or described; only its name and schema title indicate it is a document identifier. Since schema description coverage is 0%, the description partially compensates but leaves one required parameter under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening phrase 'Дословный текст конкретной статьи или пункта' clearly identifies the tool's function: returning verbatim text of a specific article or point. The later phrase 'Основной инструмент сверки цитат' adds a clear functional role. It lacks an explicit verb like 'returns', and it does not explicitly differentiate from sibling tools, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly positions the tool as the main citation-verification step before submitting a document and instructs the user not to truncate a quote mid-sentence. It also explains the chain assembly and notes that no separate 'article' endpoint exists. However, it does not name sibling tools to exclude or give explicit 'use X instead' guidance, so it is clear but not fully directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garant_documentA
Полный текст документа по doc_id + provenance (редакция, дата актуальности, hash).
Использовать, когда нужен весь акт. Для одной статьи/пункта — garant_article (дешевле и точнее).
Полноту проверяют сравнением: страниц — сколько загружено,
страниц_в_документе — сколько их всего (null, если «Гарант» числа
не назвал). Расходятся — ответ несёт _предупреждение, и в нём названа
причина: упёрлись в max_pages (повтор с бо́льшим значением помогает) или
«Гарант» не отдал пакет страниц (не помогает, смотрите логи).
max_pages — сколько страниц загружать. Параметр выставлен наружу потому,
что на длинном акте ответ несёт _предупреждение с советом увеличить
max_pages: совет, которому нельзя последовать, хуже отсутствия совета.
Не указан — берётся умолчание клиента; второго его написания здесь нет
намеренно, оно разошлось бы с первым молча.
_нормализация — присутствует ВСЕГДА, как и у garant_article: текст
получен нормализацией HTML страницы «Гаранта», а не выгрузкой оригинала,
и редакционные врезки могли попасть в него неотмеченными. Обещание
«полный текст» относится к охвату страниц, а не к дословности разметки.
Что именно нормализация ставит в тексте и что в нём меняет, перечислено
в самом ключе _нормализация каждого ответа; второго его написания
здесь нет намеренно: оно разошлось бы с первым молча — и разошлось бы
там, где читатель переносит цитату в подаваемый документ.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | ||
| max_pages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden of behavioral disclosure and does so thoroughly: it exposes the always-present `_нормализация`, the caveat that 'полный текст' means page coverage rather than verbatim markup, the provenance fields, and the exact meaning of `_предупреждение` in both failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and remains dense throughout, but the same 'второго его написания здесь нет намеренно' explanation appears twice and some meta-commentary could be tightened. Still, the length is justified by the tool's complexity and the absence of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with an output schema, the description covers purpose, alternatives, parameter semantics, response keys (`страниц`, `страниц_в_документе`, `_предупреждение`, `_нормализация`), and edge-case behavior. Nothing an agent needs to decide whether to call this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain the parameters. It clearly ties doc_id to the target document and gives max_pages a full treatment: what it controls, why it was exposed, what happens when omitted, and why a second prose copy was deliberately avoided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Полный текст документа по doc_id + provenance', clearly stating it returns the full act text plus editorial metadata. It also distinguishes itself from garant_article by positioning this tool as the one to use when the whole act is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool ('Использовать, когда нужен весь акт') and names the alternative for a single article/punkt ('Для одной статьи/пункта — garant_article (дешевле и точнее)'). It also explains how to react to the warning conditions, including retrying with a larger max_pages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garant_kindsA
Дерево видов информации ГАРАНТа: «Акты органов власти», «Высшие суды» и т.д.
Нужно, чтобы узнать ТОЧНОЕ название вида для garant_practice(kind=...). node_id=0 — верхний уровень (21 узел); подставьте id узла, чтобы раскрыть ветку.
Частый случай: выяснить, в каком виде лежат акты кассационных судов общей юрисдикции — в выдаче «Высшие суды» их нет, там только КС РФ и ВС РФ.
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and covers it well: the tool is a tree browser where node_id=0 is the top level (21 nodes) and each call expands one branch. It also discloses a taxonomy quirk (only RF Constitutional Court and Supreme Court live under «Высшие суды»). It does not explicitly state read-only semantics, but that is strongly implied by the browse-and-expand framing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each earning its place: identity, purpose plus parameter semantics, and a practical domain gotcha. The final common-case sentence is slightly tangential but genuinely useful for the most frequent agent task, so there is no real waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional parameter, output schema present), and the description covers what it is, how to navigate it, and why to call it. Remaining gaps are minor: no statement about error behavior for invalid node ids and no explicit distinction from the tree-like sibling garant_toc.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter meaning — and it does: node_id selects a tree node, the special value 0 means the top level with 21 nodes, and passing an id opens that branch. For the tool's single parameter this is near-complete semantics; only invalid-id behavior is left unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource clearly — a tree of GARANT information kinds with concrete examples («Акты органов власти», «Высшие суды») — and anchors the purpose to supplying exact kind names for garant_practice(kind=...). The action verb is implicit ('подставьте id узла, чтобы раскрыть ветку') rather than explicit, and differentiation from siblings is partial, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says the tool exists to discover the precise kind value needed by the sibling garant_practice, which tells an agent when to reach for it. It adds a concrete common-case walkthrough (cassation court acts are absent from «Высшие суды»). It never contrasts with guarantee_toc or garant_search, but naming its consumer sibling is enough to place it in context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garant_practiceA
Поиск судебной практики: КС РФ, ВС РФ, кассационные суды.
Вид информации и период применяются НА СЕРВЕРЕ Гаранта: /list/kind → /list/filter → /list/page. Уточнение по суду (court) — ЕДИНСТВЕННОЕ исключение: серверного фильтра по суду в этой цепочке нет, поэтому оно делается отбором по подстроке заголовка на клиенте, уже внутри отфильтрованного сервером вида. Значит, выдача по court заведомо неполна: акт нужного суда, чей заголовок назван иначе, в неё не попадёт.
Акты кассационных судов общей юрисдикции в подписке недоступны: вид «Судебная практика» пуст (0 документов), тексты КСОЮ лежат в отдельной базе d.garant.ru, к которой доступа нет. Искать их здесь бессмысленно — рабочий канал один: вид «Высшие суды» (КС РФ и ВС РФ).
kind — вид информации; по умолчанию «Высшие суды» (КС РФ и ВС РФ). Полный перечень видов — garant_kinds. court — уточнение внутри выбранного вида; отбор по заголовку на клиенте (см. исключение выше), а не серверный фильтр. date_from / date_to — "ДД.ММ.ГГГГ".
ВЫДАЧА ЗАВЕДОМО НЕПОЛНАЯ, и ответ говорит об этом ключом
_предупреждение: берётся только первая страница отфильтрованного списка,
список режется по limit, а court отбирается по заголовку на клиенте.
Вывод «у этого суда практики нет» из такого ответа не следует.
Поле номер_в_заголовке — то, что стоит после «№» в заголовке. Номером
ДЕЛА оно является не всегда: там же стоят номера постановлений Пленума
и обзоров практики. Прежнее поле статуса с «✓» удалено: оно называло
подтверждённым то, что никто не подтверждал.
Приоритет источников практики: КС РФ и ВС РФ выше кассационных судов общей
юрисдикции.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| court | No | ||
| limit | No | ||
| query | Yes | ||
| date_to | No | ||
| date_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It goes beyond a basic summary by revealing that results are deliberately incomplete, that court filtering is client-side substring matching, that only the first page is returned, and that the `_предупреждение` key signals this. It also explains the unreliable meaning of `номер_в_заголовке` and the removal of the misleading status field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but exceptionally information-dense. It is front-loaded with the core purpose, then logically organized into server behavior, parameter semantics, output limitations, and field caveats. Every sentence contributes meaningful guidance or a caveat necessary for correct use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, lack of annotations, and zero schema description coverage, the description is notably complete. It explains the filtering architecture, subscription limitations, incomplete-result semantics, parameter meanings, and even warns against drawing incorrect conclusions from empty output. The presence of an output schema reduces the need to describe return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description correctly compensates by explaining `kind`, `court`, `date_from`, and `date_to` in detail, including defaults, client-side behavior, and date format. However, the required `query` parameter is not explicitly described, and `limit` is only indirectly mentioned as a truncation mechanism. This is a minor gap given the tool's search-oriented purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Поиск судебной практики' (search of judicial practice), explicitly naming the courts covered. It is clearly distinguishable from sibling tools like garant_search or garant_document because it is scoped to court practice and court-specific filtering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use and when-not-to-use guidance: it states that cassation court acts are unavailable in the subscription and that searching for them here is pointless, and it identifies the only working channel as the 'Высшие суды' kind. It also directs users to garant_kinds for the full list of kinds.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garant_revision_on_dateA
КАКАЯ редакция действовала на дату. Текста нормы НЕ возвращает.
on_date — «ДД.ММ.ГГГГ». Ответ — запись о редакции: её название, статус,
период действия, изменяющий акт и id_редакции. Ни текста статьи, ни блока
provenance в нём нет.
действует_с и действует_по в ответе — границы ТОГО периода, которым
покрыта запрошенная дата (периодов у редакции бывает несколько; чем это
вызвано, карта эндпоинтов не объясняет); он же отдельным ключом
_период_на_дату. Полный перечень периодов — в ключе периоды
и в garant_revisions.
В день СТЫКА редакций под дату подходят обе: границу периода МЫ читаем
включительно с обеих сторон, а как её трактует сам «Гарант», не проверено.
Тогда в ответе стоит ключ _предупреждение: он называет всех кандидатов
и говорит, что отданная выбрана порядком списка, а не доказана. Тот же
ключ появляется, среди прочего, когда карта эндпоинтов не описывает список
периодов, когда периодов у записи больше одного и когда сама дата
в действует_с не разобралась как дата. Перечень здесь неполный
намеренно: ветвей у ключа больше, чем описание способно перечислить
не устаревая, — полон только сам ключ, и читать надо его.
Применять, когда норма цитируется применительно к прошлому событию: в жалобе на акт годичной давности норма приводится в редакции, действовавшей на дату того акта, а не в сегодняшней. Ссылка на редакцию, которой на тот момент не существовало, — самостоятельный повод отклонить довод.
ЧЕМ ВЗЯТЬ ТЕКСТ ТОЙ РЕДАКЦИИ. Прямого способа нет: garant_article и garant_document параметра редакции не принимают и собирают provenance по ДЕЙСТВУЮЩЕЙ редакции. Поэтому текст, взятый ими, относится к сегодняшнему дню, даже если этот инструмент вернул другую редакцию, — и ставить их рядом как цитату на прошлую дату нельзя.
Есть непроверенная возможность: id_редакции — это documentId самой
редакции, и он МОЖЕТ приниматься как doc_id в garant_article. Проверить это
без живой подписки невозможно, поэтому до проверки считать, что способа нет,
и говорить пользователю прямо: редакция установлена, дословный текст в ней —
нет.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | ||
| on_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full responsibility, and it delivers: it discloses absent fields (no text/provenance), inclusive edge-date behavior, the _предупреждение key and its intentionally incomplete branches, and an unverified possibility about id_редакции as documentId. It openly labels unchecked assumptions with 'не проверено' and 'МОЖЕТ приниматься'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first line states the core function and the no-text caveat; subsequent sections are clearly delimited (response shape, edge dates, usage, text retrieval) and each paragraph carries non-redundant information. Despite length, no filler is present given the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nuanced legal-history tool with no annotations and an output schema, the description covers input format, response semantics, edge-case warnings, when to use it, and how to (not) obtain revision text. It even tells the agent what to tell the user when direct text retrieval is impossible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description compensates for on_date by specifying the format 'ДД.ММ.ГГГГ' and explaining how the date maps to period boundaries. doc_id is less explicitly described—it is only sensible by context and a later reference to documentId—so a small semantic gap remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'КАКАЯ редакция действовала на дату' and immediately clarifies it does not return the norm text. It names the response content (revision record with status, period, amending act, id) and distinguishes itself from garant_article, garant_document, and garant_revisions, so an agent can disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage context is given: 'Применять, когда норма цитируется применительно к прошлому событию' with a concrete example. The 'ЧЕМ ВЗЯТЬ ТЕКСТ ТОЙ РЕДАКЦИИ' section explicitly states that garant_article and garant_document do not accept a revision parameter and cannot be used for past-date citation, telling when not to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garant_revisionsA
Список редакций документа и изменяющих актов. Кэш не используется.
Для каждой редакции: статус (действующая / утратила силу), период действия,
изменяющий акт, id_редакции. Периодов бывает больше одного — тогда все
они перечислены в ключе периоды, а действует_с/действует_по называют
лишь первый из них. Смежность периодов СЧИТАЕТСЯ по датам: разбиение
непрерывного срока на записи перерывом не называется. Но держится она
не всегда на одной арифметике: период, начинающийся на следующий день
после конца предыдущего, смежен лишь потому, что границу МЫ читаем
включительно, а как её трактует сам «Гарант», на живой базе НЕ проверено.
Там, где запись называет периоды смежными, на чём эта смежность стоит,
сказано в её ключе _предупреждение. Там, где посчитан разрыв, запись
об этом молчит: непрерывность там не утверждается вовсе, а действует_с
ошибается в сторону поздней даты. ЧЕМ вызван посчитанный разрыв,
мы не знаем: карта эндпоинтов этого не объясняет.
Наше прочтение — ЕСЛИ акт приостанавливали и возвращали в силу — на живой
базе НЕ проверено, и выводить из перерыва между периодами, что норма
не действовала, инструмент оснований не даёт.
периоды равно null означает, что карта эндпоинтов их не описывает.
Сказанное едет не только здесь, но и ключом _предупреждение у самой
записи, и ветвей у ключа больше, чем названо выше: там же говорится,
например, когда сама дата в действует_с не разобралась как дата.
Перечислить их здесь не устаревая описание не может — полон только сам
ключ, и читать надо его: описание инструмента остаётся у инструмента,
а запись уходит дальше — в пересказ, в черновик, в следующий шаг.
Основа мониторинга: если действующая редакция новее той, в которой норма была процитирована раньше, цитату надо пересверить — сама по себе она не устаревает заметно.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and succeeds. It discloses that cache is not used, period adjacency is counted by dates, boundaries are read inclusively, live-base behavior is unverified, and gaps between periods do not imply the norm was inactive. It also points to the `_предупреждение` key for additional warning branches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is very long and includes meta-commentary such as 'Перечислить их здесь не устаревая описание не может' and a philosophical aside about where the description ends and the record continues. While the caveats are relevant, the presentation is rambling and harder to scan than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema, the description is nearly complete: it covers statuses, period semantics, multiple periods, null periods, warning keys, and monitoring logic. It falls short only by not documenting doc_id and not routing the agent to garant_revision_on_date, but these are secondary to the extensive behavioral detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter, doc_id, with 0% schema description coverage. The description never explains what doc_id should be, its format, or how to obtain it, only referring to 'документа' generically. Low coverage means the description should compensate, but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence 'Список редакций документа и изменяющих актов' clearly states the tool's deliverable and resource. It is distinguishable from siblings like garant_document or garant_article by its focus on revisions and amending acts, though it does not explicitly name any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final paragraph provides an explicit monitoring use case: if the current revision is newer than the revision in which a norm was cited, the citation should be rechecked. This gives clear context for when to use the tool, but it does not contrast it with garant_revision_on_date or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garant_searchA
Поиск документов в базе ГАРАНТ по реквизитам или контексту.
query — 3–5 КЛЮЧЕВЫХ СЛОВ, а не фраза-тезис. Гарант трактует запрос как конъюнкцию всех слов: длинная формулировка даёт одно-два случайных попадания или ноль. «продление домашнего ареста мотивированность» — рабочий запрос; «суд обязан привести конкретные фактические обстоятельства» — нет. Возвращает {total, страница, всего_страниц, items[...], kinds[]}, где kinds — распределение находок по видам (акты власти, высшие суды, комментарии). doc_id использовать дальше в garant_document / garant_article / garant_revisions.
Перечень находок кэшируется (тексты норм — никогда). Ответ из кэша несёт
в provenance из_кэша, дата_записи, возраст_часов и
срок_годности_часов: документ,
появившийся в базе после записи, в таком ответе не появится.
use_cache=False — потребовать свежего похода в «Гарант»; применять, когда
важна именно сегодняшняя полнота выдачи.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| query | Yes | ||
| use_cache | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to rely on, the description fully carries the behavioral burden. It discloses that GARANT treats queries as a conjunction of words, that result lists are cached while text is not, that cached responses include provenance fields, and that documents added after cache entry will not appear. This is substantial, non-obvious behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but well-structured: purpose, query constraints with examples, return shape, downstream use, then cache mechanics. Every sentence earns its place and the most critical usage pitfall is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential operational context: what the tool returns, how to phrase queries, how caching affects freshness, and how to route the resulting doc_id into sibling tools. Given the tool's moderate complexity and absence of annotations, this is complete enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides rich semantics for query (3–5 keywords, conjunction behavior, good/bad examples) and for use_cache (freshness behavior and provenance). Page and limit are not explained but their names, defaults, and the returned 'страница'/'всего_страниц' fields make their meaning reasonably inferable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Поиск документов в базе ГАРАНТ по реквизитам или контексту.' It makes the search behavior immediately clear and distinguishes it from sibling document-retrieval tools by noting that doc_id is used downstream in garant_document / garant_article / garant_revisions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong usage guidance for the query parameter and the cache: use_cache=False is recommended when today's completeness matters. It also implicitly explains the tool's role in the pipeline via 'doc_id использовать дальше в garant_document / garant_article / garant_revisions,' though it does not explicitly state when not to use this tool versus each sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
garant_tocA
Оглавление документа: разделы и статьи с идентификаторами элементов.
Полезно, когда garant_article не нашёл статью — посмотреть, как она названа в акте.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It discloses the return structure (sections, articles, element IDs) and the useful fallback scenario, but it does not mention error behavior, prerequisites, or how the tool behaves when doc_id is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core purpose and followed by a practical usage note. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one required parameter and an output schema already present, so return values do not need elaboration. The description provides purpose and a concrete use case, but the undocumented doc_id parameter and lack of behavioral notes keep it slightly short of fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not compensate: doc_id is never explained in terms of format, origin, or how to obtain it. The word 'document' in the description hints at the parameter's role, but an agent is left to infer the ID source and expected value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a document's table of contents: sections and articles with element identifiers. It also distinguishes itself from the sibling garant_article by describing a specific fallback scenario, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says this tool is useful when garant_article does not find an article, providing clear when-to-use guidance and naming an alternative. It lacks explicit 'when not to use' exclusions, but the stated context is sufficient for most agent decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
garant_article - First observed
garant_document - First observed
garant_kinds - First observed
garant_practice - First observed
garant_revision_on_date - First observed
garant_revisions - First observed
garant_search - First observed
garant_toc
TDQS
Scored across 8 tools
Each tool maps to a distinct resource or action: general search, table of contents, full document, single article, revision list, revision-on-date, practice search, and information-type tree. The only potentially overlapping pair (garant_document vs garant_article) is explicitly differentiated by scope and cost, while garant_search vs garant_practice is clearly separated by normative documents vs court practice.
All tools share a consistent garant_ prefix and snake_case style, and most names are resource nouns such as document, article, revisions, kinds, toc, and practice. Minor deviations are garant_search as a verb, garant_toc as an abbreviation, and garant_revision_on_date as a noun phrase rather than a verb_noun pattern, so the scheme is predictable but not perfectly uniform.
Eight tools is well-scoped for a specialized legal-research server: there are no redundant tools, and the set covers search, retrieval, navigation, revision history, and court-practice search without bloat. Each tool has a clear role, and the count matches the stated purpose.
The set covers the core workflow: search, TOC navigation, full-document retrieval, article-level citation, revision history, and revision-on-date lookup. The main gap is that no tool can return the verbatim text of a historical revision, which the description explicitly calls out, and practice search is deliberately limited to first-page results with client-side court filtering. These are documented limitations but can be worked around for most monitoring and citation tasks.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Resolve, search and verify legal citations against the official sources, with provenance.
Web search, page reading and structured extraction for AI agents, with strong RU coverage
Search 18M+ legal documents worldwide — case law, legislation, and doctrine across 110+ countries.
Russian company lookup (EGRUL/INN), Cyrillic search, RU page to Markdown. Pay per call in USDC.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides AI assistants with up-to-date legal documents from official sources, enabling accurate legal information retrieval and analysis.17-
- FlicenseAqualityDmaintenanceEnables Claude Desktop to search the CanLII Canadian legal database and retrieve the full text of matching legal documents.1-
- AlicenseAqualityDmaintenanceEnables searching and retrieving Russian legal cases, court documents, participant information, judge statistics, and hearing schedules from Casebook/Pravo.ru.88MIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude to search and retrieve legal sources from Mexican and inter-American courts (SCJN, TFJA, DOF, Corte IDH) with complete citations and official links.MIT