feat: MCP-сервер для Gitea (Actions, packages, issues)
Просмотр и перезапуск пайплайнов, диагностика падений по логам, проверка образов в Gitea Packages, создание issue для разбора. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
14 files changed
+2233
No files matched your search
@@ -0,0 +1,88 @@
|
||||
# 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
|
||||
Reference in new issue
Block a user