Files
LazyBearWorks/memory-bank/implementation_plan.md

8.8 KiB
Raw Permalink Blame History

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

Новые файлы для создания:

  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. Тестирование и отладка