Files
vasyanskandClaude Sonnet 5.5 04ce6ebdab feat: MCP-сервер для Gitea (Actions, packages, issues)
Просмотр и перезапуск пайплайнов, диагностика падений по логам,
проверка образов в Gitea Packages, создание issue для разбора.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 09:34:01 +07:00

89 lines
4.4 KiB
Markdown

# gitea-mcp
MCP-сервер (stdio) для [Gitea](https://about.gitea.com): подключается к репозиториям, смотрит и перезапускает пайплайны Gitea Actions, разбирает причины падений, проверяет сборку образов в Gitea Packages и заводит issue для разбора.
Работает с любым MCP-клиентом (Claude Code, Claude Desktop, Cursor и др.). Без внешних зависимостей, кроме MCP SDK и zod.
## Возможности
| Область | Tools |
|---|---|
| Репозитории | `gitea_list_repos`, `gitea_get_repo`, `gitea_get_file` |
| Просмотр пайплайнов | `gitea_list_runs`, `gitea_get_run`, `gitea_list_jobs`, `gitea_get_job_logs` (tail / grep) |
| Диагностика | `gitea_diagnose_run` — упавшие jobs и шаги, блоки ошибок из логов, вероятные причины и способы починки |
| Управление | `gitea_rerun_run`, `gitea_rerun_job`, `gitea_rerun_failed_jobs`, `gitea_cancel_run`, `gitea_dispatch_workflow` |
| Образы и пакеты | `gitea_list_packages`, `gitea_check_image` — есть ли тег, когда собран, digest, свежесть относительно `built_after` |
| Issues | `gitea_list_issues`, `gitea_get_issue`, `gitea_create_issue`, `gitea_comment_issue`, `gitea_create_issue_from_run` |
`gitea_create_issue_from_run` собирает диагностику упавшего run в issue и не создаёт дубликат, если открытый issue по этому run уже есть.
## Требования
- Node.js ≥ 20
- Gitea ≥ 1.24 (REST API для Actions: runs, jobs, logs, rerun)
- Токен доступа (Settings → Applications) со scope: repository (read/write), issue (read/write), package (read)
## Установка
```bash
git clone <url этого репозитория> gitea-mcp
cd gitea-mcp
npm install
npm run build
```
## Настройка
| Переменная | Описание |
|---|---|
| `GITEA_URL` | Адрес инстанса, например `https://gitea.example.com` |
| `GITEA_TOKEN` | Токен доступа |
| `GITEA_READONLY` | `true` — отключить все изменяющие операции (rerun, cancel, dispatch, создание issue и комментариев) |
| `GITEA_TIMEOUT_MS` | Таймаут запроса, по умолчанию `30000` |
### Claude Code
```bash
claude mcp add gitea -s user \
-e GITEA_URL=https://gitea.example.com \
-e GITEA_TOKEN=<токен> \
-- node /абсолютный/путь/к/gitea-mcp/dist/index.js
```
### Другие клиенты (JSON-конфиг)
```json
{
"mcpServers": {
"gitea": {
"command": "node",
"args": ["/абсолютный/путь/к/gitea-mcp/dist/index.js"],
"env": {
"GITEA_URL": "https://gitea.example.com",
"GITEA_TOKEN": "<токен>"
}
}
}
}
```
## Безопасность
- Токен берётся только из переменной окружения и никуда не логируется.
- Для работы «только на просмотр» используйте `GITEA_READONLY=true` и токен без write-прав.
- Логи перед выдачей модели и записью в issue проходят маскировку типовых секретов (пароли, токены, Bearer, приватные ключи, пароли в URL). Маскировка работает по шаблонам и может пропустить нестандартный секрет — просматривайте issue перед публикацией в открытых репозиториях.
- Причины падений в `gitea_diagnose_run` — эвристика по тексту лога, а не точный диагноз; рядом всегда приводятся сами блоки ошибок для проверки.
## Разработка
```bash
npm run dev # tsc --watch
npm run build
```
Структура: `src/client.ts` — HTTP-клиент Gitea, `src/diagnose.ts` — анализ и маскировка логов, `src/runs.ts` — общая логика run/job, `src/tools.ts`, `src/packages.ts`, `src/issues.ts` — регистрация tools.
## Лицензия
MIT