<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://svacer.ispras.ru/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mitrofanov</id>
	<title>Svacer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://svacer.ispras.ru/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mitrofanov"/>
	<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Special:Contributions/Mitrofanov"/>
	<updated>2026-07-09T22:04:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:CLI/cleanup&amp;diff=3576</id>
		<title>Help:CLI/cleanup</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:CLI/cleanup&amp;diff=3576"/>
		<updated>2026-05-27T07:48:17Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Параметры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Автоматическое удаление снимков =&lt;br /&gt;
&lt;br /&gt;
== Обзор ==&lt;br /&gt;
&lt;br /&gt;
Удаление происходит по умолчанию раз в 24 часа (время можно задать при запуске сервера опцией &amp;lt;code&amp;gt;--snapshots-cleanup-period&amp;lt;/code&amp;gt;, либо в конфигурационном файле опцией &amp;lt;code&amp;gt;snapshots-cleanup-period&amp;lt;/code&amp;gt;, либо переменной окружения &amp;lt;code&amp;gt;SVACER_CLEANUP_SNAPSHOTS_PERIOD&amp;lt;/code&amp;gt;, но не меньше 15 минут). Первое удаление всех подходящих снимков будет выполнено через указанное время после запуска сервера.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Принцип работы:&#039;&#039;&#039; происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление самых старых по времени создания подходящих снимков и заносится отметка в таблицу удаленных снимков и в системный журнал. После этого происходит удаление пустых веток и проектов в соответствии с правилами удаления. Также информация об удалении через cleanup вносится в системный журнал.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность доступна пользователям с доступом &#039;&#039;&#039;ServerOperations&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Добавление нового правила удаления ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --project &amp;lt;project&amp;gt; --branch &amp;lt;branch&amp;gt; --snapshot &amp;lt;snapshot&amp;gt; --keep-time &amp;lt;nowiki&amp;gt;&amp;lt;time&amp;gt;&amp;lt;/nowiki&amp;gt; --min-snapshots &amp;lt;min&amp;gt; --cleanup-type &amp;lt;type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Параметры ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--project&amp;lt;/code&amp;gt; — проект, в котором искать снимки для удаления (&#039;&#039;&#039;обязательный&#039;&#039;&#039;, используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех проектов)&lt;br /&gt;
* &amp;lt;code&amp;gt;--branch&amp;lt;/code&amp;gt; — ветка, в которой искать снимки для удаления (&#039;&#039;&#039;обязательный&#039;&#039;&#039;, используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех веток)&lt;br /&gt;
* &amp;lt;code&amp;gt;--snapshot&amp;lt;/code&amp;gt; — снимок, который удалять (&#039;&#039;&#039;обязательный&#039;&#039;&#039;, используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех снимков)&lt;br /&gt;
* &amp;lt;code&amp;gt;--keep-time&amp;lt;/code&amp;gt; — время, которое должно пройти после создания &#039;&#039;&#039;(НЕ импорта)&#039;&#039;&#039; снимка, чтобы его удалить. Задается в формате Go Duration (например, &amp;lt;code&amp;gt;33h5m&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;720h&amp;lt;/code&amp;gt;). По умолчанию &#039;&#039;&#039;720 часов&#039;&#039;&#039; (30 дней).&lt;br /&gt;
* &amp;lt;code&amp;gt;--min-snapshots&amp;lt;/code&amp;gt; — количество снимков, которое необходимо оставлять в ветке, подходящей под паттерн project + branch. По умолчанию 0.&lt;br /&gt;
* &amp;lt;code&amp;gt;--cleanup-type&amp;lt;/code&amp;gt; — тип очистки. Возможные значения - project, branch, snapshot (по умолчанию snapshot). При указании snapshot будут очищаться снимки в соответствии с паттерном проект+ветка+снимок и проверяться &amp;lt;code&amp;gt;keep-time&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;min-snapshots&amp;lt;/code&amp;gt;. При указании branch будут удаляться пустые ветки в соответствии с паттерном project + branch. При указании project Будут удаляться пустые проекты (у которых нет веток) в соответствии с паттерном project. При указании branch или project невозможно указать &amp;lt;code&amp;gt;keep-time&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;min-snapshots&amp;lt;/code&amp;gt;, эти флаги не учитываются.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значения параметров &amp;lt;code&amp;gt;--project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--snapshot&amp;lt;/code&amp;gt; можно задавать как:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Название или UUID:&#039;&#039;&#039;&lt;br /&gt;
 --project &amp;quot;MyProject&amp;quot;&lt;br /&gt;
 --project &amp;quot;550e8400-e29b-41d4-a716-446655440000&amp;quot;  # UUID проекта&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; (любое количество любых символов):&#039;&#039;&#039;&lt;br /&gt;
 --project &amp;quot;Dev*&amp;quot;         # DevProject, Development&lt;br /&gt;
 --branch &amp;quot;*test*&amp;quot;        # test, my-test, testing&lt;br /&gt;
 --snapshot &amp;quot;nightly-*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Регулярные выражения (с префиксом &amp;lt;code&amp;gt;re:&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 --snapshot &amp;quot;re:^v[0-9]+\.[0-9]+\.[0-9]+$&amp;quot;    # v1.0.0, v2.3.5&lt;br /&gt;
 --branch &amp;quot;re:^feature/[0-9]+$&amp;quot;               # feature/123&lt;br /&gt;
&lt;br /&gt;
== Добавление запрета на удаление ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-exclude-rule --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --project &amp;lt;project&amp;gt; --branch &amp;lt;branch&amp;gt; --snapshot &amp;lt;snapshot&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Параметры ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--project&amp;lt;/code&amp;gt; — проект, в котором искать снимки для удаления (&#039;&#039;&#039;обязательный&#039;&#039;&#039; , используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех проектов)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--branch&amp;lt;/code&amp;gt; — ветка (&#039;&#039;&#039;обязательный&#039;&#039;&#039;, используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех веток)&lt;br /&gt;
* &amp;lt;code&amp;gt;--snapshot&amp;lt;/code&amp;gt; — снимок (&#039;&#039;&#039;обязательный&#039;&#039;&#039;, используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех снимков)&lt;br /&gt;
Флаги проекта, ветки и снимка работают аналогично с флагами в &amp;lt;code&amp;gt;--add-rule&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Удаление правила ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup delete --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --id &amp;lt;config id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
* &amp;lt;code&amp;gt;--id&amp;lt;/code&amp;gt; — ID конфигурации из таблицы правил или запретов (получить через &amp;lt;code&amp;gt;cleanup list&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Вывести таблицу ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --type &amp;lt;rule|exclude-rule|log&amp;gt; --format &amp;lt;table|json&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
* &amp;lt;code&amp;gt;--type&amp;lt;/code&amp;gt; — тип таблицы: &amp;lt;code&amp;gt;rule&amp;lt;/code&amp;gt; — таблица правил удаления (по умолчанию); &amp;lt;code&amp;gt;exclude-rule&amp;lt;/code&amp;gt; — таблица запретов на удаление; &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; — таблица удаленных снимков&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--format&amp;lt;/code&amp;gt; — формат вывода: &amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt; — человекочитаемый вывод (по умолчанию); &amp;lt;code&amp;gt;json&amp;lt;/code&amp;gt; — JSON формат&lt;br /&gt;
== Запуск очистки вручную ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup run --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запускает процесс очистки немедленно (вне расписания).&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
=== Добавление нового правила ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Удаление по времени&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;Devel*&amp;quot; --branch &amp;quot;2025&amp;quot; --snapshot &amp;quot;*&amp;quot; --keep-time 240h&lt;br /&gt;
&lt;br /&gt;
Удалятся снимки старше 240 часов (10 дней) в проектах, начинающихся с &amp;quot;Devel&amp;quot;, в ветке &amp;quot;2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ограничение количества&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;*&amp;quot; --branch &amp;quot;main&amp;quot; --snapshot &amp;quot;*&amp;quot; --min-snapshots 20 --keep-time 12h&lt;br /&gt;
&lt;br /&gt;
В любом проекте в ветке &amp;quot;main&amp;quot; всегда будет не более 20 снимков; остальные снимки старше 12 часов будут удаляться.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Очистка пустых веток&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;*&amp;quot; --branch &amp;quot;master&amp;quot; --cleanup-type branch&lt;br /&gt;
&lt;br /&gt;
В любом проекте ветка &amp;quot;master&amp;quot; будет удаляться, если в ней нет снимков.&lt;br /&gt;
&lt;br /&gt;
=== Добавление запрета на удаление ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-exclude-rule --user admin --password admin --project &amp;quot;Devel*&amp;quot; --branch &amp;quot;2025&amp;quot; --snapshot &amp;quot;test*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Снимки, начинающиеся с &amp;quot;test&amp;quot;, в проектах &amp;quot;Devel*&amp;quot; и ветке &amp;quot;2025&amp;quot; &#039;&#039;&#039;никогда не удаляются правилами cleanup&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Вывод таблицы правил ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user admin --password admin --type rule&lt;br /&gt;
[[File:Cleanup rules.png|none|thumb|955x955px]]&lt;br /&gt;
&lt;br /&gt;
=== Вывод таблицы запретов ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user admin --password admin --type exclude-rule&lt;br /&gt;
[[File:Cleanup exclude rule table.png|none|thumb|1009x1009px]]&lt;br /&gt;
&lt;br /&gt;
=== Вывод в JSON формате ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user admin --password admin --type exclude-rule --format json&lt;br /&gt;
&lt;br /&gt;
Вывод:&lt;br /&gt;
&lt;br /&gt;
 [{&amp;quot;Branch&amp;quot;:&amp;quot;2025&amp;quot;,&amp;quot;CreatedBy&amp;quot;:&amp;quot;admin&amp;quot;,&amp;quot;CreatedById&amp;quot;:&amp;quot;00000000-0000-0000-0000-000000000000&amp;quot;,&amp;quot;ID&amp;quot;:&amp;quot;018fe552-f390-4110-9545-6ef9cbe1a406&amp;quot;,&amp;quot;MinBranchSnapshots&amp;quot;:0,&amp;quot;Project&amp;quot;:&amp;quot;Devel*&amp;quot;,&amp;quot;Snapshot&amp;quot;:&amp;quot;test*&amp;quot;,&amp;quot;create_time&amp;quot;:&amp;quot;2025-10-13T15:00:14.997004Z&amp;quot;}]&lt;br /&gt;
&lt;br /&gt;
=== Удаление правила ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup delete --user admin --password admin --id b1895877-1f3c-4b12-ac19-3ff4a7bc5416&lt;br /&gt;
&lt;br /&gt;
=== Использование regex ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;*&amp;quot; --branch &amp;quot;re:^feature/JIRA-[0-9]+$&amp;quot; --snapshot &amp;quot;*&amp;quot; --keep-time 168h&lt;br /&gt;
&lt;br /&gt;
Подходит: &amp;lt;code&amp;gt;feature/JIRA-123&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;feature/JIRA-456&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Не подходит: &amp;lt;code&amp;gt;feature/JIRA-ABC&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bugfix/JIRA-123&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Regex синтаксис ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Паттерн !! Описание !! Пример&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt; || Начало строки || &amp;lt;code&amp;gt;^test&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[^x]&amp;lt;/code&amp;gt; || Отрицание символов || &amp;lt;code&amp;gt;^[^m].*$&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt; || Конец строки || &amp;lt;code&amp;gt;test$&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; || Любой символ || &amp;lt;code&amp;gt;a.c&amp;lt;/code&amp;gt; → abc, a1c&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt; || Любое кол-во символов || &amp;lt;code&amp;gt;test.*&amp;lt;/code&amp;gt; → test-123&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.+&amp;lt;/code&amp;gt; || Один или более || &amp;lt;code&amp;gt;test.+&amp;lt;/code&amp;gt; → test-1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[0-9]&amp;lt;/code&amp;gt; || Любая цифра || &amp;lt;code&amp;gt;v[0-9]&amp;lt;/code&amp;gt; → v1, v9&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[a-z]&amp;lt;/code&amp;gt; || Буква (нижний регистр) || &amp;lt;code&amp;gt;[a-z]+&amp;lt;/code&amp;gt; → abc&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[A-Z]&amp;lt;/code&amp;gt; || Буква (верхний регистр) || &amp;lt;code&amp;gt;[A-Z]+&amp;lt;/code&amp;gt; → ABC&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;(a&amp;amp;#124;b)&amp;lt;/code&amp;gt; || &amp;quot;a&amp;quot; или &amp;quot;b&amp;quot; || &amp;lt;code&amp;gt;(test&amp;amp;#124;prod)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[0-9]{2,4}&amp;lt;/code&amp;gt; || От 2 до 4 цифр || &amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1234&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Не поддерживается &#039;&#039;&#039;negative lookahead&#039;&#039;&#039; &amp;lt;code&amp;gt;(?!...)&amp;lt;/code&amp;gt;. Используйте комбинацию правил и запретов.&lt;br /&gt;
&lt;br /&gt;
Для правил отрицания конкретного элемента возможно использовать сложные правила, например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;--branch &amp;quot;re:^(.{0,3}|.{5,}|[^m]...|m[^a]..|ma[^i].|mai[^n])$&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данное правило выбирает все ветки, кроме &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:CLI/cleanup&amp;diff=3575</id>
		<title>Help:CLI/cleanup</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:CLI/cleanup&amp;diff=3575"/>
		<updated>2026-05-27T07:47:39Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Шаблоны и паттерны */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Автоматическое удаление снимков =&lt;br /&gt;
&lt;br /&gt;
== Обзор ==&lt;br /&gt;
&lt;br /&gt;
Удаление происходит по умолчанию раз в 24 часа (время можно задать при запуске сервера опцией &amp;lt;code&amp;gt;--snapshots-cleanup-period&amp;lt;/code&amp;gt;, либо в конфигурационном файле опцией &amp;lt;code&amp;gt;snapshots-cleanup-period&amp;lt;/code&amp;gt;, либо переменной окружения &amp;lt;code&amp;gt;SVACER_CLEANUP_SNAPSHOTS_PERIOD&amp;lt;/code&amp;gt;, но не меньше 15 минут). Первое удаление всех подходящих снимков будет выполнено через указанное время после запуска сервера.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Принцип работы:&#039;&#039;&#039; происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление самых старых по времени создания подходящих снимков и заносится отметка в таблицу удаленных снимков и в системный журнал. После этого происходит удаление пустых веток и проектов в соответствии с правилами удаления. Также информация об удалении через cleanup вносится в системный журнал.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность доступна пользователям с доступом &#039;&#039;&#039;ServerOperations&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Добавление нового правила удаления ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --project &amp;lt;project&amp;gt; --branch &amp;lt;branch&amp;gt; --snapshot &amp;lt;snapshot&amp;gt; --keep-time &amp;lt;nowiki&amp;gt;&amp;lt;time&amp;gt;&amp;lt;/nowiki&amp;gt; --min-snapshots &amp;lt;min&amp;gt; --cleanup-type &amp;lt;type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Параметры ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--project&amp;lt;/code&amp;gt; — проект, в котором искать снимки для удаления (&#039;&#039;&#039;обязательный&#039;&#039;&#039;, используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех проектов)&lt;br /&gt;
* &amp;lt;code&amp;gt;--branch&amp;lt;/code&amp;gt; — ветка, в которой искать снимки для удаления (&#039;&#039;&#039;обязательный&#039;&#039;&#039;, используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех веток)&lt;br /&gt;
* &amp;lt;code&amp;gt;--snapshot&amp;lt;/code&amp;gt; — снимок, который удалять (&#039;&#039;&#039;обязательный&#039;&#039;&#039;, используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех снимков)&lt;br /&gt;
* &amp;lt;code&amp;gt;--keep-time&amp;lt;/code&amp;gt; — время, которое должно пройти после создания &#039;&#039;&#039;(НЕ импорта)&#039;&#039;&#039; снимка, чтобы его удалить. Задается в формате Go Duration (например, &amp;lt;code&amp;gt;33h5m&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;720h&amp;lt;/code&amp;gt;). По умолчанию &#039;&#039;&#039;720 часов&#039;&#039;&#039; (30 дней).&lt;br /&gt;
* &amp;lt;code&amp;gt;--min-snapshots&amp;lt;/code&amp;gt; — количество снимков, которое необходимо оставлять в ветке, подходящей под паттерн project + branch. По умолчанию 0.&lt;br /&gt;
* &amp;lt;code&amp;gt;--cleanup-type&amp;lt;/code&amp;gt; — тип очистки. Возможные значения - project, branch, snapshot (по умолчанию snapshot). При указании snapshot будут очищаться снимки в соответствии с паттерном проект+ветка+снимок и проверяться &amp;lt;code&amp;gt;keep-time&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;min-snapshots&amp;lt;/code&amp;gt;. При указании branch будут удаляться пустые ветки в соответствии с паттерном project + branch. При указании project Будут удаляться пустые проекты (у которых нет веток) в соответствии с паттерном project. При указании branch или project невозможно указать &amp;lt;code&amp;gt;keep-time&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;min-snapshots&amp;lt;/code&amp;gt;, эти флаги не учитываются.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значения параметров &amp;lt;code&amp;gt;--project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--snapshot&amp;lt;/code&amp;gt; можно задавать как:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Имя или UUID:&#039;&#039;&#039;&lt;br /&gt;
 --project &amp;quot;MyProject&amp;quot;&lt;br /&gt;
 --project &amp;quot;550e8400-e29b-41d4-a716-446655440000&amp;quot;  # UUID проекта&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; (любое количество любых символов):&#039;&#039;&#039;&lt;br /&gt;
 --project &amp;quot;Dev*&amp;quot;         # DevProject, Development&lt;br /&gt;
 --branch &amp;quot;*test*&amp;quot;        # test, my-test, testing&lt;br /&gt;
 --snapshot &amp;quot;nightly-*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Регулярные выражения (с префиксом &amp;lt;code&amp;gt;re:&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 --snapshot &amp;quot;re:^v[0-9]+\.[0-9]+\.[0-9]+$&amp;quot;    # v1.0.0, v2.3.5&lt;br /&gt;
 --branch &amp;quot;re:^feature/[0-9]+$&amp;quot;               # feature/123&lt;br /&gt;
&lt;br /&gt;
== Добавление запрета на удаление ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-exclude-rule --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --project &amp;lt;project&amp;gt; --branch &amp;lt;branch&amp;gt; --snapshot &amp;lt;snapshot&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Параметры ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--project&amp;lt;/code&amp;gt; — проект, в котором искать снимки для удаления (&#039;&#039;&#039;обязательный&#039;&#039;&#039; , используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех проектов)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--branch&amp;lt;/code&amp;gt; — ветка (&#039;&#039;&#039;обязательный&#039;&#039;&#039;, используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех веток)&lt;br /&gt;
* &amp;lt;code&amp;gt;--snapshot&amp;lt;/code&amp;gt; — снимок (&#039;&#039;&#039;обязательный&#039;&#039;&#039;, используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех снимков)&lt;br /&gt;
Флаги проекта, ветки и снимка работают аналогично с флагами в &amp;lt;code&amp;gt;--add-rule&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Удаление правила ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup delete --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --id &amp;lt;config id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
* &amp;lt;code&amp;gt;--id&amp;lt;/code&amp;gt; — ID конфигурации из таблицы правил или запретов (получить через &amp;lt;code&amp;gt;cleanup list&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Вывести таблицу ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --type &amp;lt;rule|exclude-rule|log&amp;gt; --format &amp;lt;table|json&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
* &amp;lt;code&amp;gt;--type&amp;lt;/code&amp;gt; — тип таблицы: &amp;lt;code&amp;gt;rule&amp;lt;/code&amp;gt; — таблица правил удаления (по умолчанию); &amp;lt;code&amp;gt;exclude-rule&amp;lt;/code&amp;gt; — таблица запретов на удаление; &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; — таблица удаленных снимков&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--format&amp;lt;/code&amp;gt; — формат вывода: &amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt; — человекочитаемый вывод (по умолчанию); &amp;lt;code&amp;gt;json&amp;lt;/code&amp;gt; — JSON формат&lt;br /&gt;
== Запуск очистки вручную ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup run --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запускает процесс очистки немедленно (вне расписания).&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
=== Добавление нового правила ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Удаление по времени&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;Devel*&amp;quot; --branch &amp;quot;2025&amp;quot; --snapshot &amp;quot;*&amp;quot; --keep-time 240h&lt;br /&gt;
&lt;br /&gt;
Удалятся снимки старше 240 часов (10 дней) в проектах, начинающихся с &amp;quot;Devel&amp;quot;, в ветке &amp;quot;2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ограничение количества&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;*&amp;quot; --branch &amp;quot;main&amp;quot; --snapshot &amp;quot;*&amp;quot; --min-snapshots 20 --keep-time 12h&lt;br /&gt;
&lt;br /&gt;
В любом проекте в ветке &amp;quot;main&amp;quot; всегда будет не более 20 снимков; остальные снимки старше 12 часов будут удаляться.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Очистка пустых веток&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;*&amp;quot; --branch &amp;quot;master&amp;quot; --cleanup-type branch&lt;br /&gt;
&lt;br /&gt;
В любом проекте ветка &amp;quot;master&amp;quot; будет удаляться, если в ней нет снимков.&lt;br /&gt;
&lt;br /&gt;
=== Добавление запрета на удаление ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-exclude-rule --user admin --password admin --project &amp;quot;Devel*&amp;quot; --branch &amp;quot;2025&amp;quot; --snapshot &amp;quot;test*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Снимки, начинающиеся с &amp;quot;test&amp;quot;, в проектах &amp;quot;Devel*&amp;quot; и ветке &amp;quot;2025&amp;quot; &#039;&#039;&#039;никогда не удаляются правилами cleanup&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Вывод таблицы правил ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user admin --password admin --type rule&lt;br /&gt;
[[File:Cleanup rules.png|none|thumb|955x955px]]&lt;br /&gt;
&lt;br /&gt;
=== Вывод таблицы запретов ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user admin --password admin --type exclude-rule&lt;br /&gt;
[[File:Cleanup exclude rule table.png|none|thumb|1009x1009px]]&lt;br /&gt;
&lt;br /&gt;
=== Вывод в JSON формате ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user admin --password admin --type exclude-rule --format json&lt;br /&gt;
&lt;br /&gt;
Вывод:&lt;br /&gt;
&lt;br /&gt;
 [{&amp;quot;Branch&amp;quot;:&amp;quot;2025&amp;quot;,&amp;quot;CreatedBy&amp;quot;:&amp;quot;admin&amp;quot;,&amp;quot;CreatedById&amp;quot;:&amp;quot;00000000-0000-0000-0000-000000000000&amp;quot;,&amp;quot;ID&amp;quot;:&amp;quot;018fe552-f390-4110-9545-6ef9cbe1a406&amp;quot;,&amp;quot;MinBranchSnapshots&amp;quot;:0,&amp;quot;Project&amp;quot;:&amp;quot;Devel*&amp;quot;,&amp;quot;Snapshot&amp;quot;:&amp;quot;test*&amp;quot;,&amp;quot;create_time&amp;quot;:&amp;quot;2025-10-13T15:00:14.997004Z&amp;quot;}]&lt;br /&gt;
&lt;br /&gt;
=== Удаление правила ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup delete --user admin --password admin --id b1895877-1f3c-4b12-ac19-3ff4a7bc5416&lt;br /&gt;
&lt;br /&gt;
=== Использование regex ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;*&amp;quot; --branch &amp;quot;re:^feature/JIRA-[0-9]+$&amp;quot; --snapshot &amp;quot;*&amp;quot; --keep-time 168h&lt;br /&gt;
&lt;br /&gt;
Подходит: &amp;lt;code&amp;gt;feature/JIRA-123&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;feature/JIRA-456&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Не подходит: &amp;lt;code&amp;gt;feature/JIRA-ABC&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bugfix/JIRA-123&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Regex синтаксис ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Паттерн !! Описание !! Пример&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt; || Начало строки || &amp;lt;code&amp;gt;^test&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[^x]&amp;lt;/code&amp;gt; || Отрицание символов || &amp;lt;code&amp;gt;^[^m].*$&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt; || Конец строки || &amp;lt;code&amp;gt;test$&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; || Любой символ || &amp;lt;code&amp;gt;a.c&amp;lt;/code&amp;gt; → abc, a1c&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt; || Любое кол-во символов || &amp;lt;code&amp;gt;test.*&amp;lt;/code&amp;gt; → test-123&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.+&amp;lt;/code&amp;gt; || Один или более || &amp;lt;code&amp;gt;test.+&amp;lt;/code&amp;gt; → test-1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[0-9]&amp;lt;/code&amp;gt; || Любая цифра || &amp;lt;code&amp;gt;v[0-9]&amp;lt;/code&amp;gt; → v1, v9&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[a-z]&amp;lt;/code&amp;gt; || Буква (нижний регистр) || &amp;lt;code&amp;gt;[a-z]+&amp;lt;/code&amp;gt; → abc&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[A-Z]&amp;lt;/code&amp;gt; || Буква (верхний регистр) || &amp;lt;code&amp;gt;[A-Z]+&amp;lt;/code&amp;gt; → ABC&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;(a&amp;amp;#124;b)&amp;lt;/code&amp;gt; || &amp;quot;a&amp;quot; или &amp;quot;b&amp;quot; || &amp;lt;code&amp;gt;(test&amp;amp;#124;prod)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[0-9]{2,4}&amp;lt;/code&amp;gt; || От 2 до 4 цифр || &amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1234&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Не поддерживается &#039;&#039;&#039;negative lookahead&#039;&#039;&#039; &amp;lt;code&amp;gt;(?!...)&amp;lt;/code&amp;gt;. Используйте комбинацию правил и запретов.&lt;br /&gt;
&lt;br /&gt;
Для правил отрицания конкретного элемента возможно использовать сложные правила, например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;--branch &amp;quot;re:^(.{0,3}|.{5,}|[^m]...|m[^a]..|ma[^i].|mai[^n])$&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данное правило выбирает все ветки, кроме &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_deploy&amp;diff=3563</id>
		<title>Help:13-alpha deploy</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_deploy&amp;diff=3563"/>
		<updated>2026-05-25T08:14:08Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* --profile mcp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Демонстрационная сборка ==&lt;br /&gt;
&lt;br /&gt;
Установка демонстрационной версии Svacer с поддержкой [[Help:13-alpha introduction|описанных функций]] доступна только в докере с использованием docker compose&lt;br /&gt;
&lt;br /&gt;
== docker compose ==&lt;br /&gt;
&lt;br /&gt;
Для установки демонстрационной версии подготовлен специальный файл [https://svacer.ispras.ru/extra/docker-compose-with-ai-llm-mcp.yml docker-compose-with-ai-llm-mcp.yml]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -LO https://svacer.ispras.ru/extra/docker-compose-with-ai-llm-mcp.yml&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с использованием данного compose-файла доступны профили:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Профиль !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| Без профиля || Запуск Svacer без поддержки ИИ-ассистента и MCP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ai&amp;lt;/code&amp;gt; || Запуск Svacer с поддержкой ИИ-ассистента со встроенной моделью&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; || Запуск Svacer с поддержкой ИИ-ассистента и возможностью подключения к нему внешних LLM для разметки предупреждений&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; || Запуск Svacer с MCP-сервером &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для запуска с использованием одного или нескольких профилей используется команда&lt;br /&gt;
&lt;br /&gt;
 docker compose -f docker-compose-with-ai-llm-mcp.yml ... --profile llm --profile mcp ... up -d&lt;br /&gt;
&lt;br /&gt;
При этом необходимо учитывать, что&lt;br /&gt;
&lt;br /&gt;
* при запуске Svacer без профилей или только с профилем &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; функциональность разметки предупреждений с помощью ИИ будет возвращать ошибку;&lt;br /&gt;
&amp;lt;!-- * Профиль &amp;lt;code&amp;gt;no-ai&amp;lt;/code&amp;gt; не может быть использован одновременно с другими профилями; --&amp;gt;&lt;br /&gt;
* запуск с профилями &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; требует настройки переменных окружения (см. ниже).&lt;br /&gt;
&lt;br /&gt;
Для удобства настройки переменных окружения может использоваться env-файл [https://svacer.ispras.ru/extra/llm-mcp.env llm-mcp.env], который после установки необходимых значений может быть передан команде запуска&lt;br /&gt;
&lt;br /&gt;
 docker compose -f docker-compose-with-ai-llm-mcp.yml --env-file ./llm-mcp.env ... --profile llm --profile mcp ... up -d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == &amp;lt;code&amp;gt;--profile no-ai&amp;lt;/code&amp;gt; == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Данный профиль не требует дополнительной конфигурации для запуска --&amp;gt;&lt;br /&gt;
== &amp;lt;code&amp;gt;--profile llm&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Запуск Svacer с данным профилем даёт возможность подключить к ИИ-ассистенту внешний сервис моделей, поддерживающий OpenAI API. После успешного подключения ИИ-ассистент сможет использовать LLM для разметки и комментирования предупреждений. В списке разметки с помощью ИИ появятся модели доступные пользователю, чей ключ был передан при запуске.&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с профилем &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; необходимо:&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;LLM_URL&amp;lt;/code&amp;gt; значение url, по которому контейнер &amp;lt;code&amp;gt;svacer-validation-server&amp;lt;/code&amp;gt; сможет подключиться к сервису моделей, совместимому с OpenAI API;&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;LLM_TOKEN&amp;lt;/code&amp;gt; значение ключа авторизации в сервис моделей;&lt;br /&gt;
* при необходимости установить значения переменных &amp;lt;code&amp;gt;REG_TOKEN&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;REG_LOGIN&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;REG_PASSWORD&amp;lt;/code&amp;gt; содержащих, соответственно, токен авторизации или логин и пароль администратора. Эти данные нужны для запуска компонентов поддержки LLM в ИИ-ассистенте. По умолчанию будут использоваться логин и пароль &amp;lt;code&amp;gt;admin:admin&amp;lt;/code&amp;gt;;&lt;br /&gt;
* при желании изменить отображаемое название сервиса в интерфейсе выбора моделей, можно установить значение переменной &amp;lt;code&amp;gt;REG_NAME&amp;lt;/code&amp;gt;. По умолчанию &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt;;&lt;br /&gt;
* при необходимости ограничения списка доступных моделей, в переменную &amp;lt;code&amp;gt;MODEL_WHITELIST&amp;lt;/code&amp;gt; нужно передать список названий моделей разделённых запятыми;&lt;br /&gt;
* если производительность сервиса моделей позволяет параллельно обрабатывать несколько предупреждений, то можно установить значение переменной &amp;lt;code&amp;gt;MAX_PARALLEL_REQUESTS&amp;lt;/code&amp;gt; в значение больше единицы;&lt;br /&gt;
* если производительность модели не позволяет обрабатывать одно предупреждение в минуту, то результаты обработки не будут получены. Чтобы увеличить время ожидания новых результатов модели, можно установить значение переменной &amp;lt;code&amp;gt;MODEL_VALIDATION_MAXATTEMPTS&amp;lt;/code&amp;gt; в значение кратное 12 (двенадцати). Например, значение 60 == 5 минут.&lt;br /&gt;
&lt;br /&gt;
Значения данных переменных могут быть сохранены в &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; файл и переданы при запуске с помощью аргумента &amp;lt;code&amp;gt;docker compose --env-file ./.env ... up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание переменных доступных для конфигурации запуска ИИ-ассистента с поддержкой внешнего сервиса моделей:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# URL of the OpenAI API-compatible LLM hosting service&lt;br /&gt;
LLM_URL=&lt;br /&gt;
&lt;br /&gt;
 # LLM hosting service authorization token&lt;br /&gt;
LLM_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin authorization token, which will be used to perform LLM service registration requests in the AI assistant. &lt;br /&gt;
# Or with REG_LOGIN and REG_PASSWORD, if token is not set&lt;br /&gt;
# REG_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin login and password&lt;br /&gt;
# REG_LOGIN=admin&lt;br /&gt;
# REG_PASSWORD=admin&lt;br /&gt;
&lt;br /&gt;
# ID of the service in the AI assistant&lt;br /&gt;
# REG_ID=llm&lt;br /&gt;
&lt;br /&gt;
# The name of the service displayed in the AI assistant&lt;br /&gt;
# REG_NAME=llm&lt;br /&gt;
&lt;br /&gt;
# Service description&lt;br /&gt;
# REG_DESCRIPTION=&amp;quot;LLM hosting service&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Comma-separated list of available models. If not specified, all models available to the LLM hosting service user will be available.&lt;br /&gt;
# MODEL_WHITELIST=&lt;br /&gt;
&lt;br /&gt;
# Maximum number of simultaneous requests to process warning with LLM&lt;br /&gt;
# MAX_PARALLEL_REQUESTS=1&lt;br /&gt;
&lt;br /&gt;
# Maximum number of 5s attempts to get single warning result from LLM&lt;br /&gt;
# MODEL_VALIDATION_MAXATTEMPTS=12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;--profile mcp&amp;lt;/code&amp;gt; ==&lt;br /&gt;
При запуске с данным профилем стартует контейнер с MCP-сервером, подключённый к текущему экземпляру Svacer.&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с профилем &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; необходимо:&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt; номер сетевого порта на котором будет доступен MCP-сервер. По умолчанию будет назначен порт &amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;SVACER_MPC_TOKEN&amp;lt;/code&amp;gt; строку с токеном авторизации, который необходимо будет указать в клиенте MCP-сервера;&lt;br /&gt;
* при необходимости доступа к MCP-серверу по адресу отличному от &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;) или при использовании DNS необходимо:&lt;br /&gt;
** указать необходимый адрес/dns-имя в переменной &amp;lt;code&amp;gt;MCP_ALLOWED_HOSTS&amp;lt;/code&amp;gt; в виде &amp;lt;code&amp;gt;172.17.0.1:*&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;some.domain:*&amp;lt;/code&amp;gt;&lt;br /&gt;
** указать необходимый адрес/dns-имя в переменной &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MCP_ALLOWED_ORIGINS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; в виде &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://172.17.0.1:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://some.domain:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* при необходимости можно настроить логин и пароль пользователя, от имени которого MCP-сервер будет выполнять запросы к Svacer. По умолчанию &amp;lt;code&amp;gt;admin:admin&amp;lt;/code&amp;gt;&lt;br /&gt;
После запуска mcp-сервер будет доступен по адресу &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:{MCP_PORT}/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание других переменных доступных для конфигурации запуска ИИ-ассистента с поддержкой внешнего сервиса моделей:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Bearer token for /mcp clients in HTTP mode. Generate: openssl rand -hex 32&lt;br /&gt;
SVACER_MCP_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin login and password&lt;br /&gt;
SVACER_LOGIN=admin&lt;br /&gt;
SVACER_PASSWORD=admin&lt;br /&gt;
&lt;br /&gt;
# External port that will be mapped by docker to the internal port 8000&lt;br /&gt;
MCP_PORT=8002&lt;br /&gt;
&lt;br /&gt;
MCP_ALLOWED_HOSTS=172.17.0.1:*&lt;br /&gt;
MCP_ALLOWED_ORIGINS=http://172.17.0.1:*&lt;br /&gt;
&lt;br /&gt;
# Svacer server (container) URL&lt;br /&gt;
# SVACER_URL=http://svacer:8080&lt;br /&gt;
&lt;br /&gt;
# HTTP timeout for requests to Svacer, seconds&lt;br /&gt;
# SVACER_TIMEOUT=30&lt;br /&gt;
&lt;br /&gt;
# Public URL of this MCP server (used for WWW-Authenticate, RFC 9728).&lt;br /&gt;
# Defaults to http://localhost:&amp;lt;SVACER_HTTP_PORT&amp;gt;. Set when running behind a reverse proxy.&lt;br /&gt;
# SVACER_MCP_RESOURCE_URL=https://mcp.example.com&lt;br /&gt;
&lt;br /&gt;
# Subset of tools to register (comma-separated). Unset = all 8 tools.&lt;br /&gt;
# Available: get_projects, get_snapshots, get_warnings, get_markers,&lt;br /&gt;
#            get_project_stats, get_project_groups, get_advanced_file_preview, get_diff&lt;br /&gt;
# SVACER_TOOLS=get_projects,get_snapshots,get_markers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_deploy&amp;diff=3562</id>
		<title>Help:13-alpha deploy</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_deploy&amp;diff=3562"/>
		<updated>2026-05-25T08:13:38Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Демонстрационная сборка ==&lt;br /&gt;
&lt;br /&gt;
Установка демонстрационной версии Svacer с поддержкой [[Help:13-alpha introduction|описанных функций]] доступна только в докере с использованием docker compose&lt;br /&gt;
&lt;br /&gt;
== docker compose ==&lt;br /&gt;
&lt;br /&gt;
Для установки демонстрационной версии подготовлен специальный файл [https://svacer.ispras.ru/extra/docker-compose-with-ai-llm-mcp.yml docker-compose-with-ai-llm-mcp.yml]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -LO https://svacer.ispras.ru/extra/docker-compose-with-ai-llm-mcp.yml&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с использованием данного compose-файла доступны профили:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Профиль !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| Без профиля || Запуск Svacer без поддержки ИИ-ассистента и MCP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ai&amp;lt;/code&amp;gt; || Запуск Svacer с поддержкой ИИ-ассистента со встроенной моделью&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; || Запуск Svacer с поддержкой ИИ-ассистента и возможностью подключения к нему внешних LLM для разметки предупреждений&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; || Запуск Svacer с MCP-сервером &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для запуска с использованием одного или нескольких профилей используется команда&lt;br /&gt;
&lt;br /&gt;
 docker compose -f docker-compose-with-ai-llm-mcp.yml ... --profile llm --profile mcp ... up -d&lt;br /&gt;
&lt;br /&gt;
При этом необходимо учитывать, что&lt;br /&gt;
&lt;br /&gt;
* при запуске Svacer без профилей или только с профилем &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; функциональность разметки предупреждений с помощью ИИ будет возвращать ошибку;&lt;br /&gt;
&amp;lt;!-- * Профиль &amp;lt;code&amp;gt;no-ai&amp;lt;/code&amp;gt; не может быть использован одновременно с другими профилями; --&amp;gt;&lt;br /&gt;
* запуск с профилями &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; требует настройки переменных окружения (см. ниже).&lt;br /&gt;
&lt;br /&gt;
Для удобства настройки переменных окружения может использоваться env-файл [https://svacer.ispras.ru/extra/llm-mcp.env llm-mcp.env], который после установки необходимых значений может быть передан команде запуска&lt;br /&gt;
&lt;br /&gt;
 docker compose -f docker-compose-with-ai-llm-mcp.yml --env-file ./llm-mcp.env ... --profile llm --profile mcp ... up -d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == &amp;lt;code&amp;gt;--profile no-ai&amp;lt;/code&amp;gt; == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Данный профиль не требует дополнительной конфигурации для запуска --&amp;gt;&lt;br /&gt;
== &amp;lt;code&amp;gt;--profile llm&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Запуск Svacer с данным профилем даёт возможность подключить к ИИ-ассистенту внешний сервис моделей, поддерживающий OpenAI API. После успешного подключения ИИ-ассистент сможет использовать LLM для разметки и комментирования предупреждений. В списке разметки с помощью ИИ появятся модели доступные пользователю, чей ключ был передан при запуске.&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с профилем &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; необходимо:&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;LLM_URL&amp;lt;/code&amp;gt; значение url, по которому контейнер &amp;lt;code&amp;gt;svacer-validation-server&amp;lt;/code&amp;gt; сможет подключиться к сервису моделей, совместимому с OpenAI API;&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;LLM_TOKEN&amp;lt;/code&amp;gt; значение ключа авторизации в сервис моделей;&lt;br /&gt;
* при необходимости установить значения переменных &amp;lt;code&amp;gt;REG_TOKEN&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;REG_LOGIN&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;REG_PASSWORD&amp;lt;/code&amp;gt; содержащих, соответственно, токен авторизации или логин и пароль администратора. Эти данные нужны для запуска компонентов поддержки LLM в ИИ-ассистенте. По умолчанию будут использоваться логин и пароль &amp;lt;code&amp;gt;admin:admin&amp;lt;/code&amp;gt;;&lt;br /&gt;
* при желании изменить отображаемое название сервиса в интерфейсе выбора моделей, можно установить значение переменной &amp;lt;code&amp;gt;REG_NAME&amp;lt;/code&amp;gt;. По умолчанию &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt;;&lt;br /&gt;
* при необходимости ограничения списка доступных моделей, в переменную &amp;lt;code&amp;gt;MODEL_WHITELIST&amp;lt;/code&amp;gt; нужно передать список названий моделей разделённых запятыми;&lt;br /&gt;
* если производительность сервиса моделей позволяет параллельно обрабатывать несколько предупреждений, то можно установить значение переменной &amp;lt;code&amp;gt;MAX_PARALLEL_REQUESTS&amp;lt;/code&amp;gt; в значение больше единицы;&lt;br /&gt;
* если производительность модели не позволяет обрабатывать одно предупреждение в минуту, то результаты обработки не будут получены. Чтобы увеличить время ожидания новых результатов модели, можно установить значение переменной &amp;lt;code&amp;gt;MODEL_VALIDATION_MAXATTEMPTS&amp;lt;/code&amp;gt; в значение кратное 12 (двенадцати). Например, значение 60 == 5 минут.&lt;br /&gt;
&lt;br /&gt;
Значения данных переменных могут быть сохранены в &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; файл и переданы при запуске с помощью аргумента &amp;lt;code&amp;gt;docker compose --env-file ./.env ... up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание переменных доступных для конфигурации запуска ИИ-ассистента с поддержкой внешнего сервиса моделей:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# URL of the OpenAI API-compatible LLM hosting service&lt;br /&gt;
LLM_URL=&lt;br /&gt;
&lt;br /&gt;
 # LLM hosting service authorization token&lt;br /&gt;
LLM_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin authorization token, which will be used to perform LLM service registration requests in the AI assistant. &lt;br /&gt;
# Or with REG_LOGIN and REG_PASSWORD, if token is not set&lt;br /&gt;
# REG_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin login and password&lt;br /&gt;
# REG_LOGIN=admin&lt;br /&gt;
# REG_PASSWORD=admin&lt;br /&gt;
&lt;br /&gt;
# ID of the service in the AI assistant&lt;br /&gt;
# REG_ID=llm&lt;br /&gt;
&lt;br /&gt;
# The name of the service displayed in the AI assistant&lt;br /&gt;
# REG_NAME=llm&lt;br /&gt;
&lt;br /&gt;
# Service description&lt;br /&gt;
# REG_DESCRIPTION=&amp;quot;LLM hosting service&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Comma-separated list of available models. If not specified, all models available to the LLM hosting service user will be available.&lt;br /&gt;
# MODEL_WHITELIST=&lt;br /&gt;
&lt;br /&gt;
# Maximum number of simultaneous requests to process warning with LLM&lt;br /&gt;
# MAX_PARALLEL_REQUESTS=1&lt;br /&gt;
&lt;br /&gt;
# Maximum number of 5s attempts to get single warning result from LLM&lt;br /&gt;
# MODEL_VALIDATION_MAXATTEMPTS=12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;--profile mcp&amp;lt;/code&amp;gt; ==&lt;br /&gt;
При запуске с данным профилем стартует контейнер с MCP-сервером, подключённый к текущему экземпляру Svacer.&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с профилем &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; необходимо:&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt; номер сетевого порта на котором будет доступен MCP-сервер. По умолчанию будет назначен порт &amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;SVACER_MPC_TOKEN&amp;lt;/code&amp;gt; строку с токеном авторизации, который необходимо будет указать в клиенте MCP-сервера;&lt;br /&gt;
* при необходимости доступа к MCP-серверу по адресу отличному от &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;) или при использовании DNS необходимо:&lt;br /&gt;
** указать необходимый адрес/dns-имя в переменной &amp;lt;code&amp;gt;MCP_ALLOWED_HOSTS&amp;lt;/code&amp;gt; в виде &amp;lt;code&amp;gt;172.17.0.1:*&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;some.domain:*&amp;lt;/code&amp;gt;&lt;br /&gt;
** указать необходимый адрес/dns-имя в переменной &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MCP_ALLOWED_ORIGINS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; в виде &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://172.17.0.1:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://some.domain:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* при необходимости можно настроить логин и пароль пользователя, от имени которого MCP-сервер будет выполнять запросы к Svacer. По умолчанию: &amp;lt;code&amp;gt;admin:admin&amp;lt;/code&amp;gt;&lt;br /&gt;
После запуска mcp-сервер будет доступен по адресу &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:{MCP_PORT}/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание других переменных доступных для конфигурации запуска ИИ-ассистента с поддержкой внешнего сервиса моделей:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Bearer token for /mcp clients in HTTP mode. Generate: openssl rand -hex 32&lt;br /&gt;
SVACER_MCP_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin login and password&lt;br /&gt;
SVACER_LOGIN=admin&lt;br /&gt;
SVACER_PASSWORD=admin&lt;br /&gt;
&lt;br /&gt;
# External port that will be mapped by docker to the internal port 8000&lt;br /&gt;
MCP_PORT=8002&lt;br /&gt;
&lt;br /&gt;
MCP_ALLOWED_HOSTS=172.17.0.1:*&lt;br /&gt;
MCP_ALLOWED_ORIGINS=http://172.17.0.1:*&lt;br /&gt;
&lt;br /&gt;
# Svacer server (container) URL&lt;br /&gt;
# SVACER_URL=http://svacer:8080&lt;br /&gt;
&lt;br /&gt;
# HTTP timeout for requests to Svacer, seconds&lt;br /&gt;
# SVACER_TIMEOUT=30&lt;br /&gt;
&lt;br /&gt;
# Public URL of this MCP server (used for WWW-Authenticate, RFC 9728).&lt;br /&gt;
# Defaults to http://localhost:&amp;lt;SVACER_HTTP_PORT&amp;gt;. Set when running behind a reverse proxy.&lt;br /&gt;
# SVACER_MCP_RESOURCE_URL=https://mcp.example.com&lt;br /&gt;
&lt;br /&gt;
# Subset of tools to register (comma-separated). Unset = all 8 tools.&lt;br /&gt;
# Available: get_projects, get_snapshots, get_warnings, get_markers,&lt;br /&gt;
#            get_project_stats, get_project_groups, get_advanced_file_preview, get_diff&lt;br /&gt;
# SVACER_TOOLS=get_projects,get_snapshots,get_markers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_deploy&amp;diff=3560</id>
		<title>Help:13-alpha deploy</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_deploy&amp;diff=3560"/>
		<updated>2026-05-25T07:36:15Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Демонстрационная сборка ==&lt;br /&gt;
&lt;br /&gt;
Установка демонстрационной версии Svacer с поддержкой [[Help:13-alpha introduction|описанных функций]] доступна только в докере с использованием docker compose&lt;br /&gt;
&lt;br /&gt;
== docker compose ==&lt;br /&gt;
&lt;br /&gt;
Для установки демонстрационной версии подготовлен специальный файл [https://svacer.ispras.ru/extra/docker-compose-with-ai-llm-mcp.yml docker-compose-with-ai-llm-mcp.yml]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -LO https://svacer.ispras.ru/extra/docker-compose-with-ai-llm-mcp.yml&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с использованием данного compose-файла доступны профили:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Профиль !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| Без профиля || Запуск Svacer без поддержки ИИ-ассистента и MCP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ai&amp;lt;/code&amp;gt; || Запуск Svacer с поддержкой ИИ-ассистента со встроенной моделью&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; || Запуск Svacer с поддержкой ИИ-ассистента и возможностью подключения к нему внешних LLM для разметки предупреждений&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; || Запуск Svacer с MCP-сервером &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для запуска с использованием одного или нескольких профилей используется команда&lt;br /&gt;
&lt;br /&gt;
 docker compose -f docker-compose-with-ai-llm-mcp.yml ... --profile llm --profile mcp ... up -d&lt;br /&gt;
&lt;br /&gt;
При этом необходимо учитывать, что&lt;br /&gt;
&lt;br /&gt;
* при запуске Svacer без профилей или только с профилем &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; функциональность разметки предупреждений с помощью ИИ будет возвращать ошибку;&lt;br /&gt;
&amp;lt;!-- * Профиль &amp;lt;code&amp;gt;no-ai&amp;lt;/code&amp;gt; не может быть использован одновременно с другими профилями; --&amp;gt;&lt;br /&gt;
* запуск с профилями &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; требует настройки переменных окружения (см. ниже).&lt;br /&gt;
&lt;br /&gt;
Для удобства настройки переменных окружения может использоваться env-файл [https://svacer.ispras.ru/extra/llm-mcp.env llm-mcp.env], который после установки необходимых значений может быть передан команде запуска&lt;br /&gt;
&lt;br /&gt;
 docker compose -f docker-compose-with-ai-llm-mcp.yml --env-file ./llm-mcp.env ... --profile llm --profile mcp ... up -d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == &amp;lt;code&amp;gt;--profile no-ai&amp;lt;/code&amp;gt; == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Данный профиль не требует дополнительной конфигурации для запуска --&amp;gt;&lt;br /&gt;
== &amp;lt;code&amp;gt;--profile llm&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Запуск Svacer с данным профилем даёт возможность подключить к ИИ-ассистенту внешний сервис моделей, поддерживающий OpenAI API. После успешного подключения ИИ-ассистент сможет использовать LLM для разметки и комментирования предупреждений. В списке разметки с помощью ИИ появятся модели доступные пользователю, чей ключ был передан при запуске.&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с профилем &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; необходимо:&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;LLM_URL&amp;lt;/code&amp;gt; значение url, по которому контейнер &amp;lt;code&amp;gt;svacer-validation-server&amp;lt;/code&amp;gt; сможет подключиться к сервису моделей, совместимому с OpenAI API;&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;LLM_TOKEN&amp;lt;/code&amp;gt; значение ключа авторизации в сервис моделей;&lt;br /&gt;
* при необходимости установить значения переменных &amp;lt;code&amp;gt;REG_TOKEN&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;REG_LOGIN&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;REG_PASSWORD&amp;lt;/code&amp;gt; содержащих, соответственно, токен авторизации или логин и пароль администратора. Эти данные нужны для запуска компонентов поддержки LLM в ИИ-ассистенте. По умолчанию будут использоваться логин и пароль &amp;lt;code&amp;gt;admin:admin&amp;lt;/code&amp;gt;;&lt;br /&gt;
* при желании изменить отображаемое название сервиса в интерфейсе выбора моделей, можно установить значение переменной &amp;lt;code&amp;gt;REG_NAME&amp;lt;/code&amp;gt;. По умолчанию: &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt;;&lt;br /&gt;
* при необходимости ограничения списка доступных моделей, в переменную &amp;lt;code&amp;gt;MODEL_WHITELIST&amp;lt;/code&amp;gt; нужно передать список названий моделей разделённых запятыми;&lt;br /&gt;
* если производительность сервиса моделей позволяет параллельно обрабатывать несколько предупреждений, то можно установить значение переменной &amp;lt;code&amp;gt;MAX_PARALLEL_REQUESTS&amp;lt;/code&amp;gt; в значение больше единицы;&lt;br /&gt;
* если производительность модели не позволяет обрабатывать одно предупреждение в минуту, то результаты обработки не будут получены. Чтобы увеличить время ожидания новых результатов модели, можно установить значение переменной &amp;lt;code&amp;gt;MODEL_VALIDATION_MAXATTEMPTS&amp;lt;/code&amp;gt; в значение кратное 12 (двенадцати). Например, значение 60 == 5 минут.&lt;br /&gt;
&lt;br /&gt;
В процессе обработки набора маркеров с помощью LLM ИИ-ассистент ожидает, что за минуту будет обрабатываться хотя бы один маркер. Если в течение минуты не появятся новы&lt;br /&gt;
&lt;br /&gt;
Значения данных переменных могут быть сохранены в &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; файл и переданы при запуске с помощью аргумента &amp;lt;code&amp;gt;docker compose --env-file ./.env ... up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание переменных доступных для конфигурации запуска ИИ-ассистента с поддержкой внешнего сервиса моделей:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# URL of the OpenAI API-compatible LLM hosting service&lt;br /&gt;
LLM_URL=&lt;br /&gt;
&lt;br /&gt;
 # LLM hosting service authorization token&lt;br /&gt;
LLM_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin authorization token, which will be used to perform LLM service registration requests in the AI assistant. &lt;br /&gt;
# Or with REG_LOGIN and REG_PASSWORD, if token is not set&lt;br /&gt;
# REG_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin login and password&lt;br /&gt;
# REG_LOGIN=admin&lt;br /&gt;
# REG_PASSWORD=admin&lt;br /&gt;
&lt;br /&gt;
# ID of the service in the AI assistant&lt;br /&gt;
# REG_ID=llm&lt;br /&gt;
&lt;br /&gt;
# The name of the service displayed in the AI assistant&lt;br /&gt;
# REG_NAME=llm&lt;br /&gt;
&lt;br /&gt;
# Service description&lt;br /&gt;
# REG_DESCRIPTION=&amp;quot;LLM hosting service&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Comma-separated list of available models. If not specified, all models available to the LLM hosting service user will be available.&lt;br /&gt;
# MODEL_WHITELIST=&lt;br /&gt;
&lt;br /&gt;
# Maximum number of simultaneous requests to process warning with LLM&lt;br /&gt;
# MAX_PARALLEL_REQUESTS=1&lt;br /&gt;
&lt;br /&gt;
# Maximum number of 5s attempts to get single warning result from LLM&lt;br /&gt;
# MODEL_VALIDATION_MAXATTEMPTS=12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;--profile mcp&amp;lt;/code&amp;gt; ==&lt;br /&gt;
При запуске с данным профилем стартует контейнер с MCP-сервером, подключённый к текущему экземпляру Svacer.&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с профилем &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; необходимо:&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt; номер сетевого порта на котором будет доступен MCP-сервер. По умолчанию будет назначен порт &amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;SVACER_MPC_TOKEN&amp;lt;/code&amp;gt; строку с токеном авторизации, который необходимо будет указать в клиенте MCP-сервера;&lt;br /&gt;
* при необходимости доступа к MCP-серверу по адресу отличному от &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;) или при использовании DNS необходимо:&lt;br /&gt;
** указать необходимый адрес/dns-имя в переменной &amp;lt;code&amp;gt;MCP_ALLOWED_HOSTS&amp;lt;/code&amp;gt; в виде &amp;lt;code&amp;gt;172.17.0.1:*&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;some.domain:*&amp;lt;/code&amp;gt;&lt;br /&gt;
** указать необходимый адрес/dns-имя в переменной &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MCP_ALLOWED_ORIGINS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; в виде &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://172.17.0.1:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://some.domain:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* при необходимости можно настроить логин и пароль пользователя, от имени которого MCP-сервер будет выполнять запросы к Svacer. По умолчанию: &amp;lt;code&amp;gt;admin:admin&amp;lt;/code&amp;gt;&lt;br /&gt;
После запуска mcp-сервер будет доступен по адресу &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:{MCP_PORT}/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание других переменных доступных для конфигурации запуска ИИ-ассистента с поддержкой внешнего сервиса моделей:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Bearer token for /mcp clients in HTTP mode. Generate: openssl rand -hex 32&lt;br /&gt;
SVACER_MCP_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin login and password&lt;br /&gt;
SVACER_LOGIN=admin&lt;br /&gt;
SVACER_PASSWORD=admin&lt;br /&gt;
&lt;br /&gt;
# External port that will be mapped by docker to the internal port 8000&lt;br /&gt;
MCP_PORT=8002&lt;br /&gt;
&lt;br /&gt;
MCP_ALLOWED_HOSTS=172.17.0.1:*&lt;br /&gt;
MCP_ALLOWED_ORIGINS=http://172.17.0.1:*&lt;br /&gt;
&lt;br /&gt;
# Svacer server (container) URL&lt;br /&gt;
# SVACER_URL=http://svacer:8080&lt;br /&gt;
&lt;br /&gt;
# HTTP timeout for requests to Svacer, seconds&lt;br /&gt;
# SVACER_TIMEOUT=30&lt;br /&gt;
&lt;br /&gt;
# Public URL of this MCP server (used for WWW-Authenticate, RFC 9728).&lt;br /&gt;
# Defaults to http://localhost:&amp;lt;SVACER_HTTP_PORT&amp;gt;. Set when running behind a reverse proxy.&lt;br /&gt;
# SVACER_MCP_RESOURCE_URL=https://mcp.example.com&lt;br /&gt;
&lt;br /&gt;
# Subset of tools to register (comma-separated). Unset = all 8 tools.&lt;br /&gt;
# Available: get_projects, get_snapshots, get_warnings, get_markers,&lt;br /&gt;
#            get_project_stats, get_project_groups, get_advanced_file_preview, get_diff&lt;br /&gt;
# SVACER_TOOLS=get_projects,get_snapshots,get_markers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_deploy&amp;diff=3559</id>
		<title>Help:13-alpha deploy</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_deploy&amp;diff=3559"/>
		<updated>2026-05-25T07:25:07Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* --profile mcp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Демонстрационная сборка ==&lt;br /&gt;
&lt;br /&gt;
Установка демонстрационной версии Svacer с поддержкой [[Help:13-alpha introduction|описанных функций]] доступна только в докере с использованием docker compose&lt;br /&gt;
&lt;br /&gt;
== docker compose ==&lt;br /&gt;
&lt;br /&gt;
Для установки демонстрационной версии подготовлен специальный файл [https://svacer.ispras.ru/extra/docker-compose-with-ai-llm-mcp.yml docker-compose-with-ai-llm-mcp.yml]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -LO https://svacer.ispras.ru/extra/docker-compose-with-ai-llm-mcp.yml&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с использованием данного compose-файла доступны профили:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Профиль !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| Без профиля || Запуск Svacer без поддержки ИИ-ассистента и MCP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ai&amp;lt;/code&amp;gt; || Запуск Svacer с поддержкой ИИ-ассистента со встроенной моделью&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; || Запуск Svacer с поддержкой ИИ-ассистента и возможностью подключения к нему внешних LLM для разметки предупреждений&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; || Запуск Svacer с MCP-сервером &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для запуска с использованием одного или нескольких профилей используется команда&lt;br /&gt;
&lt;br /&gt;
 docker compose -f docker-compose-with-ai-llm-mcp.yml ... --profile llm --profile mcp ... up -d&lt;br /&gt;
&lt;br /&gt;
При этом необходимо учитывать, что&lt;br /&gt;
&lt;br /&gt;
* при запуске Svacer без профилей или только с профилем &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; функциональность разметки предупреждений с помощью ИИ будет возвращать ошибку;&lt;br /&gt;
&amp;lt;!-- * Профиль &amp;lt;code&amp;gt;no-ai&amp;lt;/code&amp;gt; не может быть использован одновременно с другими профилями; --&amp;gt;&lt;br /&gt;
* запуск с профилями &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; требует настройки переменных окружения (см. ниже).&lt;br /&gt;
&lt;br /&gt;
Для удобства настройки переменных окружения может использоваться env-файл [https://svacer.ispras.ru/extra/llm-mcp.env llm-mcp.env], который после установки необходимых значений может быть передан команде запуска&lt;br /&gt;
&lt;br /&gt;
 docker compose -f docker-compose-with-ai-llm-mcp.yml --env-file ./llm-mcp.env ... --profile llm --profile mcp ... up -d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == &amp;lt;code&amp;gt;--profile no-ai&amp;lt;/code&amp;gt; == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Данный профиль не требует дополнительной конфигурации для запуска --&amp;gt;&lt;br /&gt;
== &amp;lt;code&amp;gt;--profile llm&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Запуск Svacer с данным профилем даёт возможность подключить к ИИ-ассистенту внешний сервис моделей, поддерживающий OpenAI API. После успешного подключения ИИ-ассистент сможет использовать LLM для разметки и комментирования предупреждений. В списке разметки с помощью ИИ появятся модели доступные пользователю, чей ключ был передан при запуске.&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с профилем &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; необходимо:&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;LLM_URL&amp;lt;/code&amp;gt; значение url, по которому контейнер &amp;lt;code&amp;gt;svacer-validation-server&amp;lt;/code&amp;gt; сможет подключиться к сервису моделей, совместимому с OpenAI API;&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;LLM_TOKEN&amp;lt;/code&amp;gt; значение ключа авторизации в сервис моделей;&lt;br /&gt;
* при необходимости установить значения переменных &amp;lt;code&amp;gt;REG_TOKEN&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;REG_LOGIN&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;REG_PASSWORD&amp;lt;/code&amp;gt; содержащих, соответственно, токен авторизации или логин и пароль администратора. Эти данные нужны для запуска компонентов поддержки LLM в ИИ-ассистенте. По умолчанию будут использоваться логин и пароль &amp;lt;code&amp;gt;admin/admin&amp;lt;/code&amp;gt;;&lt;br /&gt;
* при желании изменить отображаемое название сервиса в интерфейсе выбора моделей, можно установить значение переменной &amp;lt;code&amp;gt;REG_NAME&amp;lt;/code&amp;gt;. По умолчанию: &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt;;&lt;br /&gt;
* при необходимости ограничения списка доступных моделей, в переменную &amp;lt;code&amp;gt;MODEL_WHITELIST&amp;lt;/code&amp;gt; нужно передать список названий моделей разделённых запятыми;&lt;br /&gt;
* если производительность сервиса моделей позволяет параллельно обрабатывать несколько предупреждений, то можно установить значение переменной &amp;lt;code&amp;gt;MAX_PARALLEL_REQUESTS&amp;lt;/code&amp;gt; в значение больше единицы;&lt;br /&gt;
* если производительность модели не позволяет обрабатывать одно предупреждение в минуту, то результаты обработки не будут получены. Чтобы увеличить время ожидания новых результатов модели, можно установить значение переменной &amp;lt;code&amp;gt;MODEL_VALIDATION_MAXATTEMPTS&amp;lt;/code&amp;gt; в значение кратное 12 (двенадцати). Например, значение 60 == 5 минут.&lt;br /&gt;
&lt;br /&gt;
В процессе обработки набора маркеров с помощью LLM ИИ-ассистент ожидает, что за минуту будет обрабатываться хотя бы один маркер. Если в течение минуты не появятся новы&lt;br /&gt;
&lt;br /&gt;
Значения данных переменных могут быть сохранены в &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; файл и переданы при запуске с помощью аргумента &amp;lt;code&amp;gt;docker compose --env-file ./.env ... up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание переменных доступных для конфигурации запуска ИИ-ассистента с поддержкой внешнего сервиса моделей:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# URL of the OpenAI API-compatible LLM hosting service&lt;br /&gt;
LLM_URL=&lt;br /&gt;
&lt;br /&gt;
 # LLM hosting service authorization token&lt;br /&gt;
LLM_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin authorization token, which will be used to perform LLM service registration requests in the AI assistant. &lt;br /&gt;
# Or with REG_LOGIN and REG_PASSWORD, if token is not set&lt;br /&gt;
# REG_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin login and password&lt;br /&gt;
# REG_LOGIN=admin&lt;br /&gt;
# REG_PASSWORD=admin&lt;br /&gt;
&lt;br /&gt;
# ID of the service in the AI assistant&lt;br /&gt;
# REG_ID=llm&lt;br /&gt;
&lt;br /&gt;
# The name of the service displayed in the AI assistant&lt;br /&gt;
# REG_NAME=llm&lt;br /&gt;
&lt;br /&gt;
# Service description&lt;br /&gt;
# REG_DESCRIPTION=&amp;quot;LLM hosting service&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Comma-separated list of available models. If not specified, all models available to the LLM hosting service user will be available.&lt;br /&gt;
# MODEL_WHITELIST=&lt;br /&gt;
&lt;br /&gt;
# Maximum number of simultaneous requests to process warning with LLM&lt;br /&gt;
# MAX_PARALLEL_REQUESTS=1&lt;br /&gt;
&lt;br /&gt;
# Maximum number of 5s attempts to get single warning result from LLM&lt;br /&gt;
# MODEL_VALIDATION_MAXATTEMPTS=12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;--profile mcp&amp;lt;/code&amp;gt; ==&lt;br /&gt;
При запуске с данным профилем стартует контейнер с MCP-сервером, подключённый к текущему экземпляру Svacer.&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с профилем &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; необходимо:&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt; номер сетевого порта на котором будет доступен MCP-сервер. По умолчанию будет назначен порт &amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;SVACER_MPC_TOKEN&amp;lt;/code&amp;gt; строку с токеном авторизации, который необходимо будет указать в клиенте MCP-сервера;&lt;br /&gt;
* при необходимости доступа к MCP-серверу по адресу отличному от &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;) или при использовании DNS необходимо:&lt;br /&gt;
** указать необходимый адрес/dns-имя в переменной &amp;lt;code&amp;gt;MCP_ALLOWED_HOSTS&amp;lt;/code&amp;gt; в виде &amp;lt;code&amp;gt;172.17.0.1:*&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;some.domain:*&amp;lt;/code&amp;gt;&lt;br /&gt;
** указать необходимый адрес/dns-имя в переменной &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MCP_ALLOWED_ORIGINS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; в виде &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://172.17.0.1:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://some.domain:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* при необходимости можно настроить логин и пароль пользователя, от имени которого MCP-сервер будет выполнять запросы к Svacer. По умолчанию: &amp;lt;code&amp;gt;admin/admin&amp;lt;/code&amp;gt;&lt;br /&gt;
После запуска mcp-сервер будет доступен по адресу &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:{MCP_PORT}/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание других переменных доступных для конфигурации запуска ИИ-ассистента с поддержкой внешнего сервиса моделей:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Bearer token for /mcp clients in HTTP mode. Generate: openssl rand -hex 32&lt;br /&gt;
SVACER_MCP_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin login and password&lt;br /&gt;
SVACER_LOGIN=admin&lt;br /&gt;
SVACER_PASSWORD=admin&lt;br /&gt;
&lt;br /&gt;
# External port that will be mapped by docker to the internal port 8000&lt;br /&gt;
MCP_PORT=8002&lt;br /&gt;
&lt;br /&gt;
MCP_ALLOWED_HOSTS=172.17.0.1:*&lt;br /&gt;
MCP_ALLOWED_ORIGINS=http://172.17.0.1:*&lt;br /&gt;
&lt;br /&gt;
# Svacer server (container) URL&lt;br /&gt;
# SVACER_URL=http://svacer:8080&lt;br /&gt;
&lt;br /&gt;
# HTTP timeout for requests to Svacer, seconds&lt;br /&gt;
# SVACER_TIMEOUT=30&lt;br /&gt;
&lt;br /&gt;
# Public URL of this MCP server (used for WWW-Authenticate, RFC 9728).&lt;br /&gt;
# Defaults to http://localhost:&amp;lt;SVACER_HTTP_PORT&amp;gt;. Set when running behind a reverse proxy.&lt;br /&gt;
# SVACER_MCP_RESOURCE_URL=https://mcp.example.com&lt;br /&gt;
&lt;br /&gt;
# Subset of tools to register (comma-separated). Unset = all 8 tools.&lt;br /&gt;
# Available: get_projects, get_snapshots, get_warnings, get_markers,&lt;br /&gt;
#            get_project_stats, get_project_groups, get_advanced_file_preview, get_diff&lt;br /&gt;
# SVACER_TOOLS=get_projects,get_snapshots,get_markers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_deploy&amp;diff=3558</id>
		<title>Help:13-alpha deploy</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_deploy&amp;diff=3558"/>
		<updated>2026-05-25T07:20:49Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* --profile llm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Демонстрационная сборка ==&lt;br /&gt;
&lt;br /&gt;
Установка демонстрационной версии Svacer с поддержкой [[Help:13-alpha introduction|описанных функций]] доступна только в докере с использованием docker compose&lt;br /&gt;
&lt;br /&gt;
== docker compose ==&lt;br /&gt;
&lt;br /&gt;
Для установки демонстрационной версии подготовлен специальный файл [https://svacer.ispras.ru/extra/docker-compose-with-ai-llm-mcp.yml docker-compose-with-ai-llm-mcp.yml]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -LO https://svacer.ispras.ru/extra/docker-compose-with-ai-llm-mcp.yml&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с использованием данного compose-файла доступны профили:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Профиль !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| Без профиля || Запуск Svacer без поддержки ИИ-ассистента и MCP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ai&amp;lt;/code&amp;gt; || Запуск Svacer с поддержкой ИИ-ассистента со встроенной моделью&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; || Запуск Svacer с поддержкой ИИ-ассистента и возможностью подключения к нему внешних LLM для разметки предупреждений&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; || Запуск Svacer с MCP-сервером &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для запуска с использованием одного или нескольких профилей используется команда&lt;br /&gt;
&lt;br /&gt;
 docker compose -f docker-compose-with-ai-llm-mcp.yml ... --profile llm --profile mcp ... up -d&lt;br /&gt;
&lt;br /&gt;
При этом необходимо учитывать, что&lt;br /&gt;
&lt;br /&gt;
* при запуске Svacer без профилей или только с профилем &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; функциональность разметки предупреждений с помощью ИИ будет возвращать ошибку;&lt;br /&gt;
&amp;lt;!-- * Профиль &amp;lt;code&amp;gt;no-ai&amp;lt;/code&amp;gt; не может быть использован одновременно с другими профилями; --&amp;gt;&lt;br /&gt;
* запуск с профилями &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mcp&amp;lt;/code&amp;gt; требует настройки переменных окружения (см. ниже).&lt;br /&gt;
&lt;br /&gt;
Для удобства настройки переменных окружения может использоваться env-файл [https://svacer.ispras.ru/extra/llm-mcp.env llm-mcp.env], который после установки необходимых значений может быть передан команде запуска&lt;br /&gt;
&lt;br /&gt;
 docker compose -f docker-compose-with-ai-llm-mcp.yml --env-file ./llm-mcp.env ... --profile llm --profile mcp ... up -d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == &amp;lt;code&amp;gt;--profile no-ai&amp;lt;/code&amp;gt; == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Данный профиль не требует дополнительной конфигурации для запуска --&amp;gt;&lt;br /&gt;
== &amp;lt;code&amp;gt;--profile llm&amp;lt;/code&amp;gt; ==&lt;br /&gt;
Запуск Svacer с данным профилем даёт возможность подключить к ИИ-ассистенту внешний сервис моделей, поддерживающий OpenAI API. После успешного подключения ИИ-ассистент сможет использовать LLM для разметки и комментирования предупреждений. В списке разметки с помощью ИИ появятся модели доступные пользователю, чей ключ был передан при запуске.&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с профилем &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; необходимо:&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;LLM_URL&amp;lt;/code&amp;gt; значение url, по которому контейнер &amp;lt;code&amp;gt;svacer-validation-server&amp;lt;/code&amp;gt; сможет подключиться к сервису моделей, совместимому с OpenAI API;&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;LLM_TOKEN&amp;lt;/code&amp;gt; значение ключа авторизации в сервис моделей;&lt;br /&gt;
* при необходимости установить значения переменных &amp;lt;code&amp;gt;REG_TOKEN&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;REG_LOGIN&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;REG_PASSWORD&amp;lt;/code&amp;gt; содержащих, соответственно, токен авторизации или логин и пароль администратора. Эти данные нужны для запуска компонентов поддержки LLM в ИИ-ассистенте. По умолчанию будут использоваться логин и пароль &amp;lt;code&amp;gt;admin/admin&amp;lt;/code&amp;gt;;&lt;br /&gt;
* при желании изменить отображаемое название сервиса в интерфейсе выбора моделей, можно установить значение переменной &amp;lt;code&amp;gt;REG_NAME&amp;lt;/code&amp;gt;. По умолчанию: &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt;;&lt;br /&gt;
* при необходимости ограничения списка доступных моделей, в переменную &amp;lt;code&amp;gt;MODEL_WHITELIST&amp;lt;/code&amp;gt; нужно передать список названий моделей разделённых запятыми;&lt;br /&gt;
* если производительность сервиса моделей позволяет параллельно обрабатывать несколько предупреждений, то можно установить значение переменной &amp;lt;code&amp;gt;MAX_PARALLEL_REQUESTS&amp;lt;/code&amp;gt; в значение больше единицы;&lt;br /&gt;
* если производительность модели не позволяет обрабатывать одно предупреждение в минуту, то результаты обработки не будут получены. Чтобы увеличить время ожидания новых результатов модели, можно установить значение переменной &amp;lt;code&amp;gt;MODEL_VALIDATION_MAXATTEMPTS&amp;lt;/code&amp;gt; в значение кратное 12 (двенадцати). Например, значение 60 == 5 минут.&lt;br /&gt;
&lt;br /&gt;
В процессе обработки набора маркеров с помощью LLM ИИ-ассистент ожидает, что за минуту будет обрабатываться хотя бы один маркер. Если в течение минуты не появятся новы&lt;br /&gt;
&lt;br /&gt;
Значения данных переменных могут быть сохранены в &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; файл и переданы при запуске с помощью аргумента &amp;lt;code&amp;gt;docker compose --env-file ./.env ... up -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание переменных доступных для конфигурации запуска ИИ-ассистента с поддержкой внешнего сервиса моделей:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# URL of the OpenAI API-compatible LLM hosting service&lt;br /&gt;
LLM_URL=&lt;br /&gt;
&lt;br /&gt;
 # LLM hosting service authorization token&lt;br /&gt;
LLM_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin authorization token, which will be used to perform LLM service registration requests in the AI assistant. &lt;br /&gt;
# Or with REG_LOGIN and REG_PASSWORD, if token is not set&lt;br /&gt;
# REG_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin login and password&lt;br /&gt;
# REG_LOGIN=admin&lt;br /&gt;
# REG_PASSWORD=admin&lt;br /&gt;
&lt;br /&gt;
# ID of the service in the AI assistant&lt;br /&gt;
# REG_ID=llm&lt;br /&gt;
&lt;br /&gt;
# The name of the service displayed in the AI assistant&lt;br /&gt;
# REG_NAME=llm&lt;br /&gt;
&lt;br /&gt;
# Service description&lt;br /&gt;
# REG_DESCRIPTION=&amp;quot;LLM hosting service&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Comma-separated list of available models. If not specified, all models available to the LLM hosting service user will be available.&lt;br /&gt;
# MODEL_WHITELIST=&lt;br /&gt;
&lt;br /&gt;
# Maximum number of simultaneous requests to process warning with LLM&lt;br /&gt;
# MAX_PARALLEL_REQUESTS=1&lt;br /&gt;
&lt;br /&gt;
# Maximum number of 5s attempts to get single warning result from LLM&lt;br /&gt;
# MODEL_VALIDATION_MAXATTEMPTS=12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;--profile mcp&amp;lt;/code&amp;gt; ==&lt;br /&gt;
При запуске с данным профилем стартует контейнер с MCP-сервером подключённый к текущему экземпляру Svacer.&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer с профилем &amp;lt;code&amp;gt;llm&amp;lt;/code&amp;gt; необходимо:&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt; номер сетевого порта на котором будет доступен MCP-сервер. По умолчанию будет назначен порт &amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;.&lt;br /&gt;
* установить в переменную окружения &amp;lt;code&amp;gt;SVACER_MPC_TOKEN&amp;lt;/code&amp;gt; строку с токеном авторизации, который необходимо будет указать в клиенте MCP-сервера;&lt;br /&gt;
* при необходимости доступа к MCP-серверу по адресу отличному от &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;) или при использовании DNS необходимо:&lt;br /&gt;
** указать необходимый адрес/dns-имя в переменной &amp;lt;code&amp;gt;MCP_ALLOWED_HOSTS&amp;lt;/code&amp;gt; в виде &amp;lt;code&amp;gt;172.17.0.1:*&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;some.domain:*&amp;lt;/code&amp;gt;&lt;br /&gt;
** указать необходимый адрес/dns-имя в переменной &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;MCP_ALLOWED_ORIGINS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; в виде &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://172.17.0.1:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://some.domain:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* При необходимости можно настроить логин и пароль пользователя, от имени которого mcp-сервер будет выполнять запросы к Svacer. По умолчанию: &amp;lt;code&amp;gt;admin:admin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска mcp-сервер будет доступен по адресу &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:{MCP_PORT}/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание других переменных доступных для конфигурации запуска ИИ-ассистента с поддержкой внешнего сервиса моделей:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Bearer token for /mcp clients in HTTP mode. Generate: openssl rand -hex 32&lt;br /&gt;
SVACER_MCP_TOKEN=&lt;br /&gt;
&lt;br /&gt;
# Svacer admin login and password&lt;br /&gt;
SVACER_LOGIN=admin&lt;br /&gt;
SVACER_PASSWORD=admin&lt;br /&gt;
&lt;br /&gt;
# External port that will be mapped by docker to the internal port 8000&lt;br /&gt;
MCP_PORT=8002&lt;br /&gt;
&lt;br /&gt;
MCP_ALLOWED_HOSTS=172.17.0.1:*&lt;br /&gt;
MCP_ALLOWED_ORIGINS=http://172.17.0.1:*&lt;br /&gt;
&lt;br /&gt;
# Svacer server (container) URL&lt;br /&gt;
# SVACER_URL=http://svacer:8080&lt;br /&gt;
&lt;br /&gt;
# HTTP timeout for requests to Svacer, seconds&lt;br /&gt;
# SVACER_TIMEOUT=30&lt;br /&gt;
&lt;br /&gt;
# Public URL of this MCP server (used for WWW-Authenticate, RFC 9728).&lt;br /&gt;
# Defaults to http://localhost:&amp;lt;SVACER_HTTP_PORT&amp;gt;. Set when running behind a reverse proxy.&lt;br /&gt;
# SVACER_MCP_RESOURCE_URL=https://mcp.example.com&lt;br /&gt;
&lt;br /&gt;
# Subset of tools to register (comma-separated). Unset = all 8 tools.&lt;br /&gt;
# Available: get_projects, get_snapshots, get_warnings, get_markers,&lt;br /&gt;
#            get_project_stats, get_project_groups, get_advanced_file_preview, get_diff&lt;br /&gt;
# SVACER_TOOLS=get_projects,get_snapshots,get_markers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Checker_edit.png&amp;diff=3549</id>
		<title>File:Checker edit.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Checker_edit.png&amp;diff=3549"/>
		<updated>2026-05-22T09:03:41Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Checkers_list.png&amp;diff=3548</id>
		<title>File:Checkers list.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Checkers_list.png&amp;diff=3548"/>
		<updated>2026-05-22T09:03:24Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3547</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3547"/>
		<updated>2026-05-22T09:03:08Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Редактирование описания детектора */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы интерфейса.&lt;br /&gt;
[[File:Cleanup list rules.png|thumb|none|x350px|alt=Cleanup_list_rules|Список правил автоудаления]]&lt;br /&gt;
[[File:Cleanup create rules.png|thumb|none|x400px|alt=Cleanup_create_rules|Создание правила автоудаления]]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты форм интерфейса:&lt;br /&gt;
&lt;br /&gt;
[[File:Automigrate list rules.png|thumb|none|x400px|alt=Automigrate_list_rules|Список правил автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate create rule.png|thumb|none|x400px|alt=Automigrate_create_rules|Создание правила автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate log.png|thumb|none|x430px|alt=Automigrate_preview|Предпросмотр затрагиваемых правилами веток проектов]]&lt;br /&gt;
[[File:Automigrate preview.png|thumb|none|x400px|alt=Automigrate_log|Просмотр лога автомиграции]]&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты форм интерфейса.&lt;br /&gt;
[[File:Review migration 1.png|thumb|none|x400px|alt=Review_migration_1|Шаг 1: Задание параметров миграции разметки]]&lt;br /&gt;
[[File:Review migration 2.png|thumb|none|x425px|alt=Review_migration_2|Шаг 2: Просмотр и настройка плана миграции разметки]]&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты интерфейса.&lt;br /&gt;
&lt;br /&gt;
[[File:Checkers list.png|thumb|none|x400px|alt=Checker_list|Список детекторов]]&lt;br /&gt;
[[File:Checker edit.png|thumb|none|x425px|alt=Checker_edit|Редактирование builtin-детектора]]&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3546</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3546"/>
		<updated>2026-05-22T08:59:44Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Миграция разметки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы интерфейса.&lt;br /&gt;
[[File:Cleanup list rules.png|thumb|none|x350px|alt=Cleanup_list_rules|Список правил автоудаления]]&lt;br /&gt;
[[File:Cleanup create rules.png|thumb|none|x400px|alt=Cleanup_create_rules|Создание правила автоудаления]]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты форм интерфейса:&lt;br /&gt;
&lt;br /&gt;
[[File:Automigrate list rules.png|thumb|none|x400px|alt=Automigrate_list_rules|Список правил автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate create rule.png|thumb|none|x400px|alt=Automigrate_create_rules|Создание правила автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate log.png|thumb|none|x430px|alt=Automigrate_preview|Предпросмотр затрагиваемых правилами веток проектов]]&lt;br /&gt;
[[File:Automigrate preview.png|thumb|none|x400px|alt=Automigrate_log|Просмотр лога автомиграции]]&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты форм интерфейса.&lt;br /&gt;
[[File:Review migration 1.png|thumb|none|x400px|alt=Review_migration_1|Шаг 1: Задание параметров миграции разметки]]&lt;br /&gt;
[[File:Review migration 2.png|thumb|none|x425px|alt=Review_migration_2|Шаг 2: Просмотр и настройка плана миграции разметки]]&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Review_migration_2.png&amp;diff=3545</id>
		<title>File:Review migration 2.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Review_migration_2.png&amp;diff=3545"/>
		<updated>2026-05-22T08:58:34Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Review_migration_1.png&amp;diff=3544</id>
		<title>File:Review migration 1.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Review_migration_1.png&amp;diff=3544"/>
		<updated>2026-05-22T08:58:18Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3543</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3543"/>
		<updated>2026-05-22T08:58:07Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Миграция разметки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы интерфейса.&lt;br /&gt;
[[File:Cleanup list rules.png|thumb|none|x350px|alt=Cleanup_list_rules|Список правил автоудаления]]&lt;br /&gt;
[[File:Cleanup create rules.png|thumb|none|x400px|alt=Cleanup_create_rules|Создание правила автоудаления]]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты форм интерфейса:&lt;br /&gt;
&lt;br /&gt;
[[File:Automigrate list rules.png|thumb|none|x400px|alt=Automigrate_list_rules|Список правил автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate create rule.png|thumb|none|x400px|alt=Automigrate_create_rules|Создание правила автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate log.png|thumb|none|x430px|alt=Automigrate_preview|Предпросмотр затрагиваемых правилами веток проектов]]&lt;br /&gt;
[[File:Automigrate preview.png|thumb|none|x400px|alt=Automigrate_log|Просмотр лога автомиграции]]&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты форм интерфейса.&lt;br /&gt;
[[File:Review migration 1.png|thumb|none|x400px|alt=Review_migration_1|Шаг 1: Задание параметров миграции разметки]]&lt;br /&gt;
[[File:Review migration 2.png|thumb|none|x400px|alt=Review_migration_2|Шаг 2: Просмотр и настройка плана миграции разметки]]&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3542</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3542"/>
		<updated>2026-05-22T08:45:23Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Настройка правил автоудаления */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы интерфейса.&lt;br /&gt;
[[File:Cleanup list rules.png|thumb|none|x350px|alt=Cleanup_list_rules|Список правил автоудаления]]&lt;br /&gt;
[[File:Cleanup create rules.png|thumb|none|x400px|alt=Cleanup_create_rules|Создание правила автоудаления]]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты форм интерфейса:&lt;br /&gt;
&lt;br /&gt;
[[File:Automigrate list rules.png|thumb|none|x400px|alt=Automigrate_list_rules|Список правил автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate create rule.png|thumb|none|x400px|alt=Automigrate_create_rules|Создание правила автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate log.png|thumb|none|x430px|alt=Automigrate_preview|Предпросмотр затрагиваемых правилами веток проектов]]&lt;br /&gt;
[[File:Automigrate preview.png|thumb|none|x400px|alt=Automigrate_log|Просмотр лога автомиграции]]&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3541</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3541"/>
		<updated>2026-05-22T08:44:59Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Настройка правил автомиграциии разметки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
[[File:Cleanup list rules.png|thumb|none|x350px|alt=Cleanup_list_rules|Список правил автоудаления]]&lt;br /&gt;
[[File:Cleanup create rules.png|thumb|none|x400px|alt=Cleanup_create_rules|Создание правила автоудаления]]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты форм интерфейса:&lt;br /&gt;
&lt;br /&gt;
[[File:Automigrate list rules.png|thumb|none|x400px|alt=Automigrate_list_rules|Список правил автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate create rule.png|thumb|none|x400px|alt=Automigrate_create_rules|Создание правила автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate log.png|thumb|none|x430px|alt=Automigrate_preview|Предпросмотр затрагиваемых правилами веток проектов]]&lt;br /&gt;
[[File:Automigrate preview.png|thumb|none|x400px|alt=Automigrate_log|Просмотр лога автомиграции]]&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3540</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3540"/>
		<updated>2026-05-22T08:42:37Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Настройка правил автомиграциии разметки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
[[File:Cleanup list rules.png|thumb|none|x350px|alt=Cleanup_list_rules|Список правил автоудаления]]&lt;br /&gt;
[[File:Cleanup create rules.png|thumb|none|x400px|alt=Cleanup_create_rules|Создание правила автоудаления]]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
[[File:Automigrate list rules.png|thumb|none|x350px|alt=Automigrate_list_rules|Список правил автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate create rule.png|thumb|none|x400px|alt=Automigrate_create_rules|Создание правила автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate log.png|thumb|none|x400px|alt=Automigrate_preview|Предпросмотр затрагиваемых правилами веток проектов]]&lt;br /&gt;
[[File:Automigrate preview.png|thumb|none|x400px|alt=Automigrate_log|Просмотр лога автомиграции]]&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Automigrate_log.png&amp;diff=3539</id>
		<title>File:Automigrate log.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Automigrate_log.png&amp;diff=3539"/>
		<updated>2026-05-22T08:41:38Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3538</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3538"/>
		<updated>2026-05-22T08:41:27Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Настройка правил автомиграциии разметки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
[[File:Cleanup list rules.png|thumb|none|x350px|alt=Cleanup_list_rules|Список правил автоудаления]]&lt;br /&gt;
[[File:Cleanup create rules.png|thumb|none|x400px|alt=Cleanup_create_rules|Создание правила автоудаления]]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
[[File:Automigrate list rules.png|thumb|none|x350px|alt=Automigrate_list_rules|Список правил автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate create rule.png|thumb|none|x400px|alt=Automigrate_create_rules|Создание правила автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate log.png|thumb|none|x400px|alt=Automigrate_log|Предпросмотр затрагиваемых правилами веток проектов]]&lt;br /&gt;
[[File:Automigrate preview.png|thumb|none|x400px|alt=Automigrate_preview|Просмотр лога автомиграции]]&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3537</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3537"/>
		<updated>2026-05-22T08:38:50Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Настройка правил автомиграциии разметки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
[[File:Cleanup list rules.png|thumb|none|x350px|alt=Cleanup_list_rules|Список правил автоудаления]]&lt;br /&gt;
[[File:Cleanup create rules.png|thumb|none|x400px|alt=Cleanup_create_rules|Создание правила автоудаления]]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
[[File:Automigrate list rules.png|thumb|none|x350px|alt=Automigrate_list_rules|Список правил автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate create rule.png|thumb|none|x400px|alt=Automigrate_create_rules|Создание правила автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate preview.png|thumb|none|x400px|alt=Automigrate_preview|Просмотр затрагиваемых правилами веток проектов]]&lt;br /&gt;
[[File:Automigrate log.png|thumb|none|x400px|alt=Automigrate_log|Просмотр лога автомиграции]]&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Automigrate_preview.png&amp;diff=3536</id>
		<title>File:Automigrate preview.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Automigrate_preview.png&amp;diff=3536"/>
		<updated>2026-05-22T08:37:30Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Automigrate_create_rule.png&amp;diff=3535</id>
		<title>File:Automigrate create rule.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Automigrate_create_rule.png&amp;diff=3535"/>
		<updated>2026-05-22T08:37:15Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Automigrate_list_rules.png&amp;diff=3534</id>
		<title>File:Automigrate list rules.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Automigrate_list_rules.png&amp;diff=3534"/>
		<updated>2026-05-22T08:36:48Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3533</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3533"/>
		<updated>2026-05-22T08:36:38Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Настройка правил автомиграциии разметки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
[[File:Cleanup list rules.png|thumb|none|x350px|alt=Cleanup_list_rules|Список правил автоудаления]]&lt;br /&gt;
[[File:Cleanup create rules.png|thumb|none|x400px|alt=Cleanup_create_rules|Создание правила автоудаления]]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
[[File:Automigrate list rules.png|thumb|none|x350px|alt=Automigrate_list_rules|Список правил автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate create rule.png|thumb|none|x400px|alt=Automigrate_create_rules|Создание правила автомиграции разметки]]&lt;br /&gt;
[[File:Automigrate preview.png|thumb|none|x400px|alt=Automigrate_log|Просмотр затрагиваемых правилами веток проектов]]&lt;br /&gt;
[[File:Automigrate log.png|thumb|none|x400px|alt=Automigrate_log|Просмотр лога автомиграции]]&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3532</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3532"/>
		<updated>2026-05-22T08:27:42Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Настройка правил автоудаления */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
[[File:Cleanup list rules.png|thumb|none|x350px|alt=Cleanup_list_rules|Список правил автоудаления]]&lt;br /&gt;
[[File:Cleanup create rules.png|thumb|none|x400px|alt=Cleanup_create_rules|Создание правила автоудаления]]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Cleanup_create_rules.png&amp;diff=3531</id>
		<title>File:Cleanup create rules.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Cleanup_create_rules.png&amp;diff=3531"/>
		<updated>2026-05-22T08:25:43Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Cleanup_list_rules.png&amp;diff=3530</id>
		<title>File:Cleanup list rules.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Cleanup_list_rules.png&amp;diff=3530"/>
		<updated>2026-05-22T08:25:23Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3529</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3529"/>
		<updated>2026-05-22T08:25:03Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
[[File:Cleanup_list_rules.png|thumb|none|x300px|alt=Cleanup_list_rules|Список правил автоудаления]]&lt;br /&gt;
[[File:Cleanup_create_rules.png|thumb|none|x300px|alt=Cleanup_create_rules|Создание правила автоудаления]]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3528</id>
		<title>Help:13-alpha MCP</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3528"/>
		<updated>2026-05-22T08:18:17Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Архитектура ==&lt;br /&gt;
[https://modelcontextprotocol.io/docs/getting-started/intro MCP] — открытый стандарт, через который LLM-клиенты (Claude Desktop, Cursor, VS Code, OpenWebUI и др.) вызывают внешние инструменты. &lt;br /&gt;
Svacer MCP соединяет одно с другим: 8 инструментов поверх публичного REST API Svacer, которые LLM выбирает и вызывает в ответ на обычный текстовый запрос. Вместо ручной последовательности «открыть UI, найти проект, выбрать снимок, применить фильтр» достаточно сформулировать вопрос в чате, например, «сколько критических предупреждений в последнем снимке bash?», и получить ответ. Необходимые вызовы инструментов модель выполняет самостоятельно.&lt;br /&gt;
&lt;br /&gt;
[[File:Архитектура MCP.png|thumb|none|x800px|alt=architectureMCP|Архитектура MCP-сервера]]&lt;br /&gt;
&lt;br /&gt;
Поток запроса: LLM-клиент отправляет MCP-вызов через STDIO или Streamable HTTP → &amp;lt;code&amp;gt;server.py&amp;lt;/code&amp;gt; передаёт его в выбранный инструмент из &amp;lt;code&amp;gt;tools/&amp;lt;/code&amp;gt; → инструмент проверяет параметры и обращается к &amp;lt;code&amp;gt;api_client.py&amp;lt;/code&amp;gt; → клиент получает JWT от &amp;lt;code&amp;gt;auth.py&amp;lt;/code&amp;gt; (модуль автоматически обновляет токен по истечении срока действия или при ответе 401) → запрос отправляется в Svacer REST API.&lt;br /&gt;
&lt;br /&gt;
== Установка ==&lt;br /&gt;
Установка Svacer MCP, подключение клиентов и конфигурация.&lt;br /&gt;
&lt;br /&gt;
=== Требования ===&lt;br /&gt;
&lt;br /&gt;
* Python 3.10+&lt;br /&gt;
* Доступ к Svacer-серверу: URL + логин/пароль&lt;br /&gt;
&lt;br /&gt;
=== Режим STDIO ===&lt;br /&gt;
Подходит для настольных клиентов: Claude Desktop, Claude Code, Cursor, VS Code.&lt;br /&gt;
 &amp;lt;code&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://gitlab.ispras.ru/svacerai/mcp.git&amp;lt;/nowiki&amp;gt; &amp;amp;&amp;amp; cd mcp&lt;br /&gt;
 &lt;br /&gt;
 python3 -m venv .venv&lt;br /&gt;
 .venv/bin/pip install -e .&lt;br /&gt;
 &lt;br /&gt;
 cp .env.example .env&lt;br /&gt;
 # Отредактировать .env — указать URL и учётные данные Svacer&lt;br /&gt;
 &lt;br /&gt;
 # Проверить запуск (сервер ожидает данные на stdin; для выхода — Ctrl+C)&lt;br /&gt;
 .venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
После &amp;lt;code&amp;gt;pip install -e .&amp;lt;/code&amp;gt; в окружении становится доступна команда &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; — её указывают в конфигурации клиентов ниже.&lt;br /&gt;
&lt;br /&gt;
=== Режим HTTP (Docker) ===&lt;br /&gt;
Подходит для веб-клиентов (OpenWebUI) и удалённого доступа.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Требования:&#039;&#039;&#039; Docker, Docker Compose.&lt;br /&gt;
 &amp;lt;code&amp;gt;cp .env.example .env&lt;br /&gt;
 &lt;br /&gt;
 # В .env обязательно задать SVACER_MCP_TOKEN — без него сервер не запускается&lt;br /&gt;
 echo &amp;quot;SVACER_MCP_TOKEN=$(openssl rand -hex 32)&amp;quot; &amp;gt;&amp;gt; .env&lt;br /&gt;
 &lt;br /&gt;
 docker compose up -d&lt;br /&gt;
 &lt;br /&gt;
 # MCP endpoint: &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 # Клиенты передают заголовок: Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Внешний порт хоста задаётся переменной &amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt; (по умолчанию &amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;), внутри контейнера сервер всегда слушает порт &amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Подключение клиентов ===&lt;br /&gt;
&lt;br /&gt;
==== Claude Desktop ====&lt;br /&gt;
Файл конфигурации: &amp;lt;code&amp;gt;~/.config/Claude/claude_desktop_config.json&amp;lt;/code&amp;gt; (Linux) или &amp;lt;code&amp;gt;%APPDATA%\Claude\claude_desktop_config.json&amp;lt;/code&amp;gt; (Windows).&lt;br /&gt;
&lt;br /&gt;
Укажите &#039;&#039;&#039;абсолютный путь&#039;&#039;&#039; к &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; из вашего venv (&amp;lt;code&amp;gt;which svacer-mcp&amp;lt;/code&amp;gt; в активированном venv или &amp;lt;code&amp;gt;/path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Claude Code ====&lt;br /&gt;
 &amp;lt;code&amp;gt;claude mcp add svacer \&lt;br /&gt;
   -e SVACER_URL=&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt; \&lt;br /&gt;
   -e SVACER_LOGIN=your-login \&lt;br /&gt;
   -e SVACER_PASSWORD=your-password \&lt;br /&gt;
   -- /path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VS Code ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.vscode/mcp.json&amp;lt;/code&amp;gt; в корне рабочей директории:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;servers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;type&amp;quot;: &amp;quot;stdio&amp;quot;,&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cursor ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.cursor/mcp.json&amp;lt;/code&amp;gt; в корне проекта или глобально:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenWebUI ====&lt;br /&gt;
&lt;br /&gt;
# Развернуть через Docker (см. «Режим HTTP» выше).&lt;br /&gt;
# Открыть &#039;&#039;&#039;Settings → Tools&#039;&#039;&#039; (или &#039;&#039;&#039;Admin Panel → Settings → Tools&#039;&#039;&#039;).&lt;br /&gt;
# Добавить сервер:&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI работает на хосте, снаружи Docker.&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://svacer-mcp:8000/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI развёрнут в той же compose-сети, что и &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; (имя берётся из &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; → service name, порт 8000 — внутренний порт контейнера).&lt;br /&gt;
# Тип подключения: &#039;&#039;&#039;MCP (Streamable HTTP)&#039;&#039;&#039;.&lt;br /&gt;
# В настройках инструмента указать заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt; (значение — то же, что в &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; сервера).&lt;br /&gt;
# Сохранить — инструменты появятся в чате.&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Переменная&lt;br /&gt;
!По умолчанию&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|URL Svacer-сервера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_LOGIN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Логин&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_PASSWORD&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Пароль&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TIMEOUT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тайм-аут HTTP-запросов к Svacer, секунды&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TRANSPORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt;&lt;br /&gt;
|Режим транспорта: &amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;&lt;br /&gt;
|TCP-порт сервера в режиме HTTP (внутри контейнера)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Bearer-токен для клиентов &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt;. Обязателен при &amp;lt;code&amp;gt;SVACER_TRANSPORT=http&amp;lt;/code&amp;gt;, в режиме STDIO игнорируется. Генерация: &amp;lt;code&amp;gt;openssl rand -hex 32&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_RESOURCE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;:&amp;lt;HTTP_PORT&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Публичный URL MCP-сервера для заголовка &amp;lt;code&amp;gt;WWW-Authenticate&amp;lt;/code&amp;gt; (&amp;lt;nowiki&amp;gt;RFC 9728&amp;lt;/nowiki&amp;gt;). Задаётся при работе за обратным прокси&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Список инструментов через запятую. Если не задано, регистрируются все 8&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;&lt;br /&gt;
|Внешний порт хоста при запуске через &amp;lt;code&amp;gt;docker compose&amp;lt;/code&amp;gt; (отображается на внутренний &amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
Переменные читаются из &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; или из окружения. Для STDIO-клиентов их можно указать в секции &amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt; конфигурации клиента.&lt;br /&gt;
&lt;br /&gt;
==== Ограничение набора инструментов ====&lt;br /&gt;
Чтобы запустить сервер с подмножеством инструментов (например, для уменьшения объёма контекста у модели или разграничения доступа), задайте &amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &amp;lt;code&amp;gt;SVACER_TOOLS=get_projects,get_snapshots,get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
Допустимые имена: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;. Неизвестное имя в списке приводит к ошибке при запуске. Если переменная пустая или не задана, регистрируются все 8 инструментов.&lt;br /&gt;
&lt;br /&gt;
==== Несколько экземпляров сервера ====&lt;br /&gt;
Параллельный запуск нескольких MCP-серверов поддерживается без ограничений.&lt;br /&gt;
&lt;br /&gt;
* В режиме STDIO каждая запись в конфигурации клиента описывает отдельный процесс — несколько подключений к разным экземплярам Svacer задаются простым перечислением.&lt;br /&gt;
* В режиме HTTP запускаются независимые контейнеры на разных хост-портах: например, &amp;lt;code&amp;gt;MCP_PORT=8002&amp;lt;/code&amp;gt; для одного экземпляра и &amp;lt;code&amp;gt;MCP_PORT=8003&amp;lt;/code&amp;gt; для другого. Для каждого контейнера задаётся собственный &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Безопасность ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;STDIO&#039;&#039;&#039;: сервер не открывает сетевых портов и обменивается данными через стандартные потоки ввода/вывода процесса.&lt;br /&gt;
* &#039;&#039;&#039;Streamable HTTP&#039;&#039;&#039;: эндпоинт &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt; требует заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;. Запросы без токена или с неверным значением получают ответ &amp;lt;code&amp;gt;401&amp;lt;/code&amp;gt; и заголовок &amp;lt;code&amp;gt;WWW-Authenticate: Bearer ...&amp;lt;/code&amp;gt;. Токен является разделяемым секретом и не заменяет TLS, а дополняет его: при работе за обратным прокси необходимо использовать HTTPS, а сам токен передавать только по защищённому каналу.&lt;br /&gt;
* Без &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt; HTTP-сервер не запускается.&lt;br /&gt;
* Учётные данные &amp;lt;code&amp;gt;admin/admin&amp;lt;/code&amp;gt; предназначены только для тестового стенда. В рабочем окружении необходимо задать собственные логин и пароль через переменные окружения.&lt;br /&gt;
* Файл &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; не должен добавляться в систему контроля версий.&lt;br /&gt;
&lt;br /&gt;
==== Передача токена клиентом ====&lt;br /&gt;
Большинство HTTP-клиентов MCP (OpenWebUI и др.) позволяют задать произвольный заголовок &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt; в настройках инструмента — указывается значение &amp;lt;code&amp;gt;Bearer &amp;lt;токен&amp;gt;&amp;lt;/code&amp;gt;. Для ручной проверки:&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -H &amp;quot;Authorization: Bearer $SVACER_MCP_TOKEN&amp;quot; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Content-Type: application/json&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Accept: application/json, text/event-stream&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -d &#039;{&amp;quot;jsonrpc&amp;quot;:&amp;quot;2.0&amp;quot;,&amp;quot;id&amp;quot;:1,&amp;quot;method&amp;quot;:&amp;quot;initialize&amp;quot;,&amp;quot;params&amp;quot;:{&amp;quot;protocolVersion&amp;quot;:&amp;quot;2025-11-25&amp;quot;,&amp;quot;capabilities&amp;quot;:{},&amp;quot;clientInfo&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;curl&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0&amp;quot;}}}&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
Справочник по 8 инструментам Svacer MCP. Типичный порядок вызовов: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt; → любой из аналитических инструментов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Инструмент&lt;br /&gt;
!Назначение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|Список проектов с ветками — точка входа&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;&lt;br /&gt;
|Снимки конкретной ветки, от нового к старому&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;&lt;br /&gt;
|Агрегированные метрики снимка: severity / review / checker&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|Компактный список маркеров с серверной фильтрацией&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|Полные предупреждения с трассами и историей ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;&lt;br /&gt;
|Сравнение двух снимков: new / missing / modified / matched&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;&lt;br /&gt;
|Фрагмент исходного кода вокруг строки&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;&lt;br /&gt;
|Группа проектов по имени или UUID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== get_projects ===&lt;br /&gt;
Список всех проектов с ветками. Точка входа: с этого вызова начинается практически любой сценарий — он возвращает &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;, необходимые для последующих запросов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметров нет.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;project_id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
     &amp;quot;project_name&amp;quot;: &amp;quot;bash&amp;quot;,&lt;br /&gt;
     &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.122456Z&amp;quot;,&lt;br /&gt;
     &amp;quot;created_by&amp;quot;: &amp;quot;admin&amp;quot;,&lt;br /&gt;
     &amp;quot;branches&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
         &amp;quot;branch_id&amp;quot;: &amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
         &amp;quot;branch_name&amp;quot;: &amp;quot;master&amp;quot;,&lt;br /&gt;
         &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.394812Z&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_snapshots ===&lt;br /&gt;
Список снимков для конкретной ветки проекта, от нового к старому.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока или regex для фильтра по имени снимка&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_snapshots(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;snapshot_id&amp;quot;: &amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
     &amp;quot;name&amp;quot;: &amp;quot;Snapshot 2020-03-25 09:09:41 +0300&amp;quot;,&lt;br /&gt;
     &amp;quot;import_time&amp;quot;: &amp;quot;2020-03-25T09:09:41.837296Z&amp;quot;,&lt;br /&gt;
     &amp;quot;commit_hash&amp;quot;: null,&lt;br /&gt;
     &amp;quot;markers_count&amp;quot;: 297,&lt;br /&gt;
     &amp;quot;link&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru/&amp;lt;/nowiki&amp;gt;...&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_stats ===&lt;br /&gt;
Агрегированные метрики по снимку: общее количество предупреждений, распределение по критичности, по статусу ревью, по детекторам. Наиболее быстрый способ получить общую картину по проекту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_stats(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_warnings&amp;quot;: 771,&lt;br /&gt;
   &amp;quot;by_severity&amp;quot;: {&lt;br /&gt;
     &amp;quot;Critical&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Major&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Unspecified&amp;quot;: 769&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_review_status&amp;quot;: {&lt;br /&gt;
     &amp;quot;Confirmed&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;False Positive&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Undecided&amp;quot;: 767,&lt;br /&gt;
     &amp;quot;Unclear&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Won&#039;t fix&amp;quot;: 1&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_checker&amp;quot;: {&lt;br /&gt;
     &amp;quot;PROC_USE.VULNERABLE&amp;quot;: 337,&lt;br /&gt;
     &amp;quot;UNUSED_FUNC_RES.REWRITE.MINOR&amp;quot;: 44,&lt;br /&gt;
     &amp;quot;UNREACHABLE_CODE&amp;quot;: 28,&lt;br /&gt;
     &amp;quot;DEREF_AFTER_NULL.EX&amp;quot;: 27,&lt;br /&gt;
     &amp;quot;NULL_AFTER_DEREF&amp;quot;: 27&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_markers ===&lt;br /&gt;
Компактный список маркеров с серверной фильтрацией. Основной инструмент для перечисления и обзора: его следует предпочитать &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, когда не требуются развёрнутые поля — трассы и история ревью.&lt;br /&gt;
&lt;br /&gt;
По умолчанию ответ ограничен 30 маркерами и содержит компактный набор полей. Подробнее об ограничении объёма см. раздел Про объём ответа в сценариях.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора (&amp;lt;code&amp;gt;DEREF_AFTER_NULL&amp;lt;/code&amp;gt;, …)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы маркеров&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю изменений ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии к маркеру&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра из веб-интерфейса Svacer&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров в ответе (по умолчанию &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;). Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Список разрешённых полей маркера верхнего уровня. По умолчанию — компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает все поля коннектора (&amp;lt;code&amp;gt;id, warnClass, file, line, msg, tool, function, mtid, review&amp;lt;/code&amp;gt;, а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены). Допустим и произвольный список — например, &amp;lt;code&amp;gt;[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_markers(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 341,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 30,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;warnClass&amp;quot;: [&amp;quot;PROC_USE.VULNERABLE&amp;quot;]},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;e05bb35b-a95e-4eb2-85ae-3101b788f07d&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;PROC_USE.VULNERABLE.TEMP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/lib/sh/tmpfile.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 160,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Use of vulnerable function &#039;mktemp&#039; at tmpfile.c:160. ...&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;sh_mktmpname&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: null&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; отражает количество маркеров, удовлетворяющих фильтру до применения ограничения; &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt; — количество маркеров, фактически содержащихся в &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; следует либо сузить фильтры (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;), либо передать &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; для получения полного списка. Поля &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; возвращаются только при &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_warnings ===&lt;br /&gt;
Полные предупреждения с детальной разметкой. Ответ значительно объёмнее, чем у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, поэтому инструмент следует использовать только тогда, когда нужны поля, отсутствующие в компактной форме: &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Лимит по умолчанию — 30; при включённых &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt; он автоматически снижается до 8, поскольку такие предупреждения существенно объёмнее.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы. Активирует режим расширенных полей (лимит по умолчанию — 8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю ревью. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество предупреждений в ответе. По умолчанию — &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;, в режиме расширенных полей — &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Явно заданное &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; отменяет автоматическое снижение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_warnings(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   severity=[&amp;quot;Critical&amp;quot;],&lt;br /&gt;
   review_history=True,&lt;br /&gt;
   traces=True&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: false,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;severity&amp;quot;: [&amp;quot;Critical&amp;quot;], &amp;quot;traces&amp;quot;: true, &amp;quot;review_history&amp;quot;: true},&lt;br /&gt;
   &amp;quot;warnings&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;a3f21c90-1d4e-4b82-9f63-7c8e5d2a1b09&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Possible null pointer dereference of &#039;l&#039; after loop exit.&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: {&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;severity&amp;quot;: &amp;quot;Critical&amp;quot;},&lt;br /&gt;
       &amp;quot;review_history&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;changed_by&amp;quot;: &amp;quot;admin&amp;quot;, &amp;quot;changed_at&amp;quot;: &amp;quot;2021-12-13T14:00:00Z&amp;quot;}],&lt;br /&gt;
       &amp;quot;traces&amp;quot;: [{&amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;, &amp;quot;line&amp;quot;: 3320, &amp;quot;msg&amp;quot;: &amp;quot;Loop starts here; &#039;l&#039; may exhaust the list.&amp;quot;}]&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_diff ===&lt;br /&gt;
Сравнение двух снимков. Категории располагаются под ключом &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt; (появилось в новом снимке), &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt; (исчезло из нового), &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt; (тот же идентификатор, изменился контекст), &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt; (совпало в обоих). Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно UUID снимков.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;base_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Старый снимок&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;head_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|нет&lt;br /&gt;
|Новый снимок; если не указан, сравнение выполняется с предыдущим по времени&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; — только статистика; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; — статистика и идентификаторы маркеров; &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; — полные маркеры по категориям&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|bool&lt;br /&gt;
|нет&lt;br /&gt;
|Метаданные детекторов для маркеров (только при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров &#039;&#039;&#039;на каждую категорию&#039;&#039;&#039; при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;. По умолчанию — &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;, значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Параметр игнорируется при &amp;lt;code&amp;gt;level &amp;lt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;. Применяется к маркерам внутри категорий при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_diff(&lt;br /&gt;
   base_snapshot_id=&amp;quot;72b3df7b-c15a-4e3d-8f92-a041dc6e5b87&amp;quot;,&lt;br /&gt;
   head_snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   level=0&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&lt;br /&gt;
     &amp;quot;context1&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-20 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;context2&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-25 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;scope&amp;quot;: [&amp;quot;NEW&amp;quot;, &amp;quot;MISSING&amp;quot;, &amp;quot;MATCHED&amp;quot;, &amp;quot;MODIFIED&amp;quot;],&lt;br /&gt;
     &amp;quot;new&amp;quot;: 9,&lt;br /&gt;
     &amp;quot;missing&amp;quot;: 12,&lt;br /&gt;
     &amp;quot;modified&amp;quot;: 98,&lt;br /&gt;
     &amp;quot;matched&amp;quot;: 187&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt;)&#039;&#039;&#039; — каждая категория внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; оформляется и ограничивается независимо:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&amp;quot;new&amp;quot;: 50, &amp;quot;missing&amp;quot;: 5, &amp;quot;modified&amp;quot;: 0, &amp;quot;matched&amp;quot;: 187},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: {&lt;br /&gt;
     &amp;quot;new_markers&amp;quot;: {&lt;br /&gt;
       &amp;quot;total_count&amp;quot;: 50,&lt;br /&gt;
       &amp;quot;returned_count&amp;quot;: 20,&lt;br /&gt;
       &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
       &amp;quot;markers&amp;quot;: [&lt;br /&gt;
         {&amp;quot;id&amp;quot;: &amp;quot;a3f21c90-...&amp;quot;, &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;, &amp;quot;file&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;line&amp;quot;: 3327, &amp;quot;msg&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;, &amp;quot;review&amp;quot;: null}&lt;br /&gt;
       ]&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;missing_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 5, &amp;quot;returned_count&amp;quot;: 5, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: [...]},&lt;br /&gt;
     &amp;quot;modified_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 0, &amp;quot;returned_count&amp;quot;: 0, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: []},&lt;br /&gt;
     &amp;quot;matched_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 187, &amp;quot;returned_count&amp;quot;: 20, &amp;quot;truncated&amp;quot;: true, &amp;quot;markers&amp;quot;: [...]}&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; либо запросить нужные идентификаторы отдельным вызовом &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;. Маркеры внутри категорий проходят ту же компактную обработку, что и в &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;: значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает фиксированный набор полей коннектора, а не произвольные «сырые» поля API.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_advanced_file_preview ===&lt;br /&gt;
Фрагмент исходного кода из снимка вокруг указанной строки. Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно идентификатора снимка и пути к файлу.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Путь к файлу в том виде, в котором его возвращают &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Центральная строка, нумерация с 1 (по умолчанию &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;before&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк до центральной (по умолчанию &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;after&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк после центральной (по умолчанию &amp;lt;code&amp;gt;99999&amp;lt;/code&amp;gt; — до конца файла)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_advanced_file_preview(&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
   line=3327,&lt;br /&gt;
   before=10,&lt;br /&gt;
   after=10&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
   &amp;quot;content&amp;quot;: &amp;quot;      for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)\n\t;\n      return (l-&amp;gt;word-&amp;gt;word);\n&amp;quot;,&lt;br /&gt;
   &amp;quot;total_lines&amp;quot;: 6082&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_groups ===&lt;br /&gt;
Получить группу проектов по имени или UUID. Группы объединяют проекты в логические блоки — например, по команде или продукту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Имя группы или её UUID&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_groups(name_or_id=&amp;quot;Linux Tools&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;project_group_id&amp;quot;: &amp;quot;c4f8a2d1-3b7e-4f90-82ac-1d5e8f2b6c04&amp;quot;,&lt;br /&gt;
   &amp;quot;project_group_name&amp;quot;: &amp;quot;Linux Tools&amp;quot;,&lt;br /&gt;
   &amp;quot;projects&amp;quot;: [&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;bash&amp;quot;},&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;d3a17f52-...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;coreutils&amp;quot;}&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;projects[].id&amp;lt;/code&amp;gt; — это &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;, который далее передаётся в &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;. Группы и проекты — разные сущности; идентификатор группы и идентификатор проекта не взаимозаменяемы.&lt;br /&gt;
&lt;br /&gt;
== Примеры сценариев ==&lt;br /&gt;
Приведённые ниже запросы выполнены на демонстрационном стенде &amp;lt;code&amp;gt;svacer-demo.ispras.ru&amp;lt;/code&amp;gt; с использованием OpenWebUI и модели &amp;lt;code&amp;gt;qwen3-coder:30b&amp;lt;/code&amp;gt;. В любом другом MCP-клиенте с моделью достаточной мощности порядок вызовов будет аналогичным.&lt;br /&gt;
&lt;br /&gt;
=== Про объём ответа ===&lt;br /&gt;
&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; по умолчанию ограничивают объём ответа, чтобы не перегружать контекст модели:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; — 30 маркеров по умолчанию. Если у &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; включены &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;, лимит снижается до 8, поскольку такие маркеры значительно объёмнее.&lt;br /&gt;
* &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; — 20 маркеров на каждую категорию внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
В ответе присутствуют поля &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;truncated&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; есть два варианта действий: сузить фильтр (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;) либо явно увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; (значение &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; полностью снимает ограничение).&lt;br /&gt;
&lt;br /&gt;
Поле &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; определяет, какие ключи маркера возвращаются. По умолчанию применяется компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt; (а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены логическими флагами и пришли с сервера). Для полного маркера со всеми служебными ключами — &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;. Для произвольной выборки — список полей верхнего уровня, например &amp;lt;code&amp;gt;fields=[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;. Поле &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; — объект &amp;lt;code&amp;gt;{status, severity, action}&amp;lt;/code&amp;gt;; вложенные ключи в &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; не поддерживаются, поэтому объект &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; запрашивается целиком.&lt;br /&gt;
&lt;br /&gt;
=== Перечислить все проекты ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие проекты есть в Svacer?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В Svacer доступно 6 проектов: bash, openssl, paho.mqtt.c, coturn, zstd, darpa. У каждого — одна ветка &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Посмотреть снимки проекта ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие снимки есть у paho.mqtt.c? Самый свежий когда?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; — найти &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id=..., branch_id=...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;У paho.mqtt.c 3 снимка. Самый свежий — «Snapshot 2020-03-25 09:09:41 +0300» (297 маркеров). Предыдущий — 20 марта (306 маркеров).&amp;lt;/blockquote&amp;gt;Поле &amp;lt;code&amp;gt;commit_hash&amp;lt;/code&amp;gt; может принимать значение &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;, если проект не сохраняет хэш коммита в &amp;lt;code&amp;gt;custom_properties&amp;lt;/code&amp;gt;. Имена снимков произвольны: одни проекты записывают в имя дату, другие — коммит, третьи — свободный текст.&lt;br /&gt;
&lt;br /&gt;
=== Сводка по проекту ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Что в bash в последнем снимке? Сколько всего предупреждений, есть ли критические, какие топ-детекторы?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id, branch_id)&amp;lt;/code&amp;gt; — взять последний снимок&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats(project_id, branch_id, snapshot_id)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В последнем снимке bash содержится 771 предупреждение:&lt;br /&gt;
&lt;br /&gt;
* Критических: 1 (Confirmed)&lt;br /&gt;
* Major: 1 (Won&#039;t fix)&lt;br /&gt;
* Остальные: 769 (Unspecified — не ревьюились)&lt;br /&gt;
&lt;br /&gt;
Топ-детекторы по количеству:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;PROC_USE.VULNERABLE&amp;lt;/code&amp;gt; — 337&lt;br /&gt;
# &amp;lt;code&amp;gt;UNUSED_FUNC_RES.REWRITE.MINOR&amp;lt;/code&amp;gt; — 44&lt;br /&gt;
# &amp;lt;code&amp;gt;UNREACHABLE_CODE&amp;lt;/code&amp;gt; — 28&lt;br /&gt;
# &amp;lt;code&amp;gt;DEREF_AFTER_NULL.EX&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
# &amp;lt;code&amp;gt;NULL_AFTER_DEREF&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;by_severity&amp;lt;/code&amp;gt; — маркеры без ручного ревью, а не «низкий приоритет». Поле &amp;lt;code&amp;gt;by_checker&amp;lt;/code&amp;gt; не сортируется, на большом снимке оно может содержать более 100 ключей — чтобы получить именно топ-N, следует явно сформулировать запрос: «топ-5 детекторов».&lt;br /&gt;
&lt;br /&gt;
=== Тренд по нескольким снимкам ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Как у openssl менялось число предупреждений за последние пять снимков? Покажи таблицей.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — взять список&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats()&amp;lt;/code&amp;gt; × 5 — по каждому из последних пяти снимков&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Снимок&lt;br /&gt;
!Дата&lt;br /&gt;
!Всего&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:49&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:29&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:08&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:48&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:22&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
На демонстрационном стенде указанные пять снимков openssl импортированы с интервалом в 20 минут одного дня и полностью идентичны — поэтому динамика отсутствует. На реальном проекте с историей релизов значения будут изменяться.&lt;br /&gt;
&lt;br /&gt;
=== Найти срабатывания конкретного детектора ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Где в bash срабатывает PROC_USE.VULNERABLE? Покажи список — файл, строка, что именно ругается. Достаточно первых десяти.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/tmpfile.c:160&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;mktemp()&amp;lt;/code&amp;gt;, race condition. Рекомендуется &amp;lt;code&amp;gt;mkstemp()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/shell.c:151&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;, значение может быть подменено.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/shell.c:415&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/complete.c:1516&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/eaccess.c:115&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;strcat()&amp;lt;/code&amp;gt;, рекомендуется &amp;lt;code&amp;gt;strncat()&amp;lt;/code&amp;gt;. …&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Фильтр &amp;lt;code&amp;gt;warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&amp;lt;/code&amp;gt; охватывает все подклассы: &amp;lt;code&amp;gt;PROC_USE.VULNERABLE.TEMP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.GETENV&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.STRCAT&amp;lt;/code&amp;gt; и т. д. — всего 341 маркер. Несколько значений в одном параметре трактуются как логическое «ИЛИ»: &amp;lt;code&amp;gt;severity=[&amp;quot;Critical&amp;quot;,&amp;quot;Major&amp;quot;]&amp;lt;/code&amp;gt; возвращает маркеры обеих категорий.&lt;br /&gt;
&lt;br /&gt;
В ответе будет &amp;lt;code&amp;gt;total_count: 341, returned_count: 30, truncated: true&amp;lt;/code&amp;gt; — это ожидаемое поведение. Модель видит общий объём по &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; и при необходимости сужает запрос или вызывает &amp;lt;code&amp;gt;get_markers(..., limit=0)&amp;lt;/code&amp;gt;, чтобы получить полный список.&lt;br /&gt;
&lt;br /&gt;
=== Сравнить два снимка ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Возьми два последних снимка paho.mqtt.c — что между ними изменилось? Сколько новых предупреждений, сколько починили?&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — два последних&lt;br /&gt;
# &amp;lt;code&amp;gt;get_diff(base_snapshot_id=&amp;quot;72b3df7b-...&amp;quot;, head_snapshot_id=&amp;quot;b42cb563-...&amp;quot;, level=0)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Между двумя последними снимками paho.mqtt.c:&lt;br /&gt;
&lt;br /&gt;
* Новых: 12&lt;br /&gt;
* Удалённых: 13&lt;br /&gt;
* Изменённых: 99&lt;br /&gt;
* Совпадающих: 185&lt;br /&gt;
&lt;br /&gt;
Удалено несколько больше, чем добавлено — общая картина практически не изменилась.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Категория &amp;lt;code&amp;gt;modified&amp;lt;/code&amp;gt; — маркер, присутствующий в обоих снимках, у которого изменилось окружение (номер строки, контекст функции). Это не новая ошибка. На больших проектах рекомендуется начинать с &amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt; для получения статистики, при необходимости использовать &amp;lt;code&amp;gt;level=1&amp;lt;/code&amp;gt; (только идентификаторы маркеров) и затем точечно вызывать &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; с нужными фильтрами.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt; возвращает полные маркеры по категориям, причём каждая категория по умолчанию ограничена 20 маркерами. Категории располагаются внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;. Структура ответа в JSON: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;markers&amp;quot;: {&amp;quot;new_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: N, &amp;quot;returned_count&amp;quot;: ..., &amp;quot;truncated&amp;quot;: ..., &amp;quot;markers&amp;quot;: [...]}, ...}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; или выполнить отдельный вызов &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; по нужным идентификаторам.&lt;br /&gt;
&lt;br /&gt;
=== Разобрать конкретное предупреждение ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;В bash есть один подтверждённый критикал — что-то про разыменование указателя. Покажи код вокруг этого места и объясни в чём проблема.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — найти снимок bash&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_advanced_file_preview(file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;, line=3327, before=10, after=10)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&amp;lt;blockquote&amp;gt;Маркер &amp;lt;code&amp;gt;DEREF_AFTER_NULL.LOOP&amp;lt;/code&amp;gt; в функции &amp;lt;code&amp;gt;select_query()&amp;lt;/code&amp;gt;, строка 3327:&lt;br /&gt;
 &amp;lt;code&amp;gt;for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)&lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
return (l-&amp;gt;word-&amp;gt;word);  /* l может быть NULL после выхода из цикла */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если список заканчивается раньше, чем &amp;lt;code&amp;gt;reply&amp;lt;/code&amp;gt; обнуляется, &amp;lt;code&amp;gt;l&amp;lt;/code&amp;gt; станет &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; на последнем &amp;lt;code&amp;gt;l-&amp;gt;next&amp;lt;/code&amp;gt;, и следующий &amp;lt;code&amp;gt;l-&amp;gt;word-&amp;gt;word&amp;lt;/code&amp;gt; — разыменование нулевого указателя.&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt; должен точно совпадать со значением, возвращённым маркером, включая ведущий префикс &amp;lt;code&amp;gt;/.build/...&amp;lt;/code&amp;gt;. Это путь внутри сборочной директории Svacer, а не путь в исходном репозитории; соответствие в репозитории определяется по имени файла.&lt;br /&gt;
&lt;br /&gt;
Для одиночной разметки удобно сразу запрашивать полный маркер с трассами: &amp;lt;code&amp;gt;get_markers(..., severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;], traces=True, checker_info=True)&amp;lt;/code&amp;gt;. Флаги &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt; указывают серверу включить соответствующие поля в ответ; в выдаче они сохраняются и при значении &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; по умолчанию. Значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; требуется лишь в том случае, когда дополнительно нужны &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; — служебные ключи, исключённые из компактного набора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3527</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3527"/>
		<updated>2026-05-22T08:16:22Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примерами разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
[https://svacer.ispras.ru/video/ai_review.mp4 ai_review.mp4]&lt;br /&gt;
[https://svacer.ispras.ru/video/group_ai_review.mp4 group_ai_review.mp4]&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
[https://svacer.ispras.ru/video/mcp-usage.mp4 mcp-usage.mp4]&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
[https://svacer.ispras.ru/video/path-modification.mp4 path-modification.mp4]&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3526</id>
		<title>Help:13-alpha introduction</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3526"/>
		<updated>2026-05-21T15:49:08Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Тестовый релиз предназначен для демонстрации и тестирования новых функций Svacer&lt;br /&gt;
&lt;br /&gt;
Из основных новых функций, которые включены в тестовый релиз, а также которые планируется к выпуску в основном релизе Svacer v.13, можно выделить:&lt;br /&gt;
&lt;br /&gt;
# Validation server для интеграции с LLM.&lt;br /&gt;
# MCP-сервер (поддержка FastMCP).&lt;br /&gt;
# Настройка в UI правил автоудаления неиспользуемых снимков, пустых веток и проектов (cleanup).&lt;br /&gt;
# Настройка в UI правил автомиграции разметки.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Pfixer  для изменения путей к исходным файлам в снимке.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Reviewer для миграции разметки.&lt;br /&gt;
# Возможность редактирования в Svacer описаний детекторов (параметры Severity, Reliability, CWE и др.).&lt;br /&gt;
# Функции, не включенные в тестовый релиз:&lt;br /&gt;
#* Расширение для VSCode с поддержкой Language Server, которое позволит:&lt;br /&gt;
#** выполнять маппинг маркеров на код в локальном репозитории пользователя;&lt;br /&gt;
#** вносить исправления в исходный код локального репозитория;&lt;br /&gt;
#** выполнять фильтрацию и разметку маркеров;&lt;br /&gt;
#** работать в онлайн и оффлайн режиме, используя snap-файл с сохранением разметки внутрь snap-файла;&lt;br /&gt;
#** использовать language server для snap-файлов и сервера.&lt;br /&gt;
#* Возможность указания типа комментария у маркера (внутренний или публичный). Внутренний комментарий не будет выгружаться в PDF-отчет.&lt;br /&gt;
#* Настройка фильтрации комментариев для выгрузки в PDF-отчет.&lt;br /&gt;
#* Отчет &#039;&#039;&#039;Тренды&#039;&#039;&#039; для графического отображения изменений по маркерам в снимках одной ветки проекта, с возможностью гибкой фильтрации, сортировки и построения множества графиков с разными фильтрами на одной странице.&lt;br /&gt;
В разделах документации для тестового релиза представлена следующая краткая информация по:&lt;br /&gt;
&lt;br /&gt;
* установке тестового релиза;&lt;br /&gt;
* настройке Validation server и подключению к нему LLM;&lt;br /&gt;
* развертыванию Svacer MCP, его конфигурации и подключению клиентов.&lt;br /&gt;
* описанию тулов MCP;&lt;br /&gt;
* описанию сценариев использования MCP;&lt;br /&gt;
* обзор некоторых новых функций, включая краткие видео-инструкции по их использованию.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ждем обратной связи!&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Это позволит нам выпустить основной релиз Svacer с доработанными в соответствии с вашими пожеланиями функциями.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3521</id>
		<title>Help:13-alpha introduction</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3521"/>
		<updated>2026-05-21T15:07:31Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Тестовый релиз предназначен для демонстрации и тестирования новых функций Svacer&lt;br /&gt;
&lt;br /&gt;
Из основных новых функций, которые включены в тестовый релиз, а также которые планируется к выпуску в основном релизе Svacer v.13, можно выделить:&lt;br /&gt;
&lt;br /&gt;
# Validation server для интеграции с LLM.&lt;br /&gt;
# MCP-сервер (поддержка FastMCP).&lt;br /&gt;
# Настройка в UI правил автоудаления неиспользуемых снимков, пустых веток и проектов (cleanup).&lt;br /&gt;
# Настройка в UI правил автомиграции разметки.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Pfixer  для изменения путей к исходным файлам в снимке.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Reviewer для миграции разметки.&lt;br /&gt;
# Возможность редактирования в Svacer описаний детекторов (параметры Severity, Reliability, CWE и др.).&lt;br /&gt;
# Функции, не включенные в тестовый релиз:&lt;br /&gt;
#* Расширение для VSCode с поддержкой Language Server, которое позволит:&lt;br /&gt;
#** выполнять маппинг маркеров на код в локальном репозитории пользователя;&lt;br /&gt;
#** вносить исправления в исходный код локального репозитория;&lt;br /&gt;
#** выполнять фильтрацию и разметку маркеров;&lt;br /&gt;
#** работать в онлайн и оффлайн режиме, используя snap-файл с сохранением разметки внутрь snap-файла;&lt;br /&gt;
#** использовать language server для snap-файлов и сервера.&lt;br /&gt;
#* Возможность указания типа комментария у маркера (внутренний или публичный). Внутренний комментарий не будет выгружаться в PDF-отчет.&lt;br /&gt;
#* Настройка фильтрации комментариев для выгрузки в PDF-отчет.&lt;br /&gt;
#* Отчет &#039;&#039;&#039;Тренды&#039;&#039;&#039; для графического отображения изменений по маркерам в снимках одной ветки проекта, с возможностью гибкой фильтрации, сортировки и построения множества графиков с разными фильтрами на одной странице.&lt;br /&gt;
В разделах документации для тестового релиза представлена следующая краткая информация по:&lt;br /&gt;
&lt;br /&gt;
* установке тестового релиза;&lt;br /&gt;
* настройке Validation server и подключению к нему LLM;&lt;br /&gt;
* развертыванию Svacer MCP, его конфигурации и подключению клиентов.&lt;br /&gt;
* описанию тулов MCP;&lt;br /&gt;
* описанию сценариев использования MCP;&lt;br /&gt;
* обзор некоторых новых функций, включая краткие видео-инструкции по их использованию.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ждем обратной связи!&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Это позволит нам выпустить основной релиз Svacer с доработанными в соответствии с Вашими пожеланиями функциями.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3520</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3520"/>
		<updated>2026-05-21T15:06:56Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примером разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3519</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3519"/>
		<updated>2026-05-21T15:06:31Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примером разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления неиспользуемых снимков, пустых веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Pfixer&#039;&#039;&#039; теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты &#039;&#039;&#039;Reviewer&#039;&#039;&#039; теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя, а также после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &#039;&#039;&#039;Администрирование сервера&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin(Svace) детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3518</id>
		<title>Help:13-alpha introduction</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3518"/>
		<updated>2026-05-21T15:04:35Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Тестовый релиз предназначен для демонстрации и тестирования новых функций Svacer&lt;br /&gt;
&lt;br /&gt;
Из основных новых функций, которые включены в тестовый релиз, а также которые планируется к выпуску в основном релизе Svacer v.13, можно выделить:&lt;br /&gt;
&lt;br /&gt;
# Validation server для интеграции с LLM.&lt;br /&gt;
# MCP-сервер (поддержка FastMCP).&lt;br /&gt;
# Настройка в UI правил автоудаления неиспользуемых снимков, пустых веток и проектов (cleanup).&lt;br /&gt;
# Настройка в UI правил автомиграции разметки.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Pfixer  для изменения путей к исходным файлам в снимке.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Reviewer для миграции разметки.&lt;br /&gt;
# Возможность редактирования в Svacer описаний детекторов (параметры Severity, Reliability, CWE и др.).&lt;br /&gt;
# Функции, не включенные в тестовый релиз:&lt;br /&gt;
#* Расширение для VSCode с поддержкой Language Server, которое позволит:&lt;br /&gt;
#** выполнять маппинг маркеров на код в локальном репозитории пользователя;&lt;br /&gt;
#** вносить исправления в исходный код локального репозитория;&lt;br /&gt;
#** выполнять фильтрацию и разметку маркеров;&lt;br /&gt;
#** работать в онлайн и оффлайн режиме, используя snap-файл с сохранением разметки внутрь snap-файла;&lt;br /&gt;
#** использовать language server для snap-файлов и сервера.&lt;br /&gt;
#* Возможность указания типа комментария у маркера (внутренний или публичный). Внутренний комментарий не будет выгружаться в PDF-отчет.&lt;br /&gt;
#* Настройка фильтрации комментариев для выгрузки в PDF-отчет.&lt;br /&gt;
#* Отчет &amp;quot;Тренды&amp;quot; для графического отображения изменений по маркерам в снимках одной ветки проекта, с возможностью гибкой фильтрации, сортировки и построения множества графиков с разными фильтрами на одной странице.&lt;br /&gt;
В разделах документации для тестового релиза представлена следующая краткая информация по:&lt;br /&gt;
&lt;br /&gt;
* установке тестового релиза;&lt;br /&gt;
* настройке Validation server и подключению к нему LLM;&lt;br /&gt;
* развертыванию Svacer MCP, его конфигурации и подключению клиентов.&lt;br /&gt;
* описанию тулов MCP;&lt;br /&gt;
* описанию сценариев использования MCP;&lt;br /&gt;
* обзор некоторых новых функций, включая краткие видео-инструкции по их использованию.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ждем обратной связи!&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Это позволит нам выпустить основной релиз Svacer с доработанными в соответствии с Вашими пожеланиями функциями.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3517</id>
		<title>Help:13-alpha introduction</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3517"/>
		<updated>2026-05-21T14:59:10Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Тестовый релиз предназначен для демонстрации и тестирования новых функций Svacer&lt;br /&gt;
&lt;br /&gt;
Из основных новых функций, которые включены в тестовый релиз, а также которые планируется к выпуску в основном релизе Svacer v.13, можно выделить:&lt;br /&gt;
&lt;br /&gt;
# Validation server для интеграции с LLM.&lt;br /&gt;
# MCP-сервер (поддержка FastMCP).&lt;br /&gt;
# Настройка в UI правил автоудаления неиспользуемых снимков, пустых веток и проектов (cleanup).&lt;br /&gt;
# Настройка в UI правил автомиграции разметки.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Pfixer  для изменения путей к исходным файлам в снимке.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Reviewer для миграции разметки.&lt;br /&gt;
# Возможность редактирования в Svacer описаний детекторов (параметры Severity, Reliability, CWE и др.).&lt;br /&gt;
# Функции, не включенные в тестовый релиз:&lt;br /&gt;
#* Расширение для VSCode с поддержкой Language Server, которое позволит:&lt;br /&gt;
#** выполнять маппинг маркеров на код в локальном репозитории пользователя;&lt;br /&gt;
#** вносить исправления в исходный код локального репозитория;&lt;br /&gt;
#** выполнять фильтрацию и разметку маркеров;&lt;br /&gt;
#** работать в онлайн и оффлайн режиме, используя snap-файл с сохранением разметки внутрь snap-файла;&lt;br /&gt;
#** использовать language server для snap-файлов и сервера.&lt;br /&gt;
#* Возможность указания типа комментария у маркера (внутренний или публичный). Внутренний комментарий не будет выгружаться в PDF-отчет.&lt;br /&gt;
#* Настройка фильтрации комментариев для выгрузки в PDF-отчет.&lt;br /&gt;
#* Отчет &amp;quot;Тренды&amp;quot; для графического отображения изменений по маркерам в снимках одной ветки проекта, с возможностью гибкой фильтрации, сортировки и построения множества графиков с разными фильтрами на одной странице.&lt;br /&gt;
В разделах документации для тестового релиза представлена следующая краткая информация по:&lt;br /&gt;
&lt;br /&gt;
* установке тестового релиза;&lt;br /&gt;
* настройке Validation server и подключению к нему LLM;&lt;br /&gt;
* развертыванию Svacer MCP, его конфигурации и подключению клиентов.&lt;br /&gt;
* описанию тулов MCP;&lt;br /&gt;
* описанию сценариев использования MCP;&lt;br /&gt;
* обзор некоторых новых функций, включая краткие видео-инструкции по их использованию.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ждем обратной связи! Это позволит нам выпустить основной релиз Svacer с доработанными в соответствии с Вашими пожеланиями функциями.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3516</id>
		<title>Help:13-alpha introduction</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3516"/>
		<updated>2026-05-21T14:58:26Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Тестовый релиз предназначен для демонстрации и тестирования новых функций Svacer&lt;br /&gt;
&lt;br /&gt;
Из основных новых функций, которые включены в тестовый релиз, а также которые планируется к выпуску в основном релизе Svacer v.13, можно выделить:&lt;br /&gt;
&lt;br /&gt;
# Validation server для интеграции с LLM.&lt;br /&gt;
# MCP-сервер (поддержка FastMCP).&lt;br /&gt;
# Настройка в UI правил автоудаления неиспользуемых снимков, пустых веток и проектов (cleanup).&lt;br /&gt;
# Настройка в UI правил автомиграции разметки.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Pfixer  для изменения путей к исходным файлам в снимке.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Reviewer для миграции разметки.&lt;br /&gt;
# Возможность редактирования в Svacer описаний детекторов (параметры Severity, Reliability, CWE и др.).&lt;br /&gt;
# Функции, не включенные в тестовый релиз:&lt;br /&gt;
#* Расширение для VSCode с поддержкой Language Server, которое позволит:&lt;br /&gt;
#** выполнять маппинг маркеров на код в локальном репозитории пользователя;&lt;br /&gt;
#** вносить исправления в исходный код локального репозитория;&lt;br /&gt;
#** выполнять фильтрацию и разметку маркеров;&lt;br /&gt;
#** работать в онлайн и оффлайн режиме, используя snap-файл с сохранением разметки внутрь snap-файла;&lt;br /&gt;
#** использовать language server для snap-файлов и сервера.&lt;br /&gt;
#* Возможность указания типа комментария у маркера (внутренний или публичный). Внутренний комментарий не будет выгружаться в PDF-отчет.&lt;br /&gt;
#* Настройка фильтрации комментариев для выгрузки в PDF-отчет.&lt;br /&gt;
#* Отчет &amp;quot;Тренды&amp;quot; для графического отображения изменений по маркерам в снимках одной ветки проекта, с возможностью гибкой фильтрации, сортировки и построения множества графиков с разными фильтрами на одной странице.&lt;br /&gt;
В разделах документации для тестового релиза представлена следующая краткая информация по:&lt;br /&gt;
&lt;br /&gt;
* установке тестового релиза;&lt;br /&gt;
* настройке Validation server и подключению к нему LLM;&lt;br /&gt;
* развертыванию Svacer MCP, его конфигурации и подключению клиентов.&lt;br /&gt;
* описанию тулов MCP;&lt;br /&gt;
* описанию сценариев использования MCP;&lt;br /&gt;
* обзор некоторых новых функций, включая краткие видео-инструкции по их использованию.&lt;br /&gt;
&lt;br /&gt;
Ждем Вашей обратной связи! Это позволит нам выпустить основной релиз Svacer с доработанными в соответствии с Вашими пожеланиями функциями.&lt;br /&gt;
&#039;&#039;&#039;Ждем Вашей обратной связи! Это позволит нам выпустить основной релиз Svacer с доработанными в соответствии с Вашими пожеланиями функциями.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3515</id>
		<title>Help:13-alpha introduction</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_introduction&amp;diff=3515"/>
		<updated>2026-05-21T14:58:01Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Тестовый релиз предназначен для демонстрации и тестирования новых функций Svacer&lt;br /&gt;
&lt;br /&gt;
Из основных новых функций, которые включены в тестовый релиз, а также которые планируется к выпуску в основном релизе Svacer v.13, можно выделить:&lt;br /&gt;
&lt;br /&gt;
# Validation server для интеграции с LLM.&lt;br /&gt;
# MCP-сервер (поддержка FastMCP).&lt;br /&gt;
# Настройка в UI правил автоудаления неиспользуемых снимков, пустых веток и проектов (cleanup).&lt;br /&gt;
# Настройка в UI правил автомиграции разметки.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Pfixer  для изменения путей к исходным файлам в снимке.&lt;br /&gt;
# Перенос в UI функционала CLI-утилиты Reviewer для миграции разметки.&lt;br /&gt;
# Возможность редактирования в Svacer описаний детекторов (параметры Severity, Reliability, CWE и др.).&lt;br /&gt;
# Функции, не включенные в тестовый релиз:&lt;br /&gt;
#* Расширение для VSCode с поддержкой Language Server, которое позволит:&lt;br /&gt;
#** выполнять маппинг маркеров на код в локальном репозитории пользователя;&lt;br /&gt;
#** вносить исправления в исходный код локального репозитория;&lt;br /&gt;
#** выполнять фильтрацию и разметку маркеров;&lt;br /&gt;
#** работать в онлайн и оффлайн режиме, используя snap-файл с сохранением разметки внутрь snap-файла;&lt;br /&gt;
#** использовать language server для snap-файлов и сервера.&lt;br /&gt;
#* Возможность указания типа комментария у маркера (внутренний или публичный). Внутренний комментарий не будет выгружаться в PDF-отчет.&lt;br /&gt;
#* Настройка фильтрации комментариев для выгрузки в PDF-отчет.&lt;br /&gt;
#* Отчет &amp;quot;Тренды&amp;quot; для графического отображения изменений по маркерам в снимках одной ветки проекта, с возможностью гибкой фильтрации, сортировки и построения множества графиков с разными фильтрами на одной странице.&lt;br /&gt;
В разделах документации для тестового релиза представлена следующая краткая информация по:&lt;br /&gt;
&lt;br /&gt;
* установке тестового релиза;&lt;br /&gt;
* настройке Validation server и подключению к нему LLM;&lt;br /&gt;
* развертыванию Svacer MCP, его конфигурации и подключению клиентов.&lt;br /&gt;
* описанию тулов MCP;&lt;br /&gt;
* описанию сценариев использования MCP;&lt;br /&gt;
* обзор некоторых новых функций, включая краткие видео-инструкции по их использованию.&lt;br /&gt;
&lt;br /&gt;
Ждем Вашей обратной связи! Это позволит нам выпустить основной релиз Svacer с доработанными в соответствии с Вашими пожеланиями функциями.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3513</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3513"/>
		<updated>2026-05-21T12:35:34Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Svacer — сервер для хранения и обработки результатов статического анализа. Поддерживает импорт результатов анализа из [https://svace.ispras.ru Svace] напрямую и из прочих анализаторов через формат [[Help:Sarif|SARIF]].&lt;br /&gt;
&lt;br /&gt;
=== Документация ===&lt;br /&gt;
Version 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&lt;br /&gt;
# [[Help:Import from Svace|Импорт из Svace]]&lt;br /&gt;
# [[Help:Backup|Резервное копирование]]&lt;br /&gt;
# [[Help:UI manual|Использование веб-интерфейса]]&lt;br /&gt;
# [[Help:Public API|Public REST API]]&lt;br /&gt;
# [[Help:CLI|CLI]]&lt;br /&gt;
# [[LDAP configuration|LDAP]]&lt;br /&gt;
# [[OIDC|OpenID Connect]]&lt;br /&gt;
# [[Help:Sarif|SARIF]]&lt;br /&gt;
# [[Help:Statistics|Статистика]]&lt;br /&gt;
# [[Help:Match|Механизмы сопоставления предупреждений и переноса разметки]]&lt;br /&gt;
# [[Help:XSvacer|XSvacer — расширение функциональности Svacer]]&lt;br /&gt;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
Version test build от 20.05.2026&lt;br /&gt;
# [[Help:Test build introduction|Введение]]&lt;br /&gt;
# Установка test bulld&lt;br /&gt;
# [[Help:Test_build_MCP|MCP-сервер]]&lt;br /&gt;
# [[Help:Test_build_new_features|Обзор новой функциональности]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12-0-1-linux.tar.gz svacer-12-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12-0-1-windows.zip svacer-12-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server.exe svacer-server.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server_win.sig svacer-server_win.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer_12.0-1_amd64.deb svacer_12.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12.0-1.x86_64.rpm svacer-12.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|5.0.251220&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server_win.sig svacer-server_win.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 12-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-9-0-0.zip svacer-9-0-0.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer_9.0-0_amd64.deb svacer_9.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-9.0-0.x86_64.rpm svacer-9.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 9-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.1 &lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8-0-1.zip svacer-8-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer svacer]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer.exe svacer.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer_8.0-1_amd64.deb svacer_8.0-1_amd64.deb]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8.0-1.x86_64.rpm svacer-8.0-1.x86_64.rpm]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8.0.1.msi svacer-8.0.1.msi]&lt;br /&gt;
| [[Changelog#Release 8-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.0 &lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8-0-0.zip svacer-8-0-0.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer svacer]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer.exe svacer.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer_8.0-0_amd64.deb svacer_8.0-0_amd64.deb]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8.0-0.x86_64.rpm svacer-8.0-0.x86_64.rpm]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8.0.0.msi svacer-8.0.0.msi]&lt;br /&gt;
| [[Changelog#Release 8-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 8-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&lt;br /&gt;
&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
* [https://gitlab.ispras.ru/svace/svace-support/-/wikis/home Документация на статический анализатор Svace]&lt;br /&gt;
* [[Help:Introduction#Системные требования|Системные требования]]&lt;br /&gt;
* [[Примеры использования хуков#Создание кейсов в системах отслеживания ошибок|Создание из Svacer кейсов в Gitlab, Jira, Redmine]]&lt;br /&gt;
* Public REST API &lt;br /&gt;
:* [[Help:Public API#Примеры использования public REST API|Примеры использования]]&lt;br /&gt;
:* [https://gitlab.ispras.ru/svacer-public Репозитории с примерами на Python и Go]  &lt;br /&gt;
:* [https://svacer-demo.ispras.ru/api/public/swagger/ Спецификация OpenAPI]&lt;br /&gt;
* [https://t.me/+6pvgZ0oveNVhOTc6 Группа технической поддержки в Telegram]&lt;br /&gt;
&lt;br /&gt;
=== Демо ===&lt;br /&gt;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3512</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3512"/>
		<updated>2026-05-21T12:32:17Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка маркеров с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
&lt;br /&gt;
Видео с примером разметки одиночного маркера и группы маркеров с помощью LLM:&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Видео с примером взаимодействия LLM с сервером Svacer через MCP:&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления «старых» снимков, «пустых» веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &amp;quot;Администрирование сервера&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &amp;quot;Администрирование сервера&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты Pfixer теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Видео с примером использования:&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты Reviewer теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя и после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &amp;quot;Администрирование сервера&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin(Svace) детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3511</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3511"/>
		<updated>2026-05-21T12:28:59Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
Ниже приведены примеры скриншот диалогов разметки&lt;br /&gt;
&lt;br /&gt;
== Пример применения MCP-сервера ==&lt;br /&gt;
Краткое видео с примером взаимодействия LLM с сервером Svacer через MCP.&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления «старых» снимков, «пустых» веток и проектов (Cleanup) .&lt;br /&gt;
&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &amp;quot;Администрирование сервера&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
&lt;br /&gt;
* добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
* все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
* добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
* доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &amp;quot;Администрирование сервера&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты Pfixer теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты формы функциональности &#039;&#039;&#039;Изменения путей.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты Reviewer теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены скриншоты функциональности &#039;&#039;&#039;Миграция разметки&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя и после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
&lt;br /&gt;
* Серьезность;&lt;br /&gt;
* Надежность;&lt;br /&gt;
* Ситуация;&lt;br /&gt;
* CWE;&lt;br /&gt;
* Описание.&lt;br /&gt;
&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &amp;quot;Администрирование сервера&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin(Svace) детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3510</id>
		<title>Help:13-alpha new features</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_new_features&amp;diff=3510"/>
		<updated>2026-05-21T12:21:21Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: Created page with &amp;quot;== Разметка с помощью LLM == После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Разметка с помощью LLM ==&lt;br /&gt;
После установки, конфигурирования Validation Server и подключения LLM в диалогах разметки (одного маркера и группы маркеров) в параметре Модель AI должны появиться подключенные LLM, выбирая которые можно получить прогнозируемую моделью разметку и комментарий.&lt;br /&gt;
Ниже приведены примеры скриншот диалогов разметки&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автоудаления ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автоудаления «старых» снимков, «пустых» веток и проектов (Cleanup) .&lt;br /&gt;
Также настройка правилам автоудаления теперь доступна в UI. Помимо того, что представлено в тестовом релизе, планируется еще добавить функцию предпросмотра затрагиваемого правилами контекста.&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &amp;quot;Администрирование сервера&amp;quot;.&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автоудаления и диалога создания правила.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Настройка правил автомиграциии разметки ==&lt;br /&gt;
В CLI был доработан функционал по управлению правилами автомиграции разметки (Cleanup):&lt;br /&gt;
- добавлена возможность вводить в правилах регулярные выражения как для исходного контекста, так и для целевого;&lt;br /&gt;
- все заданные параметры в правилах могут быть как положительными, так и исключающими;&lt;br /&gt;
- добавлена возможность предпросмотра затрагиваемых правилами существующих проектов/веток;&lt;br /&gt;
- доработан вывод в лог автомиграции.&lt;br /&gt;
&lt;br /&gt;
Также настройка правил автомиграции разметки теперь доступна в UI.&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &amp;quot;Администрирование сервера&amp;quot;.&lt;br /&gt;
Ниже приведены скриншоты формы списка правил автомиграции разметки, диалога создания правила и просмотра лога автомиграции.&lt;br /&gt;
&lt;br /&gt;
== Изменение путей в снимке ==&lt;br /&gt;
Функциональность существующей утилиты Pfixer теперь доступна в UI. Также, помимо сохранения результатов в snap-файл в UI, добавлена возможность сохранения результатов в новый снимок.&lt;br /&gt;
Ниже приведены скриншоты формы функциональности &amp;quot;&amp;quot;&amp;quot;Изменения путей&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Миграция разметки ==&lt;br /&gt;
Функциональность существующей утилиты Reviewer теперь доступна в UI. Перед применением заданных правил миграции разметки между ветками В UI есть возможность просмотра и корректировки сформированного плана миграции.&lt;br /&gt;
Ниже представлены скриншоты функциональности &amp;quot;&amp;quot;&amp;quot;Миграция разметки&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Редактирование описания детектора ==&lt;br /&gt;
Добавлена возможность редактирования и удаления детекторов. Детекторы от Svace (источник builtin) удалить нельзя и после их редактирования  можно вернуть настройки по умолчанию.&lt;br /&gt;
Для редактирования доступны доступны следующие атрибуты детектора:&lt;br /&gt;
- Серьезность;&lt;br /&gt;
- Надежность;&lt;br /&gt;
- Ситуация;&lt;br /&gt;
- CWE;&lt;br /&gt;
- Описание.&lt;br /&gt;
Функциональность доступна только пользователям с серверным доступом &amp;quot;Администрирование сервера&amp;quot;.&lt;br /&gt;
Ниже приведены скриншоты обновленного реестра детекторов и диалог редактирования builtin(Svace) детектора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3509</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3509"/>
		<updated>2026-05-21T10:06:14Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Svacer — сервер для хранения и обработки результатов статического анализа. Поддерживает импорт результатов анализа из [https://svace.ispras.ru Svace] напрямую и из прочих анализаторов через формат [[Help:Sarif|SARIF]].&lt;br /&gt;
&lt;br /&gt;
=== Документация ===&lt;br /&gt;
Version 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&lt;br /&gt;
# [[Help:Import from Svace|Импорт из Svace]]&lt;br /&gt;
# [[Help:Backup|Резервное копирование]]&lt;br /&gt;
# [[Help:UI manual|Использование веб-интерфейса]]&lt;br /&gt;
# [[Help:Public API|Public REST API]]&lt;br /&gt;
# [[Help:CLI|CLI]]&lt;br /&gt;
# [[LDAP configuration|LDAP]]&lt;br /&gt;
# [[OIDC|OpenID Connect]]&lt;br /&gt;
# [[Help:Sarif|SARIF]]&lt;br /&gt;
# [[Help:Statistics|Статистика]]&lt;br /&gt;
# [[Help:Match|Механизмы сопоставления предупреждений и переноса разметки]]&lt;br /&gt;
# [[Help:XSvacer|XSvacer — расширение функциональности Svacer]]&lt;br /&gt;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
Version test build от 20.05.2026&lt;br /&gt;
# [[Help:Test build introduction|Введение]]&lt;br /&gt;
# Установка test bulld&lt;br /&gt;
# [[Help:Test_build_MCP|MCP-сервер]]&lt;br /&gt;
# Обзор новых фич&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12-0-1-linux.tar.gz svacer-12-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12-0-1-windows.zip svacer-12-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server.exe svacer-server.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server_win.sig svacer-server_win.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer_12.0-1_amd64.deb svacer_12.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12.0-1.x86_64.rpm svacer-12.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|5.0.251220&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server_win.sig svacer-server_win.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 12-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-9-0-0.zip svacer-9-0-0.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer_9.0-0_amd64.deb svacer_9.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-9.0-0.x86_64.rpm svacer-9.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 9-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.1 &lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8-0-1.zip svacer-8-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer svacer]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer.exe svacer.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer_8.0-1_amd64.deb svacer_8.0-1_amd64.deb]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8.0-1.x86_64.rpm svacer-8.0-1.x86_64.rpm]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8.0.1.msi svacer-8.0.1.msi]&lt;br /&gt;
| [[Changelog#Release 8-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.0 &lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8-0-0.zip svacer-8-0-0.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer svacer]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer.exe svacer.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer_8.0-0_amd64.deb svacer_8.0-0_amd64.deb]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8.0-0.x86_64.rpm svacer-8.0-0.x86_64.rpm]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8.0.0.msi svacer-8.0.0.msi]&lt;br /&gt;
| [[Changelog#Release 8-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 8-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&lt;br /&gt;
&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
* [https://gitlab.ispras.ru/svace/svace-support/-/wikis/home Документация на статический анализатор Svace]&lt;br /&gt;
* [[Help:Introduction#Системные требования|Системные требования]]&lt;br /&gt;
* [[Примеры использования хуков#Создание кейсов в системах отслеживания ошибок|Создание из Svacer кейсов в Gitlab, Jira, Redmine]]&lt;br /&gt;
* Public REST API &lt;br /&gt;
:* [[Help:Public API#Примеры использования public REST API|Примеры использования]]&lt;br /&gt;
:* [https://gitlab.ispras.ru/svacer-public Репозитории с примерами на Python и Go]  &lt;br /&gt;
:* [https://svacer-demo.ispras.ru/api/public/swagger/ Спецификация OpenAPI]&lt;br /&gt;
* [https://t.me/+6pvgZ0oveNVhOTc6 Группа технической поддержки в Telegram]&lt;br /&gt;
&lt;br /&gt;
=== Демо ===&lt;br /&gt;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3508</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3508"/>
		<updated>2026-05-21T10:05:59Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Svacer — сервер для хранения и обработки результатов статического анализа. Поддерживает импорт результатов анализа из [https://svace.ispras.ru Svace] напрямую и из прочих анализаторов через формат [[Help:Sarif|SARIF]].&lt;br /&gt;
&lt;br /&gt;
=== Документация ===&lt;br /&gt;
Version 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&lt;br /&gt;
# [[Help:Import from Svace|Импорт из Svace]]&lt;br /&gt;
# [[Help:Backup|Резервное копирование]]&lt;br /&gt;
# [[Help:UI manual|Использование веб-интерфейса]]&lt;br /&gt;
# [[Help:Public API|Public REST API]]&lt;br /&gt;
# [[Help:CLI|CLI]]&lt;br /&gt;
# [[LDAP configuration|LDAP]]&lt;br /&gt;
# [[OIDC|OpenID Connect]]&lt;br /&gt;
# [[Help:Sarif|SARIF]]&lt;br /&gt;
# [[Help:Statistics|Статистика]]&lt;br /&gt;
# [[Help:Match|Механизмы сопоставления предупреждений и переноса разметки]]&lt;br /&gt;
# [[Help:XSvacer|XSvacer — расширение функциональности Svacer]]&lt;br /&gt;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
Version test build от 20.05.2026&lt;br /&gt;
# [[Help:Test build introduction|Введение&lt;br /&gt;
# Установка test bulld&lt;br /&gt;
# [[Help:Test_build_MCP|MCP-сервер]]&lt;br /&gt;
# Обзор новых фич&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12-0-1-linux.tar.gz svacer-12-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12-0-1-windows.zip svacer-12-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server.exe svacer-server.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server_win.sig svacer-server_win.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer_12.0-1_amd64.deb svacer_12.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12.0-1.x86_64.rpm svacer-12.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|5.0.251220&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server_win.sig svacer-server_win.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 12-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-9-0-0.zip svacer-9-0-0.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer_9.0-0_amd64.deb svacer_9.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-9.0-0.x86_64.rpm svacer-9.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 9-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.1 &lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8-0-1.zip svacer-8-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer svacer]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer.exe svacer.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer_8.0-1_amd64.deb svacer_8.0-1_amd64.deb]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8.0-1.x86_64.rpm svacer-8.0-1.x86_64.rpm]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8.0.1.msi svacer-8.0.1.msi]&lt;br /&gt;
| [[Changelog#Release 8-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.0 &lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8-0-0.zip svacer-8-0-0.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer svacer]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer.exe svacer.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer_8.0-0_amd64.deb svacer_8.0-0_amd64.deb]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8.0-0.x86_64.rpm svacer-8.0-0.x86_64.rpm]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8.0.0.msi svacer-8.0.0.msi]&lt;br /&gt;
| [[Changelog#Release 8-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 8-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&lt;br /&gt;
&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
* [https://gitlab.ispras.ru/svace/svace-support/-/wikis/home Документация на статический анализатор Svace]&lt;br /&gt;
* [[Help:Introduction#Системные требования|Системные требования]]&lt;br /&gt;
* [[Примеры использования хуков#Создание кейсов в системах отслеживания ошибок|Создание из Svacer кейсов в Gitlab, Jira, Redmine]]&lt;br /&gt;
* Public REST API &lt;br /&gt;
:* [[Help:Public API#Примеры использования public REST API|Примеры использования]]&lt;br /&gt;
:* [https://gitlab.ispras.ru/svacer-public Репозитории с примерами на Python и Go]  &lt;br /&gt;
:* [https://svacer-demo.ispras.ru/api/public/swagger/ Спецификация OpenAPI]&lt;br /&gt;
* [https://t.me/+6pvgZ0oveNVhOTc6 Группа технической поддержки в Telegram]&lt;br /&gt;
&lt;br /&gt;
=== Демо ===&lt;br /&gt;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3507</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3507"/>
		<updated>2026-05-21T10:05:22Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Svacer — сервер для хранения и обработки результатов статического анализа. Поддерживает импорт результатов анализа из [https://svace.ispras.ru Svace] напрямую и из прочих анализаторов через формат [[Help:Sarif|SARIF]].&lt;br /&gt;
&lt;br /&gt;
=== Документация ===&lt;br /&gt;
Version 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&lt;br /&gt;
# [[Help:Import from Svace|Импорт из Svace]]&lt;br /&gt;
# [[Help:Backup|Резервное копирование]]&lt;br /&gt;
# [[Help:UI manual|Использование веб-интерфейса]]&lt;br /&gt;
# [[Help:Public API|Public REST API]]&lt;br /&gt;
# [[Help:CLI|CLI]]&lt;br /&gt;
# [[LDAP configuration|LDAP]]&lt;br /&gt;
# [[OIDC|OpenID Connect]]&lt;br /&gt;
# [[Help:Sarif|SARIF]]&lt;br /&gt;
# [[Help:Statistics|Статистика]]&lt;br /&gt;
# [[Help:Match|Механизмы сопоставления предупреждений и переноса разметки]]&lt;br /&gt;
# [[Help:XSvacer|XSvacer — расширение функциональности Svacer]]&lt;br /&gt;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
Version test build от 20.05.2026&lt;br /&gt;
# [[Help:Test build introduction|Введение]]&lt;br /&gt;
# [[Help:Test_build_MCP|Установка test bulld]]&lt;br /&gt;
# MCP-сервер&lt;br /&gt;
# Обзор новых фич&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12-0-1-linux.tar.gz svacer-12-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12-0-1-windows.zip svacer-12-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server.exe svacer-server.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server_win.sig svacer-server_win.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer_12.0-1_amd64.deb svacer_12.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12.0-1.x86_64.rpm svacer-12.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|5.0.251220&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server_win.sig svacer-server_win.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 12-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-9-0-0.zip svacer-9-0-0.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer_9.0-0_amd64.deb svacer_9.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-9.0-0.x86_64.rpm svacer-9.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 9-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.1 &lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8-0-1.zip svacer-8-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer svacer]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer.exe svacer.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer_8.0-1_amd64.deb svacer_8.0-1_amd64.deb]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8.0-1.x86_64.rpm svacer-8.0-1.x86_64.rpm]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8.0.1.msi svacer-8.0.1.msi]&lt;br /&gt;
| [[Changelog#Release 8-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.0 &lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8-0-0.zip svacer-8-0-0.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer svacer]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer.exe svacer.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer_8.0-0_amd64.deb svacer_8.0-0_amd64.deb]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8.0-0.x86_64.rpm svacer-8.0-0.x86_64.rpm]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8.0.0.msi svacer-8.0.0.msi]&lt;br /&gt;
| [[Changelog#Release 8-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 8-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&lt;br /&gt;
&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
* [https://gitlab.ispras.ru/svace/svace-support/-/wikis/home Документация на статический анализатор Svace]&lt;br /&gt;
* [[Help:Introduction#Системные требования|Системные требования]]&lt;br /&gt;
* [[Примеры использования хуков#Создание кейсов в системах отслеживания ошибок|Создание из Svacer кейсов в Gitlab, Jira, Redmine]]&lt;br /&gt;
* Public REST API &lt;br /&gt;
:* [[Help:Public API#Примеры использования public REST API|Примеры использования]]&lt;br /&gt;
:* [https://gitlab.ispras.ru/svacer-public Репозитории с примерами на Python и Go]  &lt;br /&gt;
:* [https://svacer-demo.ispras.ru/api/public/swagger/ Спецификация OpenAPI]&lt;br /&gt;
* [https://t.me/+6pvgZ0oveNVhOTc6 Группа технической поддержки в Telegram]&lt;br /&gt;
&lt;br /&gt;
=== Демо ===&lt;br /&gt;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3506</id>
		<title>Help:13-alpha MCP</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3506"/>
		<updated>2026-05-21T10:03:25Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Разобрать конкретное предупреждение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Архитектура ==&lt;br /&gt;
[https://modelcontextprotocol.io/docs/getting-started/intro MCP] — открытый стандарт, через который LLM-клиенты (Claude Desktop, Cursor, VS Code, OpenWebUI и др.) вызывают внешние инструменты. &lt;br /&gt;
Svacer MCP соединяет одно с другим: 8 инструментов поверх публичного REST API Svacer, которые LLM выбирает и вызывает в ответ на обычный текстовый запрос. Вместо ручной последовательности «открыть UI, найти проект, выбрать снимок, применить фильтр» достаточно сформулировать вопрос в чате, например, «сколько критических предупреждений в последнем снимке bash?», и получить ответ. Необходимые вызовы инструментов модель выполняет самостоятельно.&lt;br /&gt;
&lt;br /&gt;
[[File:Архитектура MCP.png|thumb|none|x800px|alt=architectureMCP|Архитектура MCP-сервер]]&lt;br /&gt;
&lt;br /&gt;
Поток запроса: LLM-клиент отправляет MCP-вызов через STDIO или Streamable HTTP → &amp;lt;code&amp;gt;server.py&amp;lt;/code&amp;gt; передаёт его в выбранный инструмент из &amp;lt;code&amp;gt;tools/&amp;lt;/code&amp;gt; → инструмент проверяет параметры и обращается к &amp;lt;code&amp;gt;api_client.py&amp;lt;/code&amp;gt; → клиент получает JWT от &amp;lt;code&amp;gt;auth.py&amp;lt;/code&amp;gt; (модуль автоматически обновляет токен по истечении срока действия или при ответе 401) → запрос отправляется в Svacer REST API.&lt;br /&gt;
&lt;br /&gt;
== Установка ==&lt;br /&gt;
Установка Svacer MCP, подключение клиентов и конфигурация.&lt;br /&gt;
&lt;br /&gt;
=== Требования ===&lt;br /&gt;
&lt;br /&gt;
* Python 3.10+&lt;br /&gt;
* Доступ к Svacer-серверу: URL + логин/пароль&lt;br /&gt;
&lt;br /&gt;
=== Режим STDIO ===&lt;br /&gt;
Подходит для настольных клиентов: Claude Desktop, Claude Code, Cursor, VS Code.&lt;br /&gt;
 &amp;lt;code&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://gitlab.ispras.ru/svacerai/mcp.git&amp;lt;/nowiki&amp;gt; &amp;amp;&amp;amp; cd mcp&lt;br /&gt;
 &lt;br /&gt;
 python3 -m venv .venv&lt;br /&gt;
 .venv/bin/pip install -e .&lt;br /&gt;
 &lt;br /&gt;
 cp .env.example .env&lt;br /&gt;
 # Отредактировать .env — указать URL и учётные данные Svacer&lt;br /&gt;
 &lt;br /&gt;
 # Проверить запуск (сервер ожидает данные на stdin; для выхода — Ctrl+C)&lt;br /&gt;
 .venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
После &amp;lt;code&amp;gt;pip install -e .&amp;lt;/code&amp;gt; в окружении становится доступна команда &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; — её указывают в конфигурации клиентов ниже.&lt;br /&gt;
&lt;br /&gt;
=== Режим HTTP (Docker) ===&lt;br /&gt;
Подходит для веб-клиентов (OpenWebUI) и удалённого доступа.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Требования:&#039;&#039;&#039; Docker, Docker Compose.&lt;br /&gt;
 &amp;lt;code&amp;gt;cp .env.example .env&lt;br /&gt;
 &lt;br /&gt;
 # В .env обязательно задать SVACER_MCP_TOKEN — без него сервер не запускается&lt;br /&gt;
 echo &amp;quot;SVACER_MCP_TOKEN=$(openssl rand -hex 32)&amp;quot; &amp;gt;&amp;gt; .env&lt;br /&gt;
 &lt;br /&gt;
 docker compose up -d&lt;br /&gt;
 &lt;br /&gt;
 # MCP endpoint: &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 # Клиенты передают заголовок: Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Внешний порт хоста задаётся переменной &amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt; (по умолчанию &amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;), внутри контейнера сервер всегда слушает порт &amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Подключение клиентов ===&lt;br /&gt;
&lt;br /&gt;
==== Claude Desktop ====&lt;br /&gt;
Файл конфигурации: &amp;lt;code&amp;gt;~/.config/Claude/claude_desktop_config.json&amp;lt;/code&amp;gt; (Linux) или &amp;lt;code&amp;gt;%APPDATA%\Claude\claude_desktop_config.json&amp;lt;/code&amp;gt; (Windows).&lt;br /&gt;
&lt;br /&gt;
Укажите &#039;&#039;&#039;абсолютный путь&#039;&#039;&#039; к &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; из вашего venv (&amp;lt;code&amp;gt;which svacer-mcp&amp;lt;/code&amp;gt; в активированном venv или &amp;lt;code&amp;gt;/path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Claude Code ====&lt;br /&gt;
 &amp;lt;code&amp;gt;claude mcp add svacer \&lt;br /&gt;
   -e SVACER_URL=&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt; \&lt;br /&gt;
   -e SVACER_LOGIN=your-login \&lt;br /&gt;
   -e SVACER_PASSWORD=your-password \&lt;br /&gt;
   -- /path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VS Code ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.vscode/mcp.json&amp;lt;/code&amp;gt; в корне рабочей директории:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;servers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;type&amp;quot;: &amp;quot;stdio&amp;quot;,&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cursor ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.cursor/mcp.json&amp;lt;/code&amp;gt; в корне проекта или глобально:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenWebUI ====&lt;br /&gt;
&lt;br /&gt;
# Развернуть через Docker (см. «Режим HTTP» выше).&lt;br /&gt;
# Открыть &#039;&#039;&#039;Settings → Tools&#039;&#039;&#039; (или &#039;&#039;&#039;Admin Panel → Settings → Tools&#039;&#039;&#039;).&lt;br /&gt;
# Добавить сервер:&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI работает на хосте, снаружи Docker.&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://svacer-mcp:8000/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI развёрнут в той же compose-сети, что и &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; (имя берётся из &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; → service name, порт 8000 — внутренний порт контейнера).&lt;br /&gt;
# Тип подключения: &#039;&#039;&#039;MCP (Streamable HTTP)&#039;&#039;&#039;.&lt;br /&gt;
# В настройках инструмента указать заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt; (значение — то же, что в &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; сервера).&lt;br /&gt;
# Сохранить — инструменты появятся в чате.&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Переменная&lt;br /&gt;
!По умолчанию&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|URL Svacer-сервера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_LOGIN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Логин&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_PASSWORD&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Пароль&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TIMEOUT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тайм-аут HTTP-запросов к Svacer, секунды&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TRANSPORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt;&lt;br /&gt;
|Режим транспорта: &amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;&lt;br /&gt;
|TCP-порт сервера в режиме HTTP (внутри контейнера)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Bearer-токен для клиентов &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt;. Обязателен при &amp;lt;code&amp;gt;SVACER_TRANSPORT=http&amp;lt;/code&amp;gt;, в режиме STDIO игнорируется. Генерация: &amp;lt;code&amp;gt;openssl rand -hex 32&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_RESOURCE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;:&amp;lt;HTTP_PORT&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Публичный URL MCP-сервера для заголовка &amp;lt;code&amp;gt;WWW-Authenticate&amp;lt;/code&amp;gt; (&amp;lt;nowiki&amp;gt;RFC 9728&amp;lt;/nowiki&amp;gt;). Задаётся при работе за обратным прокси&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Список инструментов через запятую. Если не задано, регистрируются все 8&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;&lt;br /&gt;
|Внешний порт хоста при запуске через &amp;lt;code&amp;gt;docker compose&amp;lt;/code&amp;gt; (отображается на внутренний &amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
Переменные читаются из &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; или из окружения. Для STDIO-клиентов их можно указать в секции &amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt; конфигурации клиента.&lt;br /&gt;
&lt;br /&gt;
==== Ограничение набора инструментов ====&lt;br /&gt;
Чтобы запустить сервер с подмножеством инструментов (например, для уменьшения объёма контекста у модели или разграничения доступа), задайте &amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &amp;lt;code&amp;gt;SVACER_TOOLS=get_projects,get_snapshots,get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
Допустимые имена: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;. Неизвестное имя в списке приводит к ошибке при запуске. Если переменная пустая или не задана, регистрируются все 8 инструментов.&lt;br /&gt;
&lt;br /&gt;
==== Несколько экземпляров сервера ====&lt;br /&gt;
Параллельный запуск нескольких MCP-серверов поддерживается без ограничений.&lt;br /&gt;
&lt;br /&gt;
* В режиме STDIO каждая запись в конфигурации клиента описывает отдельный процесс — несколько подключений к разным экземплярам Svacer задаются простым перечислением.&lt;br /&gt;
* В режиме HTTP запускаются независимые контейнеры на разных хост-портах: например, &amp;lt;code&amp;gt;MCP_PORT=8002&amp;lt;/code&amp;gt; для одного экземпляра и &amp;lt;code&amp;gt;MCP_PORT=8003&amp;lt;/code&amp;gt; для другого. Для каждого контейнера задаётся собственный &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Безопасность ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;STDIO&#039;&#039;&#039;: сервер не открывает сетевых портов и обменивается данными через стандартные потоки ввода/вывода процесса.&lt;br /&gt;
* &#039;&#039;&#039;Streamable HTTP&#039;&#039;&#039;: эндпоинт &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt; требует заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;. Запросы без токена или с неверным значением получают ответ &amp;lt;code&amp;gt;401&amp;lt;/code&amp;gt; и заголовок &amp;lt;code&amp;gt;WWW-Authenticate: Bearer ...&amp;lt;/code&amp;gt;. Токен является разделяемым секретом и не заменяет TLS, а дополняет его: при работе за обратным прокси необходимо использовать HTTPS, а сам токен передавать только по защищённому каналу.&lt;br /&gt;
* Без &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt; HTTP-сервер не запускается.&lt;br /&gt;
* Учётные данные &amp;lt;code&amp;gt;admin/admin&amp;lt;/code&amp;gt; предназначены только для тестового стенда. В рабочем окружении необходимо задать собственные логин и пароль через переменные окружения.&lt;br /&gt;
* Файл &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; не должен добавляться в систему контроля версий.&lt;br /&gt;
&lt;br /&gt;
==== Передача токена клиентом ====&lt;br /&gt;
Большинство HTTP-клиентов MCP (OpenWebUI и др.) позволяют задать произвольный заголовок &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt; в настройках инструмента — указывается значение &amp;lt;code&amp;gt;Bearer &amp;lt;токен&amp;gt;&amp;lt;/code&amp;gt;. Для ручной проверки:&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -H &amp;quot;Authorization: Bearer $SVACER_MCP_TOKEN&amp;quot; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Content-Type: application/json&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Accept: application/json, text/event-stream&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -d &#039;{&amp;quot;jsonrpc&amp;quot;:&amp;quot;2.0&amp;quot;,&amp;quot;id&amp;quot;:1,&amp;quot;method&amp;quot;:&amp;quot;initialize&amp;quot;,&amp;quot;params&amp;quot;:{&amp;quot;protocolVersion&amp;quot;:&amp;quot;2025-11-25&amp;quot;,&amp;quot;capabilities&amp;quot;:{},&amp;quot;clientInfo&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;curl&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0&amp;quot;}}}&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
Справочник по 8 инструментам Svacer MCP. Типичный порядок вызовов: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt; → любой из аналитических инструментов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Инструмент&lt;br /&gt;
!Назначение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|Список проектов с ветками — точка входа&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;&lt;br /&gt;
|Снимки конкретной ветки, от нового к старому&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;&lt;br /&gt;
|Агрегированные метрики снимка: severity / review / checker&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|Компактный список маркеров с серверной фильтрацией&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|Полные предупреждения с трассами и историей ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;&lt;br /&gt;
|Сравнение двух снимков: new / missing / modified / matched&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;&lt;br /&gt;
|Фрагмент исходного кода вокруг строки&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;&lt;br /&gt;
|Группа проектов по имени или UUID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== get_projects ===&lt;br /&gt;
Список всех проектов с ветками. Точка входа: с этого вызова начинается практически любой сценарий — он возвращает &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;, необходимые для последующих запросов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметров нет.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;project_id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
     &amp;quot;project_name&amp;quot;: &amp;quot;bash&amp;quot;,&lt;br /&gt;
     &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.122456Z&amp;quot;,&lt;br /&gt;
     &amp;quot;created_by&amp;quot;: &amp;quot;admin&amp;quot;,&lt;br /&gt;
     &amp;quot;branches&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
         &amp;quot;branch_id&amp;quot;: &amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
         &amp;quot;branch_name&amp;quot;: &amp;quot;master&amp;quot;,&lt;br /&gt;
         &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.394812Z&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_snapshots ===&lt;br /&gt;
Список снимков для конкретной ветки проекта, от нового к старому.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока или regex для фильтра по имени снимка&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_snapshots(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;snapshot_id&amp;quot;: &amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
     &amp;quot;name&amp;quot;: &amp;quot;Snapshot 2020-03-25 09:09:41 +0300&amp;quot;,&lt;br /&gt;
     &amp;quot;import_time&amp;quot;: &amp;quot;2020-03-25T09:09:41.837296Z&amp;quot;,&lt;br /&gt;
     &amp;quot;commit_hash&amp;quot;: null,&lt;br /&gt;
     &amp;quot;markers_count&amp;quot;: 297,&lt;br /&gt;
     &amp;quot;link&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru/&amp;lt;/nowiki&amp;gt;...&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_stats ===&lt;br /&gt;
Агрегированные метрики по снимку: общее количество предупреждений, распределение по критичности, по статусу ревью, по детекторам. Наиболее быстрый способ получить общую картину по проекту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_stats(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_warnings&amp;quot;: 771,&lt;br /&gt;
   &amp;quot;by_severity&amp;quot;: {&lt;br /&gt;
     &amp;quot;Critical&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Major&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Unspecified&amp;quot;: 769&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_review_status&amp;quot;: {&lt;br /&gt;
     &amp;quot;Confirmed&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;False Positive&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Undecided&amp;quot;: 767,&lt;br /&gt;
     &amp;quot;Unclear&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Won&#039;t fix&amp;quot;: 1&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_checker&amp;quot;: {&lt;br /&gt;
     &amp;quot;PROC_USE.VULNERABLE&amp;quot;: 337,&lt;br /&gt;
     &amp;quot;UNUSED_FUNC_RES.REWRITE.MINOR&amp;quot;: 44,&lt;br /&gt;
     &amp;quot;UNREACHABLE_CODE&amp;quot;: 28,&lt;br /&gt;
     &amp;quot;DEREF_AFTER_NULL.EX&amp;quot;: 27,&lt;br /&gt;
     &amp;quot;NULL_AFTER_DEREF&amp;quot;: 27&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_markers ===&lt;br /&gt;
Компактный список маркеров с серверной фильтрацией. Основной инструмент для перечисления и обзора: его следует предпочитать &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, когда не требуются развёрнутые поля — трассы и история ревью.&lt;br /&gt;
&lt;br /&gt;
По умолчанию ответ ограничен 30 маркерами и содержит компактный набор полей. Подробнее об ограничении объёма см. раздел Про объём ответа в сценариях.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора (&amp;lt;code&amp;gt;DEREF_AFTER_NULL&amp;lt;/code&amp;gt;, …)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы маркеров&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю изменений ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии к маркеру&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра из веб-интерфейса Svacer&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров в ответе (по умолчанию &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;). Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Список разрешённых полей маркера верхнего уровня. По умолчанию — компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает все поля коннектора (&amp;lt;code&amp;gt;id, warnClass, file, line, msg, tool, function, mtid, review&amp;lt;/code&amp;gt;, а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены). Допустим и произвольный список — например, &amp;lt;code&amp;gt;[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_markers(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 341,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 30,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;warnClass&amp;quot;: [&amp;quot;PROC_USE.VULNERABLE&amp;quot;]},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;e05bb35b-a95e-4eb2-85ae-3101b788f07d&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;PROC_USE.VULNERABLE.TEMP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/lib/sh/tmpfile.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 160,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Use of vulnerable function &#039;mktemp&#039; at tmpfile.c:160. ...&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;sh_mktmpname&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: null&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; отражает количество маркеров, удовлетворяющих фильтру до применения ограничения; &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt; — количество маркеров, фактически содержащихся в &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; следует либо сузить фильтры (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;), либо передать &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; для получения полного списка. Поля &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; возвращаются только при &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_warnings ===&lt;br /&gt;
Полные предупреждения с детальной разметкой. Ответ значительно объёмнее, чем у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, поэтому инструмент следует использовать только тогда, когда нужны поля, отсутствующие в компактной форме: &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Лимит по умолчанию — 30; при включённых &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt; он автоматически снижается до 8, поскольку такие предупреждения существенно объёмнее.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы. Активирует режим расширенных полей (лимит по умолчанию — 8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю ревью. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество предупреждений в ответе. По умолчанию — &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;, в режиме расширенных полей — &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Явно заданное &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; отменяет автоматическое снижение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_warnings(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   severity=[&amp;quot;Critical&amp;quot;],&lt;br /&gt;
   review_history=True,&lt;br /&gt;
   traces=True&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: false,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;severity&amp;quot;: [&amp;quot;Critical&amp;quot;], &amp;quot;traces&amp;quot;: true, &amp;quot;review_history&amp;quot;: true},&lt;br /&gt;
   &amp;quot;warnings&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;a3f21c90-1d4e-4b82-9f63-7c8e5d2a1b09&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Possible null pointer dereference of &#039;l&#039; after loop exit.&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: {&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;severity&amp;quot;: &amp;quot;Critical&amp;quot;},&lt;br /&gt;
       &amp;quot;review_history&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;changed_by&amp;quot;: &amp;quot;admin&amp;quot;, &amp;quot;changed_at&amp;quot;: &amp;quot;2021-12-13T14:00:00Z&amp;quot;}],&lt;br /&gt;
       &amp;quot;traces&amp;quot;: [{&amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;, &amp;quot;line&amp;quot;: 3320, &amp;quot;msg&amp;quot;: &amp;quot;Loop starts here; &#039;l&#039; may exhaust the list.&amp;quot;}]&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_diff ===&lt;br /&gt;
Сравнение двух снимков. Категории располагаются под ключом &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt; (появилось в новом снимке), &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt; (исчезло из нового), &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt; (тот же идентификатор, изменился контекст), &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt; (совпало в обоих). Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно UUID снимков.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;base_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Старый снимок&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;head_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|нет&lt;br /&gt;
|Новый снимок; если не указан, сравнение выполняется с предыдущим по времени&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; — только статистика; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; — статистика и идентификаторы маркеров; &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; — полные маркеры по категориям&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|bool&lt;br /&gt;
|нет&lt;br /&gt;
|Метаданные детекторов для маркеров (только при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров &#039;&#039;&#039;на каждую категорию&#039;&#039;&#039; при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;. По умолчанию — &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;, значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Параметр игнорируется при &amp;lt;code&amp;gt;level &amp;lt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;. Применяется к маркерам внутри категорий при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_diff(&lt;br /&gt;
   base_snapshot_id=&amp;quot;72b3df7b-c15a-4e3d-8f92-a041dc6e5b87&amp;quot;,&lt;br /&gt;
   head_snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   level=0&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&lt;br /&gt;
     &amp;quot;context1&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-20 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;context2&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-25 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;scope&amp;quot;: [&amp;quot;NEW&amp;quot;, &amp;quot;MISSING&amp;quot;, &amp;quot;MATCHED&amp;quot;, &amp;quot;MODIFIED&amp;quot;],&lt;br /&gt;
     &amp;quot;new&amp;quot;: 9,&lt;br /&gt;
     &amp;quot;missing&amp;quot;: 12,&lt;br /&gt;
     &amp;quot;modified&amp;quot;: 98,&lt;br /&gt;
     &amp;quot;matched&amp;quot;: 187&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt;)&#039;&#039;&#039; — каждая категория внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; оформляется и ограничивается независимо:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&amp;quot;new&amp;quot;: 50, &amp;quot;missing&amp;quot;: 5, &amp;quot;modified&amp;quot;: 0, &amp;quot;matched&amp;quot;: 187},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: {&lt;br /&gt;
     &amp;quot;new_markers&amp;quot;: {&lt;br /&gt;
       &amp;quot;total_count&amp;quot;: 50,&lt;br /&gt;
       &amp;quot;returned_count&amp;quot;: 20,&lt;br /&gt;
       &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
       &amp;quot;markers&amp;quot;: [&lt;br /&gt;
         {&amp;quot;id&amp;quot;: &amp;quot;a3f21c90-...&amp;quot;, &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;, &amp;quot;file&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;line&amp;quot;: 3327, &amp;quot;msg&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;, &amp;quot;review&amp;quot;: null}&lt;br /&gt;
       ]&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;missing_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 5, &amp;quot;returned_count&amp;quot;: 5, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: [...]},&lt;br /&gt;
     &amp;quot;modified_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 0, &amp;quot;returned_count&amp;quot;: 0, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: []},&lt;br /&gt;
     &amp;quot;matched_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 187, &amp;quot;returned_count&amp;quot;: 20, &amp;quot;truncated&amp;quot;: true, &amp;quot;markers&amp;quot;: [...]}&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; либо запросить нужные идентификаторы отдельным вызовом &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;. Маркеры внутри категорий проходят ту же компактную обработку, что и в &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;: значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает фиксированный набор полей коннектора, а не произвольные «сырые» поля API.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_advanced_file_preview ===&lt;br /&gt;
Фрагмент исходного кода из снимка вокруг указанной строки. Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно идентификатора снимка и пути к файлу.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Путь к файлу в том виде, в котором его возвращают &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Центральная строка, нумерация с 1 (по умолчанию &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;before&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк до центральной (по умолчанию &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;after&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк после центральной (по умолчанию &amp;lt;code&amp;gt;99999&amp;lt;/code&amp;gt; — до конца файла)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_advanced_file_preview(&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
   line=3327,&lt;br /&gt;
   before=10,&lt;br /&gt;
   after=10&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
   &amp;quot;content&amp;quot;: &amp;quot;      for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)\n\t;\n      return (l-&amp;gt;word-&amp;gt;word);\n&amp;quot;,&lt;br /&gt;
   &amp;quot;total_lines&amp;quot;: 6082&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_groups ===&lt;br /&gt;
Получить группу проектов по имени или UUID. Группы объединяют проекты в логические блоки — например, по команде или продукту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Имя группы или её UUID&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_groups(name_or_id=&amp;quot;Linux Tools&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;project_group_id&amp;quot;: &amp;quot;c4f8a2d1-3b7e-4f90-82ac-1d5e8f2b6c04&amp;quot;,&lt;br /&gt;
   &amp;quot;project_group_name&amp;quot;: &amp;quot;Linux Tools&amp;quot;,&lt;br /&gt;
   &amp;quot;projects&amp;quot;: [&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;bash&amp;quot;},&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;d3a17f52-...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;coreutils&amp;quot;}&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;projects[].id&amp;lt;/code&amp;gt; — это &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;, который далее передаётся в &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;. Группы и проекты — разные сущности; идентификатор группы и идентификатор проекта не взаимозаменяемы.&lt;br /&gt;
&lt;br /&gt;
== Примеры сценариев ==&lt;br /&gt;
Приведённые ниже запросы выполнены на демонстрационном стенде &amp;lt;code&amp;gt;svacer-demo.ispras.ru&amp;lt;/code&amp;gt; с использованием OpenWebUI и модели &amp;lt;code&amp;gt;qwen3-coder:30b&amp;lt;/code&amp;gt;. В любом другом MCP-клиенте с моделью достаточной мощности порядок вызовов будет аналогичным.&lt;br /&gt;
&lt;br /&gt;
=== Про объём ответа ===&lt;br /&gt;
&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; по умолчанию ограничивают объём ответа, чтобы не перегружать контекст модели:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; — 30 маркеров по умолчанию. Если у &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; включены &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;, лимит снижается до 8, поскольку такие маркеры значительно объёмнее.&lt;br /&gt;
* &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; — 20 маркеров на каждую категорию внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
В ответе присутствуют поля &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;truncated&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; есть два варианта действий: сузить фильтр (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;) либо явно увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; (значение &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; полностью снимает ограничение).&lt;br /&gt;
&lt;br /&gt;
Поле &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; определяет, какие ключи маркера возвращаются. По умолчанию применяется компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt; (а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены логическими флагами и пришли с сервера). Для полного маркера со всеми служебными ключами — &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;. Для произвольной выборки — список полей верхнего уровня, например &amp;lt;code&amp;gt;fields=[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;. Поле &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; — объект &amp;lt;code&amp;gt;{status, severity, action}&amp;lt;/code&amp;gt;; вложенные ключи в &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; не поддерживаются, поэтому объект &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; запрашивается целиком.&lt;br /&gt;
&lt;br /&gt;
=== Перечислить все проекты ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие проекты есть в Svacer?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В Svacer доступно 6 проектов: bash, openssl, paho.mqtt.c, coturn, zstd, darpa. У каждого — одна ветка &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Посмотреть снимки проекта ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие снимки есть у paho.mqtt.c? Самый свежий когда?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; — найти &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id=..., branch_id=...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;У paho.mqtt.c 3 снимка. Самый свежий — «Snapshot 2020-03-25 09:09:41 +0300» (297 маркеров). Предыдущий — 20 марта (306 маркеров).&amp;lt;/blockquote&amp;gt;Поле &amp;lt;code&amp;gt;commit_hash&amp;lt;/code&amp;gt; может принимать значение &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;, если проект не сохраняет хэш коммита в &amp;lt;code&amp;gt;custom_properties&amp;lt;/code&amp;gt;. Имена снимков произвольны: одни проекты записывают в имя дату, другие — коммит, третьи — свободный текст.&lt;br /&gt;
&lt;br /&gt;
=== Сводка по проекту ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Что в bash в последнем снимке? Сколько всего предупреждений, есть ли критические, какие топ-детекторы?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id, branch_id)&amp;lt;/code&amp;gt; — взять последний снимок&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats(project_id, branch_id, snapshot_id)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В последнем снимке bash содержится 771 предупреждение:&lt;br /&gt;
&lt;br /&gt;
* Критических: 1 (Confirmed)&lt;br /&gt;
* Major: 1 (Won&#039;t fix)&lt;br /&gt;
* Остальные: 769 (Unspecified — не ревьюились)&lt;br /&gt;
&lt;br /&gt;
Топ-детекторы по количеству:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;PROC_USE.VULNERABLE&amp;lt;/code&amp;gt; — 337&lt;br /&gt;
# &amp;lt;code&amp;gt;UNUSED_FUNC_RES.REWRITE.MINOR&amp;lt;/code&amp;gt; — 44&lt;br /&gt;
# &amp;lt;code&amp;gt;UNREACHABLE_CODE&amp;lt;/code&amp;gt; — 28&lt;br /&gt;
# &amp;lt;code&amp;gt;DEREF_AFTER_NULL.EX&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
# &amp;lt;code&amp;gt;NULL_AFTER_DEREF&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;by_severity&amp;lt;/code&amp;gt; — маркеры без ручного ревью, а не «низкий приоритет». Поле &amp;lt;code&amp;gt;by_checker&amp;lt;/code&amp;gt; не сортируется, на большом снимке оно может содержать более 100 ключей — чтобы получить именно топ-N, следует явно сформулировать запрос: «топ-5 детекторов».&lt;br /&gt;
&lt;br /&gt;
=== Тренд по нескольким снимкам ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Как у openssl менялось число предупреждений за последние пять снимков? Покажи таблицей.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — взять список&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats()&amp;lt;/code&amp;gt; × 5 — по каждому из последних пяти снимков&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Снимок&lt;br /&gt;
!Дата&lt;br /&gt;
!Всего&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:49&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:29&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:08&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:48&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:22&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
На демонстрационном стенде указанные пять снимков openssl импортированы с интервалом в 20 минут одного дня и полностью идентичны — поэтому динамика отсутствует. На реальном проекте с историей релизов значения будут изменяться.&lt;br /&gt;
&lt;br /&gt;
=== Найти срабатывания конкретного детектора ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Где в bash срабатывает PROC_USE.VULNERABLE? Покажи список — файл, строка, что именно ругается. Достаточно первых десяти.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/tmpfile.c:160&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;mktemp()&amp;lt;/code&amp;gt;, race condition. Рекомендуется &amp;lt;code&amp;gt;mkstemp()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/shell.c:151&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;, значение может быть подменено.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/shell.c:415&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/complete.c:1516&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/eaccess.c:115&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;strcat()&amp;lt;/code&amp;gt;, рекомендуется &amp;lt;code&amp;gt;strncat()&amp;lt;/code&amp;gt;. …&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Фильтр &amp;lt;code&amp;gt;warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&amp;lt;/code&amp;gt; охватывает все подклассы: &amp;lt;code&amp;gt;PROC_USE.VULNERABLE.TEMP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.GETENV&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.STRCAT&amp;lt;/code&amp;gt; и т. д. — всего 341 маркер. Несколько значений в одном параметре трактуются как логическое «ИЛИ»: &amp;lt;code&amp;gt;severity=[&amp;quot;Critical&amp;quot;,&amp;quot;Major&amp;quot;]&amp;lt;/code&amp;gt; возвращает маркеры обеих категорий.&lt;br /&gt;
&lt;br /&gt;
В ответе будет &amp;lt;code&amp;gt;total_count: 341, returned_count: 30, truncated: true&amp;lt;/code&amp;gt; — это ожидаемое поведение. Модель видит общий объём по &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; и при необходимости сужает запрос или вызывает &amp;lt;code&amp;gt;get_markers(..., limit=0)&amp;lt;/code&amp;gt;, чтобы получить полный список.&lt;br /&gt;
&lt;br /&gt;
=== Сравнить два снимка ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Возьми два последних снимка paho.mqtt.c — что между ними изменилось? Сколько новых предупреждений, сколько починили?&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — два последних&lt;br /&gt;
# &amp;lt;code&amp;gt;get_diff(base_snapshot_id=&amp;quot;72b3df7b-...&amp;quot;, head_snapshot_id=&amp;quot;b42cb563-...&amp;quot;, level=0)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Между двумя последними снимками paho.mqtt.c:&lt;br /&gt;
&lt;br /&gt;
* Новых: 12&lt;br /&gt;
* Удалённых: 13&lt;br /&gt;
* Изменённых: 99&lt;br /&gt;
* Совпадающих: 185&lt;br /&gt;
&lt;br /&gt;
Удалено несколько больше, чем добавлено — общая картина практически не изменилась.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Категория &amp;lt;code&amp;gt;modified&amp;lt;/code&amp;gt; — маркер, присутствующий в обоих снимках, у которого изменилось окружение (номер строки, контекст функции). Это не новая ошибка. На больших проектах рекомендуется начинать с &amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt; для получения статистики, при необходимости использовать &amp;lt;code&amp;gt;level=1&amp;lt;/code&amp;gt; (только идентификаторы маркеров) и затем точечно вызывать &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; с нужными фильтрами.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt; возвращает полные маркеры по категориям, причём каждая категория по умолчанию ограничена 20 маркерами. Категории располагаются внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;. Структура ответа в JSON: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;markers&amp;quot;: {&amp;quot;new_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: N, &amp;quot;returned_count&amp;quot;: ..., &amp;quot;truncated&amp;quot;: ..., &amp;quot;markers&amp;quot;: [...]}, ...}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; или выполнить отдельный вызов &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; по нужным идентификаторам.&lt;br /&gt;
&lt;br /&gt;
=== Разобрать конкретное предупреждение ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;В bash есть один подтверждённый критикал — что-то про разыменование указателя. Покажи код вокруг этого места и объясни в чём проблема.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — найти снимок bash&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_advanced_file_preview(file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;, line=3327, before=10, after=10)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&amp;lt;blockquote&amp;gt;Маркер &amp;lt;code&amp;gt;DEREF_AFTER_NULL.LOOP&amp;lt;/code&amp;gt; в функции &amp;lt;code&amp;gt;select_query()&amp;lt;/code&amp;gt;, строка 3327:&lt;br /&gt;
 &amp;lt;code&amp;gt;for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)&lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
return (l-&amp;gt;word-&amp;gt;word);  /* l может быть NULL после выхода из цикла */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если список заканчивается раньше, чем &amp;lt;code&amp;gt;reply&amp;lt;/code&amp;gt; обнуляется, &amp;lt;code&amp;gt;l&amp;lt;/code&amp;gt; станет &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; на последнем &amp;lt;code&amp;gt;l-&amp;gt;next&amp;lt;/code&amp;gt;, и следующий &amp;lt;code&amp;gt;l-&amp;gt;word-&amp;gt;word&amp;lt;/code&amp;gt; — разыменование нулевого указателя.&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt; должен точно совпадать со значением, возвращённым маркером, включая ведущий префикс &amp;lt;code&amp;gt;/.build/...&amp;lt;/code&amp;gt;. Это путь внутри сборочной директории Svacer, а не путь в исходном репозитории; соответствие в репозитории определяется по имени файла.&lt;br /&gt;
&lt;br /&gt;
Для одиночной разметки удобно сразу запрашивать полный маркер с трассами: &amp;lt;code&amp;gt;get_markers(..., severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;], traces=True, checker_info=True)&amp;lt;/code&amp;gt;. Флаги &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt; указывают серверу включить соответствующие поля в ответ; в выдаче они сохраняются и при значении &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; по умолчанию. Значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; требуется лишь в том случае, когда дополнительно нужны &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; — служебные ключи, исключённые из компактного набора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3505</id>
		<title>Help:13-alpha MCP</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3505"/>
		<updated>2026-05-21T10:02:59Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Разобрать конкретное предупреждение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Архитектура ==&lt;br /&gt;
[https://modelcontextprotocol.io/docs/getting-started/intro MCP] — открытый стандарт, через который LLM-клиенты (Claude Desktop, Cursor, VS Code, OpenWebUI и др.) вызывают внешние инструменты. &lt;br /&gt;
Svacer MCP соединяет одно с другим: 8 инструментов поверх публичного REST API Svacer, которые LLM выбирает и вызывает в ответ на обычный текстовый запрос. Вместо ручной последовательности «открыть UI, найти проект, выбрать снимок, применить фильтр» достаточно сформулировать вопрос в чате, например, «сколько критических предупреждений в последнем снимке bash?», и получить ответ. Необходимые вызовы инструментов модель выполняет самостоятельно.&lt;br /&gt;
&lt;br /&gt;
[[File:Архитектура MCP.png|thumb|none|x800px|alt=architectureMCP|Архитектура MCP-сервер]]&lt;br /&gt;
&lt;br /&gt;
Поток запроса: LLM-клиент отправляет MCP-вызов через STDIO или Streamable HTTP → &amp;lt;code&amp;gt;server.py&amp;lt;/code&amp;gt; передаёт его в выбранный инструмент из &amp;lt;code&amp;gt;tools/&amp;lt;/code&amp;gt; → инструмент проверяет параметры и обращается к &amp;lt;code&amp;gt;api_client.py&amp;lt;/code&amp;gt; → клиент получает JWT от &amp;lt;code&amp;gt;auth.py&amp;lt;/code&amp;gt; (модуль автоматически обновляет токен по истечении срока действия или при ответе 401) → запрос отправляется в Svacer REST API.&lt;br /&gt;
&lt;br /&gt;
== Установка ==&lt;br /&gt;
Установка Svacer MCP, подключение клиентов и конфигурация.&lt;br /&gt;
&lt;br /&gt;
=== Требования ===&lt;br /&gt;
&lt;br /&gt;
* Python 3.10+&lt;br /&gt;
* Доступ к Svacer-серверу: URL + логин/пароль&lt;br /&gt;
&lt;br /&gt;
=== Режим STDIO ===&lt;br /&gt;
Подходит для настольных клиентов: Claude Desktop, Claude Code, Cursor, VS Code.&lt;br /&gt;
 &amp;lt;code&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://gitlab.ispras.ru/svacerai/mcp.git&amp;lt;/nowiki&amp;gt; &amp;amp;&amp;amp; cd mcp&lt;br /&gt;
 &lt;br /&gt;
 python3 -m venv .venv&lt;br /&gt;
 .venv/bin/pip install -e .&lt;br /&gt;
 &lt;br /&gt;
 cp .env.example .env&lt;br /&gt;
 # Отредактировать .env — указать URL и учётные данные Svacer&lt;br /&gt;
 &lt;br /&gt;
 # Проверить запуск (сервер ожидает данные на stdin; для выхода — Ctrl+C)&lt;br /&gt;
 .venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
После &amp;lt;code&amp;gt;pip install -e .&amp;lt;/code&amp;gt; в окружении становится доступна команда &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; — её указывают в конфигурации клиентов ниже.&lt;br /&gt;
&lt;br /&gt;
=== Режим HTTP (Docker) ===&lt;br /&gt;
Подходит для веб-клиентов (OpenWebUI) и удалённого доступа.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Требования:&#039;&#039;&#039; Docker, Docker Compose.&lt;br /&gt;
 &amp;lt;code&amp;gt;cp .env.example .env&lt;br /&gt;
 &lt;br /&gt;
 # В .env обязательно задать SVACER_MCP_TOKEN — без него сервер не запускается&lt;br /&gt;
 echo &amp;quot;SVACER_MCP_TOKEN=$(openssl rand -hex 32)&amp;quot; &amp;gt;&amp;gt; .env&lt;br /&gt;
 &lt;br /&gt;
 docker compose up -d&lt;br /&gt;
 &lt;br /&gt;
 # MCP endpoint: &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 # Клиенты передают заголовок: Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Внешний порт хоста задаётся переменной &amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt; (по умолчанию &amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;), внутри контейнера сервер всегда слушает порт &amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Подключение клиентов ===&lt;br /&gt;
&lt;br /&gt;
==== Claude Desktop ====&lt;br /&gt;
Файл конфигурации: &amp;lt;code&amp;gt;~/.config/Claude/claude_desktop_config.json&amp;lt;/code&amp;gt; (Linux) или &amp;lt;code&amp;gt;%APPDATA%\Claude\claude_desktop_config.json&amp;lt;/code&amp;gt; (Windows).&lt;br /&gt;
&lt;br /&gt;
Укажите &#039;&#039;&#039;абсолютный путь&#039;&#039;&#039; к &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; из вашего venv (&amp;lt;code&amp;gt;which svacer-mcp&amp;lt;/code&amp;gt; в активированном venv или &amp;lt;code&amp;gt;/path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Claude Code ====&lt;br /&gt;
 &amp;lt;code&amp;gt;claude mcp add svacer \&lt;br /&gt;
   -e SVACER_URL=&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt; \&lt;br /&gt;
   -e SVACER_LOGIN=your-login \&lt;br /&gt;
   -e SVACER_PASSWORD=your-password \&lt;br /&gt;
   -- /path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VS Code ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.vscode/mcp.json&amp;lt;/code&amp;gt; в корне рабочей директории:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;servers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;type&amp;quot;: &amp;quot;stdio&amp;quot;,&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cursor ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.cursor/mcp.json&amp;lt;/code&amp;gt; в корне проекта или глобально:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenWebUI ====&lt;br /&gt;
&lt;br /&gt;
# Развернуть через Docker (см. «Режим HTTP» выше).&lt;br /&gt;
# Открыть &#039;&#039;&#039;Settings → Tools&#039;&#039;&#039; (или &#039;&#039;&#039;Admin Panel → Settings → Tools&#039;&#039;&#039;).&lt;br /&gt;
# Добавить сервер:&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI работает на хосте, снаружи Docker.&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://svacer-mcp:8000/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI развёрнут в той же compose-сети, что и &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; (имя берётся из &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; → service name, порт 8000 — внутренний порт контейнера).&lt;br /&gt;
# Тип подключения: &#039;&#039;&#039;MCP (Streamable HTTP)&#039;&#039;&#039;.&lt;br /&gt;
# В настройках инструмента указать заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt; (значение — то же, что в &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; сервера).&lt;br /&gt;
# Сохранить — инструменты появятся в чате.&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Переменная&lt;br /&gt;
!По умолчанию&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|URL Svacer-сервера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_LOGIN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Логин&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_PASSWORD&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Пароль&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TIMEOUT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тайм-аут HTTP-запросов к Svacer, секунды&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TRANSPORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt;&lt;br /&gt;
|Режим транспорта: &amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;&lt;br /&gt;
|TCP-порт сервера в режиме HTTP (внутри контейнера)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Bearer-токен для клиентов &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt;. Обязателен при &amp;lt;code&amp;gt;SVACER_TRANSPORT=http&amp;lt;/code&amp;gt;, в режиме STDIO игнорируется. Генерация: &amp;lt;code&amp;gt;openssl rand -hex 32&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_RESOURCE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;:&amp;lt;HTTP_PORT&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Публичный URL MCP-сервера для заголовка &amp;lt;code&amp;gt;WWW-Authenticate&amp;lt;/code&amp;gt; (&amp;lt;nowiki&amp;gt;RFC 9728&amp;lt;/nowiki&amp;gt;). Задаётся при работе за обратным прокси&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Список инструментов через запятую. Если не задано, регистрируются все 8&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;&lt;br /&gt;
|Внешний порт хоста при запуске через &amp;lt;code&amp;gt;docker compose&amp;lt;/code&amp;gt; (отображается на внутренний &amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
Переменные читаются из &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; или из окружения. Для STDIO-клиентов их можно указать в секции &amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt; конфигурации клиента.&lt;br /&gt;
&lt;br /&gt;
==== Ограничение набора инструментов ====&lt;br /&gt;
Чтобы запустить сервер с подмножеством инструментов (например, для уменьшения объёма контекста у модели или разграничения доступа), задайте &amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &amp;lt;code&amp;gt;SVACER_TOOLS=get_projects,get_snapshots,get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
Допустимые имена: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;. Неизвестное имя в списке приводит к ошибке при запуске. Если переменная пустая или не задана, регистрируются все 8 инструментов.&lt;br /&gt;
&lt;br /&gt;
==== Несколько экземпляров сервера ====&lt;br /&gt;
Параллельный запуск нескольких MCP-серверов поддерживается без ограничений.&lt;br /&gt;
&lt;br /&gt;
* В режиме STDIO каждая запись в конфигурации клиента описывает отдельный процесс — несколько подключений к разным экземплярам Svacer задаются простым перечислением.&lt;br /&gt;
* В режиме HTTP запускаются независимые контейнеры на разных хост-портах: например, &amp;lt;code&amp;gt;MCP_PORT=8002&amp;lt;/code&amp;gt; для одного экземпляра и &amp;lt;code&amp;gt;MCP_PORT=8003&amp;lt;/code&amp;gt; для другого. Для каждого контейнера задаётся собственный &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Безопасность ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;STDIO&#039;&#039;&#039;: сервер не открывает сетевых портов и обменивается данными через стандартные потоки ввода/вывода процесса.&lt;br /&gt;
* &#039;&#039;&#039;Streamable HTTP&#039;&#039;&#039;: эндпоинт &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt; требует заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;. Запросы без токена или с неверным значением получают ответ &amp;lt;code&amp;gt;401&amp;lt;/code&amp;gt; и заголовок &amp;lt;code&amp;gt;WWW-Authenticate: Bearer ...&amp;lt;/code&amp;gt;. Токен является разделяемым секретом и не заменяет TLS, а дополняет его: при работе за обратным прокси необходимо использовать HTTPS, а сам токен передавать только по защищённому каналу.&lt;br /&gt;
* Без &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt; HTTP-сервер не запускается.&lt;br /&gt;
* Учётные данные &amp;lt;code&amp;gt;admin/admin&amp;lt;/code&amp;gt; предназначены только для тестового стенда. В рабочем окружении необходимо задать собственные логин и пароль через переменные окружения.&lt;br /&gt;
* Файл &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; не должен добавляться в систему контроля версий.&lt;br /&gt;
&lt;br /&gt;
==== Передача токена клиентом ====&lt;br /&gt;
Большинство HTTP-клиентов MCP (OpenWebUI и др.) позволяют задать произвольный заголовок &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt; в настройках инструмента — указывается значение &amp;lt;code&amp;gt;Bearer &amp;lt;токен&amp;gt;&amp;lt;/code&amp;gt;. Для ручной проверки:&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -H &amp;quot;Authorization: Bearer $SVACER_MCP_TOKEN&amp;quot; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Content-Type: application/json&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Accept: application/json, text/event-stream&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -d &#039;{&amp;quot;jsonrpc&amp;quot;:&amp;quot;2.0&amp;quot;,&amp;quot;id&amp;quot;:1,&amp;quot;method&amp;quot;:&amp;quot;initialize&amp;quot;,&amp;quot;params&amp;quot;:{&amp;quot;protocolVersion&amp;quot;:&amp;quot;2025-11-25&amp;quot;,&amp;quot;capabilities&amp;quot;:{},&amp;quot;clientInfo&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;curl&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0&amp;quot;}}}&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
Справочник по 8 инструментам Svacer MCP. Типичный порядок вызовов: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt; → любой из аналитических инструментов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Инструмент&lt;br /&gt;
!Назначение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|Список проектов с ветками — точка входа&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;&lt;br /&gt;
|Снимки конкретной ветки, от нового к старому&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;&lt;br /&gt;
|Агрегированные метрики снимка: severity / review / checker&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|Компактный список маркеров с серверной фильтрацией&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|Полные предупреждения с трассами и историей ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;&lt;br /&gt;
|Сравнение двух снимков: new / missing / modified / matched&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;&lt;br /&gt;
|Фрагмент исходного кода вокруг строки&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;&lt;br /&gt;
|Группа проектов по имени или UUID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== get_projects ===&lt;br /&gt;
Список всех проектов с ветками. Точка входа: с этого вызова начинается практически любой сценарий — он возвращает &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;, необходимые для последующих запросов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметров нет.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;project_id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
     &amp;quot;project_name&amp;quot;: &amp;quot;bash&amp;quot;,&lt;br /&gt;
     &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.122456Z&amp;quot;,&lt;br /&gt;
     &amp;quot;created_by&amp;quot;: &amp;quot;admin&amp;quot;,&lt;br /&gt;
     &amp;quot;branches&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
         &amp;quot;branch_id&amp;quot;: &amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
         &amp;quot;branch_name&amp;quot;: &amp;quot;master&amp;quot;,&lt;br /&gt;
         &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.394812Z&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_snapshots ===&lt;br /&gt;
Список снимков для конкретной ветки проекта, от нового к старому.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока или regex для фильтра по имени снимка&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_snapshots(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;snapshot_id&amp;quot;: &amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
     &amp;quot;name&amp;quot;: &amp;quot;Snapshot 2020-03-25 09:09:41 +0300&amp;quot;,&lt;br /&gt;
     &amp;quot;import_time&amp;quot;: &amp;quot;2020-03-25T09:09:41.837296Z&amp;quot;,&lt;br /&gt;
     &amp;quot;commit_hash&amp;quot;: null,&lt;br /&gt;
     &amp;quot;markers_count&amp;quot;: 297,&lt;br /&gt;
     &amp;quot;link&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru/&amp;lt;/nowiki&amp;gt;...&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_stats ===&lt;br /&gt;
Агрегированные метрики по снимку: общее количество предупреждений, распределение по критичности, по статусу ревью, по детекторам. Наиболее быстрый способ получить общую картину по проекту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_stats(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_warnings&amp;quot;: 771,&lt;br /&gt;
   &amp;quot;by_severity&amp;quot;: {&lt;br /&gt;
     &amp;quot;Critical&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Major&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Unspecified&amp;quot;: 769&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_review_status&amp;quot;: {&lt;br /&gt;
     &amp;quot;Confirmed&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;False Positive&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Undecided&amp;quot;: 767,&lt;br /&gt;
     &amp;quot;Unclear&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Won&#039;t fix&amp;quot;: 1&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_checker&amp;quot;: {&lt;br /&gt;
     &amp;quot;PROC_USE.VULNERABLE&amp;quot;: 337,&lt;br /&gt;
     &amp;quot;UNUSED_FUNC_RES.REWRITE.MINOR&amp;quot;: 44,&lt;br /&gt;
     &amp;quot;UNREACHABLE_CODE&amp;quot;: 28,&lt;br /&gt;
     &amp;quot;DEREF_AFTER_NULL.EX&amp;quot;: 27,&lt;br /&gt;
     &amp;quot;NULL_AFTER_DEREF&amp;quot;: 27&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_markers ===&lt;br /&gt;
Компактный список маркеров с серверной фильтрацией. Основной инструмент для перечисления и обзора: его следует предпочитать &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, когда не требуются развёрнутые поля — трассы и история ревью.&lt;br /&gt;
&lt;br /&gt;
По умолчанию ответ ограничен 30 маркерами и содержит компактный набор полей. Подробнее об ограничении объёма см. раздел Про объём ответа в сценариях.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора (&amp;lt;code&amp;gt;DEREF_AFTER_NULL&amp;lt;/code&amp;gt;, …)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы маркеров&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю изменений ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии к маркеру&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра из веб-интерфейса Svacer&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров в ответе (по умолчанию &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;). Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Список разрешённых полей маркера верхнего уровня. По умолчанию — компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает все поля коннектора (&amp;lt;code&amp;gt;id, warnClass, file, line, msg, tool, function, mtid, review&amp;lt;/code&amp;gt;, а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены). Допустим и произвольный список — например, &amp;lt;code&amp;gt;[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_markers(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 341,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 30,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;warnClass&amp;quot;: [&amp;quot;PROC_USE.VULNERABLE&amp;quot;]},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;e05bb35b-a95e-4eb2-85ae-3101b788f07d&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;PROC_USE.VULNERABLE.TEMP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/lib/sh/tmpfile.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 160,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Use of vulnerable function &#039;mktemp&#039; at tmpfile.c:160. ...&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;sh_mktmpname&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: null&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; отражает количество маркеров, удовлетворяющих фильтру до применения ограничения; &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt; — количество маркеров, фактически содержащихся в &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; следует либо сузить фильтры (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;), либо передать &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; для получения полного списка. Поля &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; возвращаются только при &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_warnings ===&lt;br /&gt;
Полные предупреждения с детальной разметкой. Ответ значительно объёмнее, чем у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, поэтому инструмент следует использовать только тогда, когда нужны поля, отсутствующие в компактной форме: &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Лимит по умолчанию — 30; при включённых &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt; он автоматически снижается до 8, поскольку такие предупреждения существенно объёмнее.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы. Активирует режим расширенных полей (лимит по умолчанию — 8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю ревью. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество предупреждений в ответе. По умолчанию — &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;, в режиме расширенных полей — &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Явно заданное &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; отменяет автоматическое снижение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_warnings(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   severity=[&amp;quot;Critical&amp;quot;],&lt;br /&gt;
   review_history=True,&lt;br /&gt;
   traces=True&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: false,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;severity&amp;quot;: [&amp;quot;Critical&amp;quot;], &amp;quot;traces&amp;quot;: true, &amp;quot;review_history&amp;quot;: true},&lt;br /&gt;
   &amp;quot;warnings&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;a3f21c90-1d4e-4b82-9f63-7c8e5d2a1b09&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Possible null pointer dereference of &#039;l&#039; after loop exit.&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: {&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;severity&amp;quot;: &amp;quot;Critical&amp;quot;},&lt;br /&gt;
       &amp;quot;review_history&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;changed_by&amp;quot;: &amp;quot;admin&amp;quot;, &amp;quot;changed_at&amp;quot;: &amp;quot;2021-12-13T14:00:00Z&amp;quot;}],&lt;br /&gt;
       &amp;quot;traces&amp;quot;: [{&amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;, &amp;quot;line&amp;quot;: 3320, &amp;quot;msg&amp;quot;: &amp;quot;Loop starts here; &#039;l&#039; may exhaust the list.&amp;quot;}]&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_diff ===&lt;br /&gt;
Сравнение двух снимков. Категории располагаются под ключом &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt; (появилось в новом снимке), &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt; (исчезло из нового), &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt; (тот же идентификатор, изменился контекст), &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt; (совпало в обоих). Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно UUID снимков.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;base_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Старый снимок&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;head_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|нет&lt;br /&gt;
|Новый снимок; если не указан, сравнение выполняется с предыдущим по времени&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; — только статистика; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; — статистика и идентификаторы маркеров; &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; — полные маркеры по категориям&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|bool&lt;br /&gt;
|нет&lt;br /&gt;
|Метаданные детекторов для маркеров (только при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров &#039;&#039;&#039;на каждую категорию&#039;&#039;&#039; при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;. По умолчанию — &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;, значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Параметр игнорируется при &amp;lt;code&amp;gt;level &amp;lt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;. Применяется к маркерам внутри категорий при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_diff(&lt;br /&gt;
   base_snapshot_id=&amp;quot;72b3df7b-c15a-4e3d-8f92-a041dc6e5b87&amp;quot;,&lt;br /&gt;
   head_snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   level=0&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&lt;br /&gt;
     &amp;quot;context1&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-20 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;context2&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-25 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;scope&amp;quot;: [&amp;quot;NEW&amp;quot;, &amp;quot;MISSING&amp;quot;, &amp;quot;MATCHED&amp;quot;, &amp;quot;MODIFIED&amp;quot;],&lt;br /&gt;
     &amp;quot;new&amp;quot;: 9,&lt;br /&gt;
     &amp;quot;missing&amp;quot;: 12,&lt;br /&gt;
     &amp;quot;modified&amp;quot;: 98,&lt;br /&gt;
     &amp;quot;matched&amp;quot;: 187&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt;)&#039;&#039;&#039; — каждая категория внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; оформляется и ограничивается независимо:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&amp;quot;new&amp;quot;: 50, &amp;quot;missing&amp;quot;: 5, &amp;quot;modified&amp;quot;: 0, &amp;quot;matched&amp;quot;: 187},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: {&lt;br /&gt;
     &amp;quot;new_markers&amp;quot;: {&lt;br /&gt;
       &amp;quot;total_count&amp;quot;: 50,&lt;br /&gt;
       &amp;quot;returned_count&amp;quot;: 20,&lt;br /&gt;
       &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
       &amp;quot;markers&amp;quot;: [&lt;br /&gt;
         {&amp;quot;id&amp;quot;: &amp;quot;a3f21c90-...&amp;quot;, &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;, &amp;quot;file&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;line&amp;quot;: 3327, &amp;quot;msg&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;, &amp;quot;review&amp;quot;: null}&lt;br /&gt;
       ]&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;missing_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 5, &amp;quot;returned_count&amp;quot;: 5, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: [...]},&lt;br /&gt;
     &amp;quot;modified_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 0, &amp;quot;returned_count&amp;quot;: 0, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: []},&lt;br /&gt;
     &amp;quot;matched_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 187, &amp;quot;returned_count&amp;quot;: 20, &amp;quot;truncated&amp;quot;: true, &amp;quot;markers&amp;quot;: [...]}&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; либо запросить нужные идентификаторы отдельным вызовом &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;. Маркеры внутри категорий проходят ту же компактную обработку, что и в &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;: значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает фиксированный набор полей коннектора, а не произвольные «сырые» поля API.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_advanced_file_preview ===&lt;br /&gt;
Фрагмент исходного кода из снимка вокруг указанной строки. Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно идентификатора снимка и пути к файлу.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Путь к файлу в том виде, в котором его возвращают &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Центральная строка, нумерация с 1 (по умолчанию &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;before&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк до центральной (по умолчанию &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;after&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк после центральной (по умолчанию &amp;lt;code&amp;gt;99999&amp;lt;/code&amp;gt; — до конца файла)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_advanced_file_preview(&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
   line=3327,&lt;br /&gt;
   before=10,&lt;br /&gt;
   after=10&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
   &amp;quot;content&amp;quot;: &amp;quot;      for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)\n\t;\n      return (l-&amp;gt;word-&amp;gt;word);\n&amp;quot;,&lt;br /&gt;
   &amp;quot;total_lines&amp;quot;: 6082&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_groups ===&lt;br /&gt;
Получить группу проектов по имени или UUID. Группы объединяют проекты в логические блоки — например, по команде или продукту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Имя группы или её UUID&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_groups(name_or_id=&amp;quot;Linux Tools&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;project_group_id&amp;quot;: &amp;quot;c4f8a2d1-3b7e-4f90-82ac-1d5e8f2b6c04&amp;quot;,&lt;br /&gt;
   &amp;quot;project_group_name&amp;quot;: &amp;quot;Linux Tools&amp;quot;,&lt;br /&gt;
   &amp;quot;projects&amp;quot;: [&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;bash&amp;quot;},&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;d3a17f52-...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;coreutils&amp;quot;}&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;projects[].id&amp;lt;/code&amp;gt; — это &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;, который далее передаётся в &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;. Группы и проекты — разные сущности; идентификатор группы и идентификатор проекта не взаимозаменяемы.&lt;br /&gt;
&lt;br /&gt;
== Примеры сценариев ==&lt;br /&gt;
Приведённые ниже запросы выполнены на демонстрационном стенде &amp;lt;code&amp;gt;svacer-demo.ispras.ru&amp;lt;/code&amp;gt; с использованием OpenWebUI и модели &amp;lt;code&amp;gt;qwen3-coder:30b&amp;lt;/code&amp;gt;. В любом другом MCP-клиенте с моделью достаточной мощности порядок вызовов будет аналогичным.&lt;br /&gt;
&lt;br /&gt;
=== Про объём ответа ===&lt;br /&gt;
&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; по умолчанию ограничивают объём ответа, чтобы не перегружать контекст модели:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; — 30 маркеров по умолчанию. Если у &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; включены &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;, лимит снижается до 8, поскольку такие маркеры значительно объёмнее.&lt;br /&gt;
* &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; — 20 маркеров на каждую категорию внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
В ответе присутствуют поля &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;truncated&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; есть два варианта действий: сузить фильтр (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;) либо явно увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; (значение &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; полностью снимает ограничение).&lt;br /&gt;
&lt;br /&gt;
Поле &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; определяет, какие ключи маркера возвращаются. По умолчанию применяется компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt; (а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены логическими флагами и пришли с сервера). Для полного маркера со всеми служебными ключами — &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;. Для произвольной выборки — список полей верхнего уровня, например &amp;lt;code&amp;gt;fields=[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;. Поле &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; — объект &amp;lt;code&amp;gt;{status, severity, action}&amp;lt;/code&amp;gt;; вложенные ключи в &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; не поддерживаются, поэтому объект &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; запрашивается целиком.&lt;br /&gt;
&lt;br /&gt;
=== Перечислить все проекты ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие проекты есть в Svacer?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В Svacer доступно 6 проектов: bash, openssl, paho.mqtt.c, coturn, zstd, darpa. У каждого — одна ветка &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Посмотреть снимки проекта ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие снимки есть у paho.mqtt.c? Самый свежий когда?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; — найти &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id=..., branch_id=...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;У paho.mqtt.c 3 снимка. Самый свежий — «Snapshot 2020-03-25 09:09:41 +0300» (297 маркеров). Предыдущий — 20 марта (306 маркеров).&amp;lt;/blockquote&amp;gt;Поле &amp;lt;code&amp;gt;commit_hash&amp;lt;/code&amp;gt; может принимать значение &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;, если проект не сохраняет хэш коммита в &amp;lt;code&amp;gt;custom_properties&amp;lt;/code&amp;gt;. Имена снимков произвольны: одни проекты записывают в имя дату, другие — коммит, третьи — свободный текст.&lt;br /&gt;
&lt;br /&gt;
=== Сводка по проекту ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Что в bash в последнем снимке? Сколько всего предупреждений, есть ли критические, какие топ-детекторы?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id, branch_id)&amp;lt;/code&amp;gt; — взять последний снимок&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats(project_id, branch_id, snapshot_id)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В последнем снимке bash содержится 771 предупреждение:&lt;br /&gt;
&lt;br /&gt;
* Критических: 1 (Confirmed)&lt;br /&gt;
* Major: 1 (Won&#039;t fix)&lt;br /&gt;
* Остальные: 769 (Unspecified — не ревьюились)&lt;br /&gt;
&lt;br /&gt;
Топ-детекторы по количеству:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;PROC_USE.VULNERABLE&amp;lt;/code&amp;gt; — 337&lt;br /&gt;
# &amp;lt;code&amp;gt;UNUSED_FUNC_RES.REWRITE.MINOR&amp;lt;/code&amp;gt; — 44&lt;br /&gt;
# &amp;lt;code&amp;gt;UNREACHABLE_CODE&amp;lt;/code&amp;gt; — 28&lt;br /&gt;
# &amp;lt;code&amp;gt;DEREF_AFTER_NULL.EX&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
# &amp;lt;code&amp;gt;NULL_AFTER_DEREF&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;by_severity&amp;lt;/code&amp;gt; — маркеры без ручного ревью, а не «низкий приоритет». Поле &amp;lt;code&amp;gt;by_checker&amp;lt;/code&amp;gt; не сортируется, на большом снимке оно может содержать более 100 ключей — чтобы получить именно топ-N, следует явно сформулировать запрос: «топ-5 детекторов».&lt;br /&gt;
&lt;br /&gt;
=== Тренд по нескольким снимкам ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Как у openssl менялось число предупреждений за последние пять снимков? Покажи таблицей.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — взять список&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats()&amp;lt;/code&amp;gt; × 5 — по каждому из последних пяти снимков&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Снимок&lt;br /&gt;
!Дата&lt;br /&gt;
!Всего&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:49&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:29&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:08&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:48&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:22&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
На демонстрационном стенде указанные пять снимков openssl импортированы с интервалом в 20 минут одного дня и полностью идентичны — поэтому динамика отсутствует. На реальном проекте с историей релизов значения будут изменяться.&lt;br /&gt;
&lt;br /&gt;
=== Найти срабатывания конкретного детектора ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Где в bash срабатывает PROC_USE.VULNERABLE? Покажи список — файл, строка, что именно ругается. Достаточно первых десяти.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/tmpfile.c:160&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;mktemp()&amp;lt;/code&amp;gt;, race condition. Рекомендуется &amp;lt;code&amp;gt;mkstemp()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/shell.c:151&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;, значение может быть подменено.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/shell.c:415&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/complete.c:1516&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/eaccess.c:115&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;strcat()&amp;lt;/code&amp;gt;, рекомендуется &amp;lt;code&amp;gt;strncat()&amp;lt;/code&amp;gt;. …&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Фильтр &amp;lt;code&amp;gt;warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&amp;lt;/code&amp;gt; охватывает все подклассы: &amp;lt;code&amp;gt;PROC_USE.VULNERABLE.TEMP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.GETENV&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.STRCAT&amp;lt;/code&amp;gt; и т. д. — всего 341 маркер. Несколько значений в одном параметре трактуются как логическое «ИЛИ»: &amp;lt;code&amp;gt;severity=[&amp;quot;Critical&amp;quot;,&amp;quot;Major&amp;quot;]&amp;lt;/code&amp;gt; возвращает маркеры обеих категорий.&lt;br /&gt;
&lt;br /&gt;
В ответе будет &amp;lt;code&amp;gt;total_count: 341, returned_count: 30, truncated: true&amp;lt;/code&amp;gt; — это ожидаемое поведение. Модель видит общий объём по &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; и при необходимости сужает запрос или вызывает &amp;lt;code&amp;gt;get_markers(..., limit=0)&amp;lt;/code&amp;gt;, чтобы получить полный список.&lt;br /&gt;
&lt;br /&gt;
=== Сравнить два снимка ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Возьми два последних снимка paho.mqtt.c — что между ними изменилось? Сколько новых предупреждений, сколько починили?&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — два последних&lt;br /&gt;
# &amp;lt;code&amp;gt;get_diff(base_snapshot_id=&amp;quot;72b3df7b-...&amp;quot;, head_snapshot_id=&amp;quot;b42cb563-...&amp;quot;, level=0)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Между двумя последними снимками paho.mqtt.c:&lt;br /&gt;
&lt;br /&gt;
* Новых: 12&lt;br /&gt;
* Удалённых: 13&lt;br /&gt;
* Изменённых: 99&lt;br /&gt;
* Совпадающих: 185&lt;br /&gt;
&lt;br /&gt;
Удалено несколько больше, чем добавлено — общая картина практически не изменилась.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Категория &amp;lt;code&amp;gt;modified&amp;lt;/code&amp;gt; — маркер, присутствующий в обоих снимках, у которого изменилось окружение (номер строки, контекст функции). Это не новая ошибка. На больших проектах рекомендуется начинать с &amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt; для получения статистики, при необходимости использовать &amp;lt;code&amp;gt;level=1&amp;lt;/code&amp;gt; (только идентификаторы маркеров) и затем точечно вызывать &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; с нужными фильтрами.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt; возвращает полные маркеры по категориям, причём каждая категория по умолчанию ограничена 20 маркерами. Категории располагаются внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;. Структура ответа в JSON: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;markers&amp;quot;: {&amp;quot;new_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: N, &amp;quot;returned_count&amp;quot;: ..., &amp;quot;truncated&amp;quot;: ..., &amp;quot;markers&amp;quot;: [...]}, ...}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; или выполнить отдельный вызов &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; по нужным идентификаторам.&lt;br /&gt;
&lt;br /&gt;
=== Разобрать конкретное предупреждение ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;В bash есть один подтверждённый критикал — что-то про разыменование указателя. Покажи код вокруг этого места и объясни в чём проблема.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — найти снимок bash&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_advanced_file_preview(file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;, line=3327, before=10, after=10)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&amp;lt;blockquote&amp;gt;Маркер &amp;lt;code&amp;gt;DEREF_AFTER_NULL.LOOP&amp;lt;/code&amp;gt; в функции &amp;lt;code&amp;gt;select_query()&amp;lt;/code&amp;gt;, строка 3327:&lt;br /&gt;
 for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)&lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
return (l-&amp;gt;word-&amp;gt;word);  /* l может быть NULL после выхода из цикла */&lt;br /&gt;
&lt;br /&gt;
Если список заканчивается раньше, чем &amp;lt;code&amp;gt;reply&amp;lt;/code&amp;gt; обнуляется, &amp;lt;code&amp;gt;l&amp;lt;/code&amp;gt; станет &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; на последнем &amp;lt;code&amp;gt;l-&amp;gt;next&amp;lt;/code&amp;gt;, и следующий &amp;lt;code&amp;gt;l-&amp;gt;word-&amp;gt;word&amp;lt;/code&amp;gt; — разыменование нулевого указателя.&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt; должен точно совпадать со значением, возвращённым маркером, включая ведущий префикс &amp;lt;code&amp;gt;/.build/...&amp;lt;/code&amp;gt;. Это путь внутри сборочной директории Svacer, а не путь в исходном репозитории; соответствие в репозитории определяется по имени файла.&lt;br /&gt;
&lt;br /&gt;
Для одиночной разметки удобно сразу запрашивать полный маркер с трассами: &amp;lt;code&amp;gt;get_markers(..., severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;], traces=True, checker_info=True)&amp;lt;/code&amp;gt;. Флаги &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt; указывают серверу включить соответствующие поля в ответ; в выдаче они сохраняются и при значении &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; по умолчанию. Значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; требуется лишь в том случае, когда дополнительно нужны &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; — служебные ключи, исключённые из компактного набора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3504</id>
		<title>Help:13-alpha MCP</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3504"/>
		<updated>2026-05-21T10:01:23Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Разобрать конкретное предупреждение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Архитектура ==&lt;br /&gt;
[https://modelcontextprotocol.io/docs/getting-started/intro MCP] — открытый стандарт, через который LLM-клиенты (Claude Desktop, Cursor, VS Code, OpenWebUI и др.) вызывают внешние инструменты. &lt;br /&gt;
Svacer MCP соединяет одно с другим: 8 инструментов поверх публичного REST API Svacer, которые LLM выбирает и вызывает в ответ на обычный текстовый запрос. Вместо ручной последовательности «открыть UI, найти проект, выбрать снимок, применить фильтр» достаточно сформулировать вопрос в чате, например, «сколько критических предупреждений в последнем снимке bash?», и получить ответ. Необходимые вызовы инструментов модель выполняет самостоятельно.&lt;br /&gt;
&lt;br /&gt;
[[File:Архитектура MCP.png|thumb|none|x800px|alt=architectureMCP|Архитектура MCP-сервер]]&lt;br /&gt;
&lt;br /&gt;
Поток запроса: LLM-клиент отправляет MCP-вызов через STDIO или Streamable HTTP → &amp;lt;code&amp;gt;server.py&amp;lt;/code&amp;gt; передаёт его в выбранный инструмент из &amp;lt;code&amp;gt;tools/&amp;lt;/code&amp;gt; → инструмент проверяет параметры и обращается к &amp;lt;code&amp;gt;api_client.py&amp;lt;/code&amp;gt; → клиент получает JWT от &amp;lt;code&amp;gt;auth.py&amp;lt;/code&amp;gt; (модуль автоматически обновляет токен по истечении срока действия или при ответе 401) → запрос отправляется в Svacer REST API.&lt;br /&gt;
&lt;br /&gt;
== Установка ==&lt;br /&gt;
Установка Svacer MCP, подключение клиентов и конфигурация.&lt;br /&gt;
&lt;br /&gt;
=== Требования ===&lt;br /&gt;
&lt;br /&gt;
* Python 3.10+&lt;br /&gt;
* Доступ к Svacer-серверу: URL + логин/пароль&lt;br /&gt;
&lt;br /&gt;
=== Режим STDIO ===&lt;br /&gt;
Подходит для настольных клиентов: Claude Desktop, Claude Code, Cursor, VS Code.&lt;br /&gt;
 &amp;lt;code&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://gitlab.ispras.ru/svacerai/mcp.git&amp;lt;/nowiki&amp;gt; &amp;amp;&amp;amp; cd mcp&lt;br /&gt;
 &lt;br /&gt;
 python3 -m venv .venv&lt;br /&gt;
 .venv/bin/pip install -e .&lt;br /&gt;
 &lt;br /&gt;
 cp .env.example .env&lt;br /&gt;
 # Отредактировать .env — указать URL и учётные данные Svacer&lt;br /&gt;
 &lt;br /&gt;
 # Проверить запуск (сервер ожидает данные на stdin; для выхода — Ctrl+C)&lt;br /&gt;
 .venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
После &amp;lt;code&amp;gt;pip install -e .&amp;lt;/code&amp;gt; в окружении становится доступна команда &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; — её указывают в конфигурации клиентов ниже.&lt;br /&gt;
&lt;br /&gt;
=== Режим HTTP (Docker) ===&lt;br /&gt;
Подходит для веб-клиентов (OpenWebUI) и удалённого доступа.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Требования:&#039;&#039;&#039; Docker, Docker Compose.&lt;br /&gt;
 &amp;lt;code&amp;gt;cp .env.example .env&lt;br /&gt;
 &lt;br /&gt;
 # В .env обязательно задать SVACER_MCP_TOKEN — без него сервер не запускается&lt;br /&gt;
 echo &amp;quot;SVACER_MCP_TOKEN=$(openssl rand -hex 32)&amp;quot; &amp;gt;&amp;gt; .env&lt;br /&gt;
 &lt;br /&gt;
 docker compose up -d&lt;br /&gt;
 &lt;br /&gt;
 # MCP endpoint: &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 # Клиенты передают заголовок: Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Внешний порт хоста задаётся переменной &amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt; (по умолчанию &amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;), внутри контейнера сервер всегда слушает порт &amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Подключение клиентов ===&lt;br /&gt;
&lt;br /&gt;
==== Claude Desktop ====&lt;br /&gt;
Файл конфигурации: &amp;lt;code&amp;gt;~/.config/Claude/claude_desktop_config.json&amp;lt;/code&amp;gt; (Linux) или &amp;lt;code&amp;gt;%APPDATA%\Claude\claude_desktop_config.json&amp;lt;/code&amp;gt; (Windows).&lt;br /&gt;
&lt;br /&gt;
Укажите &#039;&#039;&#039;абсолютный путь&#039;&#039;&#039; к &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; из вашего venv (&amp;lt;code&amp;gt;which svacer-mcp&amp;lt;/code&amp;gt; в активированном venv или &amp;lt;code&amp;gt;/path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Claude Code ====&lt;br /&gt;
 &amp;lt;code&amp;gt;claude mcp add svacer \&lt;br /&gt;
   -e SVACER_URL=&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt; \&lt;br /&gt;
   -e SVACER_LOGIN=your-login \&lt;br /&gt;
   -e SVACER_PASSWORD=your-password \&lt;br /&gt;
   -- /path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VS Code ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.vscode/mcp.json&amp;lt;/code&amp;gt; в корне рабочей директории:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;servers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;type&amp;quot;: &amp;quot;stdio&amp;quot;,&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cursor ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.cursor/mcp.json&amp;lt;/code&amp;gt; в корне проекта или глобально:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenWebUI ====&lt;br /&gt;
&lt;br /&gt;
# Развернуть через Docker (см. «Режим HTTP» выше).&lt;br /&gt;
# Открыть &#039;&#039;&#039;Settings → Tools&#039;&#039;&#039; (или &#039;&#039;&#039;Admin Panel → Settings → Tools&#039;&#039;&#039;).&lt;br /&gt;
# Добавить сервер:&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI работает на хосте, снаружи Docker.&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://svacer-mcp:8000/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI развёрнут в той же compose-сети, что и &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; (имя берётся из &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; → service name, порт 8000 — внутренний порт контейнера).&lt;br /&gt;
# Тип подключения: &#039;&#039;&#039;MCP (Streamable HTTP)&#039;&#039;&#039;.&lt;br /&gt;
# В настройках инструмента указать заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt; (значение — то же, что в &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; сервера).&lt;br /&gt;
# Сохранить — инструменты появятся в чате.&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Переменная&lt;br /&gt;
!По умолчанию&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|URL Svacer-сервера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_LOGIN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Логин&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_PASSWORD&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Пароль&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TIMEOUT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тайм-аут HTTP-запросов к Svacer, секунды&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TRANSPORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt;&lt;br /&gt;
|Режим транспорта: &amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;&lt;br /&gt;
|TCP-порт сервера в режиме HTTP (внутри контейнера)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Bearer-токен для клиентов &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt;. Обязателен при &amp;lt;code&amp;gt;SVACER_TRANSPORT=http&amp;lt;/code&amp;gt;, в режиме STDIO игнорируется. Генерация: &amp;lt;code&amp;gt;openssl rand -hex 32&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_RESOURCE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;:&amp;lt;HTTP_PORT&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Публичный URL MCP-сервера для заголовка &amp;lt;code&amp;gt;WWW-Authenticate&amp;lt;/code&amp;gt; (&amp;lt;nowiki&amp;gt;RFC 9728&amp;lt;/nowiki&amp;gt;). Задаётся при работе за обратным прокси&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Список инструментов через запятую. Если не задано, регистрируются все 8&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;&lt;br /&gt;
|Внешний порт хоста при запуске через &amp;lt;code&amp;gt;docker compose&amp;lt;/code&amp;gt; (отображается на внутренний &amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
Переменные читаются из &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; или из окружения. Для STDIO-клиентов их можно указать в секции &amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt; конфигурации клиента.&lt;br /&gt;
&lt;br /&gt;
==== Ограничение набора инструментов ====&lt;br /&gt;
Чтобы запустить сервер с подмножеством инструментов (например, для уменьшения объёма контекста у модели или разграничения доступа), задайте &amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &amp;lt;code&amp;gt;SVACER_TOOLS=get_projects,get_snapshots,get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
Допустимые имена: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;. Неизвестное имя в списке приводит к ошибке при запуске. Если переменная пустая или не задана, регистрируются все 8 инструментов.&lt;br /&gt;
&lt;br /&gt;
==== Несколько экземпляров сервера ====&lt;br /&gt;
Параллельный запуск нескольких MCP-серверов поддерживается без ограничений.&lt;br /&gt;
&lt;br /&gt;
* В режиме STDIO каждая запись в конфигурации клиента описывает отдельный процесс — несколько подключений к разным экземплярам Svacer задаются простым перечислением.&lt;br /&gt;
* В режиме HTTP запускаются независимые контейнеры на разных хост-портах: например, &amp;lt;code&amp;gt;MCP_PORT=8002&amp;lt;/code&amp;gt; для одного экземпляра и &amp;lt;code&amp;gt;MCP_PORT=8003&amp;lt;/code&amp;gt; для другого. Для каждого контейнера задаётся собственный &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Безопасность ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;STDIO&#039;&#039;&#039;: сервер не открывает сетевых портов и обменивается данными через стандартные потоки ввода/вывода процесса.&lt;br /&gt;
* &#039;&#039;&#039;Streamable HTTP&#039;&#039;&#039;: эндпоинт &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt; требует заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;. Запросы без токена или с неверным значением получают ответ &amp;lt;code&amp;gt;401&amp;lt;/code&amp;gt; и заголовок &amp;lt;code&amp;gt;WWW-Authenticate: Bearer ...&amp;lt;/code&amp;gt;. Токен является разделяемым секретом и не заменяет TLS, а дополняет его: при работе за обратным прокси необходимо использовать HTTPS, а сам токен передавать только по защищённому каналу.&lt;br /&gt;
* Без &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt; HTTP-сервер не запускается.&lt;br /&gt;
* Учётные данные &amp;lt;code&amp;gt;admin/admin&amp;lt;/code&amp;gt; предназначены только для тестового стенда. В рабочем окружении необходимо задать собственные логин и пароль через переменные окружения.&lt;br /&gt;
* Файл &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; не должен добавляться в систему контроля версий.&lt;br /&gt;
&lt;br /&gt;
==== Передача токена клиентом ====&lt;br /&gt;
Большинство HTTP-клиентов MCP (OpenWebUI и др.) позволяют задать произвольный заголовок &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt; в настройках инструмента — указывается значение &amp;lt;code&amp;gt;Bearer &amp;lt;токен&amp;gt;&amp;lt;/code&amp;gt;. Для ручной проверки:&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -H &amp;quot;Authorization: Bearer $SVACER_MCP_TOKEN&amp;quot; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Content-Type: application/json&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Accept: application/json, text/event-stream&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -d &#039;{&amp;quot;jsonrpc&amp;quot;:&amp;quot;2.0&amp;quot;,&amp;quot;id&amp;quot;:1,&amp;quot;method&amp;quot;:&amp;quot;initialize&amp;quot;,&amp;quot;params&amp;quot;:{&amp;quot;protocolVersion&amp;quot;:&amp;quot;2025-11-25&amp;quot;,&amp;quot;capabilities&amp;quot;:{},&amp;quot;clientInfo&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;curl&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0&amp;quot;}}}&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
Справочник по 8 инструментам Svacer MCP. Типичный порядок вызовов: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt; → любой из аналитических инструментов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Инструмент&lt;br /&gt;
!Назначение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|Список проектов с ветками — точка входа&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;&lt;br /&gt;
|Снимки конкретной ветки, от нового к старому&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;&lt;br /&gt;
|Агрегированные метрики снимка: severity / review / checker&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|Компактный список маркеров с серверной фильтрацией&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|Полные предупреждения с трассами и историей ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;&lt;br /&gt;
|Сравнение двух снимков: new / missing / modified / matched&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;&lt;br /&gt;
|Фрагмент исходного кода вокруг строки&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;&lt;br /&gt;
|Группа проектов по имени или UUID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== get_projects ===&lt;br /&gt;
Список всех проектов с ветками. Точка входа: с этого вызова начинается практически любой сценарий — он возвращает &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;, необходимые для последующих запросов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметров нет.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;project_id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
     &amp;quot;project_name&amp;quot;: &amp;quot;bash&amp;quot;,&lt;br /&gt;
     &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.122456Z&amp;quot;,&lt;br /&gt;
     &amp;quot;created_by&amp;quot;: &amp;quot;admin&amp;quot;,&lt;br /&gt;
     &amp;quot;branches&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
         &amp;quot;branch_id&amp;quot;: &amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
         &amp;quot;branch_name&amp;quot;: &amp;quot;master&amp;quot;,&lt;br /&gt;
         &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.394812Z&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_snapshots ===&lt;br /&gt;
Список снимков для конкретной ветки проекта, от нового к старому.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока или regex для фильтра по имени снимка&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_snapshots(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;snapshot_id&amp;quot;: &amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
     &amp;quot;name&amp;quot;: &amp;quot;Snapshot 2020-03-25 09:09:41 +0300&amp;quot;,&lt;br /&gt;
     &amp;quot;import_time&amp;quot;: &amp;quot;2020-03-25T09:09:41.837296Z&amp;quot;,&lt;br /&gt;
     &amp;quot;commit_hash&amp;quot;: null,&lt;br /&gt;
     &amp;quot;markers_count&amp;quot;: 297,&lt;br /&gt;
     &amp;quot;link&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru/&amp;lt;/nowiki&amp;gt;...&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_stats ===&lt;br /&gt;
Агрегированные метрики по снимку: общее количество предупреждений, распределение по критичности, по статусу ревью, по детекторам. Наиболее быстрый способ получить общую картину по проекту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_stats(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_warnings&amp;quot;: 771,&lt;br /&gt;
   &amp;quot;by_severity&amp;quot;: {&lt;br /&gt;
     &amp;quot;Critical&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Major&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Unspecified&amp;quot;: 769&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_review_status&amp;quot;: {&lt;br /&gt;
     &amp;quot;Confirmed&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;False Positive&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Undecided&amp;quot;: 767,&lt;br /&gt;
     &amp;quot;Unclear&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Won&#039;t fix&amp;quot;: 1&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_checker&amp;quot;: {&lt;br /&gt;
     &amp;quot;PROC_USE.VULNERABLE&amp;quot;: 337,&lt;br /&gt;
     &amp;quot;UNUSED_FUNC_RES.REWRITE.MINOR&amp;quot;: 44,&lt;br /&gt;
     &amp;quot;UNREACHABLE_CODE&amp;quot;: 28,&lt;br /&gt;
     &amp;quot;DEREF_AFTER_NULL.EX&amp;quot;: 27,&lt;br /&gt;
     &amp;quot;NULL_AFTER_DEREF&amp;quot;: 27&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_markers ===&lt;br /&gt;
Компактный список маркеров с серверной фильтрацией. Основной инструмент для перечисления и обзора: его следует предпочитать &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, когда не требуются развёрнутые поля — трассы и история ревью.&lt;br /&gt;
&lt;br /&gt;
По умолчанию ответ ограничен 30 маркерами и содержит компактный набор полей. Подробнее об ограничении объёма см. раздел Про объём ответа в сценариях.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора (&amp;lt;code&amp;gt;DEREF_AFTER_NULL&amp;lt;/code&amp;gt;, …)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы маркеров&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю изменений ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии к маркеру&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра из веб-интерфейса Svacer&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров в ответе (по умолчанию &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;). Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Список разрешённых полей маркера верхнего уровня. По умолчанию — компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает все поля коннектора (&amp;lt;code&amp;gt;id, warnClass, file, line, msg, tool, function, mtid, review&amp;lt;/code&amp;gt;, а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены). Допустим и произвольный список — например, &amp;lt;code&amp;gt;[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_markers(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 341,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 30,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;warnClass&amp;quot;: [&amp;quot;PROC_USE.VULNERABLE&amp;quot;]},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;e05bb35b-a95e-4eb2-85ae-3101b788f07d&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;PROC_USE.VULNERABLE.TEMP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/lib/sh/tmpfile.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 160,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Use of vulnerable function &#039;mktemp&#039; at tmpfile.c:160. ...&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;sh_mktmpname&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: null&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; отражает количество маркеров, удовлетворяющих фильтру до применения ограничения; &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt; — количество маркеров, фактически содержащихся в &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; следует либо сузить фильтры (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;), либо передать &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; для получения полного списка. Поля &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; возвращаются только при &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_warnings ===&lt;br /&gt;
Полные предупреждения с детальной разметкой. Ответ значительно объёмнее, чем у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, поэтому инструмент следует использовать только тогда, когда нужны поля, отсутствующие в компактной форме: &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Лимит по умолчанию — 30; при включённых &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt; он автоматически снижается до 8, поскольку такие предупреждения существенно объёмнее.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы. Активирует режим расширенных полей (лимит по умолчанию — 8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю ревью. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество предупреждений в ответе. По умолчанию — &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;, в режиме расширенных полей — &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Явно заданное &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; отменяет автоматическое снижение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_warnings(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   severity=[&amp;quot;Critical&amp;quot;],&lt;br /&gt;
   review_history=True,&lt;br /&gt;
   traces=True&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: false,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;severity&amp;quot;: [&amp;quot;Critical&amp;quot;], &amp;quot;traces&amp;quot;: true, &amp;quot;review_history&amp;quot;: true},&lt;br /&gt;
   &amp;quot;warnings&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;a3f21c90-1d4e-4b82-9f63-7c8e5d2a1b09&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Possible null pointer dereference of &#039;l&#039; after loop exit.&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: {&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;severity&amp;quot;: &amp;quot;Critical&amp;quot;},&lt;br /&gt;
       &amp;quot;review_history&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;changed_by&amp;quot;: &amp;quot;admin&amp;quot;, &amp;quot;changed_at&amp;quot;: &amp;quot;2021-12-13T14:00:00Z&amp;quot;}],&lt;br /&gt;
       &amp;quot;traces&amp;quot;: [{&amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;, &amp;quot;line&amp;quot;: 3320, &amp;quot;msg&amp;quot;: &amp;quot;Loop starts here; &#039;l&#039; may exhaust the list.&amp;quot;}]&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_diff ===&lt;br /&gt;
Сравнение двух снимков. Категории располагаются под ключом &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt; (появилось в новом снимке), &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt; (исчезло из нового), &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt; (тот же идентификатор, изменился контекст), &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt; (совпало в обоих). Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно UUID снимков.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;base_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Старый снимок&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;head_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|нет&lt;br /&gt;
|Новый снимок; если не указан, сравнение выполняется с предыдущим по времени&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; — только статистика; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; — статистика и идентификаторы маркеров; &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; — полные маркеры по категориям&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|bool&lt;br /&gt;
|нет&lt;br /&gt;
|Метаданные детекторов для маркеров (только при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров &#039;&#039;&#039;на каждую категорию&#039;&#039;&#039; при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;. По умолчанию — &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;, значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Параметр игнорируется при &amp;lt;code&amp;gt;level &amp;lt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;. Применяется к маркерам внутри категорий при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_diff(&lt;br /&gt;
   base_snapshot_id=&amp;quot;72b3df7b-c15a-4e3d-8f92-a041dc6e5b87&amp;quot;,&lt;br /&gt;
   head_snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   level=0&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&lt;br /&gt;
     &amp;quot;context1&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-20 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;context2&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-25 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;scope&amp;quot;: [&amp;quot;NEW&amp;quot;, &amp;quot;MISSING&amp;quot;, &amp;quot;MATCHED&amp;quot;, &amp;quot;MODIFIED&amp;quot;],&lt;br /&gt;
     &amp;quot;new&amp;quot;: 9,&lt;br /&gt;
     &amp;quot;missing&amp;quot;: 12,&lt;br /&gt;
     &amp;quot;modified&amp;quot;: 98,&lt;br /&gt;
     &amp;quot;matched&amp;quot;: 187&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt;)&#039;&#039;&#039; — каждая категория внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; оформляется и ограничивается независимо:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&amp;quot;new&amp;quot;: 50, &amp;quot;missing&amp;quot;: 5, &amp;quot;modified&amp;quot;: 0, &amp;quot;matched&amp;quot;: 187},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: {&lt;br /&gt;
     &amp;quot;new_markers&amp;quot;: {&lt;br /&gt;
       &amp;quot;total_count&amp;quot;: 50,&lt;br /&gt;
       &amp;quot;returned_count&amp;quot;: 20,&lt;br /&gt;
       &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
       &amp;quot;markers&amp;quot;: [&lt;br /&gt;
         {&amp;quot;id&amp;quot;: &amp;quot;a3f21c90-...&amp;quot;, &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;, &amp;quot;file&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;line&amp;quot;: 3327, &amp;quot;msg&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;, &amp;quot;review&amp;quot;: null}&lt;br /&gt;
       ]&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;missing_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 5, &amp;quot;returned_count&amp;quot;: 5, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: [...]},&lt;br /&gt;
     &amp;quot;modified_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 0, &amp;quot;returned_count&amp;quot;: 0, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: []},&lt;br /&gt;
     &amp;quot;matched_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 187, &amp;quot;returned_count&amp;quot;: 20, &amp;quot;truncated&amp;quot;: true, &amp;quot;markers&amp;quot;: [...]}&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; либо запросить нужные идентификаторы отдельным вызовом &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;. Маркеры внутри категорий проходят ту же компактную обработку, что и в &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;: значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает фиксированный набор полей коннектора, а не произвольные «сырые» поля API.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_advanced_file_preview ===&lt;br /&gt;
Фрагмент исходного кода из снимка вокруг указанной строки. Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно идентификатора снимка и пути к файлу.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Путь к файлу в том виде, в котором его возвращают &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Центральная строка, нумерация с 1 (по умолчанию &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;before&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк до центральной (по умолчанию &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;after&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк после центральной (по умолчанию &amp;lt;code&amp;gt;99999&amp;lt;/code&amp;gt; — до конца файла)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_advanced_file_preview(&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
   line=3327,&lt;br /&gt;
   before=10,&lt;br /&gt;
   after=10&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
   &amp;quot;content&amp;quot;: &amp;quot;      for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)\n\t;\n      return (l-&amp;gt;word-&amp;gt;word);\n&amp;quot;,&lt;br /&gt;
   &amp;quot;total_lines&amp;quot;: 6082&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_groups ===&lt;br /&gt;
Получить группу проектов по имени или UUID. Группы объединяют проекты в логические блоки — например, по команде или продукту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Имя группы или её UUID&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_groups(name_or_id=&amp;quot;Linux Tools&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;project_group_id&amp;quot;: &amp;quot;c4f8a2d1-3b7e-4f90-82ac-1d5e8f2b6c04&amp;quot;,&lt;br /&gt;
   &amp;quot;project_group_name&amp;quot;: &amp;quot;Linux Tools&amp;quot;,&lt;br /&gt;
   &amp;quot;projects&amp;quot;: [&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;bash&amp;quot;},&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;d3a17f52-...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;coreutils&amp;quot;}&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;projects[].id&amp;lt;/code&amp;gt; — это &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;, который далее передаётся в &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;. Группы и проекты — разные сущности; идентификатор группы и идентификатор проекта не взаимозаменяемы.&lt;br /&gt;
&lt;br /&gt;
== Примеры сценариев ==&lt;br /&gt;
Приведённые ниже запросы выполнены на демонстрационном стенде &amp;lt;code&amp;gt;svacer-demo.ispras.ru&amp;lt;/code&amp;gt; с использованием OpenWebUI и модели &amp;lt;code&amp;gt;qwen3-coder:30b&amp;lt;/code&amp;gt;. В любом другом MCP-клиенте с моделью достаточной мощности порядок вызовов будет аналогичным.&lt;br /&gt;
&lt;br /&gt;
=== Про объём ответа ===&lt;br /&gt;
&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; по умолчанию ограничивают объём ответа, чтобы не перегружать контекст модели:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; — 30 маркеров по умолчанию. Если у &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; включены &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;, лимит снижается до 8, поскольку такие маркеры значительно объёмнее.&lt;br /&gt;
* &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; — 20 маркеров на каждую категорию внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
В ответе присутствуют поля &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;truncated&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; есть два варианта действий: сузить фильтр (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;) либо явно увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; (значение &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; полностью снимает ограничение).&lt;br /&gt;
&lt;br /&gt;
Поле &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; определяет, какие ключи маркера возвращаются. По умолчанию применяется компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt; (а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены логическими флагами и пришли с сервера). Для полного маркера со всеми служебными ключами — &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;. Для произвольной выборки — список полей верхнего уровня, например &amp;lt;code&amp;gt;fields=[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;. Поле &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; — объект &amp;lt;code&amp;gt;{status, severity, action}&amp;lt;/code&amp;gt;; вложенные ключи в &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; не поддерживаются, поэтому объект &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; запрашивается целиком.&lt;br /&gt;
&lt;br /&gt;
=== Перечислить все проекты ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие проекты есть в Svacer?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В Svacer доступно 6 проектов: bash, openssl, paho.mqtt.c, coturn, zstd, darpa. У каждого — одна ветка &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Посмотреть снимки проекта ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие снимки есть у paho.mqtt.c? Самый свежий когда?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; — найти &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id=..., branch_id=...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;У paho.mqtt.c 3 снимка. Самый свежий — «Snapshot 2020-03-25 09:09:41 +0300» (297 маркеров). Предыдущий — 20 марта (306 маркеров).&amp;lt;/blockquote&amp;gt;Поле &amp;lt;code&amp;gt;commit_hash&amp;lt;/code&amp;gt; может принимать значение &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;, если проект не сохраняет хэш коммита в &amp;lt;code&amp;gt;custom_properties&amp;lt;/code&amp;gt;. Имена снимков произвольны: одни проекты записывают в имя дату, другие — коммит, третьи — свободный текст.&lt;br /&gt;
&lt;br /&gt;
=== Сводка по проекту ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Что в bash в последнем снимке? Сколько всего предупреждений, есть ли критические, какие топ-детекторы?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id, branch_id)&amp;lt;/code&amp;gt; — взять последний снимок&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats(project_id, branch_id, snapshot_id)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В последнем снимке bash содержится 771 предупреждение:&lt;br /&gt;
&lt;br /&gt;
* Критических: 1 (Confirmed)&lt;br /&gt;
* Major: 1 (Won&#039;t fix)&lt;br /&gt;
* Остальные: 769 (Unspecified — не ревьюились)&lt;br /&gt;
&lt;br /&gt;
Топ-детекторы по количеству:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;PROC_USE.VULNERABLE&amp;lt;/code&amp;gt; — 337&lt;br /&gt;
# &amp;lt;code&amp;gt;UNUSED_FUNC_RES.REWRITE.MINOR&amp;lt;/code&amp;gt; — 44&lt;br /&gt;
# &amp;lt;code&amp;gt;UNREACHABLE_CODE&amp;lt;/code&amp;gt; — 28&lt;br /&gt;
# &amp;lt;code&amp;gt;DEREF_AFTER_NULL.EX&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
# &amp;lt;code&amp;gt;NULL_AFTER_DEREF&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;by_severity&amp;lt;/code&amp;gt; — маркеры без ручного ревью, а не «низкий приоритет». Поле &amp;lt;code&amp;gt;by_checker&amp;lt;/code&amp;gt; не сортируется, на большом снимке оно может содержать более 100 ключей — чтобы получить именно топ-N, следует явно сформулировать запрос: «топ-5 детекторов».&lt;br /&gt;
&lt;br /&gt;
=== Тренд по нескольким снимкам ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Как у openssl менялось число предупреждений за последние пять снимков? Покажи таблицей.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — взять список&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats()&amp;lt;/code&amp;gt; × 5 — по каждому из последних пяти снимков&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Снимок&lt;br /&gt;
!Дата&lt;br /&gt;
!Всего&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:49&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:29&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:08&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:48&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:22&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
На демонстрационном стенде указанные пять снимков openssl импортированы с интервалом в 20 минут одного дня и полностью идентичны — поэтому динамика отсутствует. На реальном проекте с историей релизов значения будут изменяться.&lt;br /&gt;
&lt;br /&gt;
=== Найти срабатывания конкретного детектора ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Где в bash срабатывает PROC_USE.VULNERABLE? Покажи список — файл, строка, что именно ругается. Достаточно первых десяти.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/tmpfile.c:160&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;mktemp()&amp;lt;/code&amp;gt;, race condition. Рекомендуется &amp;lt;code&amp;gt;mkstemp()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/shell.c:151&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;, значение может быть подменено.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/shell.c:415&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/complete.c:1516&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/eaccess.c:115&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;strcat()&amp;lt;/code&amp;gt;, рекомендуется &amp;lt;code&amp;gt;strncat()&amp;lt;/code&amp;gt;. …&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Фильтр &amp;lt;code&amp;gt;warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&amp;lt;/code&amp;gt; охватывает все подклассы: &amp;lt;code&amp;gt;PROC_USE.VULNERABLE.TEMP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.GETENV&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.STRCAT&amp;lt;/code&amp;gt; и т. д. — всего 341 маркер. Несколько значений в одном параметре трактуются как логическое «ИЛИ»: &amp;lt;code&amp;gt;severity=[&amp;quot;Critical&amp;quot;,&amp;quot;Major&amp;quot;]&amp;lt;/code&amp;gt; возвращает маркеры обеих категорий.&lt;br /&gt;
&lt;br /&gt;
В ответе будет &amp;lt;code&amp;gt;total_count: 341, returned_count: 30, truncated: true&amp;lt;/code&amp;gt; — это ожидаемое поведение. Модель видит общий объём по &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; и при необходимости сужает запрос или вызывает &amp;lt;code&amp;gt;get_markers(..., limit=0)&amp;lt;/code&amp;gt;, чтобы получить полный список.&lt;br /&gt;
&lt;br /&gt;
=== Сравнить два снимка ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Возьми два последних снимка paho.mqtt.c — что между ними изменилось? Сколько новых предупреждений, сколько починили?&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — два последних&lt;br /&gt;
# &amp;lt;code&amp;gt;get_diff(base_snapshot_id=&amp;quot;72b3df7b-...&amp;quot;, head_snapshot_id=&amp;quot;b42cb563-...&amp;quot;, level=0)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Между двумя последними снимками paho.mqtt.c:&lt;br /&gt;
&lt;br /&gt;
* Новых: 12&lt;br /&gt;
* Удалённых: 13&lt;br /&gt;
* Изменённых: 99&lt;br /&gt;
* Совпадающих: 185&lt;br /&gt;
&lt;br /&gt;
Удалено несколько больше, чем добавлено — общая картина практически не изменилась.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Категория &amp;lt;code&amp;gt;modified&amp;lt;/code&amp;gt; — маркер, присутствующий в обоих снимках, у которого изменилось окружение (номер строки, контекст функции). Это не новая ошибка. На больших проектах рекомендуется начинать с &amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt; для получения статистики, при необходимости использовать &amp;lt;code&amp;gt;level=1&amp;lt;/code&amp;gt; (только идентификаторы маркеров) и затем точечно вызывать &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; с нужными фильтрами.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt; возвращает полные маркеры по категориям, причём каждая категория по умолчанию ограничена 20 маркерами. Категории располагаются внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;. Структура ответа в JSON: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;markers&amp;quot;: {&amp;quot;new_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: N, &amp;quot;returned_count&amp;quot;: ..., &amp;quot;truncated&amp;quot;: ..., &amp;quot;markers&amp;quot;: [...]}, ...}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; или выполнить отдельный вызов &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; по нужным идентификаторам.&lt;br /&gt;
&lt;br /&gt;
=== Разобрать конкретное предупреждение ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;В bash есть один подтверждённый критикал — что-то про разыменование указателя. Покажи код вокруг этого места и объясни в чём проблема.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — найти снимок bash&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_advanced_file_preview(file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;, line=3327, before=10, after=10)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&amp;lt;blockquote&amp;gt;Маркер &amp;lt;code&amp;gt;DEREF_AFTER_NULL.LOOP&amp;lt;/code&amp;gt; в функции &amp;lt;code&amp;gt;select_query()&amp;lt;/code&amp;gt;, строка 3327:&lt;br /&gt;
 for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)&lt;br /&gt;
     ;&lt;br /&gt;
 return (l-&amp;gt;word-&amp;gt;word);  /* l может быть NULL после выхода из цикла */&lt;br /&gt;
&lt;br /&gt;
Если список заканчивается раньше, чем &amp;lt;code&amp;gt;reply&amp;lt;/code&amp;gt; обнуляется, &amp;lt;code&amp;gt;l&amp;lt;/code&amp;gt; станет &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; на последнем &amp;lt;code&amp;gt;l-&amp;gt;next&amp;lt;/code&amp;gt;, и следующий &amp;lt;code&amp;gt;l-&amp;gt;word-&amp;gt;word&amp;lt;/code&amp;gt; — разыменование нулевого указателя.&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt; должен точно совпадать со значением, возвращённым маркером, включая ведущий префикс &amp;lt;code&amp;gt;/.build/...&amp;lt;/code&amp;gt;. Это путь внутри сборочной директории Svacer, а не путь в исходном репозитории; соответствие в репозитории определяется по имени файла.&lt;br /&gt;
&lt;br /&gt;
Для одиночной разметки удобно сразу запрашивать полный маркер с трассами: &amp;lt;code&amp;gt;get_markers(..., severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;], traces=True, checker_info=True)&amp;lt;/code&amp;gt;. Флаги &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt; указывают серверу включить соответствующие поля в ответ; в выдаче они сохраняются и при значении &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; по умолчанию. Значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; требуется лишь в том случае, когда дополнительно нужны &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; — служебные ключи, исключённые из компактного набора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3503</id>
		<title>Help:13-alpha MCP</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3503"/>
		<updated>2026-05-21T09:57:34Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Тренд по нескольким снимкам */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Архитектура ==&lt;br /&gt;
[https://modelcontextprotocol.io/docs/getting-started/intro MCP] — открытый стандарт, через который LLM-клиенты (Claude Desktop, Cursor, VS Code, OpenWebUI и др.) вызывают внешние инструменты. &lt;br /&gt;
Svacer MCP соединяет одно с другим: 8 инструментов поверх публичного REST API Svacer, которые LLM выбирает и вызывает в ответ на обычный текстовый запрос. Вместо ручной последовательности «открыть UI, найти проект, выбрать снимок, применить фильтр» достаточно сформулировать вопрос в чате, например, «сколько критических предупреждений в последнем снимке bash?», и получить ответ. Необходимые вызовы инструментов модель выполняет самостоятельно.&lt;br /&gt;
&lt;br /&gt;
[[File:Архитектура MCP.png|thumb|none|x800px|alt=architectureMCP|Архитектура MCP-сервер]]&lt;br /&gt;
&lt;br /&gt;
Поток запроса: LLM-клиент отправляет MCP-вызов через STDIO или Streamable HTTP → &amp;lt;code&amp;gt;server.py&amp;lt;/code&amp;gt; передаёт его в выбранный инструмент из &amp;lt;code&amp;gt;tools/&amp;lt;/code&amp;gt; → инструмент проверяет параметры и обращается к &amp;lt;code&amp;gt;api_client.py&amp;lt;/code&amp;gt; → клиент получает JWT от &amp;lt;code&amp;gt;auth.py&amp;lt;/code&amp;gt; (модуль автоматически обновляет токен по истечении срока действия или при ответе 401) → запрос отправляется в Svacer REST API.&lt;br /&gt;
&lt;br /&gt;
== Установка ==&lt;br /&gt;
Установка Svacer MCP, подключение клиентов и конфигурация.&lt;br /&gt;
&lt;br /&gt;
=== Требования ===&lt;br /&gt;
&lt;br /&gt;
* Python 3.10+&lt;br /&gt;
* Доступ к Svacer-серверу: URL + логин/пароль&lt;br /&gt;
&lt;br /&gt;
=== Режим STDIO ===&lt;br /&gt;
Подходит для настольных клиентов: Claude Desktop, Claude Code, Cursor, VS Code.&lt;br /&gt;
 &amp;lt;code&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://gitlab.ispras.ru/svacerai/mcp.git&amp;lt;/nowiki&amp;gt; &amp;amp;&amp;amp; cd mcp&lt;br /&gt;
 &lt;br /&gt;
 python3 -m venv .venv&lt;br /&gt;
 .venv/bin/pip install -e .&lt;br /&gt;
 &lt;br /&gt;
 cp .env.example .env&lt;br /&gt;
 # Отредактировать .env — указать URL и учётные данные Svacer&lt;br /&gt;
 &lt;br /&gt;
 # Проверить запуск (сервер ожидает данные на stdin; для выхода — Ctrl+C)&lt;br /&gt;
 .venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
После &amp;lt;code&amp;gt;pip install -e .&amp;lt;/code&amp;gt; в окружении становится доступна команда &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; — её указывают в конфигурации клиентов ниже.&lt;br /&gt;
&lt;br /&gt;
=== Режим HTTP (Docker) ===&lt;br /&gt;
Подходит для веб-клиентов (OpenWebUI) и удалённого доступа.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Требования:&#039;&#039;&#039; Docker, Docker Compose.&lt;br /&gt;
 &amp;lt;code&amp;gt;cp .env.example .env&lt;br /&gt;
 &lt;br /&gt;
 # В .env обязательно задать SVACER_MCP_TOKEN — без него сервер не запускается&lt;br /&gt;
 echo &amp;quot;SVACER_MCP_TOKEN=$(openssl rand -hex 32)&amp;quot; &amp;gt;&amp;gt; .env&lt;br /&gt;
 &lt;br /&gt;
 docker compose up -d&lt;br /&gt;
 &lt;br /&gt;
 # MCP endpoint: &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 # Клиенты передают заголовок: Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Внешний порт хоста задаётся переменной &amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt; (по умолчанию &amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;), внутри контейнера сервер всегда слушает порт &amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Подключение клиентов ===&lt;br /&gt;
&lt;br /&gt;
==== Claude Desktop ====&lt;br /&gt;
Файл конфигурации: &amp;lt;code&amp;gt;~/.config/Claude/claude_desktop_config.json&amp;lt;/code&amp;gt; (Linux) или &amp;lt;code&amp;gt;%APPDATA%\Claude\claude_desktop_config.json&amp;lt;/code&amp;gt; (Windows).&lt;br /&gt;
&lt;br /&gt;
Укажите &#039;&#039;&#039;абсолютный путь&#039;&#039;&#039; к &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; из вашего venv (&amp;lt;code&amp;gt;which svacer-mcp&amp;lt;/code&amp;gt; в активированном venv или &amp;lt;code&amp;gt;/path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Claude Code ====&lt;br /&gt;
 &amp;lt;code&amp;gt;claude mcp add svacer \&lt;br /&gt;
   -e SVACER_URL=&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt; \&lt;br /&gt;
   -e SVACER_LOGIN=your-login \&lt;br /&gt;
   -e SVACER_PASSWORD=your-password \&lt;br /&gt;
   -- /path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VS Code ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.vscode/mcp.json&amp;lt;/code&amp;gt; в корне рабочей директории:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;servers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;type&amp;quot;: &amp;quot;stdio&amp;quot;,&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cursor ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.cursor/mcp.json&amp;lt;/code&amp;gt; в корне проекта или глобально:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenWebUI ====&lt;br /&gt;
&lt;br /&gt;
# Развернуть через Docker (см. «Режим HTTP» выше).&lt;br /&gt;
# Открыть &#039;&#039;&#039;Settings → Tools&#039;&#039;&#039; (или &#039;&#039;&#039;Admin Panel → Settings → Tools&#039;&#039;&#039;).&lt;br /&gt;
# Добавить сервер:&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI работает на хосте, снаружи Docker.&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://svacer-mcp:8000/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI развёрнут в той же compose-сети, что и &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; (имя берётся из &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; → service name, порт 8000 — внутренний порт контейнера).&lt;br /&gt;
# Тип подключения: &#039;&#039;&#039;MCP (Streamable HTTP)&#039;&#039;&#039;.&lt;br /&gt;
# В настройках инструмента указать заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt; (значение — то же, что в &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; сервера).&lt;br /&gt;
# Сохранить — инструменты появятся в чате.&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Переменная&lt;br /&gt;
!По умолчанию&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|URL Svacer-сервера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_LOGIN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Логин&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_PASSWORD&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Пароль&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TIMEOUT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тайм-аут HTTP-запросов к Svacer, секунды&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TRANSPORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt;&lt;br /&gt;
|Режим транспорта: &amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;&lt;br /&gt;
|TCP-порт сервера в режиме HTTP (внутри контейнера)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Bearer-токен для клиентов &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt;. Обязателен при &amp;lt;code&amp;gt;SVACER_TRANSPORT=http&amp;lt;/code&amp;gt;, в режиме STDIO игнорируется. Генерация: &amp;lt;code&amp;gt;openssl rand -hex 32&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_RESOURCE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;:&amp;lt;HTTP_PORT&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Публичный URL MCP-сервера для заголовка &amp;lt;code&amp;gt;WWW-Authenticate&amp;lt;/code&amp;gt; (&amp;lt;nowiki&amp;gt;RFC 9728&amp;lt;/nowiki&amp;gt;). Задаётся при работе за обратным прокси&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Список инструментов через запятую. Если не задано, регистрируются все 8&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;&lt;br /&gt;
|Внешний порт хоста при запуске через &amp;lt;code&amp;gt;docker compose&amp;lt;/code&amp;gt; (отображается на внутренний &amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
Переменные читаются из &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; или из окружения. Для STDIO-клиентов их можно указать в секции &amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt; конфигурации клиента.&lt;br /&gt;
&lt;br /&gt;
==== Ограничение набора инструментов ====&lt;br /&gt;
Чтобы запустить сервер с подмножеством инструментов (например, для уменьшения объёма контекста у модели или разграничения доступа), задайте &amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &amp;lt;code&amp;gt;SVACER_TOOLS=get_projects,get_snapshots,get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
Допустимые имена: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;. Неизвестное имя в списке приводит к ошибке при запуске. Если переменная пустая или не задана, регистрируются все 8 инструментов.&lt;br /&gt;
&lt;br /&gt;
==== Несколько экземпляров сервера ====&lt;br /&gt;
Параллельный запуск нескольких MCP-серверов поддерживается без ограничений.&lt;br /&gt;
&lt;br /&gt;
* В режиме STDIO каждая запись в конфигурации клиента описывает отдельный процесс — несколько подключений к разным экземплярам Svacer задаются простым перечислением.&lt;br /&gt;
* В режиме HTTP запускаются независимые контейнеры на разных хост-портах: например, &amp;lt;code&amp;gt;MCP_PORT=8002&amp;lt;/code&amp;gt; для одного экземпляра и &amp;lt;code&amp;gt;MCP_PORT=8003&amp;lt;/code&amp;gt; для другого. Для каждого контейнера задаётся собственный &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Безопасность ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;STDIO&#039;&#039;&#039;: сервер не открывает сетевых портов и обменивается данными через стандартные потоки ввода/вывода процесса.&lt;br /&gt;
* &#039;&#039;&#039;Streamable HTTP&#039;&#039;&#039;: эндпоинт &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt; требует заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;. Запросы без токена или с неверным значением получают ответ &amp;lt;code&amp;gt;401&amp;lt;/code&amp;gt; и заголовок &amp;lt;code&amp;gt;WWW-Authenticate: Bearer ...&amp;lt;/code&amp;gt;. Токен является разделяемым секретом и не заменяет TLS, а дополняет его: при работе за обратным прокси необходимо использовать HTTPS, а сам токен передавать только по защищённому каналу.&lt;br /&gt;
* Без &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt; HTTP-сервер не запускается.&lt;br /&gt;
* Учётные данные &amp;lt;code&amp;gt;admin/admin&amp;lt;/code&amp;gt; предназначены только для тестового стенда. В рабочем окружении необходимо задать собственные логин и пароль через переменные окружения.&lt;br /&gt;
* Файл &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; не должен добавляться в систему контроля версий.&lt;br /&gt;
&lt;br /&gt;
==== Передача токена клиентом ====&lt;br /&gt;
Большинство HTTP-клиентов MCP (OpenWebUI и др.) позволяют задать произвольный заголовок &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt; в настройках инструмента — указывается значение &amp;lt;code&amp;gt;Bearer &amp;lt;токен&amp;gt;&amp;lt;/code&amp;gt;. Для ручной проверки:&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -H &amp;quot;Authorization: Bearer $SVACER_MCP_TOKEN&amp;quot; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Content-Type: application/json&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Accept: application/json, text/event-stream&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -d &#039;{&amp;quot;jsonrpc&amp;quot;:&amp;quot;2.0&amp;quot;,&amp;quot;id&amp;quot;:1,&amp;quot;method&amp;quot;:&amp;quot;initialize&amp;quot;,&amp;quot;params&amp;quot;:{&amp;quot;protocolVersion&amp;quot;:&amp;quot;2025-11-25&amp;quot;,&amp;quot;capabilities&amp;quot;:{},&amp;quot;clientInfo&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;curl&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0&amp;quot;}}}&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
Справочник по 8 инструментам Svacer MCP. Типичный порядок вызовов: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt; → любой из аналитических инструментов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Инструмент&lt;br /&gt;
!Назначение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|Список проектов с ветками — точка входа&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;&lt;br /&gt;
|Снимки конкретной ветки, от нового к старому&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;&lt;br /&gt;
|Агрегированные метрики снимка: severity / review / checker&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|Компактный список маркеров с серверной фильтрацией&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|Полные предупреждения с трассами и историей ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;&lt;br /&gt;
|Сравнение двух снимков: new / missing / modified / matched&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;&lt;br /&gt;
|Фрагмент исходного кода вокруг строки&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;&lt;br /&gt;
|Группа проектов по имени или UUID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== get_projects ===&lt;br /&gt;
Список всех проектов с ветками. Точка входа: с этого вызова начинается практически любой сценарий — он возвращает &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;, необходимые для последующих запросов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметров нет.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;project_id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
     &amp;quot;project_name&amp;quot;: &amp;quot;bash&amp;quot;,&lt;br /&gt;
     &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.122456Z&amp;quot;,&lt;br /&gt;
     &amp;quot;created_by&amp;quot;: &amp;quot;admin&amp;quot;,&lt;br /&gt;
     &amp;quot;branches&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
         &amp;quot;branch_id&amp;quot;: &amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
         &amp;quot;branch_name&amp;quot;: &amp;quot;master&amp;quot;,&lt;br /&gt;
         &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.394812Z&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_snapshots ===&lt;br /&gt;
Список снимков для конкретной ветки проекта, от нового к старому.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока или regex для фильтра по имени снимка&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_snapshots(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;snapshot_id&amp;quot;: &amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
     &amp;quot;name&amp;quot;: &amp;quot;Snapshot 2020-03-25 09:09:41 +0300&amp;quot;,&lt;br /&gt;
     &amp;quot;import_time&amp;quot;: &amp;quot;2020-03-25T09:09:41.837296Z&amp;quot;,&lt;br /&gt;
     &amp;quot;commit_hash&amp;quot;: null,&lt;br /&gt;
     &amp;quot;markers_count&amp;quot;: 297,&lt;br /&gt;
     &amp;quot;link&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru/&amp;lt;/nowiki&amp;gt;...&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_stats ===&lt;br /&gt;
Агрегированные метрики по снимку: общее количество предупреждений, распределение по критичности, по статусу ревью, по детекторам. Наиболее быстрый способ получить общую картину по проекту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_stats(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_warnings&amp;quot;: 771,&lt;br /&gt;
   &amp;quot;by_severity&amp;quot;: {&lt;br /&gt;
     &amp;quot;Critical&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Major&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Unspecified&amp;quot;: 769&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_review_status&amp;quot;: {&lt;br /&gt;
     &amp;quot;Confirmed&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;False Positive&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Undecided&amp;quot;: 767,&lt;br /&gt;
     &amp;quot;Unclear&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Won&#039;t fix&amp;quot;: 1&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_checker&amp;quot;: {&lt;br /&gt;
     &amp;quot;PROC_USE.VULNERABLE&amp;quot;: 337,&lt;br /&gt;
     &amp;quot;UNUSED_FUNC_RES.REWRITE.MINOR&amp;quot;: 44,&lt;br /&gt;
     &amp;quot;UNREACHABLE_CODE&amp;quot;: 28,&lt;br /&gt;
     &amp;quot;DEREF_AFTER_NULL.EX&amp;quot;: 27,&lt;br /&gt;
     &amp;quot;NULL_AFTER_DEREF&amp;quot;: 27&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_markers ===&lt;br /&gt;
Компактный список маркеров с серверной фильтрацией. Основной инструмент для перечисления и обзора: его следует предпочитать &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, когда не требуются развёрнутые поля — трассы и история ревью.&lt;br /&gt;
&lt;br /&gt;
По умолчанию ответ ограничен 30 маркерами и содержит компактный набор полей. Подробнее об ограничении объёма см. раздел Про объём ответа в сценариях.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора (&amp;lt;code&amp;gt;DEREF_AFTER_NULL&amp;lt;/code&amp;gt;, …)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы маркеров&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю изменений ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии к маркеру&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра из веб-интерфейса Svacer&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров в ответе (по умолчанию &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;). Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Список разрешённых полей маркера верхнего уровня. По умолчанию — компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает все поля коннектора (&amp;lt;code&amp;gt;id, warnClass, file, line, msg, tool, function, mtid, review&amp;lt;/code&amp;gt;, а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены). Допустим и произвольный список — например, &amp;lt;code&amp;gt;[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_markers(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 341,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 30,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;warnClass&amp;quot;: [&amp;quot;PROC_USE.VULNERABLE&amp;quot;]},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;e05bb35b-a95e-4eb2-85ae-3101b788f07d&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;PROC_USE.VULNERABLE.TEMP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/lib/sh/tmpfile.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 160,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Use of vulnerable function &#039;mktemp&#039; at tmpfile.c:160. ...&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;sh_mktmpname&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: null&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; отражает количество маркеров, удовлетворяющих фильтру до применения ограничения; &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt; — количество маркеров, фактически содержащихся в &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; следует либо сузить фильтры (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;), либо передать &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; для получения полного списка. Поля &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; возвращаются только при &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_warnings ===&lt;br /&gt;
Полные предупреждения с детальной разметкой. Ответ значительно объёмнее, чем у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, поэтому инструмент следует использовать только тогда, когда нужны поля, отсутствующие в компактной форме: &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Лимит по умолчанию — 30; при включённых &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt; он автоматически снижается до 8, поскольку такие предупреждения существенно объёмнее.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы. Активирует режим расширенных полей (лимит по умолчанию — 8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю ревью. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество предупреждений в ответе. По умолчанию — &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;, в режиме расширенных полей — &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Явно заданное &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; отменяет автоматическое снижение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_warnings(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   severity=[&amp;quot;Critical&amp;quot;],&lt;br /&gt;
   review_history=True,&lt;br /&gt;
   traces=True&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: false,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;severity&amp;quot;: [&amp;quot;Critical&amp;quot;], &amp;quot;traces&amp;quot;: true, &amp;quot;review_history&amp;quot;: true},&lt;br /&gt;
   &amp;quot;warnings&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;a3f21c90-1d4e-4b82-9f63-7c8e5d2a1b09&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Possible null pointer dereference of &#039;l&#039; after loop exit.&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: {&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;severity&amp;quot;: &amp;quot;Critical&amp;quot;},&lt;br /&gt;
       &amp;quot;review_history&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;changed_by&amp;quot;: &amp;quot;admin&amp;quot;, &amp;quot;changed_at&amp;quot;: &amp;quot;2021-12-13T14:00:00Z&amp;quot;}],&lt;br /&gt;
       &amp;quot;traces&amp;quot;: [{&amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;, &amp;quot;line&amp;quot;: 3320, &amp;quot;msg&amp;quot;: &amp;quot;Loop starts here; &#039;l&#039; may exhaust the list.&amp;quot;}]&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_diff ===&lt;br /&gt;
Сравнение двух снимков. Категории располагаются под ключом &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt; (появилось в новом снимке), &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt; (исчезло из нового), &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt; (тот же идентификатор, изменился контекст), &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt; (совпало в обоих). Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно UUID снимков.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;base_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Старый снимок&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;head_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|нет&lt;br /&gt;
|Новый снимок; если не указан, сравнение выполняется с предыдущим по времени&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; — только статистика; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; — статистика и идентификаторы маркеров; &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; — полные маркеры по категориям&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|bool&lt;br /&gt;
|нет&lt;br /&gt;
|Метаданные детекторов для маркеров (только при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров &#039;&#039;&#039;на каждую категорию&#039;&#039;&#039; при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;. По умолчанию — &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;, значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Параметр игнорируется при &amp;lt;code&amp;gt;level &amp;lt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;. Применяется к маркерам внутри категорий при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_diff(&lt;br /&gt;
   base_snapshot_id=&amp;quot;72b3df7b-c15a-4e3d-8f92-a041dc6e5b87&amp;quot;,&lt;br /&gt;
   head_snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   level=0&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&lt;br /&gt;
     &amp;quot;context1&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-20 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;context2&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-25 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;scope&amp;quot;: [&amp;quot;NEW&amp;quot;, &amp;quot;MISSING&amp;quot;, &amp;quot;MATCHED&amp;quot;, &amp;quot;MODIFIED&amp;quot;],&lt;br /&gt;
     &amp;quot;new&amp;quot;: 9,&lt;br /&gt;
     &amp;quot;missing&amp;quot;: 12,&lt;br /&gt;
     &amp;quot;modified&amp;quot;: 98,&lt;br /&gt;
     &amp;quot;matched&amp;quot;: 187&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt;)&#039;&#039;&#039; — каждая категория внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; оформляется и ограничивается независимо:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&amp;quot;new&amp;quot;: 50, &amp;quot;missing&amp;quot;: 5, &amp;quot;modified&amp;quot;: 0, &amp;quot;matched&amp;quot;: 187},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: {&lt;br /&gt;
     &amp;quot;new_markers&amp;quot;: {&lt;br /&gt;
       &amp;quot;total_count&amp;quot;: 50,&lt;br /&gt;
       &amp;quot;returned_count&amp;quot;: 20,&lt;br /&gt;
       &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
       &amp;quot;markers&amp;quot;: [&lt;br /&gt;
         {&amp;quot;id&amp;quot;: &amp;quot;a3f21c90-...&amp;quot;, &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;, &amp;quot;file&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;line&amp;quot;: 3327, &amp;quot;msg&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;, &amp;quot;review&amp;quot;: null}&lt;br /&gt;
       ]&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;missing_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 5, &amp;quot;returned_count&amp;quot;: 5, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: [...]},&lt;br /&gt;
     &amp;quot;modified_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 0, &amp;quot;returned_count&amp;quot;: 0, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: []},&lt;br /&gt;
     &amp;quot;matched_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 187, &amp;quot;returned_count&amp;quot;: 20, &amp;quot;truncated&amp;quot;: true, &amp;quot;markers&amp;quot;: [...]}&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; либо запросить нужные идентификаторы отдельным вызовом &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;. Маркеры внутри категорий проходят ту же компактную обработку, что и в &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;: значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает фиксированный набор полей коннектора, а не произвольные «сырые» поля API.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_advanced_file_preview ===&lt;br /&gt;
Фрагмент исходного кода из снимка вокруг указанной строки. Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно идентификатора снимка и пути к файлу.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Путь к файлу в том виде, в котором его возвращают &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Центральная строка, нумерация с 1 (по умолчанию &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;before&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк до центральной (по умолчанию &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;after&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк после центральной (по умолчанию &amp;lt;code&amp;gt;99999&amp;lt;/code&amp;gt; — до конца файла)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_advanced_file_preview(&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
   line=3327,&lt;br /&gt;
   before=10,&lt;br /&gt;
   after=10&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
   &amp;quot;content&amp;quot;: &amp;quot;      for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)\n\t;\n      return (l-&amp;gt;word-&amp;gt;word);\n&amp;quot;,&lt;br /&gt;
   &amp;quot;total_lines&amp;quot;: 6082&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_groups ===&lt;br /&gt;
Получить группу проектов по имени или UUID. Группы объединяют проекты в логические блоки — например, по команде или продукту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Имя группы или её UUID&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_groups(name_or_id=&amp;quot;Linux Tools&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;project_group_id&amp;quot;: &amp;quot;c4f8a2d1-3b7e-4f90-82ac-1d5e8f2b6c04&amp;quot;,&lt;br /&gt;
   &amp;quot;project_group_name&amp;quot;: &amp;quot;Linux Tools&amp;quot;,&lt;br /&gt;
   &amp;quot;projects&amp;quot;: [&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;bash&amp;quot;},&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;d3a17f52-...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;coreutils&amp;quot;}&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;projects[].id&amp;lt;/code&amp;gt; — это &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;, который далее передаётся в &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;. Группы и проекты — разные сущности; идентификатор группы и идентификатор проекта не взаимозаменяемы.&lt;br /&gt;
&lt;br /&gt;
== Примеры сценариев ==&lt;br /&gt;
Приведённые ниже запросы выполнены на демонстрационном стенде &amp;lt;code&amp;gt;svacer-demo.ispras.ru&amp;lt;/code&amp;gt; с использованием OpenWebUI и модели &amp;lt;code&amp;gt;qwen3-coder:30b&amp;lt;/code&amp;gt;. В любом другом MCP-клиенте с моделью достаточной мощности порядок вызовов будет аналогичным.&lt;br /&gt;
&lt;br /&gt;
=== Про объём ответа ===&lt;br /&gt;
&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; по умолчанию ограничивают объём ответа, чтобы не перегружать контекст модели:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; — 30 маркеров по умолчанию. Если у &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; включены &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;, лимит снижается до 8, поскольку такие маркеры значительно объёмнее.&lt;br /&gt;
* &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; — 20 маркеров на каждую категорию внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
В ответе присутствуют поля &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;truncated&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; есть два варианта действий: сузить фильтр (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;) либо явно увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; (значение &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; полностью снимает ограничение).&lt;br /&gt;
&lt;br /&gt;
Поле &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; определяет, какие ключи маркера возвращаются. По умолчанию применяется компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt; (а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены логическими флагами и пришли с сервера). Для полного маркера со всеми служебными ключами — &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;. Для произвольной выборки — список полей верхнего уровня, например &amp;lt;code&amp;gt;fields=[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;. Поле &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; — объект &amp;lt;code&amp;gt;{status, severity, action}&amp;lt;/code&amp;gt;; вложенные ключи в &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; не поддерживаются, поэтому объект &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; запрашивается целиком.&lt;br /&gt;
&lt;br /&gt;
=== Перечислить все проекты ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие проекты есть в Svacer?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В Svacer доступно 6 проектов: bash, openssl, paho.mqtt.c, coturn, zstd, darpa. У каждого — одна ветка &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Посмотреть снимки проекта ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие снимки есть у paho.mqtt.c? Самый свежий когда?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; — найти &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id=..., branch_id=...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;У paho.mqtt.c 3 снимка. Самый свежий — «Snapshot 2020-03-25 09:09:41 +0300» (297 маркеров). Предыдущий — 20 марта (306 маркеров).&amp;lt;/blockquote&amp;gt;Поле &amp;lt;code&amp;gt;commit_hash&amp;lt;/code&amp;gt; может принимать значение &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;, если проект не сохраняет хэш коммита в &amp;lt;code&amp;gt;custom_properties&amp;lt;/code&amp;gt;. Имена снимков произвольны: одни проекты записывают в имя дату, другие — коммит, третьи — свободный текст.&lt;br /&gt;
&lt;br /&gt;
=== Сводка по проекту ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Что в bash в последнем снимке? Сколько всего предупреждений, есть ли критические, какие топ-детекторы?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id, branch_id)&amp;lt;/code&amp;gt; — взять последний снимок&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats(project_id, branch_id, snapshot_id)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В последнем снимке bash содержится 771 предупреждение:&lt;br /&gt;
&lt;br /&gt;
* Критических: 1 (Confirmed)&lt;br /&gt;
* Major: 1 (Won&#039;t fix)&lt;br /&gt;
* Остальные: 769 (Unspecified — не ревьюились)&lt;br /&gt;
&lt;br /&gt;
Топ-детекторы по количеству:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;PROC_USE.VULNERABLE&amp;lt;/code&amp;gt; — 337&lt;br /&gt;
# &amp;lt;code&amp;gt;UNUSED_FUNC_RES.REWRITE.MINOR&amp;lt;/code&amp;gt; — 44&lt;br /&gt;
# &amp;lt;code&amp;gt;UNREACHABLE_CODE&amp;lt;/code&amp;gt; — 28&lt;br /&gt;
# &amp;lt;code&amp;gt;DEREF_AFTER_NULL.EX&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
# &amp;lt;code&amp;gt;NULL_AFTER_DEREF&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;by_severity&amp;lt;/code&amp;gt; — маркеры без ручного ревью, а не «низкий приоритет». Поле &amp;lt;code&amp;gt;by_checker&amp;lt;/code&amp;gt; не сортируется, на большом снимке оно может содержать более 100 ключей — чтобы получить именно топ-N, следует явно сформулировать запрос: «топ-5 детекторов».&lt;br /&gt;
&lt;br /&gt;
=== Тренд по нескольким снимкам ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Как у openssl менялось число предупреждений за последние пять снимков? Покажи таблицей.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — взять список&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats()&amp;lt;/code&amp;gt; × 5 — по каждому из последних пяти снимков&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Снимок&lt;br /&gt;
!Дата&lt;br /&gt;
!Всего&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:49&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:29&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:08&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:48&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:22&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
На демонстрационном стенде указанные пять снимков openssl импортированы с интервалом в 20 минут одного дня и полностью идентичны — поэтому динамика отсутствует. На реальном проекте с историей релизов значения будут изменяться.&lt;br /&gt;
&lt;br /&gt;
=== Найти срабатывания конкретного детектора ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Где в bash срабатывает PROC_USE.VULNERABLE? Покажи список — файл, строка, что именно ругается. Достаточно первых десяти.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/tmpfile.c:160&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;mktemp()&amp;lt;/code&amp;gt;, race condition. Рекомендуется &amp;lt;code&amp;gt;mkstemp()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/shell.c:151&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;, значение может быть подменено.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/shell.c:415&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/complete.c:1516&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/eaccess.c:115&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;strcat()&amp;lt;/code&amp;gt;, рекомендуется &amp;lt;code&amp;gt;strncat()&amp;lt;/code&amp;gt;. …&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Фильтр &amp;lt;code&amp;gt;warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&amp;lt;/code&amp;gt; охватывает все подклассы: &amp;lt;code&amp;gt;PROC_USE.VULNERABLE.TEMP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.GETENV&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.STRCAT&amp;lt;/code&amp;gt; и т. д. — всего 341 маркер. Несколько значений в одном параметре трактуются как логическое «ИЛИ»: &amp;lt;code&amp;gt;severity=[&amp;quot;Critical&amp;quot;,&amp;quot;Major&amp;quot;]&amp;lt;/code&amp;gt; возвращает маркеры обеих категорий.&lt;br /&gt;
&lt;br /&gt;
В ответе будет &amp;lt;code&amp;gt;total_count: 341, returned_count: 30, truncated: true&amp;lt;/code&amp;gt; — это ожидаемое поведение. Модель видит общий объём по &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; и при необходимости сужает запрос или вызывает &amp;lt;code&amp;gt;get_markers(..., limit=0)&amp;lt;/code&amp;gt;, чтобы получить полный список.&lt;br /&gt;
&lt;br /&gt;
=== Сравнить два снимка ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Возьми два последних снимка paho.mqtt.c — что между ними изменилось? Сколько новых предупреждений, сколько починили?&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — два последних&lt;br /&gt;
# &amp;lt;code&amp;gt;get_diff(base_snapshot_id=&amp;quot;72b3df7b-...&amp;quot;, head_snapshot_id=&amp;quot;b42cb563-...&amp;quot;, level=0)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Между двумя последними снимками paho.mqtt.c:&lt;br /&gt;
&lt;br /&gt;
* Новых: 12&lt;br /&gt;
* Удалённых: 13&lt;br /&gt;
* Изменённых: 99&lt;br /&gt;
* Совпадающих: 185&lt;br /&gt;
&lt;br /&gt;
Удалено несколько больше, чем добавлено — общая картина практически не изменилась.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Категория &amp;lt;code&amp;gt;modified&amp;lt;/code&amp;gt; — маркер, присутствующий в обоих снимках, у которого изменилось окружение (номер строки, контекст функции). Это не новая ошибка. На больших проектах рекомендуется начинать с &amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt; для получения статистики, при необходимости использовать &amp;lt;code&amp;gt;level=1&amp;lt;/code&amp;gt; (только идентификаторы маркеров) и затем точечно вызывать &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; с нужными фильтрами.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt; возвращает полные маркеры по категориям, причём каждая категория по умолчанию ограничена 20 маркерами. Категории располагаются внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;. Структура ответа в JSON: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;markers&amp;quot;: {&amp;quot;new_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: N, &amp;quot;returned_count&amp;quot;: ..., &amp;quot;truncated&amp;quot;: ..., &amp;quot;markers&amp;quot;: [...]}, ...}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; или выполнить отдельный вызов &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; по нужным идентификаторам.&lt;br /&gt;
&lt;br /&gt;
=== Разобрать конкретное предупреждение ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;В bash есть один подтверждённый критикал — что-то про разыменование указателя. Покажи код вокруг этого места и объясни в чём проблема.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — найти снимок bash&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_advanced_file_preview(file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;, line=3327, before=10, after=10)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;Маркер &amp;lt;code&amp;gt;DEREF_AFTER_NULL.LOOP&amp;lt;/code&amp;gt; в функции &amp;lt;code&amp;gt;select_query()&amp;lt;/code&amp;gt;, строка 3327:&lt;br /&gt;
 &amp;lt;code&amp;gt;for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)&lt;br /&gt;
&lt;br /&gt;
     ;&lt;br /&gt;
&lt;br /&gt;
return (l-&amp;gt;word-&amp;gt;word);  /* l может быть NULL после выхода из цикла */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если список заканчивается раньше, чем &amp;lt;code&amp;gt;reply&amp;lt;/code&amp;gt; обнуляется, &amp;lt;code&amp;gt;l&amp;lt;/code&amp;gt; станет &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; на последнем &amp;lt;code&amp;gt;l-&amp;gt;next&amp;lt;/code&amp;gt;, и следующий &amp;lt;code&amp;gt;l-&amp;gt;word-&amp;gt;word&amp;lt;/code&amp;gt; — разыменование нулевого указателя.&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt; должен точно совпадать со значением, возвращённым маркером, включая ведущий префикс &amp;lt;code&amp;gt;/.build/...&amp;lt;/code&amp;gt;. Это путь внутри сборочной директории Svacer, а не путь в исходном репозитории; соответствие в репозитории определяется по имени файла.&lt;br /&gt;
&lt;br /&gt;
Для одиночной разметки удобно сразу запрашивать полный маркер с трассами: &amp;lt;code&amp;gt;get_markers(..., severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;], traces=True, checker_info=True)&amp;lt;/code&amp;gt;. Флаги &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt; указывают серверу включить соответствующие поля в ответ; в выдаче они сохраняются и при значении &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; по умолчанию. Значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; требуется лишь в том случае, когда дополнительно нужны &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; — служебные ключи, исключённые из компактного набора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3502</id>
		<title>Help:13-alpha MCP</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:13-alpha_MCP&amp;diff=3502"/>
		<updated>2026-05-21T09:53:43Z</updated>

		<summary type="html">&lt;p&gt;Mitrofanov: /* Тренд по нескольким снимкам */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Архитектура ==&lt;br /&gt;
[https://modelcontextprotocol.io/docs/getting-started/intro MCP] — открытый стандарт, через который LLM-клиенты (Claude Desktop, Cursor, VS Code, OpenWebUI и др.) вызывают внешние инструменты. &lt;br /&gt;
Svacer MCP соединяет одно с другим: 8 инструментов поверх публичного REST API Svacer, которые LLM выбирает и вызывает в ответ на обычный текстовый запрос. Вместо ручной последовательности «открыть UI, найти проект, выбрать снимок, применить фильтр» достаточно сформулировать вопрос в чате, например, «сколько критических предупреждений в последнем снимке bash?», и получить ответ. Необходимые вызовы инструментов модель выполняет самостоятельно.&lt;br /&gt;
&lt;br /&gt;
[[File:Архитектура MCP.png|thumb|none|x800px|alt=architectureMCP|Архитектура MCP-сервер]]&lt;br /&gt;
&lt;br /&gt;
Поток запроса: LLM-клиент отправляет MCP-вызов через STDIO или Streamable HTTP → &amp;lt;code&amp;gt;server.py&amp;lt;/code&amp;gt; передаёт его в выбранный инструмент из &amp;lt;code&amp;gt;tools/&amp;lt;/code&amp;gt; → инструмент проверяет параметры и обращается к &amp;lt;code&amp;gt;api_client.py&amp;lt;/code&amp;gt; → клиент получает JWT от &amp;lt;code&amp;gt;auth.py&amp;lt;/code&amp;gt; (модуль автоматически обновляет токен по истечении срока действия или при ответе 401) → запрос отправляется в Svacer REST API.&lt;br /&gt;
&lt;br /&gt;
== Установка ==&lt;br /&gt;
Установка Svacer MCP, подключение клиентов и конфигурация.&lt;br /&gt;
&lt;br /&gt;
=== Требования ===&lt;br /&gt;
&lt;br /&gt;
* Python 3.10+&lt;br /&gt;
* Доступ к Svacer-серверу: URL + логин/пароль&lt;br /&gt;
&lt;br /&gt;
=== Режим STDIO ===&lt;br /&gt;
Подходит для настольных клиентов: Claude Desktop, Claude Code, Cursor, VS Code.&lt;br /&gt;
 &amp;lt;code&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://gitlab.ispras.ru/svacerai/mcp.git&amp;lt;/nowiki&amp;gt; &amp;amp;&amp;amp; cd mcp&lt;br /&gt;
 &lt;br /&gt;
 python3 -m venv .venv&lt;br /&gt;
 .venv/bin/pip install -e .&lt;br /&gt;
 &lt;br /&gt;
 cp .env.example .env&lt;br /&gt;
 # Отредактировать .env — указать URL и учётные данные Svacer&lt;br /&gt;
 &lt;br /&gt;
 # Проверить запуск (сервер ожидает данные на stdin; для выхода — Ctrl+C)&lt;br /&gt;
 .venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
После &amp;lt;code&amp;gt;pip install -e .&amp;lt;/code&amp;gt; в окружении становится доступна команда &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; — её указывают в конфигурации клиентов ниже.&lt;br /&gt;
&lt;br /&gt;
=== Режим HTTP (Docker) ===&lt;br /&gt;
Подходит для веб-клиентов (OpenWebUI) и удалённого доступа.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Требования:&#039;&#039;&#039; Docker, Docker Compose.&lt;br /&gt;
 &amp;lt;code&amp;gt;cp .env.example .env&lt;br /&gt;
 &lt;br /&gt;
 # В .env обязательно задать SVACER_MCP_TOKEN — без него сервер не запускается&lt;br /&gt;
 echo &amp;quot;SVACER_MCP_TOKEN=$(openssl rand -hex 32)&amp;quot; &amp;gt;&amp;gt; .env&lt;br /&gt;
 &lt;br /&gt;
 docker compose up -d&lt;br /&gt;
 &lt;br /&gt;
 # MCP endpoint: &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 # Клиенты передают заголовок: Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Внешний порт хоста задаётся переменной &amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt; (по умолчанию &amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;), внутри контейнера сервер всегда слушает порт &amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Подключение клиентов ===&lt;br /&gt;
&lt;br /&gt;
==== Claude Desktop ====&lt;br /&gt;
Файл конфигурации: &amp;lt;code&amp;gt;~/.config/Claude/claude_desktop_config.json&amp;lt;/code&amp;gt; (Linux) или &amp;lt;code&amp;gt;%APPDATA%\Claude\claude_desktop_config.json&amp;lt;/code&amp;gt; (Windows).&lt;br /&gt;
&lt;br /&gt;
Укажите &#039;&#039;&#039;абсолютный путь&#039;&#039;&#039; к &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; из вашего venv (&amp;lt;code&amp;gt;which svacer-mcp&amp;lt;/code&amp;gt; в активированном venv или &amp;lt;code&amp;gt;/path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Claude Code ====&lt;br /&gt;
 &amp;lt;code&amp;gt;claude mcp add svacer \&lt;br /&gt;
   -e SVACER_URL=&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt; \&lt;br /&gt;
   -e SVACER_LOGIN=your-login \&lt;br /&gt;
   -e SVACER_PASSWORD=your-password \&lt;br /&gt;
   -- /path/to/mcp/.venv/bin/svacer-mcp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== VS Code ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.vscode/mcp.json&amp;lt;/code&amp;gt; в корне рабочей директории:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;servers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;type&amp;quot;: &amp;quot;stdio&amp;quot;,&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cursor ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.cursor/mcp.json&amp;lt;/code&amp;gt; в корне проекта или глобально:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
     &amp;quot;svacer&amp;quot;: {&lt;br /&gt;
       &amp;quot;command&amp;quot;: &amp;quot;/path/to/mcp/.venv/bin/svacer-mcp&amp;quot;,&lt;br /&gt;
       &amp;quot;env&amp;quot;: {&lt;br /&gt;
         &amp;quot;SVACER_URL&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://your-svacer.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_LOGIN&amp;quot;: &amp;quot;your-login&amp;quot;,&lt;br /&gt;
         &amp;quot;SVACER_PASSWORD&amp;quot;: &amp;quot;your-password&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenWebUI ====&lt;br /&gt;
&lt;br /&gt;
# Развернуть через Docker (см. «Режим HTTP» выше).&lt;br /&gt;
# Открыть &#039;&#039;&#039;Settings → Tools&#039;&#039;&#039; (или &#039;&#039;&#039;Admin Panel → Settings → Tools&#039;&#039;&#039;).&lt;br /&gt;
# Добавить сервер:&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI работает на хосте, снаружи Docker.&lt;br /&gt;
#* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://svacer-mcp:8000/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — если OpenWebUI развёрнут в той же compose-сети, что и &amp;lt;code&amp;gt;svacer-mcp&amp;lt;/code&amp;gt; (имя берётся из &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; → service name, порт 8000 — внутренний порт контейнера).&lt;br /&gt;
# Тип подключения: &#039;&#039;&#039;MCP (Streamable HTTP)&#039;&#039;&#039;.&lt;br /&gt;
# В настройках инструмента указать заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt; (значение — то же, что в &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; сервера).&lt;br /&gt;
# Сохранить — инструменты появятся в чате.&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Переменная&lt;br /&gt;
!По умолчанию&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|URL Svacer-сервера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_LOGIN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Логин&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_PASSWORD&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|Пароль&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TIMEOUT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тайм-аут HTTP-запросов к Svacer, секунды&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TRANSPORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt;&lt;br /&gt;
|Режим транспорта: &amp;lt;code&amp;gt;stdio&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt;&lt;br /&gt;
|TCP-порт сервера в режиме HTTP (внутри контейнера)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Bearer-токен для клиентов &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt;. Обязателен при &amp;lt;code&amp;gt;SVACER_TRANSPORT=http&amp;lt;/code&amp;gt;, в режиме STDIO игнорируется. Генерация: &amp;lt;code&amp;gt;openssl rand -hex 32&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_MCP_RESOURCE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;:&amp;lt;HTTP_PORT&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Публичный URL MCP-сервера для заголовка &amp;lt;code&amp;gt;WWW-Authenticate&amp;lt;/code&amp;gt; (&amp;lt;nowiki&amp;gt;RFC 9728&amp;lt;/nowiki&amp;gt;). Задаётся при работе за обратным прокси&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;(не задано)&#039;&#039;&lt;br /&gt;
|Список инструментов через запятую. Если не задано, регистрируются все 8&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;MCP_PORT&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;8002&amp;lt;/code&amp;gt;&lt;br /&gt;
|Внешний порт хоста при запуске через &amp;lt;code&amp;gt;docker compose&amp;lt;/code&amp;gt; (отображается на внутренний &amp;lt;code&amp;gt;SVACER_HTTP_PORT&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
Переменные читаются из &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; или из окружения. Для STDIO-клиентов их можно указать в секции &amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt; конфигурации клиента.&lt;br /&gt;
&lt;br /&gt;
==== Ограничение набора инструментов ====&lt;br /&gt;
Чтобы запустить сервер с подмножеством инструментов (например, для уменьшения объёма контекста у модели или разграничения доступа), задайте &amp;lt;code&amp;gt;SVACER_TOOLS&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &amp;lt;code&amp;gt;SVACER_TOOLS=get_projects,get_snapshots,get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
Допустимые имена: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;. Неизвестное имя в списке приводит к ошибке при запуске. Если переменная пустая или не задана, регистрируются все 8 инструментов.&lt;br /&gt;
&lt;br /&gt;
==== Несколько экземпляров сервера ====&lt;br /&gt;
Параллельный запуск нескольких MCP-серверов поддерживается без ограничений.&lt;br /&gt;
&lt;br /&gt;
* В режиме STDIO каждая запись в конфигурации клиента описывает отдельный процесс — несколько подключений к разным экземплярам Svacer задаются простым перечислением.&lt;br /&gt;
* В режиме HTTP запускаются независимые контейнеры на разных хост-портах: например, &amp;lt;code&amp;gt;MCP_PORT=8002&amp;lt;/code&amp;gt; для одного экземпляра и &amp;lt;code&amp;gt;MCP_PORT=8003&amp;lt;/code&amp;gt; для другого. Для каждого контейнера задаётся собственный &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Безопасность ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;STDIO&#039;&#039;&#039;: сервер не открывает сетевых портов и обменивается данными через стандартные потоки ввода/вывода процесса.&lt;br /&gt;
* &#039;&#039;&#039;Streamable HTTP&#039;&#039;&#039;: эндпоинт &amp;lt;code&amp;gt;/mcp&amp;lt;/code&amp;gt; требует заголовок &amp;lt;code&amp;gt;Authorization: Bearer &amp;lt;SVACER_MCP_TOKEN&amp;gt;&amp;lt;/code&amp;gt;. Запросы без токена или с неверным значением получают ответ &amp;lt;code&amp;gt;401&amp;lt;/code&amp;gt; и заголовок &amp;lt;code&amp;gt;WWW-Authenticate: Bearer ...&amp;lt;/code&amp;gt;. Токен является разделяемым секретом и не заменяет TLS, а дополняет его: при работе за обратным прокси необходимо использовать HTTPS, а сам токен передавать только по защищённому каналу.&lt;br /&gt;
* Без &amp;lt;code&amp;gt;SVACER_MCP_TOKEN&amp;lt;/code&amp;gt; HTTP-сервер не запускается.&lt;br /&gt;
* Учётные данные &amp;lt;code&amp;gt;admin/admin&amp;lt;/code&amp;gt; предназначены только для тестового стенда. В рабочем окружении необходимо задать собственные логин и пароль через переменные окружения.&lt;br /&gt;
* Файл &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; не должен добавляться в систему контроля версий.&lt;br /&gt;
&lt;br /&gt;
==== Передача токена клиентом ====&lt;br /&gt;
Большинство HTTP-клиентов MCP (OpenWebUI и др.) позволяют задать произвольный заголовок &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt; в настройках инструмента — указывается значение &amp;lt;code&amp;gt;Bearer &amp;lt;токен&amp;gt;&amp;lt;/code&amp;gt;. Для ручной проверки:&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -H &amp;quot;Authorization: Bearer $SVACER_MCP_TOKEN&amp;quot; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Content-Type: application/json&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -H &#039;Accept: application/json, text/event-stream&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    -d &#039;{&amp;quot;jsonrpc&amp;quot;:&amp;quot;2.0&amp;quot;,&amp;quot;id&amp;quot;:1,&amp;quot;method&amp;quot;:&amp;quot;initialize&amp;quot;,&amp;quot;params&amp;quot;:{&amp;quot;protocolVersion&amp;quot;:&amp;quot;2025-11-25&amp;quot;,&amp;quot;capabilities&amp;quot;:{},&amp;quot;clientInfo&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;curl&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0&amp;quot;}}}&#039; \&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;    &amp;lt;nowiki&amp;gt;http://localhost:8002/mcp&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
Справочник по 8 инструментам Svacer MCP. Типичный порядок вызовов: &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt; → любой из аналитических инструментов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Инструмент&lt;br /&gt;
!Назначение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|Список проектов с ветками — точка входа&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;&lt;br /&gt;
|Снимки конкретной ветки, от нового к старому&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_stats&amp;lt;/code&amp;gt;&lt;br /&gt;
|Агрегированные метрики снимка: severity / review / checker&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|Компактный список маркеров с серверной фильтрацией&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|Полные предупреждения с трассами и историей ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_diff&amp;lt;/code&amp;gt;&lt;br /&gt;
|Сравнение двух снимков: new / missing / modified / matched&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_advanced_file_preview&amp;lt;/code&amp;gt;&lt;br /&gt;
|Фрагмент исходного кода вокруг строки&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get_project_groups&amp;lt;/code&amp;gt;&lt;br /&gt;
|Группа проектов по имени или UUID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== get_projects ===&lt;br /&gt;
Список всех проектов с ветками. Точка входа: с этого вызова начинается практически любой сценарий — он возвращает &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;, необходимые для последующих запросов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметров нет.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;project_id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
     &amp;quot;project_name&amp;quot;: &amp;quot;bash&amp;quot;,&lt;br /&gt;
     &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.122456Z&amp;quot;,&lt;br /&gt;
     &amp;quot;created_by&amp;quot;: &amp;quot;admin&amp;quot;,&lt;br /&gt;
     &amp;quot;branches&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
         &amp;quot;branch_id&amp;quot;: &amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
         &amp;quot;branch_name&amp;quot;: &amp;quot;master&amp;quot;,&lt;br /&gt;
         &amp;quot;created&amp;quot;: &amp;quot;2021-12-13T13:22:42.394812Z&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_snapshots ===&lt;br /&gt;
Список снимков для конкретной ветки проекта, от нового к старому.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Из &amp;lt;code&amp;gt;get_projects&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока или regex для фильтра по имени снимка&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_snapshots(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;[&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;snapshot_id&amp;quot;: &amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
     &amp;quot;name&amp;quot;: &amp;quot;Snapshot 2020-03-25 09:09:41 +0300&amp;quot;,&lt;br /&gt;
     &amp;quot;import_time&amp;quot;: &amp;quot;2020-03-25T09:09:41.837296Z&amp;quot;,&lt;br /&gt;
     &amp;quot;commit_hash&amp;quot;: null,&lt;br /&gt;
     &amp;quot;markers_count&amp;quot;: 297,&lt;br /&gt;
     &amp;quot;link&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://svacer-demo.ispras.ru/&amp;lt;/nowiki&amp;gt;...&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_stats ===&lt;br /&gt;
Агрегированные метрики по снимку: общее количество предупреждений, распределение по критичности, по статусу ревью, по детекторам. Наиболее быстрый способ получить общую картину по проекту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_stats(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_warnings&amp;quot;: 771,&lt;br /&gt;
   &amp;quot;by_severity&amp;quot;: {&lt;br /&gt;
     &amp;quot;Critical&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Major&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Unspecified&amp;quot;: 769&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_review_status&amp;quot;: {&lt;br /&gt;
     &amp;quot;Confirmed&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;False Positive&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Undecided&amp;quot;: 767,&lt;br /&gt;
     &amp;quot;Unclear&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;Won&#039;t fix&amp;quot;: 1&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;by_checker&amp;quot;: {&lt;br /&gt;
     &amp;quot;PROC_USE.VULNERABLE&amp;quot;: 337,&lt;br /&gt;
     &amp;quot;UNUSED_FUNC_RES.REWRITE.MINOR&amp;quot;: 44,&lt;br /&gt;
     &amp;quot;UNREACHABLE_CODE&amp;quot;: 28,&lt;br /&gt;
     &amp;quot;DEREF_AFTER_NULL.EX&amp;quot;: 27,&lt;br /&gt;
     &amp;quot;NULL_AFTER_DEREF&amp;quot;: 27&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_markers ===&lt;br /&gt;
Компактный список маркеров с серверной фильтрацией. Основной инструмент для перечисления и обзора: его следует предпочитать &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;, когда не требуются развёрнутые поля — трассы и история ревью.&lt;br /&gt;
&lt;br /&gt;
По умолчанию ответ ограничен 30 маркерами и содержит компактный набор полей. Подробнее об ограничении объёма см. раздел Про объём ответа в сценариях.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора (&amp;lt;code&amp;gt;DEREF_AFTER_NULL&amp;lt;/code&amp;gt;, …)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы маркеров&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю изменений ревью&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии к маркеру&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра из веб-интерфейса Svacer&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров в ответе (по умолчанию &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;). Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Список разрешённых полей маркера верхнего уровня. По умолчанию — компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает все поля коннектора (&amp;lt;code&amp;gt;id, warnClass, file, line, msg, tool, function, mtid, review&amp;lt;/code&amp;gt;, а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены). Допустим и произвольный список — например, &amp;lt;code&amp;gt;[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_markers(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 341,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 30,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;warnClass&amp;quot;: [&amp;quot;PROC_USE.VULNERABLE&amp;quot;]},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;e05bb35b-a95e-4eb2-85ae-3101b788f07d&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;PROC_USE.VULNERABLE.TEMP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/lib/sh/tmpfile.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 160,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Use of vulnerable function &#039;mktemp&#039; at tmpfile.c:160. ...&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;sh_mktmpname&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: null&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; отражает количество маркеров, удовлетворяющих фильтру до применения ограничения; &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt; — количество маркеров, фактически содержащихся в &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; следует либо сузить фильтры (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;), либо передать &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; для получения полного списка. Поля &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; возвращаются только при &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_warnings ===&lt;br /&gt;
Полные предупреждения с детальной разметкой. Ответ значительно объёмнее, чем у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, поэтому инструмент следует использовать только тогда, когда нужны поля, отсутствующие в компактной форме: &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Лимит по умолчанию — 30; при включённых &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt; он автоматически снижается до 8, поскольку такие предупреждения существенно объёмнее.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Critical&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt;. Фильтр по &amp;lt;code&amp;gt;review.severity&amp;lt;/code&amp;gt;, применяется на стороне коннектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;Confirmed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Won&#039;t fix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False Positive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Unclear&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Идентификатор детектора&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Подстрока пути к файлу&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить трассы. Активирует режим расширенных полей (лимит по умолчанию — 8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить метаданные детектора (CWE, описание)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить историю ревью. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|Включить комментарии. Режим расширенных полей&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;custom_filter&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|нет&lt;br /&gt;
|Имя или идентификатор сохранённого фильтра&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество предупреждений в ответе. По умолчанию — &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt;, в режиме расширенных полей — &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;. Значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Явно заданное &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; отменяет автоматическое снижение&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_warnings(&lt;br /&gt;
   project_id=&amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;,&lt;br /&gt;
   branch_id=&amp;quot;77f66b9e-0453-4ae9-a187-88950b4c4bc4&amp;quot;,&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   severity=[&amp;quot;Critical&amp;quot;],&lt;br /&gt;
   review_history=True,&lt;br /&gt;
   traces=True&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;total_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;returned_count&amp;quot;: 1,&lt;br /&gt;
   &amp;quot;truncated&amp;quot;: false,&lt;br /&gt;
   &amp;quot;filters_applied&amp;quot;: {&amp;quot;severity&amp;quot;: [&amp;quot;Critical&amp;quot;], &amp;quot;traces&amp;quot;: true, &amp;quot;review_history&amp;quot;: true},&lt;br /&gt;
   &amp;quot;warnings&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;id&amp;quot;: &amp;quot;a3f21c90-1d4e-4b82-9f63-7c8e5d2a1b09&amp;quot;,&lt;br /&gt;
       &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;,&lt;br /&gt;
       &amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
       &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
       &amp;quot;msg&amp;quot;: &amp;quot;Possible null pointer dereference of &#039;l&#039; after loop exit.&amp;quot;,&lt;br /&gt;
       &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;,&lt;br /&gt;
       &amp;quot;review&amp;quot;: {&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;severity&amp;quot;: &amp;quot;Critical&amp;quot;},&lt;br /&gt;
       &amp;quot;review_history&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;Confirmed&amp;quot;, &amp;quot;changed_by&amp;quot;: &amp;quot;admin&amp;quot;, &amp;quot;changed_at&amp;quot;: &amp;quot;2021-12-13T14:00:00Z&amp;quot;}],&lt;br /&gt;
       &amp;quot;traces&amp;quot;: [{&amp;quot;file&amp;quot;: &amp;quot;/.build/execute_cmd.c&amp;quot;, &amp;quot;line&amp;quot;: 3320, &amp;quot;msg&amp;quot;: &amp;quot;Loop starts here; &#039;l&#039; may exhaust the list.&amp;quot;}]&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_diff ===&lt;br /&gt;
Сравнение двух снимков. Категории располагаются под ключом &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt; (появилось в новом снимке), &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt; (исчезло из нового), &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt; (тот же идентификатор, изменился контекст), &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt; (совпало в обоих). Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно UUID снимков.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;base_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|Старый снимок&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;head_snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|нет&lt;br /&gt;
|Новый снимок; если не указан, сравнение выполняется с предыдущим по времени&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; — только статистика; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; — статистика и идентификаторы маркеров; &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; — полные маркеры по категориям&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt;&lt;br /&gt;
|bool&lt;br /&gt;
|нет&lt;br /&gt;
|Метаданные детекторов для маркеров (только при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Максимальное количество маркеров &#039;&#039;&#039;на каждую категорию&#039;&#039;&#039; при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;. По умолчанию — &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt;, значение &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; снимает ограничение. Параметр игнорируется при &amp;lt;code&amp;gt;level &amp;lt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;string[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|нет&lt;br /&gt;
|См. описание у &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;. Применяется к маркерам внутри категорий при &amp;lt;code&amp;gt;level &amp;gt;= 2&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_diff(&lt;br /&gt;
   base_snapshot_id=&amp;quot;72b3df7b-c15a-4e3d-8f92-a041dc6e5b87&amp;quot;,&lt;br /&gt;
   head_snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   level=0&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt;):&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&lt;br /&gt;
     &amp;quot;context1&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-20 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;context2&amp;quot;: {&amp;quot;projectName&amp;quot;: &amp;quot;paho.mqtt.c&amp;quot;, &amp;quot;snapshotName&amp;quot;: &amp;quot;Snapshot 2020-03-25 ...&amp;quot;},&lt;br /&gt;
     &amp;quot;scope&amp;quot;: [&amp;quot;NEW&amp;quot;, &amp;quot;MISSING&amp;quot;, &amp;quot;MATCHED&amp;quot;, &amp;quot;MODIFIED&amp;quot;],&lt;br /&gt;
     &amp;quot;new&amp;quot;: 9,&lt;br /&gt;
     &amp;quot;missing&amp;quot;: 12,&lt;br /&gt;
     &amp;quot;modified&amp;quot;: 98,&lt;br /&gt;
     &amp;quot;matched&amp;quot;: 187&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ (&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt;)&#039;&#039;&#039; — каждая категория внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; оформляется и ограничивается независимо:&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;stats&amp;quot;: {&amp;quot;new&amp;quot;: 50, &amp;quot;missing&amp;quot;: 5, &amp;quot;modified&amp;quot;: 0, &amp;quot;matched&amp;quot;: 187},&lt;br /&gt;
   &amp;quot;markers&amp;quot;: {&lt;br /&gt;
     &amp;quot;new_markers&amp;quot;: {&lt;br /&gt;
       &amp;quot;total_count&amp;quot;: 50,&lt;br /&gt;
       &amp;quot;returned_count&amp;quot;: 20,&lt;br /&gt;
       &amp;quot;truncated&amp;quot;: true,&lt;br /&gt;
       &amp;quot;markers&amp;quot;: [&lt;br /&gt;
         {&amp;quot;id&amp;quot;: &amp;quot;a3f21c90-...&amp;quot;, &amp;quot;warnClass&amp;quot;: &amp;quot;DEREF_AFTER_NULL.LOOP&amp;quot;, &amp;quot;file&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;line&amp;quot;: 3327, &amp;quot;msg&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;function&amp;quot;: &amp;quot;select_query&amp;quot;, &amp;quot;review&amp;quot;: null}&lt;br /&gt;
       ]&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;missing_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 5, &amp;quot;returned_count&amp;quot;: 5, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: [...]},&lt;br /&gt;
     &amp;quot;modified_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 0, &amp;quot;returned_count&amp;quot;: 0, &amp;quot;truncated&amp;quot;: false, &amp;quot;markers&amp;quot;: []},&lt;br /&gt;
     &amp;quot;matched_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: 187, &amp;quot;returned_count&amp;quot;: 20, &amp;quot;truncated&amp;quot;: true, &amp;quot;markers&amp;quot;: [...]}&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; либо запросить нужные идентификаторы отдельным вызовом &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;. Маркеры внутри категорий проходят ту же компактную обработку, что и в &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;: значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; возвращает фиксированный набор полей коннектора, а не произвольные «сырые» поля API.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_advanced_file_preview ===&lt;br /&gt;
Фрагмент исходного кода из снимка вокруг указанной строки. Параметры &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt; не требуются — достаточно идентификатора снимка и пути к файлу.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string (UUID)&lt;br /&gt;
|да&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Путь к файлу в том виде, в котором его возвращают &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Центральная строка, нумерация с 1 (по умолчанию &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;before&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк до центральной (по умолчанию &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;after&amp;lt;/code&amp;gt;&lt;br /&gt;
|int&lt;br /&gt;
|нет&lt;br /&gt;
|Количество строк после центральной (по умолчанию &amp;lt;code&amp;gt;99999&amp;lt;/code&amp;gt; — до конца файла)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_advanced_file_preview(&lt;br /&gt;
   snapshot_id=&amp;quot;b42cb563-86f4-4f96-900a-7782163327c9&amp;quot;,&lt;br /&gt;
   file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;,&lt;br /&gt;
   line=3327,&lt;br /&gt;
   before=10,&lt;br /&gt;
   after=10&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;line&amp;quot;: 3327,&lt;br /&gt;
   &amp;quot;content&amp;quot;: &amp;quot;      for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)\n\t;\n      return (l-&amp;gt;word-&amp;gt;word);\n&amp;quot;,&lt;br /&gt;
   &amp;quot;total_lines&amp;quot;: 6082&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get_project_groups ===&lt;br /&gt;
Получить группу проектов по имени или UUID. Группы объединяют проекты в логические блоки — например, по команде или продукту.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры.&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Имя&lt;br /&gt;
!Тип&lt;br /&gt;
!Обязательный&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|да&lt;br /&gt;
|Имя группы или её UUID&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Вызов:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;get_project_groups(name_or_id=&amp;quot;Linux Tools&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ответ:&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   &amp;quot;project_group_id&amp;quot;: &amp;quot;c4f8a2d1-3b7e-4f90-82ac-1d5e8f2b6c04&amp;quot;,&lt;br /&gt;
   &amp;quot;project_group_name&amp;quot;: &amp;quot;Linux Tools&amp;quot;,&lt;br /&gt;
   &amp;quot;projects&amp;quot;: [&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;91630e84-db2f-4d8c-8716-68b7fdf17a66&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;bash&amp;quot;},&lt;br /&gt;
     {&amp;quot;id&amp;quot;: &amp;quot;d3a17f52-...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;coreutils&amp;quot;}&lt;br /&gt;
   ]&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;projects[].id&amp;lt;/code&amp;gt; — это &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt;, который далее передаётся в &amp;lt;code&amp;gt;get_snapshots&amp;lt;/code&amp;gt;. Группы и проекты — разные сущности; идентификатор группы и идентификатор проекта не взаимозаменяемы.&lt;br /&gt;
&lt;br /&gt;
== Примеры сценариев ==&lt;br /&gt;
Приведённые ниже запросы выполнены на демонстрационном стенде &amp;lt;code&amp;gt;svacer-demo.ispras.ru&amp;lt;/code&amp;gt; с использованием OpenWebUI и модели &amp;lt;code&amp;gt;qwen3-coder:30b&amp;lt;/code&amp;gt;. В любом другом MCP-клиенте с моделью достаточной мощности порядок вызовов будет аналогичным.&lt;br /&gt;
&lt;br /&gt;
=== Про объём ответа ===&lt;br /&gt;
&amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; по умолчанию ограничивают объём ответа, чтобы не перегружать контекст модели:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; — 30 маркеров по умолчанию. Если у &amp;lt;code&amp;gt;get_warnings&amp;lt;/code&amp;gt; включены &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;comment_history&amp;lt;/code&amp;gt;, лимит снижается до 8, поскольку такие маркеры значительно объёмнее.&lt;br /&gt;
* &amp;lt;code&amp;gt;get_diff(level=2)&amp;lt;/code&amp;gt; — 20 маркеров на каждую категорию внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
В ответе присутствуют поля &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;returned_count&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;truncated&amp;lt;/code&amp;gt;. При &amp;lt;code&amp;gt;truncated: true&amp;lt;/code&amp;gt; есть два варианта действий: сузить фильтр (&amp;lt;code&amp;gt;severity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnClass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;) либо явно увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; (значение &amp;lt;code&amp;gt;limit=0&amp;lt;/code&amp;gt; полностью снимает ограничение).&lt;br /&gt;
&lt;br /&gt;
Поле &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; определяет, какие ключи маркера возвращаются. По умолчанию применяется компактный набор &amp;lt;code&amp;gt;id, warnClass, file, line, msg, function, review&amp;lt;/code&amp;gt; (а также &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;checkerInfo&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;review_history&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;, если они запрошены логическими флагами и пришли с сервера). Для полного маркера со всеми служебными ключами — &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt;. Для произвольной выборки — список полей верхнего уровня, например &amp;lt;code&amp;gt;fields=[&amp;quot;id&amp;quot;,&amp;quot;warnClass&amp;quot;]&amp;lt;/code&amp;gt;. Поле &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; — объект &amp;lt;code&amp;gt;{status, severity, action}&amp;lt;/code&amp;gt;; вложенные ключи в &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; не поддерживаются, поэтому объект &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; запрашивается целиком.&lt;br /&gt;
&lt;br /&gt;
=== Перечислить все проекты ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие проекты есть в Svacer?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В Svacer доступно 6 проектов: bash, openssl, paho.mqtt.c, coturn, zstd, darpa. У каждого — одна ветка &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Посмотреть снимки проекта ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Какие снимки есть у paho.mqtt.c? Самый свежий когда?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; — найти &amp;lt;code&amp;gt;project_id&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;branch_id&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id=..., branch_id=...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;У paho.mqtt.c 3 снимка. Самый свежий — «Snapshot 2020-03-25 09:09:41 +0300» (297 маркеров). Предыдущий — 20 марта (306 маркеров).&amp;lt;/blockquote&amp;gt;Поле &amp;lt;code&amp;gt;commit_hash&amp;lt;/code&amp;gt; может принимать значение &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;, если проект не сохраняет хэш коммита в &amp;lt;code&amp;gt;custom_properties&amp;lt;/code&amp;gt;. Имена снимков произвольны: одни проекты записывают в имя дату, другие — коммит, третьи — свободный текст.&lt;br /&gt;
&lt;br /&gt;
=== Сводка по проекту ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Что в bash в последнем снимке? Сколько всего предупреждений, есть ли критические, какие топ-детекторы?&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots(project_id, branch_id)&amp;lt;/code&amp;gt; — взять последний снимок&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats(project_id, branch_id, snapshot_id)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;В последнем снимке bash содержится 771 предупреждение:&lt;br /&gt;
&lt;br /&gt;
* Критических: 1 (Confirmed)&lt;br /&gt;
* Major: 1 (Won&#039;t fix)&lt;br /&gt;
* Остальные: 769 (Unspecified — не ревьюились)&lt;br /&gt;
&lt;br /&gt;
Топ-детекторы по количеству:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;PROC_USE.VULNERABLE&amp;lt;/code&amp;gt; — 337&lt;br /&gt;
# &amp;lt;code&amp;gt;UNUSED_FUNC_RES.REWRITE.MINOR&amp;lt;/code&amp;gt; — 44&lt;br /&gt;
# &amp;lt;code&amp;gt;UNREACHABLE_CODE&amp;lt;/code&amp;gt; — 28&lt;br /&gt;
# &amp;lt;code&amp;gt;DEREF_AFTER_NULL.EX&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
# &amp;lt;code&amp;gt;NULL_AFTER_DEREF&amp;lt;/code&amp;gt; — 27&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;Unspecified&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;by_severity&amp;lt;/code&amp;gt; — маркеры без ручного ревью, а не «низкий приоритет». Поле &amp;lt;code&amp;gt;by_checker&amp;lt;/code&amp;gt; не сортируется, на большом снимке оно может содержать более 100 ключей — чтобы получить именно топ-N, следует явно сформулировать запрос: «топ-5 детекторов».&lt;br /&gt;
&lt;br /&gt;
=== Тренд по нескольким снимкам ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Как у openssl менялось число предупреждений за последние пять снимков? Покажи таблицей.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — взять список&lt;br /&gt;
# &amp;lt;code&amp;gt;get_project_stats()&amp;lt;/code&amp;gt; × 5 — по каждому из последних пяти снимков&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Снимок&lt;br /&gt;
!Дата&lt;br /&gt;
!Всего&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:49&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:29&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 05:08&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:48&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|-&lt;br /&gt;
|2020-04-30 04:22&lt;br /&gt;
|30.04.2020&lt;br /&gt;
|1252&lt;br /&gt;
|}&lt;br /&gt;
На демонстрационном стенде указанные пять снимков openssl импортированы с интервалом в 20 минут одного дня и полностью идентичны — поэтому динамика отсутствует. На реальном проекте с историей релизов значения будут изменяться.&lt;br /&gt;
&lt;br /&gt;
=== Найти срабатывания конкретного детектора ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Где в bash срабатывает PROC_USE.VULNERABLE? Покажи список — файл, строка, что именно ругается. Достаточно первых десяти.&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/tmpfile.c:160&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;mktemp()&amp;lt;/code&amp;gt;, race condition. Рекомендуется &amp;lt;code&amp;gt;mkstemp()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/shell.c:151&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;, значение может быть подменено.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/shell.c:415&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/readline/complete.c:1516&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getenv()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;/.build/lib/sh/eaccess.c:115&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;strcat()&amp;lt;/code&amp;gt;, рекомендуется &amp;lt;code&amp;gt;strncat()&amp;lt;/code&amp;gt;. …&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Фильтр &amp;lt;code&amp;gt;warnClass=[&amp;quot;PROC_USE.VULNERABLE&amp;quot;]&amp;lt;/code&amp;gt; охватывает все подклассы: &amp;lt;code&amp;gt;PROC_USE.VULNERABLE.TEMP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.GETENV&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.STRCAT&amp;lt;/code&amp;gt; и т. д. — всего 341 маркер. Несколько значений в одном параметре трактуются как логическое «ИЛИ»: &amp;lt;code&amp;gt;severity=[&amp;quot;Critical&amp;quot;,&amp;quot;Major&amp;quot;]&amp;lt;/code&amp;gt; возвращает маркеры обеих категорий.&lt;br /&gt;
&lt;br /&gt;
В ответе будет &amp;lt;code&amp;gt;total_count: 341, returned_count: 30, truncated: true&amp;lt;/code&amp;gt; — это ожидаемое поведение. Модель видит общий объём по &amp;lt;code&amp;gt;total_count&amp;lt;/code&amp;gt; и при необходимости сужает запрос или вызывает &amp;lt;code&amp;gt;get_markers(..., limit=0)&amp;lt;/code&amp;gt;, чтобы получить полный список.&lt;br /&gt;
&lt;br /&gt;
=== Сравнить два снимка ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Возьми два последних снимка paho.mqtt.c — что между ними изменилось? Сколько новых предупреждений, сколько починили?&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — два последних&lt;br /&gt;
# &amp;lt;code&amp;gt;get_diff(base_snapshot_id=&amp;quot;72b3df7b-...&amp;quot;, head_snapshot_id=&amp;quot;b42cb563-...&amp;quot;, level=0)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Между двумя последними снимками paho.mqtt.c:&lt;br /&gt;
&lt;br /&gt;
* Новых: 12&lt;br /&gt;
* Удалённых: 13&lt;br /&gt;
* Изменённых: 99&lt;br /&gt;
* Совпадающих: 185&lt;br /&gt;
&lt;br /&gt;
Удалено несколько больше, чем добавлено — общая картина практически не изменилась.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Категория &amp;lt;code&amp;gt;modified&amp;lt;/code&amp;gt; — маркер, присутствующий в обоих снимках, у которого изменилось окружение (номер строки, контекст функции). Это не новая ошибка. На больших проектах рекомендуется начинать с &amp;lt;code&amp;gt;level=0&amp;lt;/code&amp;gt; для получения статистики, при необходимости использовать &amp;lt;code&amp;gt;level=1&amp;lt;/code&amp;gt; (только идентификаторы маркеров) и затем точечно вызывать &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; с нужными фильтрами.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;level=2&amp;lt;/code&amp;gt; возвращает полные маркеры по категориям, причём каждая категория по умолчанию ограничена 20 маркерами. Категории располагаются внутри &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;new_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;missing_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;modified_markers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;matched_markers&amp;lt;/code&amp;gt;. Структура ответа в JSON: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;markers&amp;quot;: {&amp;quot;new_markers&amp;quot;: {&amp;quot;total_count&amp;quot;: N, &amp;quot;returned_count&amp;quot;: ..., &amp;quot;truncated&amp;quot;: ..., &amp;quot;markers&amp;quot;: [...]}, ...}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Если требуется полное содержимое категории, следует увеличить &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; или выполнить отдельный вызов &amp;lt;code&amp;gt;get_markers&amp;lt;/code&amp;gt; по нужным идентификаторам.&lt;br /&gt;
&lt;br /&gt;
=== Разобрать конкретное предупреждение ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;В bash есть один подтверждённый критикал — что-то про разыменование указателя. Покажи код вокруг этого места и объясни в чём проблема.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цепочка вызовов:&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_projects()&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;get_snapshots()&amp;lt;/code&amp;gt; — найти снимок bash&lt;br /&gt;
# &amp;lt;code&amp;gt;get_markers(severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;])&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;get_advanced_file_preview(file_path=&amp;quot;/.build/execute_cmd.c&amp;quot;, line=3327, before=10, after=10)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ответ модели:&#039;&#039;&#039;&amp;lt;blockquote&amp;gt;Маркер &amp;lt;code&amp;gt;DEREF_AFTER_NULL.LOOP&amp;lt;/code&amp;gt; в функции &amp;lt;code&amp;gt;select_query()&amp;lt;/code&amp;gt;, строка 3327:&lt;br /&gt;
 &amp;lt;code&amp;gt;for (l = list; l &amp;amp;&amp;amp; --reply; l = l-&amp;gt;next)&lt;br /&gt;
&lt;br /&gt;
     ;&lt;br /&gt;
&lt;br /&gt;
return (l-&amp;gt;word-&amp;gt;word);  /* l может быть NULL после выхода из цикла */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если список заканчивается раньше, чем &amp;lt;code&amp;gt;reply&amp;lt;/code&amp;gt; обнуляется, &amp;lt;code&amp;gt;l&amp;lt;/code&amp;gt; станет &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; на последнем &amp;lt;code&amp;gt;l-&amp;gt;next&amp;lt;/code&amp;gt;, и следующий &amp;lt;code&amp;gt;l-&amp;gt;word-&amp;gt;word&amp;lt;/code&amp;gt; — разыменование нулевого указателя.&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;file_path&amp;lt;/code&amp;gt; должен точно совпадать со значением, возвращённым маркером, включая ведущий префикс &amp;lt;code&amp;gt;/.build/...&amp;lt;/code&amp;gt;. Это путь внутри сборочной директории Svacer, а не путь в исходном репозитории; соответствие в репозитории определяется по имени файла.&lt;br /&gt;
&lt;br /&gt;
Для одиночной разметки удобно сразу запрашивать полный маркер с трассами: &amp;lt;code&amp;gt;get_markers(..., severity=[&amp;quot;Critical&amp;quot;], review=[&amp;quot;Confirmed&amp;quot;], traces=True, checker_info=True)&amp;lt;/code&amp;gt;. Флаги &amp;lt;code&amp;gt;traces&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;checker_info&amp;lt;/code&amp;gt; указывают серверу включить соответствующие поля в ответ; в выдаче они сохраняются и при значении &amp;lt;code&amp;gt;fields&amp;lt;/code&amp;gt; по умолчанию. Значение &amp;lt;code&amp;gt;fields=[&amp;quot;*&amp;quot;]&amp;lt;/code&amp;gt; требуется лишь в том случае, когда дополнительно нужны &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; — служебные ключи, исключённые из компактного набора.&lt;/div&gt;</summary>
		<author><name>Mitrofanov</name></author>
	</entry>
</feed>