MCP-сервер (Model Context Protocol) для работы с GitVerse — российским сервисом хостинга репозиториев. Сервер даёт AI-ассистентам (Cursor, Claude Desktop, ZCode и любым MCP-клиентам) доступ к вашим репозиториям, pull request'ам и CI: можно листать и создавать PR, проводить code review — оставлять инлайн-комментарии к диффу, ставить вердикты approve / request changes / decline, назначать исполнителей и лейблы, запускать и разбирать CI-раны вплоть до логов джоб.
Набор из 25 инструментов повторяет семантику популярного bitbucket-mcp: привычные имена (getPullRequests, approvePullRequest, addPullRequestComment…), но поверх REST API GitVerse.
Сервер реализует стандарт Model Context Protocol и предоставляет инструменты для:
- Репозитории — список своих или репозиториев организации, карточка репозитория
- Pull request'ы — список с фильтром по состоянию, создание (включая черновики), правка заголовка/описания/состояния/базовой ветки, коммиты и изменённые файлы PR, таймлайн активности
- Code review — инлайн-комментарии к конкретным строкам диффа, комментарии обсуждения (создание/правка/удаление), вердикты: одобрить, запросить изменения, заклонить, снять своё одобрение
- Назначения — assignees и labels на PR (PR в GitVerse является issue)
- CI — ран-ы GitVerse Actions (аналог Bitbucket Pipelines): список с фильтрами, карточка рана, запуск workflow, джобы и их логи
Все операции выполняются через официальный публичный REST API GitVerse: заголовки Authorization: Bearer и вендорный Accept: application/vnd.gitverse.object+json; version=1 выставляются автоматически, ответы 429 автоматически повторяются с учётом Retry-After.
| Группа | Инструменты |
|---|---|
| Репозитории | listRepositories · getRepository |
| Pull request'ы | getPullRequests · createPullRequest · createDraftPullRequest · getPullRequest · updatePullRequest · getPullRequestActivity · getPullRequestCommits · getPullRequestDiff |
| Вердикты ревью | approvePullRequest · unapprovePullRequest · requestChanges · removeChangeRequest · declinePullRequest |
| Комментарии | getPullRequestComments · addPullRequestComment · updatePullRequestComment · deletePullRequestComment |
| CI (Actions) | listPipelineRuns · getPipelineRun · runPipeline · getPipelineSteps · getPipelineStep · getPipelineStepLogs |
Запуск без глобальной установки:
GITVERSE_TOKEN="ваш-токен" npx -y @grigoriy-grisha/gitverse-mcp@latestЛибо установите глобально или в проект:
# Глобально
npm install -g @grigoriy-grisha/gitverse-mcp
# Или в проект
npm install @grigoriy-grisha/gitverse-mcpЗатем запускайте:
# Глобальная установка
GITVERSE_TOKEN="ваш-токен" gitverse-mcp
# Установка в проект
GITVERSE_TOKEN="ваш-токен" npx @grigoriy-grisha/gitverse-mcpТребуется Node.js 20 или выше.
| Переменная | Описание | Обязательна |
|---|---|---|
GITVERSE_TOKEN |
Персональный токен GitVerse (см. ниже) | Да |
GITVERSE_BASE_URL |
База API. По умолчанию https://api.gitverse.ru |
Нет |
GITVERSE_API_VERSION |
Версия вендорного media type. По умолчанию 1 |
Нет |
- Войдите в ваш аккаунт на gitverse.ru
- Откройте Настройки → Управление токенами
- Создайте новый токен с правами:
- Репозитории: чтение, запись
- Issues / Pull requests: чтение, запись
- CI/CD (Actions): чтение, запись — нужно для тулов
*Pipeline*
- Скопируйте сгенерированный токен и используйте его как
GITVERSE_TOKEN
Подробности — в документации по токенам.
Добавьте в конфигурацию MCP (~/.zcode/mcp.json или настройка проекта):
{
"mcpServers": {
"gitverse": {
"command": "npx",
"args": ["-y", "@grigoriy-grisha/gitverse-mcp@latest"],
"env": {
"GITVERSE_TOKEN": "ваш-токен"
}
}
}
}В файле claude_desktop_config.json:
{
"mcpServers": {
"gitverse": {
"command": "npx",
"args": ["-y", "@grigoriy-grisha/gitverse-mcp@latest"],
"env": {
"GITVERSE_TOKEN": "ваш-токен"
}
}
}
}- Откройте Settings → Extensions → Model Context Protocol
- Добавьте конфигурацию:
"gitverse": {
"command": "npx",
"env": {
"GITVERSE_TOKEN": "ваш-токен"
},
"args": ["-y", "@grigoriy-grisha/gitverse-mcp@latest"]
}Если правите сервер локально и хотите проверить изменения:
"gitverse-local": {
"command": "node",
"env": {
"GITVERSE_TOKEN": "ваш-токен"
},
"args": ["/путь/к/gitverse-mcp/dist/index.js"]
}- Проверьте токен: убедитесь, что используете персональный токен из «Управление токенами», а не пароль аккаунта
- Проверьте права токена: для базовых операций нужно «Репозитории: чтение»; для вердиктов и комментариев — запись
- Проверьте токен вручную через curl:
curl -H "Authorization: Bearer ваш-токен" \
-H "Accept: application/vnd.gitverse.object+json; version=1" \
"https://api.gitverse.ru/user"API GitVerse ограничивает 2000 запросов в час на пользователя. Сервер автоматически повторяет такие запросы с учётом заголовка Retry-After (до 3 попыток). Если лимиты всё равно исчерпываются — снизьте частоту вызовов в сценарии ассистента.
Проверьте, что токен передаётся вместе с вендорным заголовком Accept: application/vnd.gitverse.object+json; version=1 — без него шлюз GitVerse отвечает 400. При работе через этот MCP-сервер заголовок ставится автоматически, ошибка возникает только при ручных curl-проверках.
Сервер предоставляет 25 инструментов для работы с репозиториями, PR и CI. Полный список по группам:
Если не указано иное, листинги (listRepositories, getPullRequests, getPullRequestCommits, listPipelineRuns) принимают опциональные параметры пагинации:
page(optional): номер страницы, начиная с 1. По умолчанию возвращается первая страница.per_page(optional): количество элементов на странице.
Возвращает список репозиториев.
Параметры:
org(optional): имя организации — если указано, возвращаются репозитории организации; иначе — репозитории текущего пользователяpage(optional),per_page(optional): пагинация
Возвращает карточку репозитория.
Параметры:
owner: владелец репозитория (пользователь или организация)repo: имя репозитория
Возвращает pull request'ы репозитория.
Параметры:
owner: владелецrepo: имя репозиторияstate(optional): состояние PR —openилиclosedpage(optional),per_page(optional): пагинация
Создаёт pull request из ветки head в ветку base.
Параметры:
owner: владелецrepo: имя репозиторияtitle: заголовок PRhead: исходная веткаbase: целевая веткаbody(optional): описание PR (markdown)draft(optional): создать как черновикassignees(optional): список username для назначенияlabels(optional): список лейблов
Примечание: запрос ревьюеров (reviewers) в API GitVerse отсутствует — используйте assignees.
Создаёт pull request в статусе черновика.
Параметры:
owner,repo,title,head,base— как уcreatePullRequestbody(optional): описание PR
Примечание: эквивалентно createPullRequest с draft: true.
Возвращает карточку конкретного pull request'а.
Параметры:
owner: владелецrepo: имя репозиторияpull_number: номер PR
Обновляет pull request: заголовок, описание, состояние, целевую ветку; дополнительно может заменить assignees и labels (через issue-эндпоинт — PR в GitVerse является issue).
Параметры:
owner: владелецrepo: имя репозиторияpull_number: номер PRtitle(optional): новый заголовокbody(optional): новое описаниеstate(optional): новое состояние —openилиclosedbase(optional): новая целевая веткаassignees(optional): заменить исполнителейlabels(optional): заменить лейблы
Возвращает таймлайн активности pull request'а.
Параметры:
owner,repo,pull_number
Возвращает коммиты pull request'а.
Параметры:
owner,repo,pull_numberpage(optional),per_page(optional): пагинация
Возвращает изменённые файлы pull request'а с построчными патчами.
Параметры:
owner,repo,pull_number
Одобряет pull request — создаёт ревью с вердиктом APPROVED.
Параметры:
owner,repo,pull_numberbody(optional): комментарий к одобрению
Снимает ваше одобрение: находит ваше последнее APPROVED-ревью и удаляет его.
Параметры:
owner,repo,pull_number
Запрашивает изменения — создаёт ревью с вердиктом REQUEST_CHANGES.
Параметры:
owner,repo,pull_numberbody(optional): что нужно изменить
Снимает ваш change request — перекрывает его новым ревью с вердиктом APPROVED (отдельного эндпоинта в API GitVerse нет).
Параметры:
owner,repo,pull_numberbody(optional): комментарий
Заклоняет (закрывает) pull request.
Параметры:
owner,repo,pull_numbermessage(optional): причина отклонения — публикуется комментарием в обсуждение перед закрытием
Возвращает комментарии обсуждения pull request'а.
Параметры:
owner,repo,pull_numbersince(optional): только комментарии, созданные после ISO-времениbefore(optional): только комментарии, созданные до ISO-времени
Создаёт комментарий к pull request — общий или инлайн.
Параметры:
owner: владелецrepo: имя репозиторияpull_number: номер PRcontent: текст комментария (markdown)inline(optional): инлайн-комментарий к конкретной строке диффа:
{
"path": "src/file.ts",
"to": 15
}reply_to(optional): id комментария, на который отвечаем (только для общих комментариев)
Формат инлайн-комментария:
path: путь к файлу в диффеto: номер строки в новой версии (добавленные и изменённые строки)
SHA коммита определяется автоматически — отдельно передавать его не нужно.
Примеры:
// Общий комментарий
addPullRequestComment(owner, repo, 14, "Отличная работа!");
// Инлайн-комментарий к строке 25 файла src/service.ts
addPullRequestComment(owner, repo, 14, "Добавь обработку ошибок", {
inline: { path: "src/service.ts", to: 25 }
});Редактирует комментарий обсуждения.
Параметры:
owner,repo,pull_numbercomment_id: id комментарияcontent: новый текст
Удаляет комментарий обсуждения.
Параметры:
owner,repo,pull_numbercomment_id: id комментария
CI-раны GitVerse Actions — аналог Bitbucket Pipelines.
Возвращает CI-раны репозитория.
Параметры:
owner,repostatus(optional): фильтр по статусу —queued,in_progress,success,failure,cancelled,unknownbranch(optional): фильтр по веткеevent(optional): фильтр по событию-триггеруpage(optional),per_page(optional): пагинация
Возвращает карточку CI-рана.
Параметры:
owner,reporun_id: id рана
Запускает workflow на ветке или теге.
Параметры:
owner,repoworkflow: имя файла workflow (напримерci.yml) или idref_type: что передаётся вref_name—branchилиtagref_name: имя ветки или тегаinputs(optional): входные параметры workflow (строковые значения)
Возвращает джобы (шаги) CI-рана.
Параметры:
owner,reporun_id: id рана
Возвращает карточку джобы.
Параметры:
owner,repojob_id: id джобы
Возвращает логи джобы.
Параметры:
owner,repojob_id: id джобы
Часть возможностей Bitbucket в публичном API GitVerse отсутствует, поэтому соответствующих тулов нет:
- merge PR — эндпоинта слияния в API нет (только проверка «смержен ли» и обновление ветки из base)
- reviewers при создании PR — есть только assignees
- переключение draft после создания (
publishDraftPullRequest/convertTodraft) - задачи (tasks) на PR
- resolve / reopen тредов комментариев
- остановка CI-рана (cancel отсутствует)
- commit statuses — вместо них используйте
listPipelineRunsс фильтром по ветке
- Node.js 20 или выше
- npm
# Клонировать репозиторий
git clone <repo-url>
cd gitverse-mcp
# Установить зависимости
npm install
# Собрать проект
npm run build
# Запустить тесты
npm test
# Запустить локально
GITVERSE_TOKEN="ваш-токен" npm startsrc/composite.ts 25 тулов: имена и семантика Bitbucket MCP, вызовы API GitVerse
src/client.ts HTTP-клиент: Bearer + vendor Accept, 429/Retry-After, ошибки
src/server.ts MCP-сервер: регистрация тулов, аннотации readOnlyHint
src/index.ts stdio-транспорт, env-конфигурация
test/ vitest: клиент, тулы, e2e по InMemoryTransport
Проект распространяется по лицензии MIT — подробности в файле LICENSE.