Просмотр и перезапуск пайплайнов, диагностика падений по логам, проверка образов в Gitea Packages, создание issue для разбора. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
89 lines
4.4 KiB
Markdown
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
|