8.8 KiB
Implementation Plan: GitLab MCP Tools
Overview
Создать модуль GitLab для MCP сервера с инструментами управления репозиториями, тегов (версий), Merge Requests, Issues и ветками.
Types
GitLabToolsBase
Базовый класс для всех инструментов GitLab:
public sealed class GitLabToolsBase(
GitLabClientProvider clientProvider,
IConfiguration configuration,
ToolRegistryService registry,
ILogger<GitLabToolsBase>? logger = null)
: IToolModule
{
protected readonly GitLabApiClient _client;
protected readonly string _baseUrl;
protected readonly int _perPageDefault;
// Валидация и форматирование ошибок
protected bool TryCheckEnabled(string toolName, out string error);
protected bool TryGetClient(out GitLabApiClient client, out string error);
protected string FormatError(string toolName, string resource, Exception ex);
}
GitLabRepositoryTools
Работа с репозиториями:
public sealed class GitLabRepositoryTools : GitLabToolsBase
{
// Инструменты:
// - ListRepositories: список доступных репозиториев (user)
// - GetRepository: получение деталей репозитория
// - GetRepositoryLanguages: языки проекта
// - GetCommit: получение коммита
// - GetCommitHistory: история коммитов
// - GetFiles: получение файлов из репозитория
// - SearchRepositories: поиск репозиториев
}
GitLabVersionTools
Управление тегами (версиями):
public sealed class GitLabVersionTools : GitLabToolsBase
{
// Инструменты:
// - ListTags: список всех тегов проекта
// - CreateTag: создание нового тега
// - DeleteTag: удаление тега
// - GetTag: получение информации о теге
// - GetTagCommit: получение коммита тега
// - ListProtectedTags: список защищённых тегов
}
GitLabMergeRequestTools
Работа с Merge Requests и замечаниями:
public sealed class GitLabMergeRequestTools : GitLabToolsBase
{
// Инструменты:
// - ListMergeRequests: список MR в проекте
// - GetMergeRequest: получение деталей MR
// - CreateMergeRequest: создание MR
// - UpdateMergeRequest: обновление MR
// - CloseMergeRequest: закрытие MR
// - GetMergeRequestComments: чтение замечаний MR
// - AddMergeRequestComment: добавление замечания
// - UpdateMergeRequestComment: обновление замечания
// - DeleteMergeRequestComment: удаление замечания
// - GetMergeRequestStatus: статус MR (merged, closed, etc.)
// - GetMergeRequestDiff: diff MR
// - GetMergeRequestPipeline: пайплайн MR
}
GitLabIssueTools
Работа с Issues:
public sealed class GitLabIssueTools : GitLabToolsBase
{
// Инструменты:
// - ListIssues: список Issues проекта
// - GetIssue: получение Issue
// - CreateIssue: создание Issue
// - UpdateIssue: обновление Issue
// - CloseIssue: закрытие Issue
// - DeleteIssue: удаление Issue
// - GetIssueLabels: метки Issue
// - AddIssueLabel: добавление метки
// - RemoveIssueLabel: удаление метки
// - GetIssueAssignees: assignees Issue
// - GetIssueEvents: события Issue
}
GitLabBranchTools
Работа с ветками:
public sealed class GitLabBranchTools : GitLabToolsBase
{
// Инструменты:
// - ListBranches: список веток
// - CreateBranch: создание ветки
// - DeleteBranch: удаление ветки
// - ProtectBranch: защита ветки
// - UnprotectBranch: снятие защиты
// - GetBranch: информация о ветке
// - GetBranchCommit: последний коммит ветки
}
Files
Новые файлы для создания:
LazyBear.MCP/Services/GitLab/GitLabToolModule.cs- регистрация модуляLazyBear.MCP/Services/GitLab/GitLabClientProvider.cs- provider клиентаLazyBear.MCP/Services/GitLab/GitLabApiClientFactory.cs- factory клиентаLazyBear.MCP/Services/GitLab/GitLabRepositoryTools.cs- работа с репозиториямиLazyBear.MCP/Services/GitLab/GitLabVersionTools.cs- работа с тегамиLazyBear.MCP/Services/GitLab/GitLabMergeRequestTools.cs- работа с MRLazyBear.MCP/Services/GitLab/GitLabIssueTools.cs- работа с IssuesLazyBear.MCP/Services/GitLab/GitLabBranchTools.cs- работа с веткамиLazyBear.MCP/Services/GitLab/Utils/GitLabClientHelper.cs- вспомогательные методы
Модифицируемые файлы:
LazyBear.MCP/appsettings.json- добавить секцию GitLabLazyBear.MCP/Program.cs- регистрация GitLab модуляLazyBear.MCP/TUI/TuiSettings.cs- добавить настройки GitLab
Functions
Основные функции:
GitLabRepositoryTools.ListRepositories()- список всех проектовGitLabRepositoryTools.GetRepository(string projectId)- детали проектаGitLabVersionTools.ListTags(string projectId)- список теговGitLabVersionTools.CreateTag(string projectId, string tagName, string commitSha)- создание тегаGitLabMergeRequestTools.CreateMergeRequest(string sourceBranch, string targetBranch, string title, string description)- создание MRGitLabMergeRequestTools.AddMergeRequestComment(string projectId, int mergeRequestId, string comment)- добавление замечанияGitLabIssueTools.ListIssues(string projectId)- список Issues
Classes
Новые классы в LazyBear.MCP/Services/GitLab/:
GitLabToolsBase- базовый класс с common-методамиGitLabClientProvider- provider для клиентаGitLabApiClientFactory- factory для создания клиентовGitLabRepositoryTools- инструменты репозиториевGitLabVersionTools- инструменты теговGitLabMergeRequestTools- инструменты MRGitLabIssueTools- инструменты IssuesGitLabBranchTools- инструменты веток
Dependencies
NuGet пакеты:
- Octokit.AspNetCore 7.1.0 (или более поздняя версия) - GitLab REST API client
- System.Text.Json - уже есть в .NET SDK
Примечание:
Использовать Octokit для GitLab - это не стандартный подход. Octokit ориентирован на GitHub API.
Альтернативный подход:
Использовать GitLabDotnet или RestSharp с официальным GitLab API.
Рекомендуется использовать RestSharp (уже используется в Jira модуле) или официальный GitLab SDK (если доступен).
Пакет: RestSharp 111.1.0 (уже есть в проекте через Jira)
Или использовать библиотеку: GitLabApi (от Octokit) - https://github.com/octokit/octokit.net/wiki/Using-the-GitLab-API
В проекте уже используется RestSharp через Jira модуль. GitLab API использует REST, поэтому RestSharp подходит.
Testing
Тесты:
- Валидация входных параметров
- Проверка ошибок GitLab API
- Тесты с mock-клиентом
- Проверка формата ответов
Примечание: тестовый проект пока не создаём, используем existing tests if available.
Implementation Order
- Создать структуру папок GitLab
- Реализовать GitLabToolsBase с common-методами
- Реализовать GitLabClientProvider и GitLabApiClientFactory
- Реализовать GitLabRepositoryTools
- Реализовать GitLabVersionTools
- Реализовать GitLabMergeRequestTools (включая MR comments)
- Реализовать GitLabIssueTools
- Реализовать GitLabBranchTools
- Обновить Program.cs для регистрации модуля
- Обновить appsettings.json
- Тестирование и отладка