# Implementation Plan: GitLab MCP Tools ## Overview Создать модуль GitLab для MCP сервера с инструментами управления репозиториями, тегов (версий), Merge Requests, Issues и ветками. ## Types ### GitLabToolsBase Базовый класс для всех инструментов GitLab: ```csharp public sealed class GitLabToolsBase( GitLabClientProvider clientProvider, IConfiguration configuration, ToolRegistryService registry, ILogger? 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 Работа с репозиториями: ```csharp public sealed class GitLabRepositoryTools : GitLabToolsBase { // Инструменты: // - ListRepositories: список доступных репозиториев (user) // - GetRepository: получение деталей репозитория // - GetRepositoryLanguages: языки проекта // - GetCommit: получение коммита // - GetCommitHistory: история коммитов // - GetFiles: получение файлов из репозитория // - SearchRepositories: поиск репозиториев } ``` ### GitLabVersionTools Управление тегами (версиями): ```csharp public sealed class GitLabVersionTools : GitLabToolsBase { // Инструменты: // - ListTags: список всех тегов проекта // - CreateTag: создание нового тега // - DeleteTag: удаление тега // - GetTag: получение информации о теге // - GetTagCommit: получение коммита тега // - ListProtectedTags: список защищённых тегов } ``` ### GitLabMergeRequestTools Работа с Merge Requests и замечаниями: ```csharp 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: ```csharp 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 Работа с ветками: ```csharp public sealed class GitLabBranchTools : GitLabToolsBase { // Инструменты: // - ListBranches: список веток // - CreateBranch: создание ветки // - DeleteBranch: удаление ветки // - ProtectBranch: защита ветки // - UnprotectBranch: снятие защиты // - GetBranch: информация о ветке // - GetBranchCommit: последний коммит ветки } ``` ## Files ### Новые файлы для создания: 1. `LazyBear.MCP/Services/GitLab/GitLabToolModule.cs` - регистрация модуля 2. `LazyBear.MCP/Services/GitLab/GitLabClientProvider.cs` - provider клиента 3. `LazyBear.MCP/Services/GitLab/GitLabApiClientFactory.cs` - factory клиента 4. `LazyBear.MCP/Services/GitLab/GitLabRepositoryTools.cs` - работа с репозиториями 5. `LazyBear.MCP/Services/GitLab/GitLabVersionTools.cs` - работа с тегами 6. `LazyBear.MCP/Services/GitLab/GitLabMergeRequestTools.cs` - работа с MR 7. `LazyBear.MCP/Services/GitLab/GitLabIssueTools.cs` - работа с Issues 8. `LazyBear.MCP/Services/GitLab/GitLabBranchTools.cs` - работа с ветками 9. `LazyBear.MCP/Services/GitLab/Utils/GitLabClientHelper.cs` - вспомогательные методы ### Модифицируемые файлы: 1. `LazyBear.MCP/appsettings.json` - добавить секцию GitLab 2. `LazyBear.MCP/Program.cs` - регистрация GitLab модуля 3. `LazyBear.MCP/TUI/TuiSettings.cs` - добавить настройки GitLab ## Functions ### Основные функции: 1. `GitLabRepositoryTools.ListRepositories()` - список всех проектов 2. `GitLabRepositoryTools.GetRepository(string projectId)` - детали проекта 3. `GitLabVersionTools.ListTags(string projectId)` - список тегов 4. `GitLabVersionTools.CreateTag(string projectId, string tagName, string commitSha)` - создание тега 5. `GitLabMergeRequestTools.CreateMergeRequest(string sourceBranch, string targetBranch, string title, string description)` - создание MR 6. `GitLabMergeRequestTools.AddMergeRequestComment(string projectId, int mergeRequestId, string comment)` - добавление замечания 7. `GitLabIssueTools.ListIssues(string projectId)` - список Issues ## Classes Новые классы в `LazyBear.MCP/Services/GitLab/`: - `GitLabToolsBase` - базовый класс с common-методами - `GitLabClientProvider` - provider для клиента - `GitLabApiClientFactory` - factory для создания клиентов - `GitLabRepositoryTools` - инструменты репозиториев - `GitLabVersionTools` - инструменты тегов - `GitLabMergeRequestTools` - инструменты MR - `GitLabIssueTools` - инструменты Issues - `GitLabBranchTools` - инструменты веток ## Dependencies ### NuGet пакеты: 1. **Octokit.AspNetCore** 7.1.0 (или более поздняя версия) - GitLab REST API client 2. **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 1. Создать структуру папок GitLab 2. Реализовать GitLabToolsBase с common-методами 3. Реализовать GitLabClientProvider и GitLabApiClientFactory 4. Реализовать GitLabRepositoryTools 5. Реализовать GitLabVersionTools 6. Реализовать GitLabMergeRequestTools (включая MR comments) 7. Реализовать GitLabIssueTools 8. Реализовать GitLabBranchTools 9. Обновить Program.cs для регистрации модуля 10. Обновить appsettings.json 11. Тестирование и отладка