mshegolev/gitlab-ci-mcp

mshegolev/gitlab-ci-mcp

от mshegolev
MCP сервер для GitLab CI/CD. Позволяет ИИ-агентам управлять пайплайнами, джобами, расписаниями и репозиторием (ветки, теги, MR). Работает с любым GitLab (SaaS/self-hosted), для корпоративных сетей. 23 инструмента.

gitlab-ci-mcp

PyPI Python License: MIT Downloads

MCP server for GitLab CI/CD. Lets an LLM agent (Claude Code, Cursor, OpenCode, DevX Agent, etc.) work with pipelines, jobs, schedules, branches, tags, merge requests and repository files.

Python, FastMCP, stdio transport.

Works with any GitLab — SaaS gitlab.com or self-hosted / on-prem. Designed with corporate networks in mind: configurable NO_PROXY handling, optional SSL-verify toggle, per-project scoping via env vars.

Design highlights

  • Tool annotations — every tool carries readOnlyHint / destructiveHint / idempotentHint / openWorldHint so MCP clients can classify operations (e.g. ask for confirmation only on destructive ones like gitlab_merge_mr, gitlab_delete_schedule).
  • Structured output on every tool — each tool declares a TypedDict return type, so FastMCP auto-generates an outputSchema and every result carries structuredContent alongside a pre-rendered markdown text block. Clients that can render structured data use it; agents that prefer compact text get the markdown. No response_format parameter needed.
  • Structured errors — authentication, 404, 403, 429 (rate-limit), 5xx, missing-env errors are converted to actionable ToolError messages (e.g. "GitLab authentication failed… verify GITLAB_TOKEN has api scope") and surfaced as isError=True results.
  • Pydantic input validation — every argument has typed constraints (ranges, lengths, literals) auto-exposed as JSON Schema.
  • Project scoping per call — every tool accepts an optional project_path that overrides GITLAB_PROJECT_PATH for cross-project queries.
  • Pagination — list tools return a pagination block with page, total, has_more, next_page and a next-page hint in the markdown footer.
  • MCP Context integrationgitlab_pipeline_health and gitlab_get_job_log are async and emit info logs / report_progress events through the MCP Context so clients can show progress bars.
  • MCP Resourcesgitlab://project/info and gitlab://project/ci-config mirror common lookups for clients that prefer the Resource model over tools.
  • Lifespan managementpython-gitlab HTTP sessions are closed cleanly on server shutdown via an asynccontextmanager lifespan hook.
  • Log grepgitlab_get_job_log accepts grep_pattern + grep_context (surrounding lines) for regex-filtering megabyte-scale CI logs without pulling the whole trace into agent context.
Инструменты были проиндексированы:
gitlab_cancel_pipelineидемпотентныйвнешний мир

Отменить выполняющийся пайплайн. Текущие задания будут прерваны. Разрушительно для текущей работы. Отмена уже завершенного пайплайна — no-op. Примеры: - "Пайплайн 123 завис, отмени его" → pipeline_id=123 - Не используй на завершенных пайплайнах: без эффекта; используй gitlab_retry_pipeline, если хочешь запустить заново.

Параметры
  • pipeline_idintegerобязательный

    Pipeline ID to cancel.

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

gitlab_compare_branchesтолько чтениеидемпотентныйвнешний мир

Сравнивает две ветки, возвращает до 30 коммитов и список изменённых файлов. Используйте для вопросов вида «что в release/x.y по сравнению с master?» или для составления заметок к релизу. Примеры: - «Что нового в release/1.5 по сравнению с master?» → source='release/1.5', target='master' - Не используйте для получения полных diff'ов MR, используйте gitlab_get_merge_request_changes.

Параметры
  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • sourcestringобязательный

    Source branch/tag/SHA.

  • targetstring

    Target branch (default 'master').

gitlab_create_merge_requestвнешний мир

Создаёт merge request из source_branch в target_branch. Не идемпотентно: создаёт новый MR при каждом вызове. Сначала проверяйте существующие MR через gitlab_list_merge_requests, если хотите избежать дубликатов. Примеры: - "Открыть MR из feature/login в master" → source_branch='feature/login' - "Открыть WIP MR с меткой" → title='Draft: ...', labels=['wip'] - Не используйте для слияния уже открытого MR — используйте gitlab_merge_mr.

Параметры
  • descriptionstring | null

    MR description (markdown supported).

  • labelsstring[] | null

    Labels to apply.

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • remove_source_branchboolean

    Delete source branch after merge.

  • source_branchstringобязательный

    Source branch.

  • target_branchstring

    Target branch (default 'master').

  • titlestring | null

    MR title. Auto-generated if omitted.

gitlab_create_scheduleвнешний мир

Создаёт новое расписание CI/CD с заданными cron-выражением и переменными. Не идемпотентно: повторные вызовы создают дублирующиеся расписания с автоматически увеличивающимися идентификаторами. Примеры: - "Запланировать ночную сборку на master в 02:00 Europe/Berlin" → description='Nightly build', cron='0 2 * * *', ref='master', timezone='Europe/Berlin', variables={'NIGHTLY': '1'} - Не используйте для обновления существующих расписаний - используйте gitlab_update_schedule.

Параметры
  • activeboolean

    Activate the schedule immediately.

  • cronstringобязательный

    Cron expression in 5 fields (e.g. '0 2 * * *').

  • descriptionstringобязательный

    Human-readable description.

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • refstring

    Branch or tag to run.

  • timezonestring

    IANA timezone for the cron (e.g. 'Europe/Berlin').

  • variablesobjectобязательный

    CI variables to attach to the schedule (key -> value).

gitlab_delete_scheduleидемпотентныйвнешний мир

Удаляет расписание по идентификатору. Нельзя отменить. Примеры: - «Удали расписание 42» → schedule_id=42 - Если вы хотите только временно приостановить его, вызовите gitlab_update_schedule с параметром active=False.

Параметры
  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • schedule_idintegerобязательный

    Schedule ID to delete.

gitlab_get_fileтолько чтениеидемпотентныйвнешний мир

Читает текстовый файл из репозитория, обрезанный до 500 строк. Для бинарников декодируется как UTF-8 с заменой ошибок - скорее всего получите мусор; используйте только для текстового содержимого. Примеры: - "Покажи .gitlab-ci.yml на master" → file_path='.gitlab-ci.yml' - "Прочитай src/app.py из тега release-1.2" → file_path='src/app.py', ref='release-1.2' - Не используйте для списков - используйте gitlab_list_repository_tree.

Параметры
  • file_pathstringобязательный

    Path to the file from the repo root (e.g. 'src/app.py').

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • refstring

    Branch, tag or commit SHA.

gitlab_get_job_logтолько чтениеидемпотентныйвнешний мир

Получает трейс/лог задания, с опциональным регулярным фильтром. Два режима: * По умолчанию: возвращает последние tail строк (эффективно по токенам, хорошо для "почему это только что упало?"). * С grep_pattern: возвращает только строки, совпадающие с паттерном, с grep_context строк контекста с каждой стороны — идеально для поиска "ERROR" / "Traceback" в мегабайтных логах CI без загрузки всего трейса в контекст. Примеры: - "Почему задание 789 упало" → по умолчанию tail=100, смотрим конец лога - "Покажи вывод первой стадии задания 789" → tail=5000 и поиск разделителя стадий - "Найди все Traceback в задании 789" → grep_pattern='Traceback', grep_context=5 - "Все строки ERROR из задания 789" → grep_pattern='ERROR|FAIL'

Параметры
  • grep_contextinteger

    Surrounding lines to include around each grep match (0–20).

  • grep_patternstring | null

    Optional regex — when set, returns only lines matching the pattern (with grep_context surrounding lines) instead of the tail. Great for finding errors in huge logs without downloading everything. Invalid regex falls back to literal substring match.

  • job_idintegerобязательный

    Numeric job ID (from gitlab_get_pipeline_jobs).

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • tailinteger

    Return only the last N lines (1–5000, default 100).

gitlab_get_merge_requestтолько чтениеидемпотентныйвнешний мир

Получает полную информацию о merge request по внутреннему ID (iid). Включает статус, ветки, автора, ответственных, рецензентов, метки, статус конфликта, описание и временные метки. Примеры: - "Покажи мне описание и статус !42" → mr_iid=42 - Не используйте для просмотра измененных файлов - используйте gitlab_get_merge_request_changes.

Параметры
  • mr_iidintegerобязательный

    Merge request IID (project-local number shown as '!42').

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

gitlab_get_merge_request_changesтолько чтениеидемпотентныйвнешний мир

Перечисляет изменённые файлы в запросе на слияние с усечёнными дифами (2 КБ на файл). Полезен для запросов code-review ("что изменилось в !42?"). Дифы, превышающие 2 КБ, усекаются — для получения полного содержимого получите исходный файл через gitlab_get_file. Примеры: - "Что изменил MR !42" → mr_iid=42 - Если вам нужно полное содержимое изменённого файла, используйте gitlab_get_file с исходной веткой MR.

Параметры
  • mr_iidintegerобязательный

    Merge request IID.

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

gitlab_get_pipelineтолько чтениеидемпотентныйвнешний мир

Получить один пайплайн с полной информацией о времени выполнения. Полезно сразу после gitlab_list_pipelines — списки возвращают только краткую сводку.Возвращает статус, ref, источник, длительности (в очереди / общая), а также временные метки начала и завершения. Примеры: - «Почему пайплайн 123 медленный» → проверьте поля queued_duration и duration - «Работает ли пайплайн 456 до сих пор» → посмотрите на status - Не используйте для просмотра отдельных задач — используйте gitlab_get_pipeline_jobs.

Параметры
  • pipeline_idintegerобязательный

    Numeric pipeline ID (not iid).

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

gitlab_get_pipeline_jobsтолько чтениеидемпотентныйвнешний мир

Вывести задачи пайплайна с указанием стадии, статуса, длительности и веб-URL. Используйте после обнаружения неудачного пайплайна, чтобы уточнить, какая конкретно задача сломалась, и получить её лог через gitlab_get_job_log. Примеры: - "Какие задачи в пайплайне 123" → pipeline_id=123 - "Какая задача упала в пайплайне 456" → отфильтровать результат по status='failed' на стороне клиента - Не используйте для общего статуса пайплайна - для этого есть gitlab_get_pipeline.

Параметры
  • pipeline_idintegerобязательный

    Numeric pipeline ID.

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

gitlab_list_branchesтолько чтениеидемпотентныйвнешний мир

Выводит список веток проекта, опционально отфильтрованный по подстроке. Включает флаги default, protected и merged, короткий идентификатор последнего коммита, его заголовок и дату. Примеры: - «Список всех веток с 'release' в названии» → search='release' - «Следующая страница веток» → page=2 - Не используйте, когда хотите проверить существование ветки по точному имени — используйте gitlab_get_file для этой ссылки и анализируйте ошибку.

Параметры
  • pageinteger

    1-based page number.

  • per_pageinteger

    Items per page (1–100).

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • searchstring | null

    Substring match on branch name (case-insensitive).

gitlab_list_merge_requestsтолько чтениеидемпотентныйвнешний мир

Получает список merge request'ов проекта, опционально отфильтрованных по состоянию. Примеры: - "Какие MR сейчас открыты" → по умолчанию (state='opened') - "Какие влиты на прошлой неделе" → state='merged', затем фильтрация по updated_at на стороне клиента - "Всё независимо от состояния" → state='all' - Не используйте, если у вас есть IID merge request'а: используйте gitlab_get_merge_request для подробностей.

Параметры
  • pageinteger

    1-based page number.

  • per_pageinteger

    Items per page (1–100).

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • stateenum

    Filter by MR state.

gitlab_list_pipelinesтолько чтениеидемпотентныйвнешний мир

Выводит последние пайплайны проекта, от новых к старым. Используется для триажа («показать упавшие пайплайны на master»), проверки готовности к релизу или чтобы передать ID пайплайнов в последующие вызовы. Только для чтения, идемпотентен. Возвращает PipelinesListOutput: project, count, pagination и pipelines[] (каждый — PipelineSummary). Результат инструмента также содержит markdown-таблицу в текстовом содержимом. Примеры: - «Показать упавшие пайплайны на master» → status='failed', ref='master' - «Последние ночные запуски по расписанию» → source='schedule' - «Вторая страница пайплайнов» → page=2 - Не используйте, когда у вас есть конкретный ID пайплайна — вместо этого вызывайте gitlab_get_pipeline.

Параметры
  • pageinteger

    1-based page number.

  • per_pageinteger

    Items per page (1–100).

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • refstring | null

    Filter by branch or tag name (e.g. 'master').

  • sourceenum | null

    Filter by pipeline trigger source.

  • statusenum | null

    Filter by pipeline status.

gitlab_list_repository_treeтолько чтениеидемпотентныйвнешний мир

Выводит список файлов и каталогов по указанному пути в репозитории. Примеры: - "Показать файлы верхнего уровня" → вызов по умолчанию - "Все файлы .py рекурсивно" → recursive=True, затем фильтр по .py в пути - Не используйте для полнотекстового содержимого - используйте для этого gitlab_get_file.

Параметры
  • pageinteger

    1-based page number.

  • pathstring

    Directory path (empty for root).

  • per_pageinteger

    Items per page (1–100).

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • recursiveboolean

    Recurse into subdirectories.

  • refstring

    Branch, tag or SHA.

gitlab_list_schedulesтолько чтениеидемпотентныйвнешний мир

Перечисляет все CI/CD-расписания проекта. Ключи переменных, название которых намекает на секрет (TOKEN, PASSWORD, SECRET, CREDENTIAL, PRIVATE_KEY, API_KEY), сохраняют ключ, но значение заменяется на ***, чтобы агент всё ещё видел, какие переменные существуют. Примеры: - «Какие у нас есть расписания и все ли они активны» → стандартный вызов - Не используйте для запуска расписания прямо сейчас — используйте gitlab_trigger_pipeline с переменными расписания.

Параметры
  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

gitlab_list_tagsтолько чтениеидемпотентныйвнешний мир

Выводит теги проекта, от новых к старым. Полезно для генерации заметок о релизе или проверки последней выпущенной версии. Примеры: - "What was the last release tag" → обычный вызов, берётся первый элемент - "All v2.x releases" → search='v2.'

Параметры
  • pageinteger

    1-based page number.

  • per_pageinteger

    Items per page (1–100).

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • searchstring | null

    Substring match on tag name.

gitlab_merge_mrидемпотентныйвнешний мир

Выполняет фактическое слияние, если GitLab сообщает, что MR можно смержить. Destructive: записывает в целевую ветку. Сначала проверяет merge_status и возвращает status='cannot_merge', если есть конфликты или требуются пайплайны. Примеры: - "Merge !42" → mr_iid=42 - Не вызывать без предварительной проверки gitlab_get_merge_request, если подозреваете конфликты.

Параметры
  • mr_iidintegerобязательный

    Merge request IID to merge.

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

gitlab_pipeline_healthтолько чтениеидемпотентныйвнешний мир

Собирает показатель успешности за 7 и 30 дней с индикатором тренда. Отлично подходит для стендапов и передачи дежурств. Возвращает процент успешности, итоги, последние 10 статусов и тренд (up/down/flat). Отправляет прогресс через MCP Context (info log + report_progress). Полезно в IDE с индикаторами прогресса для каждого инструмента. Примеры: - "Насколько стабилен master" → default (ref='master', source='schedule') - "Здоровье пайплайна после пуша" → source='push' - Не используйте для одного пайплайна. Используйте gitlab_get_pipeline.

Параметры
  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • refstring

    Branch to analyse.

  • sourceenum

    Pipeline source to include (typically 'schedule' or 'push').

gitlab_project_infoтолько чтениеидемпотентныйвнешний мир

Возвращает базовые метаданные о проекте: ID, ветку по умолчанию, видимость, счётчики. Примеры: - "What's the project ID and default branch" → стандартный вызов - "Is this repo public or private" → смотреть в visibility

Параметры
  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

gitlab_retry_pipelineвнешний мир

Повторно запустить все упавшие задания существующего пайплайна. Создает новые запуски заданий (новые записи в истории). Безопасно вызывать, когда в пайплайне есть хотя бы одно упавшее/отмененное задание; не имеет эффекта, если всё уже прошло успешно. Примеры: - "Повторить упавшие задания в пайплайне 123" → pipeline_id=123 - Не используйте для повторного запуска успешного пайплайна. Вместо этого используйте gitlab_trigger_pipeline.

Параметры
  • pipeline_idintegerобязательный

    Pipeline ID to retry failed jobs for.

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

gitlab_trigger_pipelineвнешний мир

Создаёт новый пайплайн на указанном ref, опционально с CI-переменными. Не идемпотентно: каждый вызов создаёт новый пайплайн. Тратит минуты на ваших раннерах — не вызывайте в циклах. Примеры: - «Запустить пайплайн на master» → по умолчанию (ref='master') - «Запустить пайплайн на feature/x с DEBUG=1» → ref='feature/x', variables={'DEBUG': '1'} - Не вызывайте для повторного запуска — используйте gitlab_retry_pipeline, он сохраняет тот же ID пайплайна.

Параметры
  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • refstring

    Branch or tag to run the pipeline on.

  • variablesobject | null

    Optional CI variables to pass to the pipeline ({key: value}).

gitlab_update_scheduleидемпотентныйвнешний мир

Обновляет существующее расписание. Изменяются только переданные поля. Деструктивно, когда задан variables: заменяется весь набор переменных, поэтому вызывающая сторона должна отправлять полный список. Примеры: - "Деактивировать расписание 42" → schedule_id=42, active=False - "Изменить cron расписания 42 на почасовой" → schedule_id=42, cron='0 * * * *' - Не передавайте variables, если не хотите заменить их полностью.

Параметры
  • activeboolean | null

    New active state.

  • cronstring | null

    New cron expression.

  • descriptionstring | null

    New description.

  • project_pathstring | null

    GitLab project path (e.g. 'my-org/my-repo'). When omitted, the default from GITLAB_PROJECT_PATH env var is used.

  • refstring | null

    New ref (branch/tag).

  • schedule_idintegerобязательный

    Schedule ID to update.

  • variablesobject | null

    New variable set. If provided, replaces all existing variables — pre-existing ones are deleted first. Omit to leave variables untouched.

Похожие MCP-сервера

JaviMaligno/mcp-server-bitbucket

JaviMaligno/mcp-server-bitbucket

MCP сервер для интеграции с Bitbucket: управление репозиториями, пулл-реквестами и пайплайнами. Работает с Claude Code, Cursor и любыми MCP-клиентами. Также доступны CI/CD, вебхуки и управление ветками.

Python2
HainanZhao/mcp-gitlab-jira

HainanZhao/mcp-gitlab-jira

MCP сервер для интеграции GitLab и Jira: управляйте проектами, merge requests, CI/CD, задачами GitLab и тикетами Jira, добавляйте комментарии, ищите по JQL. Полезен AI-агентам для автоматизации раз...

TypeScript11
circleci-public/mcp-server-circleci

circleci-public/mcp-server-circleci

MCP сервер для интеграции CircleCI с ИИ-ассистентами: запускайте пайплайны, анализируйте тесты и конфигурации прямо из IDE. Ускоряет CI/CD и разработку для команд, работающих в Cursor, Claude и других MCP-клиентах.

TypeScript92
zenml-io/mcp-zenml

zenml-io/mcp-zenml

официальный

MCP-сервер для интеграции ZenML с AI-ассистентами. Позволяет просматривать и запускать ML-пайплайны, управлять стеками, компонентами и моделями. Полезен ML-инженерам для оперативного доступа к данн...

Python49
Tiberriver256/mcp-server-azure-devops

Tiberriver256/mcp-server-azure-devops

MCP-сервер для интеграции AI-ассистентов с Azure DevOps. Позволяет управлять проектами, work items, репозиториями и пайплайнами через естественный язык. Поддерживает облачные и on-prem версии, ауте...

TypeScript388
CircleCI/mcp-server-circleci

CircleCI/mcp-server-circleci

официальный

MCP-сервер для интеграции CircleCI с AI-ассистентами: запускайте пайплайны, анализируйте сбои, находите flaky тесты и управляйте CI/CD прямо из IDE через естественный язык. Полезен командам, ускоря...

TypeScript92
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин