| 1 | # Git MCP |
| 2 | |
| 3 | MCP-сервер с тулами **git_status**, **git_diff**, **git_log**, **git_fetch**, **git_pull**, **git_branch**, **git_show**, **git_submodule**, **git_commit**, **git_push**. Агент видит состояние репозитория и диффы без выхода из чата. Подключается в Cursor (и где угодно) — один exe, stdio. |
| 4 | |
| 5 | **Cursor:** примеры правил для копипаста — **[docs/cursor-rules-examples.md](docs/cursor-rules-examples.md)**. |
| 6 | |
| 7 | ## Стек |
| 8 | |
| 9 | - C#, .NET 10, win-x64, self-contained (как agent-notes-mcp, dotnet-debug-mcp). |
| 10 | - Вызовы `git` через процесс (требуется установленный git в PATH). |
| 11 | - Семантика списка аргументов — пакет **[AIGuiders.GitMcp.Core](https://www.nuget.org/packages/AIGuiders.GitMcp.Core)**; исходники и CI публикации пакета — репозиторий **[KarataevDmitry/git-mcp-core](https://github.com/KarataevDmitry/git-mcp-core)** на GitHub (Trusted Publishing на nuget.org привязывается к **этому** репо, см. README там). Субмодуль `git-mcp-core` в `open` — канон разработки на GitLab Krawler. |
| 12 | |
| 13 | ## Публикация |
| 14 | |
| 15 | ```bash |
| 16 | dotnet publish -c Release -o publish |
| 17 | ``` |
| 18 | |
| 19 | Рекомендуется junction: например `D:\git-mcp` → каталог `publish`; в Cursor в mcp.json указать `command`: `D:\git-mcp\GitMcp.exe`, `args`: `[]`. |
| 20 | |
| 21 | ### Быстрый локальный publish (рекомендуется) |
| 22 | |
| 23 | `publish-and-deploy.ps1` делает publish self-contained `win-x64`, зеркалит в фиксированный путь (по умолчанию `D:\git-mcp`) и гасит процесс, если он лочит файлы: |
| 24 | |
| 25 | ```powershell |
| 26 | .\publish-and-deploy.ps1 |
| 27 | ``` |
| 28 | |
| 29 | ## Релизы (без Runner) |
| 30 | |
| 31 | См. `scripts/publish-release-win.ps1`: мультиплатформа (win-x64, linux-x64, osx-x64), загрузка в GitLab Generic Package и ссылка в релизе. Требуются `GITLAB_URL`, `GITLAB_TOKEN`. |
| 32 | |
| 33 | ## Тулы |
| 34 | |
| 35 | | Имя | Описание | Аргументы | |
| 36 | |-----|----------|-----------| |
| 37 | | `git_status` | Ветка + git status (изменённые/добавленные/удалённые файлы). | `workspace_path` | |
| 38 | | `git_diff` | Дифф (по умолчанию не застейдженный). | `workspace_path`, опционально `path`, `staged` (bool) | |
| 39 | | `git_log` | Последние коммиты (git log -n N --oneline). | `workspace_path`, опционально `n` (по умолчанию 20, макс 500) | |
| 40 | | `git_commit` | Коммит: add (указанные пути или всё) + commit -m. Только по решению пользователя. | `workspace_path`, `message`, опционально `paths` (массив строк) | |
| 41 | | `git_push` | Push в remote. По умолчанию origin и текущая ветка. По решению пользователя. | `workspace_path`, опционально `remote`, `branch` | |
| 42 | | `git_fetch` | Обновить refs с remote (`fetch`, опционально `--all`, `--prune`, имя remote). | `workspace_path`, опционально `remote`, `all`, `prune` | |
| 43 | | `git_pull` | Подтянуть в текущую ветку; по умолчанию `--ff-only`. Без `remote`/`branch` — upstream. | `workspace_path`, опционально `remote`+`branch` вместе, `ff_only` | |
| 44 | | `git_branch` | Список веток (`list`), создание (`create`), удаление (`delete`). | `workspace_path`, `action`, опционально `name`, `start_point`, `force` | |
| 45 | | `git_show` | Показать объект/коммит (`rev`), опционально файл или `--stat`. | `workspace_path`, `rev`, опционально `path`, `stat_only` | |
| 46 | | `git_submodule` | `status` или `update --init` (по умолчанию `--recursive`). | `workspace_path`, опционально `action`, `path`, `recursive` | |
| 47 | |
| 48 | `workspace_path` — каталог с репозиторием (корень, где лежит `.git`). |
| 49 | |