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 и историям, как вы подключаете агентов к своему трекеру. Особенно если у вас тоже нет админки.
Админа, впрочем, я всё ещё уважаю. Просто больше не беспокою:‑)

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