Gitlab MCP Server
GitLab MCP Server
Подключите свой ИИ-ассистент к GitLab, чтобы он мог проверять merge request'ы, разбирать пайплайны, управлять issue и составлять релизы — на обычном языке. Один статический бинарник (или контейнер) даёт более 1000 инструментов GitLab через полный REST + GraphQL API и работает с Claude, Cursor, VS Code и любым MCP-клиентом.
Вы общаетесь со своим ИИ-ассистентом, а он выполняет работу в GitLab. Не нужно запоминать ID проектов, API-эндпоинты или JSON.
"Проверь merge request !15 — безопасно ли его сливать?" · "Почему упал последний пайплайн?" · "Покажи открытые issue, назначенные на меня" · "Сформируй примечания к релизу с v1.0 по v2.0"
🤖 Пользуетесь ИИ-ассистентом? Дайте ему URL этого репозитория и попросите установить сервер для вашего клиента. Всё, что нужно модели для выполнения этого без участия человека — декларативная конфигурация для каждого клиента, однострочники
claude mcp addи значения по умолчанию — есть вllms.txt(интерактивный мастер не требуется).
Установка за 60 секунд
Выберите один вариант. Каждый путь заканчивается тем, что вы вводите запрос своему ассистенту.
Установка в один клик
Каждая кнопка регистрирует сервер на базе Docker (при первом запуске образ подтягивается автоматически; вам нужен установленный Docker). Строка Claude Desktop вместо этого загружает нативное расширение для рабочего стола .mcpb (macOS universal + Windows, без Docker) — откройте его через Claude Desktop и заполните настройки. Нужен токен? Создайте Personal Access Token с областью api. Используете self-managed GitLab? Добавьте переменную окружения GITLAB_URL в MCP-конфиг вашего клиента после установки.
Claude Code (claude mcp add)
Docker (без установки — образ подтягивается при первом запуске):
claude mcp add gitlab --env GITLAB_TOKEN=glpat-xxxx --transport stdio \
-- docker run -i --rm -e GITLAB_TOKEN ghcr.io/jmrplens/gitlab-mcp-server:latest --http=falseИли сначала установите нативный бинарник, а затем зарегистрируйте его:
# macOS/Linux (Homebrew)
brew install jmrplens/tap/gitlab-mcp-server
# Linux/macOS (script)
curl -fsSL https://raw.githubusercontent.com/jmrplens/gitlab-mcp-server/main/scripts/install.sh | sh
# Windows (winget)
winget install --id jmrplens.gitlab-mcp-server -e
# Windows (PowerShell)
irm https://raw.githubusercontent.com/jmrplens/gitlab-mcp-server/main/scripts/install.ps1 | iex
claude mcp add gitlab --env GITLAB_TOKEN=glpat-xxxx -- gitlab-mcp-serverSelf-managed GitLab? Добавьте --env GITLAB_URL=https://gitlab.example.com (и --env GITLAB_SKIP_TLS_VERIFY=true для самоподписанных сертификатов).
Настройка с мастером (любой клиент, не нужно помнить флаги)
Бинарник поставляется с мастером настройки, который собирает ваш GitLab-токен и настраивает MCP-клиент за вас — идеально, если не хочется редактировать JSON:
gitlab-mcp-server --setupОн автоматически определяет VS Code, Claude Desktop, Claude Code, Cursor и Windsurf и записывает нужную конфигурацию. В Windows дважды щёлкните .exe, чтобы запустить его.
Ручная настройка JSON (Claude Desktop, Cursor, VS Code, …)
Нативный бинарник (Claude Desktop mcpServers, Cursor и т. д.):
{
"mcpServers": {
"gitlab": {
"command": "/path/to/gitlab-mcp-server",
"env": { "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx" }
}
}
}VS Code (.vscode/mcp.json, обратите внимание на servers + type):
{
"servers": {
"gitlab": {
"type": "stdio",
"command": "/path/to/gitlab-mcp-server",
"env": { "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx" }
}
}
}Вариант с Docker — замените "command"/"args" на:
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "GITLAB_TOKEN", "ghcr.io/jmrplens/gitlab-mcp-server:latest", "--http=false"]Cline (VS Code) — откройте боковую панель Cline → значок MCP servers → Edit Global MCP, или отредактируйте файл настроек напрямую:
macOS:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.jsonLinux:
~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.jsonWindows:
%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json
Cline использует структуру mcpServers, показанную выше, для нативного бинарника.
Для общего долгоживущего HTTP-развёртывания вместо пользовательского stdio см. режим HTTP-сервера.
Попробуйте без установки (публичный endpoint)
Публичный инстанс работает по адресу https://mcp.jmrp.io/gitlab — ничего устанавливать не нужно, кроме собственного токена GitLab, и никакой учётной записи. Направьте на него любой MCP-клиент, поддерживающий HTTP:
{
"mcpServers": {
"gitlab": {
"type": "http",
"url": "https://mcp.jmrp.io/gitlab",
"headers": { "PRIVATE-TOKEN": "glpat-xxxxxxxxxxxx" }
}
}
}PRIVATE-TOKEN обязателен и передаётся с каждым запросом — на сервере он никогда не хранится. GITLAB-URL необязателен и по умолчанию равен https://gitlab.com; задайте его, чтобы обратиться к другому инстансу (он должен быть доступен из публичного интернета).
Это самый быстрый способ попробовать сервер, но правильный способ продолжать им пользоваться — по-прежнему локально (любой вариант выше) — по одной конкретной причине, а не для проформы: ваш токен и каждый запрос проходят через чужую машину. Запуск локально означает, что ваши учётные данные и трафик GitLab никогда не покидают ваш компьютер, а кроме того, делает этот вариант единственным разумным для частного self-managed инстанса.
Endpoint — это stateless streamable HTTP на поверхности dynamic, используемой по умолчанию: транспорт — POST, GET на нём намеренно отвечает 405, а https://mcp.jmrp.io/gitlab/health отвечает 200 с {"status":"ok",…}.
Самостоятельное HTTP-развёртывание также может работать с --auth-mode=oauth --gitlab-url=https://gitlab.com --public-url=https://mcp.example.com (оба параметра обязательны: для OAuth нужны фиксированный инстанс и внешне доступный origin, по которому RFC 9728 идентифицирует ресурс) — в этом случае клиенты обнаруживают GitLab как сервер авторизации через эти метаданные и авторизуются в браузере, а не копируют токены. См. настройку OAuth-приложения.
Это один из серверов, перечисленных на mcp.jmrp.io — в каталоге MCP-серверов, которые я поддерживаю; каждый доступен по своему endpoint. https://mcp.jmrp.io/servers.json — тот же список для автоматизированных клиентов.
А дальше просто спросите: откройте ИИ-клиент и попробуйте "Список моих проектов GitLab." Подробности для каждого клиента — в руководстве по началу работы, а ещё примеры запросов — по ссылке.
Related MCP server: GitLab MCP Server
Почему этот сервер
GitLab на простом языке. ИИ переводит запрос «безопасно ли мёржить MR !15?» в правильные API-вызовы. Вам не нужно касаться эндпоинтов, ID или JSON.
Вся платформа — более 1000 инструментов. Широкое покрытие GitLab REST v4 + GraphQL: проекты, ветки, теги, релизы, запросы на слияние, задачи, пайплайны, задания, группы, пользователи, вики, окружения, развёртывания, пакеты, container registry, раннеры, feature flags, переменные CI/CD, безопасность, администрирование, токены и многое другое.
Низкое потребление токенов по умолчанию. Стандартная динамическая поверхность даёт всего 2 инструмента (
find+execute), но обеспечивает доступ ко всему каталогу — поэтому она вписывается в контекстное окно любого клиента. (Объём токенов →)Проверено на реальных моделях. Автоматический оценщик прогоняет Anthropic, Google, OpenAI и Qwen на живых инстансах GitLab: совокупный успех 99.5% на тысячах операций. (Результаты →)
Безопасно по построению. Режим «только чтение», безопасный режим (предпросмотр каждой мутации в режиме dry-run), опции TLS для self-hosted GitLab и непрерывные проверки качества/безопасности SonarCloud.
Работает где угодно. Один статический бинарник или контейнер; Windows, Linux и macOS; amd64 и arm64; stdio (десктоп) и HTTP (удалённо).
45 ресурсов MCP (данные только для чтения: проекты, задачи, пайплайны, MR, ветки, участники, манифест
gitlab://tools, учитывающий текущую поверхность, и руководства по лучшим практикам рабочих процессов). 26 типов одиночных объектов также поддерживают подписку.37 промптов MCP (ревью кода, статус пайплайна, оценка рисков, заметки о релизе, стендап, аналитика, аудит и другое).
4 мастера элиситации (интерактивное создание issue/MR/релиза/проекта).
4 возможности MCP (автодополнения, прогресс, элиситация и подписки на ресурсы — живые уведомления
resources/updated, поддерживаемые через polling), а также 51 иконка инструментов (50 доменных иконок плюс логотип проекта) для визуальной идентификации в MCP-клиентах.Пагинация на каждой конечной точке списка с полными метаданными.
Tool surfaces
Сервер может представлять GitLab в трёх формах, управляемых через TOOL_SURFACE. Вариант по умолчанию не требует настройки.
Поверхность | Видимые инструменты | Для чего лучше всего |
Dynamic (по умолчанию) | 2 ( | Минимальная стоимость токенов; полный каталог через find/execute. |
Meta-tools ( | 32 базовых / 49 Ultimate / 50 GitLab.com Ultimate | Диспетчеры, сгруппированные по доменам, с параметром |
Individual ( | ~847 Free/CE · ~999 Premium · 1065–1071 Ultimate | Один MCP-инструмент на операцию GitLab; нужно большое контекстное окно. |
Количество инструментов масштабируется в зависимости от редакции GitLab (GITLAB_TIER); более высокие редакции открывают больше действий. Модель ранжирования, защитные механизмы и полные каталоги см. в Dynamic Toolset и Meta-Tools Reference. Для динамических запусков, где ресурсы преобладают в контексте, установите CAPABILITY_SURFACE=minimal.
Token Footprint
Измерено с помощью go run ./cmd/audit_tokens/ -footprint на текущем каталоге. Итоги оценивают стартовый контекст, видимый MCP-клиенту: видимые схемы инструментов плюс общие ресурсы и промпты, с использованием токенизатора cl100k_base (кодировка GPT-4/GPT-3.5). Полную матрицу (поверхности meta и individual, все режимы META_PARAM_SCHEMA) см. в Token Footprint Reference.
Конфигурация по умолчанию: если TOOL_SURFACE не задан или равен TOOL_SURFACE=dynamic, CAPABILITY_SURFACE=full, META_TOOLS не задан, META_PARAM_SCHEMA=opaque, а GITLAB_TIER не задан (определяется автоматически, запасной вариант free), сервер использует динамическую поверхность find/execute. Используйте TOOL_SURFACE=meta только когда вам явно нужны доменные meta-инструменты; TOOL_SURFACE=individual — только когда ваш клиент может обработать полный каталог инструментов.
Конфигурация ( | Редакция | Видимые инструменты | Достижимые действия |
| Токены схем инструментов | Общие токены | Всего токенов |
| Free/CE | 2 | 851 | n/a | 1,499 | 8,720 | 10,219 |
| Free/CE | 2 | 851 | n/a | 1,499 | 170 | 1,669 |
| Premium | 2 | 1,003 | n/a | 1,499 | 8,720 | 10,219 |
| Premium | 2 | 1,003 | n/a | 1,499 | 170 | 1,669 |
| Ultimate | 2 | 1,069 | n/a | 1,499 | 8,720 | 10,219 |
| Ultimate | 2 | 1,069 | n/a | 1,499 | 170 | 1,669 |
В строках используется базовый каталог Community Edition, если в колонке «Редакция» не указано иное. GITLAB_TIER определяет, какие действия доступны; более высокие редакции открывают больше инструментов и, следовательно, больше достижимых действий.
Compatibility
Возможность MCP | Поддержка |
Инструменты | До 1071 individual / 32–50 meta |
Ресурсы | 45 (статические + шаблоны) |
Промпты | 37 шаблонов |
Автодополнения | 17 типов аргументов: проекты, группы, пользователи, ветки, теги, MR, задачи, пайплайны, задания, метки, вехи, SHA |
Логи сервера | Структурированные (text/JSON) в stderr — не через возможность MCP |
Прогресс | Отчёты о ходе выполнения инструментов |
Элиситация | 4 интерактивных мастера создания |
Подписки |
|
Протестировано с: VS Code + GitHub Copilot, Claude Desktop, Claude Code, Cursor, Windsurf, JetBrains IDEs, Zed, Kiro, Cline. См. полную Compatibility Matrix.
AI Model Tool-Use Evaluation
Проект включает автоматический оценщик качества MCP для моделей. Он выполняет проверки только по схемам каталога инструментов либо исполняет валидированные вызовы инструментов моделей через MCP против Docker GitLab CE или лицензированных инстансов Enterprise, наполненных фикстурами. Он определяет, выбирает ли каждая модель правильное действие, отправляет ли валидные параметры, восстанавливается ли после ошибок GitLab, на которые можно среагировать, и соблюдает ли защитные ограничения для деструктивных действий — на Anthropic, Google, OpenAI и Qwen.
Текущий опубликованный результат: Docker CE dynamic 20260627-232303.
Провайдер | Модель | Совместимость | Точность инструментов | Восстановление | Статус Docker live |
Anthropic |
| OK | 100.0% | 100.0% (2/2) | 100.0% финальных на 555 операциях |
| OK | 100.0% | 100.0% (4/4) | 100.0% финальных на 555 операциях | |
OpenAI |
| Review | 99.3% | 84.6% (11/13) | 98.0% финальных на 555 операциях |
Qwen |
| OK | 100.0% | 100.0% (5/5) | 100.0% финальных на 555 операциях |
Опубликованный набор модельных оценок охватывает 596 попыток выполнения задач и 2220 ожидаемых операций MCP. В выбранных отчётах модели совершили 2265 вызовов инструментов на 2265 модельных запросов, с совокупным финальным успехом 99.5%. Детальную текущую матрицу см. в AI Model Evaluation Results.
Текущий опубликованный результат: Docker Enterprise meta 20260527.
Провайдер | Модель | Совместимость | Точность инструментов | Восстановление | Статус Docker live |
Anthropic |
| OK | 100.0% | 100.0% (1/1) | 100.0% финальных на 84 операциях |
| Review | 78.2% | 100.0% (7/7) | 100.0% финальных на 84 операциях | |
OpenAI |
| Review | 100.0% | 100.0% (4/4) | 100.0% финальных на 84 операциях |
Qwen |
| OK | 100.0% | 100.0% (1/1) | 100.0% финальных на 84 операциях |
Опубликованный набор модельных оценок охватывает 92 попытки выполнения задач и 336 ожидаемых операций MCP. В выбранных отчётах модели совершили 345 вызовов инструментов на 350 модельных запросов, с совокупным финальным успехом 100.0%. Детальную текущую матрицу см. в AI Model Evaluation Results.
Текущий опубликованный результат: Docker Enterprise dynamic 20260628-015421.
Провайдер | Модель | Совместимость | Точность инструментов | Восстановление | Статус Docker live |
Anthropic |
| OK | 100.0% | 100.0% (1/1) | 100.0% финальных на 202 операциях |
| OK | 100.0% | 100.0% (2/2) | 100.0% финальных на 202 операциях | |
OpenAI |
| OK | 100.0% | Без исправлений | 100.0% финальных на 202 операциях |
Qwen |
| OK | 100.0% | 100.0% (1/1) | 100.0% финальных на 202 операциях |
Опубликованный набор модельных оценок охватывает 124 попытки выполнения задач и 808 ожидаемых операций MCP. В выбранных отчётах модели совершили 817 вызовов инструментов на 817 модельных запросов, с совокупным финальным успехом 100.0%. Детальную текущую матрицу см. в AI Model Evaluation Results.
Документация
Полная документация доступна по адресу jmrp.io/docs/gitlab-mcp-server. Используйте эту таблицу как основной справочник по конкретной области:
Документ | Описание |
Загрузка, мастер настройки, конфигурация для каждого клиента | |
Примеры stdio, устаревшего HTTP и HTTP OAuth для каждого клиента | |
Переменные окружения, режимы транспорта, TLS | |
Исчерпывающая таблица переменных окружения со значениями по умолчанию и примерами | |
Все флаги командной строки, коды выхода и примеры выполнения | |
Общие HTTP-развёртывания, аутентификация, изоляция пула серверов | |
Приложение GitLab OAuth, области доступа, URI перенаправления и клиенты, которые могут завершить поток | |
Запуск сервера в конвейерах GitLab CI и GitHub Actions | |
Контракт ответа, которому следует каждый инструмент: блоки контента, пагинация, следующие шаги | |
Классификация ошибок, извлечение сообщений GitLab и подсказки, возвращаемые инструментами | |
Все отдельные инструменты со схемами ввода/вывода, включая Orbit, доступный только на GitLab.com | |
32/49/50 доменных мета-инструментов с диспетчеризацией действий | |
Режим из 2 инструментов с низким расходом токенов, канонический каталог действий, модель безопасности и примеры | |
Все 45 ресурсов с шаблонами URI | |
Все 37 промптов с аргументами и форматом вывода | |
Механизм самообновления, режимы и формат релизов | |
Модульные тесты, E2E, оценка схемной модели, оценка модели в Docker и отобранные результаты моделей | |
Модель безопасности, области действия токенов, проверка ввода | |
Системная архитектура, проектирование компонентов, потоки данных | |
Сборка, тестирование, CI/CD, вклад в проект | |
Частые проблемы с запуском, токенами, TLS, транспортом и обнаружением инструментов |
FAQ
Да. Установите GITLAB_URL в URL вашего экземпляра. Если GITLAB_URL не указан, режим stdio использует https://gitlab.com. Самоподписанные TLS-сертификаты поддерживаются через GITLAB_SKIP_TLS_VERIFY=true.
Когда вы запускаете его самостоятельно — локально через stdio или в собственной инфраструктуре через HTTP — все API-запросы идут напрямую в ваш экземпляр GitLab. Единственный запрос, который уходит куда-либо ещё, — это проверка обновлений на GitHub Releases; она включена по умолчанию и отключается с помощью AUTO_UPDATE=false.
Исключение — размещённая конечная точка: использование https://mcp.jmrp.io/gitlab означает, что ваш токен и каждый запрос проходят через эту машину. Там ничего не хранится, но это чужой сервер, поэтому раздел о размещённом сервере рекомендует продолжать использовать его локально.
О том, что именно отправляет проверка обновлений, см. PRIVACY.md, а о модели безопасности — SECURITY.md.
Да. Установите GITLAB_READ_ONLY=true, чтобы отключить все изменяющие инструменты (create, update, delete). Доступны будут только операции чтения.
Либо установите GITLAB_SAFE_MODE=true для режима пробного запуска (dry-run): изменяющие инструменты остаются видимыми, но вместо выполнения возвращают структурированное JSON-представление. Полезно для аудита, обучения или проверки того, что сделал бы ИИ-ассистент.
Обе редакции: Community Edition (CE) и Enterprise Edition (EE). Установите GITLAB_TIER=premium или GITLAB_TIER=ultimate в режиме stdio, чтобы включить дополнительные инструменты для функций Premium/Ultimate (метрики DORA, уязвимости, соответствие требованиям и т. д.); если параметр не задан, уровень определяется по лицензии экземпляра (запасной вариант — free). В режиме HTTP уровень можно принудительно задать через --tier, иначе он определяется по лицензии для каждой записи пула «токен+URL».
Сервер включает логику повторов с отсрочкой (backoff) при ограничениях частоты запросов GitLab API. Ошибки классифицируются как временные (повторяемые) или постоянные, с практическими подсказками в сообщениях об ошибках.
Любой MCP-совместимый клиент: VS Code + GitHub Copilot, Claude Desktop, Cursor, Claude Code, Windsurf, IDE от JetBrains, Zed, Kiro и другие. Встроенный мастер настройки может автоматически настроить большинство клиентов.
Сборка из исходного кода
git clone https://github.com/jmrplens/gitlab-mcp-server.git
cd gitlab-mcp-server
make buildОпубликованный образ контейнера — ghcr.io/jmrplens/gitlab-mcp-server:latest. О кроссплатформенной компиляции, Docker Compose и правилах внесения вклада см. Development Guide.
Компонент | Технология |
Язык | Go 1.27+ |
MCP SDK |
|
Клиент GitLab |
|
Транспорт | stdio (по умолчанию), HTTP (Streamable HTTP) |
Политика конфиденциальности
Сервер полностью работает на вашей машине и не имеет ни собственной телеметрии, ни аналитики, ни серверной части — данные передаются только между вашим MCP-клиентом и настроенным экземпляром GitLab (плюс необязательная проверка обновлений подписанного бинарного файла на GitHub Releases). Ваш токен используется только для аутентификации запросов к GitLab и никогда не записывается в журналы. Подробнее: PRIVACY.md.
Вклад в проект и безопасность
Вклад в проект: см. CONTRIBUTING.md — правила разработки, именование веток, соглашения о коммитах и процесс pull request.
Безопасность: см. SECURITY.md — политика безопасности и порядок сообщения об уязвимостях.
Кодекс поведения: см. CODE_OF_CONDUCT.md (Contributor Covenant v2.1).
Зеркало репозитория: GitHub — канонический репозиторий. Для удобства обнаружения доступно зеркало только для чтения на GitLab.com; пожалуйста, отправляйте вклады на GitHub.
Количество файлов
Категория | Файлы | Строки |
Исходный код ( | 992 | 202,107 |
Модульные тесты ( | 553 | 314,659 |
Сквозные тесты | 182 | 47,508 |
Всего | 1,727 | 564,274 |
Функции
Категория | Количество |
Функции в исходном коде | 7,693 |
— экспортируемые (публичные) | 2,675 |
— неэкспортируемые (приватные) | 5,018 |
Функции модульных тестов ( | 11,985 |
Подтесты ( | 2,986 |
Функции сквозных тестов | 439 |
Соотношения, которые стоит отметить
Наблюдение | Значение |
Строки тестов против строк исходного кода | в 1.56× больше тестов, чем кода |
Средняя длина файла исходного кода | ~203 строки |
Средняя длина тестового файла | ~569 строк |
Строки комментариев в исходном коде | 23,569 (~11.7% исходного кода) |
Тестовые функции на одну функцию исходного кода | 1.6× |
Паттерны кода
Паттерн | Количество |
Проверки | 6,715 |
Операторы | 934 |
Определённые типы | 2,743 |
Подавления | 263 |
Комментарии | 2 |
Проект
Метрика | Значение |
Go-пакеты | 237 |
Прямые зависимости ( | 17 |
Косвенные зависимости | 47 |
Зал славы
Рекорд | Файл |
Самый длинный файл исходного кода |
|
Самый длинный тестовый файл |
|
А почему бы и нет
Факт | Значение |
Исходный код при печати 55 строк на страницу | ~3,674 страницы A4 |
Строки исходного кода, содержащие | 12,629 (избежать невозможно) |
Самое длинное имя функции в исходном коде |
|
Самое длинное имя тестовой функции |
|
Поддерживается José M. Requena Plens · Страница проекта · Размещённый экземпляр: mcp.jmrp.io/gitlab
Available Tools
2 toolsgitlab_execute_actionGitLab Execute ActionADestructiveInspect
Execute one GitLab catalog action by canonical ID or alias. Always pass params as an object; destructive actions require top-level confirm=true. Use find first only when action or params are unclear.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Canonical action ID returned by gitlab_find_action, or a supported compatibility alias, such as project.list, issue.update, or issue.close. | |
| params | Yes | Required action-specific parameters object validated by the selected action schema. Use an empty object for actions with no parameters. | |
| confirm | No | Set top-level confirm=true to explicitly approve destructive actions; do not put confirm inside params for gitlab_execute_action. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next_steps | No | Optional. Suggested follow-up actions or tool calls for the LLM, contextual to the result. |
| pagination | No | Present on list actions. Use `has_more` and `next_page` to paginate through results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructiveHint=true, readOnlyHint=false, and idempotentHint=false. The description adds meaningful behavioral context beyond those hints by specifying that destructive actions require top-level confirm=true, which is essential for safe invocation of this dynamic executor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no wasted words. It front-loads the core purpose, follows with the most critical invocation constraints, and ends with a clear routing instruction for the sibling tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and the annotations cover read-only, idempotency, and destructive behavior, the description provides the remaining key context: how to invoke the action, when confirmation is required, and when to defer to gitlab_find_action. Nothing essential is missing for an agent to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters well. The description reinforces the top-level confirm rule and the object-shaped params requirement, but it mostly restates what the schema already provides, so the added semantic value is limited.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Execute one GitLab catalog action by canonical ID or alias.' This clearly identifies what the tool does and distinguishes it from the sibling tool gitlab_find_action, which is about discovery rather than execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage routing: 'Use find first only when action or params are unclear.' It also provides concrete invocation guidance, such as always passing params as an object and using top-level confirm=true for destructive actions, which helps the agent call it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_find_actionGitLab Find ActionARead-onlyIdempotentInspect
Search the local GitLab action catalog; read-only and no GitLab API call. Use when the action ID or params are unclear; returns schemas, hints, destructive flags, and execute examples.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matches to return. Defaults to 20 and is capped at 50. | |
| query | Yes | Search terms combining a GitLab domain or resource with a verb, filter, or object name, such as project create, merge request approve, pipeline retry, issue delete, or ci variable. | |
| explain | No | When true, include deterministic scoring reasons for each returned action. Defaults to false to keep responses compact. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of returned matches. |
| query | Yes | Original search query. |
| results | Yes | Matching GitLab catalog actions with schemas and execute examples. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable context beyond annotations: it searches a local catalog rather than making an external GitLab API call, and it returns schemas, hints, destructive flags, and execute examples.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences. The primary purpose and key behavioral distinction are front-loaded, followed by the intended use case and return contents. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with fully documented parameters, strong annotations, and an output schema, the description covers the essential use case, behavior, and return value expectations. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description reinforces that the query is a search against the local catalog but does not need to add further parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Search the local GitLab action catalog.' It is clearly distinguished from the sibling execution tool by noting it performs no GitLab API call and is read-only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use when 'the action ID or params are unclear,' giving a clear trigger condition. It does not name the sibling alternative directly, but the read-only/no-API-call contrast with gitlab_execute_action makes the intended usage evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v2.7.5- Changed
gitlab_execute_action1 field changed- changed
Input schema / properties / action / x-mcp-headerPrevious value: -"Mcp-Param-Action"New value: +"Action"
1 tool update
v2.6.0- Added
gitlab_execute_action
1 tool update
v2.5.2- Removed
gitlab_execute_action
3 tool updates
v2.1.3- Added
gitlab_execute_action - Removed
gitlab_execute_tool - Changed
gitlab_find_action4 fields changed- changed
Output schema / properties / results / items / properties / example / descriptionPrevious value: -"Example gitlab_execute_tool call."New value: +"Example gitlab_execute_action call." - changed
Output schema / properties / results / items / properties / example / properties / arguments / descriptionPrevious value: -"Example arguments for gitlab_execute_tool."New value: +"Example arguments for gitlab_execute_action." - changed
Output schema / properties / results / items / properties / id / descriptionPrevious value: -"Canonical action ID to pass to gitlab_execute_tool."New value: +"Canonical action ID to pass to gitlab_execute_action." - changed
Output schema / properties / results / items / properties / required_params / descriptionPrevious value: -"Required parameter names captured from the input schema."New value: +"Required action-specific parameter names to place inside gitlab_execute_action params."
2 tool updates
v2.0.2- Changed
gitlab_execute_tool3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Canonical action ID returned by gitlab_find_action, such as project.list."New value: +"Canonical action ID returned by gitlab_find_action, or a supported compatibility alias, such as project.list, issue.update, or issue.close." - changed
Input schema / properties / confirm / descriptionPrevious value: -"Set true to explicitly confirm destructive actions."New value: +"Set top-level confirm=true to explicitly approve destructive actions; do not put confirm inside params for gitlab_execute_tool." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Result envelope. Top-level shape varies per action and matches the chosen action's typed output. Includes optional cross-cutting fields documented below.", + "properties": { + "next_steps": { + "description": "Optional. Suggested follow-up actions or tool calls for the LLM, contextual to the result.", + "items": { + "type": "string" + }, + "type": "array" + }, + "pagination": { + "additionalProperties": true, + "description": "Present on list actions. Use `has_more` and `next_page` to paginate through results.", + "properties": { + "has_more": { + "description": "True when more pages are available after the current one.", + "type": "boolean" + }, + "next_page": { + "description": "Next page index when `has_more` is true.", + "type": "integer" + }, + "page": { + "description": "Current 1-based page index.", + "type": "integer" + }, + "per_page": { + "description": "Items per page.", + "type": "integer" + }, + "prev_page": { + "description": "Previous page index when applicable.", + "type": "integer" + }, + "total": { + "description": "Total item count when known (some endpoints omit it for performance).", + "type": "integer" + }, + "total_pages": { + "description": "Total page count when known.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
gitlab_find_action1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search terms for GitLab actions, such as project create, merge request approve, pipeline retry, or ci variable."New value: +"Search terms combining a GitLab domain or resource with a verb, filter, or object name, such as project create, merge request approve, pipeline retry, issue delete, or ci variable."
30 tool updates
v2.0.1- Removed
gitlab_access - Removed
gitlab_admin - Removed
gitlab_analyze - Removed
gitlab_branch - Removed
gitlab_ci_catalog - Removed
gitlab_ci_variable - Removed
gitlab_custom_emoji - Removed
gitlab_environment - Added
gitlab_execute_tool - Removed
gitlab_feature_flags - Added
gitlab_find_action - Removed
gitlab_group - Removed
gitlab_issue - Removed
gitlab_job - Removed
gitlab_merge_request - Removed
gitlab_model_registry - Removed
gitlab_mr_review - Removed
gitlab_package - Removed
gitlab_pipeline - Removed
gitlab_project - Removed
gitlab_release - Removed
gitlab_repository - Removed
gitlab_runner - Removed
gitlab_search - Removed
gitlab_server - Removed
gitlab_snippet - Removed
gitlab_tag - Removed
gitlab_template - Removed
gitlab_user - Removed
gitlab_wiki
TDQS
gitlab_execute_action and gitlab_find_action have clearly distinct responsibilities: one runs a catalog action, the other searches for catalog information. There is no functional overlap or ambiguity between them.
Both tools use the same gitlab_<verb>_action pattern in snake_case. The verb-noun structure is consistent and predictable.
Two tools is slightly below the typical 3-15 range, but the split between finding and executing actions is a reasonable minimal surface for a catalog-driven server. It feels compact rather than incomplete.
The pair forms a complete discover-and-execute workflow: find_action provides schemas and execution examples, and execute_action performs the requested catalog action. Since execution is generic, the tool surface itself has no dead ends.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
GitLab MCP — wraps the GitLab REST API v4 (BYO API key)
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseBqualityAmaintenanceFirst gitlab mcp for you, building together117123,8991,953MIT
- -licenseNot gradedqualityNot gradedmaintenanceA Model Context Protocol server that enables AI assistants to interact with GitLab repositories, allowing tasks like managing merge requests, searching projects, and creating comments through RESTful API integration.192-
- AlicenseBqualityCmaintenanceA Model Context Protocol (MCP) server for GitLab and Jira integration. This server allows AI agents like gemini-cli to interact with your GitLab and Jira instances.321811MIT
- AlicenseNot gradedqualityAmaintenanceFull-coverage GitLab MCP server with 44 tools across 18 resource types. Agent-optimized CQRS design — one tool call handles complete multi-step operations. Supports OAuth 2.1, read-only mode, stdio/SSE/StreamableHTTP transports, and GraphQL-native work items with full hierarchy (epics,issues,etc)1,9226Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jmrplens/gitlab-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server