GitLab MCP Server
ЭТОТ ПРОЕКТ АРХИВИРОВАН
Рассмотрите возможность использования официального glab mcp
{
"mcpServers": {
"glab": {
"type": "stdio",
"command": "glab",
"args": ["mcp", "serve"]
}
}
}GitLab MCP Server
Готовый к промышленной эксплуатации сервер протокола контекста модели (MCP) для GitLab, который интегрируется с GitHub Copilot в IntelliJ IDEA. Автоматически обнаруживает ваш проект GitLab из удаленного git-репозитория, отслеживает статусы конвейеров и заданий с помощью интеллектуального опроса и обеспечивает надежную интеграцию с API с логикой повторных попыток.
Статус: ✅ Полностью проверено (35 тестов, 100% успешных)
Быстрый старт
1. Установка зависимостей
# Runtime dependencies
pip install -r requirements.txt
# Development/test dependencies (optional)
pip install -r requirements-dev.txt2. Настройка окружения
# Copy the example configuration
cp .env.example .env
# Edit .env with your GitLab credentials
# GITLAB_URL=https://your-gitlab-instance.com
# GITLAB_TOKEN=glpat-xxxКак получить токен GitLab:
Настройки GitLab → Персональные токены доступа (Personal Access Tokens)
Создайте токен с областями видимости (scopes):
api,read_api,read_repositoryСкопируйте значение токена в файл
.env
3. Запуск сервера
# Using the startup script
./run.sh
# Or directly
python -m src.serverОжидаемый вывод:
2026-02-10 13:15:30,123 - src.server - INFO - Initializing GitLab MCP server for https://...
2026-02-10 13:15:30,456 - src.server - INFO - GitLab authentication successful
2026-02-10 13:15:30,789 - src.server - INFO - Tools registered successfully
2026-02-10 13:15:30,900 - src.server - INFO - GitLab MCP server started, listening on stdio4. Настройка в IntelliJ IDEA
Установите плагин GitHub Copilot (если еще не установлен)
Настройки → Инструменты → GitHub Copilot → MCP Servers
Добавьте MCP-сервер:
Тип:
stdioКоманда:
python -m src.serverОкружение: Укажите путь к вашему файлу
.env
Related MCP server: GitLab MCP Server
Функции
✅ Автоматическое обнаружение проекта
Нет необходимости указывать путь к проекту
Автоматически определяется из удаленного git-репозитория (remote origin)
Работает с SSH и HTTPS URL
Поддерживает вложенные группы GitLab
✅ Мониторинг статуса конвейера
Статус конвейера в реальном времени
Все детали и статусы заданий
Автоматическое обнаружение ветки и коммита
Удобный для чтения текстовый вывод
✅ Статус задания с интеллектуальным опросом
Опрос каждые 2 секунды до завершения задания
Настраиваемый тайм-аут (по умолчанию 30 секунд)
Возвращает промежуточные состояния
Метаданные опроса включены в ответ
✅ Надежная интеграция с API
3 повторные попытки с экспоненциальной задержкой (1с, 5с, 9с)
Корректная обработка временных сетевых сбоев
Кэширование ID проекта на уровне сессии
Понятные сообщения об ошибках для отладки
✅ Поддержка self-hosted GitLab
Работает с любым экземпляром GitLab, размещенным на собственных серверах
Нет зависимости от gitlab.com
Полная совместимость с API
Доступные инструменты
check_pipeline_status
Получение статуса конвейера для текущего проекта и ветки
Input: working_directory (string)
Optional: branch (string), commit (string)
Output: Pipeline status report with all jobsЧто он делает:
Автоматически определяет: проект, ветку, коммит из git-репозитория
Возвращает: ID конвейера, статус, задания с индивидуальными статусами
Формат: Текстовый отчет, удобный для чтения
Включает: время выполнения, веб-ссылки, информацию об этапах
Пример:
# In Copilot context:
# "Check the pipeline status for this project"
# → Copilot calls: check_pipeline_status("/path/to/repo")check_job_status
Проверка статуса конкретного задания с автоматическим опросом
Input: working_directory (string)
job_name (string) OR job_id (integer)
Output: Job status report with polling metadataЧто он делает:
Автоматически определяет: проект, конвейер из текущей ветки/коммита
Поиск: по имени задания или числовому ID задания
Опрос: каждые 2 секунды до завершения (макс. 30с)
Возвращает: статус задания, время, URL логов, метаданные опроса
Метаданные:
is_polling,polling_timeout,polling_duration_seconds
Пример:
# In Copilot context:
# "Check the status of the 'test' job"
# → Copilot calls: check_job_status("/path/to/repo", job_name="test")Структура проекта
gitlab-mcp/
├── src/
│ ├── __init__.py
│ ├── server.py # MCP server entry point
│ ├── mcp_tools.py # Tool definitions & logic
│ ├── gitlab_client.py # GitLab API wrapper (retry logic, caching)
│ └── git_utils.py # Git utilities (URL parsing, branch detection)
│
├── tests/ # Comprehensive test suite
│ ├── test_gitlab_client.py # 9 tests for API client
│ ├── test_git_utils.py # 11 tests for git utilities
│ ├── test_mcp_tools.py # 10 tests for tool logic
│ ├── test_server.py # 5 tests for server initialization
│ └── conftest.py # Pytest configuration
│
├── requirements.txt # Runtime dependencies
├── requirements-dev.txt # Test dependencies
├── .env.example # Configuration template
├── pytest.ini # Pytest settings
├── run.sh # Startup script
└── README.md # This fileЗапуск тестов
Быстрый запуск тестов
# Run all tests
python -m pytest tests/ -v
# Quick summary
python -m pytest tests/ -qПокрытие тестами
Всего тестов: 35 (100% успешных ✅)
Протестированные модули: Все 4 основных модуля
gitlab_client.py: 9 тестов (API-клиент, логика повторов, кэширование)git_utils.py: 11 тестов (парсинг URL, валидация)mcp_tools.py: 10 тестов (опрос, форматирование, логика)server.py: 5 тестов (инициализация, конфигурация)
Запуск конкретных тестов
# Test GitLab client
python -m pytest tests/test_gitlab_client.py -v
# Test git utilities
python -m pytest tests/test_git_utils.py -v
# Test MCP tools
python -m pytest tests/test_mcp_tools.py -v
# Test server
python -m pytest tests/test_server.py -v
# Run with coverage
python -m pytest tests/ --cov=src --cov-report=htmlКонфигурация
Переменные окружения
Создайте файл .env с содержимым:
# Required
GITLAB_URL=https://your-gitlab-instance.com
GITLAB_TOKEN=glpat-your-token-here
# Optional
DEBUG=false # Set to 'true' for verbose loggingКонфигурация логики повторных попыток
Клиент автоматически повторяет неудачные вызовы API:
Всего попыток: 3 (начальная + 2 повтора)
Задержки: 1с, 5с, 9с
Применяется к: Всем вызовам API GitLab
Конфигурация опроса заданий
Настройте поведение опроса через код:
# Default settings
_poll_job_status(client, project, job_name, job_id,
timeout_seconds=30, # Max wait time
poll_interval=2.0) # Check every 2 secondsАрхитектура
┌─────────────────────────────────────────────┐
│ IntelliJ IDEA + GitHub Copilot Plugin │
│ (IDE Client) │
└──────────────────┬──────────────────────────┘
│ (stdio transport)
│ (MCP Protocol)
│
┌──────────────────▼──────────────────────────┐
│ FastMCP Server (Python) │
│ ┌────────────────────────────────────────┐ │
│ │ MCP Tools │ │
│ │ • check_pipeline_status │ │
│ │ • check_job_status (with polling) │ │
│ └────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────┐ │
│ │ GitLab Client │ │
│ │ • Session-based caching │ │
│ │ • Retry logic (1s, 5s, 9s backoff) │ │
│ │ • Pipeline/job/MR queries │ │
│ └────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────┐ │
│ │ Git Utilities │ │
│ │ • SSH/HTTPS URL parsing │ │
│ │ • Branch/commit detection │ │
│ │ • Repository validation │ │
│ └────────────────────────────────────────┘ │
└──────────────────┬──────────────────────────┘
│ (HTTP REST API)
│
┌──────────────────▼──────────────────────────┐
│ Self-Hosted GitLab Instance │
│ (or gitlab.com) │
└─────────────────────────────────────────────┘Устранение неполадок
Проблемы с конфигурацией
"GITLAB_URL environment variable is not set"
Проверьте наличие файла
.env:ls -la .envПроверьте наличие GITLAB_URL в
.env:grep GITLAB_URL .envУбедитесь, что
.envнаходится в рабочей директории при запуске сервера
"GITLAB_TOKEN environment variable is not set"
Добавьте
GITLAB_TOKENв.envФормат токена:
glpat-xxx(Персональный токен доступа GitLab)Убедитесь, что токен имеет правильные области видимости:
api,read_api,read_repository
"GitLab authentication successful", но инструменты не работают
Проверьте доступность экземпляра GitLab:
curl -H "PRIVATE-TOKEN: $TOKEN" $GITLAB_URL/api/v4/userУбедитесь, что токен имеет правильные области видимости
Проверьте доступ по сети/файрвол к экземпляру GitLab
Проблемы с Git
"Not a git repository"
Убедитесь, что вы находитесь в git-репозитории:
git remote -vПоддерживаемые форматы удаленных репозиториев:
git@gitlab.host:group/project.githttps://gitlab.host/group/project.githttps://gitlab.host/group/project(без .git)http://gitlab.host/group/project(HTTP, не HTTPS)
"Unable to parse git remote URL"
Проверьте формат git remote:
git remote -vИ SSH, и HTTPS должны быть в стандартном формате GitLab
Поддерживаются вложенные группы:
company/team/project
Проблемы с конвейером/заданием
"No pipeline found for branch"
Убедитесь, что ветка была отправлена (pushed):
git pushПроверьте, настроены ли триггеры конвейера в GitLab
Попробуйте использовать явный SHA коммита:
check_pipeline_status(dir, commit="abc123")
"Job not found: test"
Убедитесь, что имя задания совпадает точно (регистрозависимо)
Проверьте, есть ли в конвейере задания (может быть пустым)
Список заданий:
check_pipeline_status(dir), чтобы увидеть все задания
Тайм-аут опроса задания (30 секунд)
Задание не началось в течение 2-минутного окна
Можно перезапустить инструмент, чтобы проверить текущий статус
Инструмент возвращает последнее известное состояние даже после тайм-аута
Режим отладки
Включите подробное логирование:
# In .env
DEBUG=true
# Or as environment variable
DEBUG=true python -m src.serverПроверяйте логи во время вызова инструмента для получения подробных сообщений об ошибках.
Проверка и тестирование
Результаты тестов
============================= 35 passed in 12.73s ===============================
✅ test_git_utils.py (11 tests)
✅ test_gitlab_client.py (9 tests)
✅ test_mcp_tools.py (10 tests)
✅ test_server.py (5 tests)Что протестировано
✅ Клиент API GitLab с мокированными ответами
✅ Логика повторных попыток и экспоненциальная задержка
✅ Механизм кэширования ID проекта
✅ Парсинг Git URL (SSH, HTTPS, вложенные группы)
✅ Опрос заданий с тайм-аутом
✅ Форматирование ответов
✅ Инициализация и конфигурация сервера
✅ Обработка ошибок и валидация
Тестирование без реального экземпляра GitLab
Все тесты используют мокированный API GitLab (реальные вызовы API не требуются):
python -m pytest tests/ -vПроизводительность
Типичное время отклика
Первый вызов API: 1-3 секунды (зависит от сети)
Последующие вызовы: <500 мс (кэшированный ID проекта)
Опрос заданий: интервалы 2 секунды
Весь набор тестов: ~13 секунд
Стратегия кэширования
ID проекта: Кэшируется на время сессии сервера
Сброс: Перезапуск сервера очищает кэш
Преимущество: Сокращает количество вызовов API при повторных операциях
Детали реализации
Логика повторных попыток
Attempt 1: Immediate call
↓ (fails)
Wait 1 second
Attempt 2: Retry
↓ (fails)
Wait 5 seconds
Attempt 3: Final retry
↓ (fails)
Raise GitLabClientErrorПримеры парсинга URL
SSH: git@gitlab.com:group/project.git → group/project
HTTPS: https://gitlab.com/group/project.git → group/project
HTTPS: https://gitlab.com/group/project → group/project
SSH: git@host:company/team/subteam/project.git → company/team/subteam/projectПоведение опроса заданий
Initial check: Get job status immediately
↓
If terminal state (success/failed/canceled/skipped): Return
↓
If not started: Polling loop
├─ Check every 2 seconds
├─ Max 30 seconds total
└─ Return with polling_timeout flag if timeout occursПоддерживаемые Git-репозитории
✅ Self-hosted экземпляры GitLab (любая версия) ✅ gitlab.com (публичный GitLab) ✅ Вложенные группы (company/team/project/...) ✅ SSH и HTTPS удаленные репозитории
❌ Не поддерживается: GitHub, Bitbucket и т.д. (только GitLab)
Что делать дальше
1. Локальное тестирование
# Test git utilities
python -c "
from src.git_utils import get_project_path_from_working_dir
print(get_project_path_from_working_dir('.'))
"2. Проверка подключения к GitLab
python -c "
import os
from dotenv import load_dotenv
from src.gitlab_client import GitLabClient
load_dotenv()
client = GitLabClient(os.getenv('GITLAB_URL'), os.getenv('GITLAB_TOKEN'))
client.gl.auth()
print('✓ GitLab auth successful')
"3. Запуск сервера
./run.sh
# Then configure in IntelliJ IDEA GitHub Copilot plugin4. Использование с Copilot
В IntelliJ IDEA с Copilot:
"Check the pipeline status"
"What's the status of the test job?"
"Show me the latest pipeline"
Вклад в проект
Чтобы добавить тесты или функции:
Создайте файл теста в директории
tests/Используйте мокирование для API GitLab:
patch('src.gitlab_client.gitlab.Gitlab')Запустите тесты:
python -m pytest tests/ -vУбедитесь, что все тесты проходят перед коммитом
Зависимости
Runtime
fastmcp>=2.14.0- Сервер протокола контекста моделиpython-gitlab>=4.0.0- Клиент API GitLabpython-dotenv>=1.0.0- Загрузка переменных окруженияGitPython>=3.1.0- Операции с Git
Разработка/Тестирование
pytest>=8.0.0- Фреймворк для тестированияrequests-mock>=1.11.0- HTTP-мокирование (опционально)
Статус реализации
Функция | Статус | Тесты |
Мониторинг статуса конвейера | ✅ Готово | 4 |
Поиск статуса задания | ✅ Готово | 5 |
Опрос заданий | ✅ Готово | 4 |
Парсинг Git URL | ✅ Готово | 8 |
Логика повторных попыток | ✅ Готово | 1 |
Обработка ошибок | ✅ Готово | 3 |
Инициализация сервера | ✅ Готово | 5 |
Валидация конфигурации | ✅ Готово | 5 |
Поддержка
По вопросам или проблемам:
Включите отладочное логирование: Установите
DEBUG=trueв.envПроверьте логи: Просмотрите вывод сервера во время вызова инструмента
Проверьте настройку: Следуйте разделу устранения неполадок выше
Изучите тесты: Проверьте
tests/для примеров использованияПроверьте git remote:
git remote -vдолжен быть валидным URL GitLab
Лицензия
[Добавьте вашу лицензию здесь]
Последняя проверка: 10 февраля 2026 г. Набор тестов: 35/35 успешно ✅ Статус: Готов к эксплуатации 🚀
This server cannot be deployed
Maintenance
Related MCP Connectors
Agentic CI operations for build inspection, failure diagnosis, and runner troubleshooting.
Plan Salesforce deploys, open pull requests and trigger pipelines from your AI client.
Direct access to Cypress tests results and accessibility reports in your AI workflow.
Live status and health checks for AI coding providers: Claude, Cursor, Copilot, Codex and more.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI clients to manage GitLab pipelines through natural language commands. Supports triggering pipelines, checking status, listing pipelines, viewing jobs, and canceling pipelines across multiple GitLab instances.107 npmISC
- FlicenseAqualityCmaintenanceConnects AI assistants to GitLab to interact with merge requests, reviews, discussions, pipelines, and test results through natural language queries. Supports viewing MR details, responding to comments, checking test summaries, and analyzing job logs.122-
- FlicenseNot gradedqualityNot gradedmaintenanceConnects AI assistants to GitLab projects, enabling natural language queries for merge requests, code reviews, test results, pipelines, and discussions. Supports viewing MR details, responding to comments, and analyzing CI/CD job logs.-
- AlicenseNot gradedqualityCmaintenanceIntegrates GitLab with AI assistants to manage merge requests, analyze CI/CD pipelines, and create Architecture Decision Records. It enables seamless code searching, pipeline triggering, and deployment management through the Model Context Protocol.1MIT