Skip to main content
Glama

garant-mcp

Ассистент, который цитирует закон по базе «Гарант», а не по памяти. garant-mcp создан для одной задачи: чтобы Claude или Codex при подготовке юридических документов работали с действующим текстом нормы, нужной редакцией и реальной практикой — и каждую ссылку отдавали с реквизитами, по которым её можно сверить.

Для чего он создан

Языковая модель, отвечающая по памяти, ошибается в праве не грубо, а правдоподобно, и именно поэтому опасно. Искажения типовые:

  • сдвиг квантора — частный случай выдаётся за общее правило и наоборот: «никогда не вправе» там, где закон говорит «в случаях, предусмотренных…»;

  • смешение полномочий субъектов — права следователя, дознавателя, органа дознания и оперативного сотрудника сливаются в одно «правоохранительный орган может»;

  • потеря ограничительной оговорки — норма приводится без условия, которое делает её применимой;

  • устаревшая или несуществующая редакция — статья цитируется в том виде, в каком её запомнила модель, а не в том, какой действовал на дату события;

  • правдоподобные реквизиты — номер, дата и название акта выглядят верно и не существуют.

В исковом заявлении, жалобе или заключении каждое такое искажение — не погрешность стиля, а довод, который отклонят суд и противная сторона, и повод усомниться во всём документе.

garant-mcp убирает причину: ассистент перестаёт отвечать по памяти. Норма, редакция и практика извлекаются из базы «Гарант» в момент запроса, и ответ строится на извлечённом тексте. Модель рассуждает — база отвечает за факт.

Пример. На вопрос о полномочиях оперативного сотрудника при проведении оперативно-розыскных мероприятий ассистент без базы уверенно ответил, что назначать исследования и экспертизы он не вправе, — сдвиг квантора: общий запрет там, где закон разграничивает процессуальную экспертизу и исследование в рамках оперативно-розыскной деятельности. С подключённым garant-mcp тот же вопрос привёл ассистента к тексту Федерального закона «Об оперативно-розыскной деятельности» и УПК РФ в действующих редакциях, и ответ был построен на нормах — со статьями, редакцией и изменяющими актами. В практике автора после подключения базы ошибки такого рода в подготовке процессуальных документов перестали возникать.

Related MCP server: CanLII MCP Server

Как меняется работа

Раньше: открыть «Гарант», найти документ, пролистать до статьи, проверить редакцию, скопировать, вставить, сверить — и так с каждой ссылкой. Теперь один вопрос ассистенту своими словами: он сам находит документ, открывает нужную статью, определяет, какая редакция действовала на дату события, поднимает практику Верховного и Конституционного судов — и текст с редакцией, датой начала её действия и изменяющим актом уже стоит в вашем документе.

Так готовятся иск, жалоба, заключение, претензия, договор; так же — смета с обоснованием по нормативам, закупочная документация, кадровый приказ, ответ контролирующему органу. Везде, где нужна точная ссылка на норму, ассистент делает её сам и показывает, откуда взял. Сверка цитаты перед подачей занимает минуту: реквизиты и отпечаток текста приходят вместе с ответом.

Что умеет

Восемь инструментов, которыми пользуется ассистент:

инструмент

что делает

garant_search

поиск по всей базе — акты, судебные решения, комментарии, формы

garant_document

текст документа; у длинных актов — первые страницы, о чём ответ предупреждает сам

garant_article

дословный текст конкретной статьи или пункта

garant_toc

оглавление документа

garant_revisions

все редакции акта: периоды действия, изменяющие акты

garant_revision_on_date

какая редакция действовала на нужную дату

garant_practice

судебная практика высших судов с фильтрами по виду и периоду

garant_kinds

дерево видов информации базы

Текст статьи в нужной редакции берётся по её id_редакции из garant_revision_on_date или garant_revisions — ассистент делает это сам, когда речь идёт о событии в прошлом.

Почему этому можно доверять

К тексту статьи прикладывается блок provenance: редакция, дата начала её действия, изменяющий акт, дата проверки и отпечаток ровно того текста, который отдан. Цитату с таким блоком сверяют, а не принимают на веру — это главное отличие от «спросить у ИИ про закон». Там, где выдача неполна или требует сверки, инструмент сообщает об этом сам — в полях _предупреждение и _нормализация.

ключ provenance

что означает

doc_id

идентификатор, по которому взят текст: документа или его редакции

редакция, действует_с

в какой редакции взят текст и с какой даты она действует

изменяющий_акт

каким актом введена

источник, дата_проверки

откуда и когда получено

hash_текста, правило_отпечатка

отпечаток отданного текста и версия правила его вычисления

оговорки_о_редакции

появляется только когда есть повод уточнить редакцию — и называет его

Доступ — ваша подписка

Работает через вашу собственную подписку «Гаранта»: вы один раз входите в своём браузере, сессия живёт в профиле браузера на вашем компьютере и продлевается автоматически. Репозиторий не содержит базы, не хранит и не передаёт учётные данные, ничего не проксирует. Без действующей подписки сервер работать не будет.

Что нужно

  • Действующая подписка «Гаранта» — логин и пароль от internet.garant.ru.

  • Один из клиентов: Claude Desktop, Claude Code или Codex (агент OpenAI по подписке ChatGPT). Чат ChatGPT локальные MCP-серверы не запускает — для подписки ChatGPT нужен Codex, см. ниже.

  • git — пакет ставится из репозитория. Windows: winget install --id Git.Git -e; macOS: brew install git; Debian/Ubuntu: sudo apt install git. После установки откройте новое окно консоли.

Python ставить не нужно — установщик поставит сам. Права администратора не требуются; единственное исключение — включение длинных путей на Windows, см. «Если не работает».


Установка: три шага

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)))"

macOS и Linux — в Терминале:

curl -LsSf https://raw.githubusercontent.com/semenboss95-design/garant-mcp/main/install.sh -o install.sh && sh install.sh

Установщик ставит менеджер пакетов uv, сам пакет и браузер Chromium, прописывает сервер в Claude Desktop и Claude Code, открывает окно входа и заканчивает диагностикой. Каждый шаг печатает результат; в конце — сводка. Повторный запуск безопасен: ничего не дублируется, вход не сбрасывается.

2. Вход в подписку

В открывшемся окне браузера введите логин и пароль «Гаранта», дождитесь личного кабинета и закройте окно. Если окно закрыли раньше или оно не открылось — вход делается отдельно:

garant login

Проверка, что подписка отвечает:

garant doctor --живой

3. Перезапуск клиента

Claude и Codex читают список серверов при старте. Закройте клиент полностью (на macOS — Cmd+Q) и откройте снова. Спросите: «найди в Гаранте статью 108 УПК РФ» — при первом обращении клиент попросит разрешение на инструмент, разрешите.


Codex (подписка ChatGPT)

Codex — агент OpenAI (приложение, командная строка и расширение для редактора), доступный по подписке ChatGPT. В отличие от чата ChatGPT он запускает локальные MCP-серверы. Регистрация — одной командой после установки:

garant register --codex

Команда дописывает в ~/.codex/config.toml таблицу [mcp_servers.garant] с полным путём к серверу и таймаутом запуска, не трогая остальные настройки (если файл уже был, рядом остаётся его копия .bak). Каталог настроек переопределяется переменной CODEX_HOME. После регистрации перезапустите Codex. Снять запись — garant unregister --codex. Сервер проверен в живом Codex 09.09.2026 по записи такого вида, вписанной руками.

Другие MCP-клиенты, умеющие запускать локальную программу, работают с записью вида {"command": "garant-mcp"} — её вписывают в конфигурацию клиента руками; если клиент не видит каталог команд uv, вместо имени ставится полный путь к garant-mcp.


Управление: команда garant

Одна команда на всех системах:

garant doctor          диагностика; --живой добавляет запрос к «Гаранту»
garant status          коротко: демон, сессия, версия, каталог состояния
garant login           войти в подписку
garant setup           повторить установочные шаги
garant start | stop | restart
garant logs [N]        последние N строк журнала демона
garant register        прописать сервер у Claude Desktop и Claude Code;
                       --codex — у Codex; --project ПУТЬ — в .mcp.json проекта
garant unregister      снять запись
garant autostart on    поднимать демона при входе в систему
garant update          обновить пакет и перезапустить демона — вход сохраняется
garant uninstall       снять регистрации, автозапуск и демона; профиль подписки —
                       только с --purge; сам пакет — uv tool uninstall garant-mcp
garant migrate ПУТЬ    перенести профиль из прежней установки

garant без аргументов печатает полный список. Каждый красный пункт garant doctor сопровождается командой, которой он чинится.


Если не работает

garant не находится как команда. Откройте новое окно консоли. Если не помогло — uv tool update-shell, затем снова новое окно.

Claude или Codex не видят инструменты. garant register (для Codex — garant register --codex), затем garant doctor и полный перезапуск клиента.

«Сессия подписки недействительна» (сервер ответил 401 или 403). Вход истёк: garant login.

Windows: установка пакета упала с «WinError 206» или установка Chromium — с ошибкой Python. Выключены длинные пути. В PowerShell от администратора один раз:

New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name LongPathsEnabled -Value 1 -PropertyType DWord -Force

Затем повторите установку в обычном окне.

Ключи установщика

Для проверки установки без подписки и без записи в конфигурации клиентов установщик запускается из файла с ключами:

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

ставить из своего каталога или адреса

-Источник ПУТЬ (-Source)

--source ПУТЬ

не открывать окно входа

-БезВхода (-NoLogin)

--no-login

не трогать конфигурации клиентов

-БезРегистрации (-NoRegister)

--no-register

сверить, что автозапуск не появился

-БезАвтозапуска (-NoAutostart)

--no-autostart

справка

-Справка (-Help, -h)

--help, -h

--source принимает git-адрес, имя пакета, файл .whl или корень распакованного репозитория. С --no-register шаг garant setup пропускается целиком: пакет ставится, но Chromium, регистрация и вход выполняются потом командами garant setup и garant login.


Границы

Текст статьи — нормализованный HTML страницы «Гаранта», поэтому редакционные врезки («Статья … дополнена … с … г.») могут оказаться внутри цитаты; каждый ответ с текстом несёт оговорку _нормализация, и перед подачей документа цитату сверяют с окном подписки. Судебная практика отдаётся первой страницей отфильтрованного списка — фильтры «Гаранта» по виду и периоду серверные, остальные страницы не запрашиваются; уточнение по конкретному суду делается по заголовку и объявляется в _предупреждение; акты кассационных судов общей юрисдикции лежат в другой базе «Гаранта» и через подписку недоступны. У garant_toc, garant_kinds, garant_revisions и garant_revision_on_date блока provenance нет: они возвращают структуру и сведения о редакциях, а не текст нормы. Клиент построен по записанному трафику «Гаранта», публичного API у сервиса нет; при изменении API сервиса ответы инструментов проверяются и карта эндпоинтов обновляется.


Как устроено

Claude / Codex → garant-mcp → HTTP на 127.0.0.1 → garant-daemon → браузер → «Гарант»

Демон — единственный владелец профиля браузера; он продлевает сессию по таймеру независимо от того, открыт ли клиент, слушает только 127.0.0.1 и поднимается автоматически при первом вызове инструмента. Отпечаток браузера (User-Agent, локаль и часовой пояс вашей машины плюс фиксированный размер окна) снимается при первом входе и сохраняется — к нему привязана сессия. Карта эндпоинтов лежит в src/garant_mcp/endpoints.json отдельно от кода.

Устройство — docs/ARCHITECTURE.md; журнал решений с обоснованиями — docs/DECISIONS.md.


Разработчикам

Первым делом в свежем клоне включите защиту от утечки секретов:

git config core.hooksPath hooks

hooks/pre-commit проверяет содержимое индекса и не пропустит живую сессию, токен или путь машины. Что именно проверяется — hooks/README.md. Протокол работы — docs/TEAM.md, живая приёмка — docs/ACCEPTANCE.md. CI прогоняет ruff, тесты, сборку пакета и дымовой тест MCP по stdio на Windows и Linux.


Лицензия

Apache License 2.0; обязательные уведомления — в NOTICE, при распространении и в форках сохраняются. Лицензия не даёт прав на товарный знак «Гарант» и описывает права на этот код; допустимость автоматизированного обращения к сервису определяется его правилами и вашей подпиской.


About tools/ (English)

tools/ is a small, service-agnostic pipeline for building an API client for a web application that has no public API:

record_api.py      → record the XHR/fetch traffic of a live session with Playwright (analytics noise filtered out)
build_endpoints.py → derive an endpoint map from those recordings

The 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 (src/garant_mcp/endpoints.json). Recordings are truncated on capture and never committed: they contain a live authenticated session.

Available Tools

8 tools
garant_articleA

Дословный текст конкретной статьи или пункта.

article — номер статьи или пункта: "97", "109", "5". Собирается цепочкой: оглавление → определение страницы → текст страниц → вырезка от заголовка статьи до следующего (отдельного эндпоинта «статья» у Гаранта нет).

Основной инструмент сверки цитат перед подачей документа; обрывать цитату на середине запрещено. Два ключа ответа читать обязательно: _предупреждение — конец фрагмента не подтверждён, и риск бывает ДВУХ родов: текст неполный (конец не поместился в загруженные страницы) либо ИЗБЫТОЧНЫЙ — в вырезку попал чужой текст, начало соседней статьи. Какой именно риск остался, сказано в самом предупреждении; избыточность опаснее тем, что цитата выглядит целой; _нормализация — присутствует ВСЕГДА: текст получен нормализацией HTML страницы «Гаранта», и редакционные врезки («Статья … дополнена … с … г.») могли попасть в вырезку неотмеченными. Сверяйте с окном подписки. Дословного сличения с оригиналом инструмент не обещает и обещать не может: оригинал в машинном виде ему не отдают, есть только нормализованный HTML. Что именно нормализация ставит в тексте и что в нём меняет, перечислено в самом ключе _нормализация каждого ответа; второго его написания здесь нет намеренно: оно разошлось бы с первым молча — и разошлось бы там, где читатель переносит цитату в подаваемый документ.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYes
articleYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 страницы «Гаранта», а не выгрузкой оригинала, и редакционные врезки могли попасть в него неотмеченными. Обещание «полный текст» относится к охвату страниц, а не к дословности разметки. Что именно нормализация ставит в тексте и что в нём меняет, перечислено в самом ключе _нормализация каждого ответа; второго его написания здесь нет намеренно: оно разошлось бы с первым молча — и разошлось бы там, где читатель переносит цитату в подаваемый документ.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYes
max_pagesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 узла, чтобы раскрыть ветку.

Частый случай: выяснить, в каком виде лежат акты кассационных судов общей юрисдикции — в выдаче «Высшие суды» их нет, там только КС РФ и ВС РФ.

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 отбирается по заголовку на клиенте. Вывод «у этого суда практики нет» из такого ответа не следует.

Поле номер_в_заголовке — то, что стоит после «№» в заголовке. Номером ДЕЛА оно является не всегда: там же стоят номера постановлений Пленума и обзоров практики. Прежнее поле статуса с «✓» удалено: оно называло подтверждённым то, что никто не подтверждал. Приоритет источников практики: КС РФ и ВС РФ выше кассационных судов общей юрисдикции.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
courtNo
limitNo
queryYes
date_toNo
date_fromNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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. Проверить это без живой подписки невозможно, поэтому до проверки считать, что способа нет, и говорить пользователю прямо: редакция установлена, дословный текст в ней — нет.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYes
on_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 означает, что карта эндпоинтов их не описывает. Сказанное едет не только здесь, но и ключом _предупреждение у самой записи, и ветвей у ключа больше, чем названо выше: там же говорится, например, когда сама дата в действует_с не разобралась как дата. Перечислить их здесь не устаревая описание не может — полон только сам ключ, и читать надо его: описание инструмента остаётся у инструмента, а запись уходит дальше — в пересказ, в черновик, в следующий шаг.

Основа мониторинга: если действующая редакция новее той, в которой норма была процитирована раньше, цитату надо пересверить — сама по себе она не устаревает заметно.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior5/5

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.

Conciseness2/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_tocA

Оглавление документа: разделы и статьи с идентификаторами элементов.

Полезно, когда garant_article не нашёл статью — посмотреть, как она названа в акте.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 8 tool updatesv0.1.0
    • First observedgarant_article
    • First observedgarant_document
    • First observedgarant_kinds
    • First observedgarant_practice
    • First observedgarant_revision_on_date
    • First observedgarant_revisions
    • First observedgarant_search
    • First observedgarant_toc

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers