ymcp, или как подружить агентов с YouTrack, если ты не админ

Всё началось с того, что я в очередной раз копировал описание задачи из YouTrack в Claude Code. Потом комментарии к ней. Потом ещё один комментарий, который кто‑то оставил, пока я копировал первые. Потом ждал, пока агент напишет код, открывал PR, возвращался в задачу, вставлял ссылку, менял статус на Fixed — и шёл за следующей.

В какой‑то момент я понял, что из всей этой цепочки самая бесполезная её часть — это я. Агент умеет писать код, YouTrack умеет хранить задачи, а я работаю буфером обмена с ногами.

Решение вроде бы очевидное: дать агенту доступ к трекеру через MCP, и пусть сам читает, сам пишет, сам двигает задачи. Ну чтож, давайте подключим.

Подключим, говорите

Наш YouTrack живёт на своём сервере за VPN. Я в нём обычный пользователь: вижу свои проекты, пишу комментарии, перетаскиваю карточки. Администратором я не являюсь.

Ну и собственно... Хочешь, чтобы внешняя штука работала от твоего имени, — нужен токен. Токен — к админу. Хочешь OAuth — нужен зарегистрированный клиент с секретом. Клиент — к админу. Можно было бы войти по логину и паролю через OAuth password grant, но ему тоже нужен секрет сервиса, которого у обычного пользователя нет и, честно говоря, быть не должно.

Ладно, думаю, хотя бы почитать‑то я могу. Прошу у API список групп:

403 Forbidden

Схемы полей проекта, без которых агент не знает, что у поля State бывает «Fixed», а не «Done»:

403 Forbidden

Ну и вишенка. Чтобы трекер сам сообщал о новых задачах, нужны вебхуки или workflow. Угадайте, кто их настраивает.

Забавно, что всё это я каждый день делаю руками в браузере. Читаю задачи, вижу значения полей, пишу комментарии. Под своим логином, без всяких токенов. То есть права у меня есть — нет только способа отдать их агенту, не сходив перед этим к админу с объяснительной. Не в упрек, просто я понял что сам я смогу сделать быстрее, да и возможно помочь соплеменникам подсадив на свою же тулзу) Поэтому я написал (ладно, навайбкодил) ymcp.

Логин, пароль и всё

Идея простая до неприличия: если я могу всё это в браузере, пусть агент заходит туда так же — под моим логином и паролем. Без токенов, без OAuth‑клиентов, без вебхуков и без единой галочки в настройках самого YouTrack.

curl -fsSL https://raw.githubusercontent.com/xlsft/ymcp/main/install.sh | sh

Установщик сам запускает ymcp setup. Тот спрашивает URL, логин и пароль, проверяет их и прячет пароль в системное хранилище ключей — Keychain на маке, Secret Service на Linux, Credential Manager на Windows. Дальше он находит на машине MCP‑клиенты и прописывается в те, что вы отметите: Claude Code, Cursor, VS Code, Zed, Codex, Gemini CLI и ещё несколько. Всё, в любом из них у агента теперь есть YouTrack.

А как без секрета‑то

Без магии. ymcp берёт адрес Hub из публичного /api/config, отправляет форму входа, получает сессию и забирает bearer‑токен из того же OAuth‑потока, через который входит сам веб‑клиент YouTrack. Токен протух — обновится из сессии. Пароль уходит повторно, только когда истекла сама сессия. Аккаунты YouTrack, Hub и LDAP — без разницы.

С 403 история похожая. Там, где API для групп, схем полей и комментариев требует админских прав, ymcp достаёт то же самое из того, что обычному пользователю и так видно. Агенту не надо знать, какие у вас права. Он просто получает ответ.

Что агенту можно

У YouTrack есть свой MCP‑сервер на 23 инструмента, который кстати просто так тоже не подключишь без нужных разрешений. ymcp повторяет их один в один, с теми же именами и аргументами, так что промпты, написанные под встроенный сервер, работают без правок. А сверху ещё 35: удаление задач и комментариев, спринты, история изменений, отчёты по времени, массовые команды с пробным запуском, правка куска описания по регулярке, вложения и запасной call_api на любой эндпоинт, если всего остального не хватило.

Отдельно я возился с ошибками. Модель не умеет пожимать плечами, поэтому ошибка должна сразу говорить, что делать дальше:

value “Urgent” is not allowed; allowed: Critical, Major, Normal, Minor

После 404 подсказывает, каким инструментом найти правильный ID. После 403 — что это нехватка прав, а не повод долбить запросом ещё десять раз. Инструменты, которые что‑то удаляют, помечены, и клиент переспросит, прежде чем агент снесёт вам полпроекта.

С этого момента первая половина проблемы ушла. Пишу агенту «возьми YPC‑34 и почини» — он сам читает задачу и комментарии, пишет код, гоняет тесты, переводит задачу в Fixed и оставляет в ней отчёт. Я в этом процессе присутствую в роли зрителя.

Я заменен, но не до конца, докручиваем

Быстро выяснилось, что зритель из меня так себе. Задачу‑то я всё ещё выбирал сам. И сам говорил агенту «возьми». И сам открывал PR. Бэклог при этом рос быстрее, чем я успевал его раздавать, — что, в общем, логично: задачи создают несколько человек, а раздаю их я один.

Поэтому во второй части ymcp живут пайплайны. Пайплайн смотрит на поиск в YouTrack — например, project: YPC #Unresolved tag: ai — и раздаёт всё, что нашёл, кодинг‑агентам. Вебхуки не нужны: ymcp сам опрашивает тот же поиск под тем же логином. Админ, вы не поверите, опять не нужен.

Каждая задача получает свой git worktree и свою ветку. Агент работает на этой машине или на сервере по SSH — подойдут Claude Code, Kimi, opencode и вообще любой агент, который говорит по ACP. Готовую работу ymcp пушит веткой, GitHub PR или GitLab MR, а описание к нему агент пишет отдельным коротким ходом, чтобы туда не попали его рабочие размышления про то, где лежит go.mod.

Дальше ymcp следит за CI. Упало — отдаёт агенту упавшие джобы с хвостами логов. Пришло ревью — приносит комментарии в ту же сессию. Задача сама едет по доске: Backlog, Working, Review, Done, со связанными полями в YouTrack.

Needs input

А вот это, пожалуй, самое ценное. Агент иногда упирается: задаёт вопрос или просит разрешение. Например, ему вдруг понадобилось запустить make migrate. Обычно в этот момент агент либо молча ждёт, пока вы о нём вспомните, либо, что хуже, не ждёт.

Здесь прогон останавливается, задача уезжает в колонку Needs input, а вам прилетает системное уведомление. Ответить можно где удобно — комментарием в YouTrack, в PR или в терминале. /approve разрешает до конца прогона ровно те вызовы, о которых агент спросил, а не весь Bash целиком. Друзья, которые давали агенту --dangerously-skip-permissions «на минуточку», я вас понимаю, но так тоже можно.

Как оно выглядит

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

Всё работает локально. Пароль лежит в системном хранилище ключей, а агент ходит в YouTrack только через свой MCP‑сервер на loopback‑порту с отдельным токеном на каждый прогон. Наружу ничего не уезжает, кроме того, что вы и так отправили бы в YouTrack и на GitHub.

TL;DR: ymcp — это MCP‑сервер для YouTrack, которому нужны только логин и пароль, плюс пайплайны, которые раздают задачи кодинг‑агентам и возвращают PR. Ни токенов, ни OAuth, ни вебхуков, ни прав админа.

Что пока не так

Честности ради. Двухфакторной аутентификации пока нет — если она у вас включена, ymcp вежливо откажется. Пайплайны работают только при локальной установке, Docker‑образ — это один MCP‑сервер. И агент может ровно то, что позволяют его собственные настройки: новый пайплайн для Claude стартует с --dangerously-skip-permissions, и для чувствительного репозитория его стоит поменять на --allowedTools.

Итог

Раньше мостом между трекером и агентом был я. Теперь мост — ymcp, а я отвечаю на вопросы агента и смотрю ревью. Ходить к админу все же не пришлось.

curl -fsSL https://raw.githubusercontent.com/xlsft/ymcp/main/install.sh | sh

Или brew install xlsft/tap/ymcp, Scoop на Windows, Docker‑образ xlsoftware/ymcp. Код открыт под MIT: https://github.com/xlsft/ymcp, сайт — https://ymcp.su. Буду рад issue и историям, как вы подключаете агентов к своему трекеру. Особенно если у вас тоже нет админки.

Админа, впрочем, я всё ещё уважаю. Просто больше не беспокою:‑)

Комментарии (2)


  1. martyncev
    28.10.2026 20:29

    Всё началось с того, что я в очередной раз копировал описание задачи из YouTrack в Claude Code. Потом комментарии к ней. Потом ещё один комментарий, который кто‑то оставил, пока я копировал первые. Потом ждал, пока агент напишет код, открывал PR, возвращался в задачу, вставлял ссылку, менял статус на Fixed — и шёл за следующей.

    А может пора начать работать мозгами и писать нормальный код, а не в эти ИИ-шные бирюльки играть?


  1. paramtamtam
    28.10.2026 20:29

    ясно, понятно