Skip to main content
Glama
README.md
# beget-mcp

MCP-сервер для управления сервисами хостера [Beget](https://beget.com/p1211871) из AI-агентов.

Построен на [FastMCP](https://github.com/modelcontextprotocol/python-sdk) и покрывает весь [Beget REST API](https://beget.com/p1211871/kb/api/) — 73 инструмента в 10 разделах.

> [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) — открытый стандарт для подключения AI-моделей к внешним сервисам.

<!-- mcp-name: io.github.badigit/beget-mcp -->

## Быстрый старт

Из PyPI, без установки в систему:

```bash
claude mcp add beget -s user \
  -e BEGET_API_LOGIN=your_login \
  -e BEGET_API_PASSWORD=your_password \
  -- uvx beget-mcp
```

Контейнером (образ по умолчанию поднимает SSE — локальному клиенту нужен stdio):

```bash
docker run -i --rm \
  -e MCP_TRANSPORT=stdio \
  -e BEGET_API_LOGIN=your_login \
  -e BEGET_API_PASSWORD=your_password \
  ghcr.io/badigit/beget-mcp:latest
```

Из исходников:

```bash
pip install -e .

claude mcp add beget -s user \
  -e BEGET_API_LOGIN=your_login \
  -e BEGET_API_PASSWORD=your_password \
  -- python -m mcp_beget
```

Сервер публикуется в [MCP Registry](https://registry.modelcontextprotocol.io) под именем
`io.github.badigit/beget-mcp`. Страница проекта — <https://badigit.github.io/beget-mcp/>.

## Что умеет

| Раздел | Инструменты | Примеры операций |
|--------|------------|-----------------|
| Сайты | 8 | создание, удаление, привязка доменов, заморозка файлов |
| Домены | 13 | управление, поддомены, PHP-версии, директивы, проверка доступности |
| DNS | 8 | A, CNAME, MX, TXT — безопасный merge; частичное обновление через `dns_patch_record`; `dns_verify` сверяет факт у авторитативного NS |
| MySQL | 6 | базы, доступы с хостов, пароли |
| FTP | 4 | аккаунты, домашние каталоги |
| Cron | 7 | задачи, расписание, активация, email-отчёты |
| Бэкапы | 9 | просмотр содержимого, откат, выгрузка файлов и БД |
| Почта | 12 | ящики, пароли, спам-фильтр, пересылка, catch-all, one-shot-настройка Яндекс 360 / Mail.ru |
| Статистика | 4 | нагрузка по сайтам и БД — сводная и детальная |
| Аккаунт | 2 | тариф, баланс, SSH-доступ |

## Документация

| Файл | О чём |
|------|-------|
| [docs/api-coverage.md](docs/api-coverage.md) | покрытие методов Beget API |
| [docs/beget-api-gotchas.md](docs/beget-api-gotchas.md) | грабли API: ошибка в success-конверте и прочее |
| [docs/dns-facts-vs-intent.md](docs/dns-facts-vs-intent.md) | DNS: несозданный поддомен, catch-all зоны, задержка распространения |
| [docs/new-app-deploy-chain.md](docs/new-app-deploy-chain.md) | цепочка вызовов для нового приложения на shared-хостинге |

## Релиз и деплой

- **push в `main` = выкатка на боевой хост.** `.github/workflows/deploy.yml`
  дёргает на VPS forced-command `deploy`, который пересобирает контейнер из
  `/opt/beget-mcp`. Отдельного ручного шага нет — правка в `main` уезжает на прод
  сама.
- **тег `vX.Y.Z` = публикация пакетов.** `publish-mcp.yml` гонит тесты и заливает
  PyPI (trusted publishing), GHCR и MCP Registry — всё по OIDC, без секретов.
  Версия обязана совпадать в `pyproject.toml`, `server.json` и теге: workflow
  сверяет их до заливки, потому что версию на PyPI не перезалить.

## Переменные окружения

| Переменная | Назначение |
|-----------|-----------|
| `BEGET_API_LOGIN` | Логин Beget |
| `BEGET_API_PASSWORD` | Пароль Beget |

## Архитектура

```
src/mcp_beget/
├── app.py       — экземпляр FastMCP
├── config.py    — конфигурация (dataclass + валидация)
├── client.py    — HTTP-клиент с переиспользованием сессии
├── errors.py    — типизированные исключения (Auth / API)
├── server.py    — точка входа, инициализация, логирование
└── tools/       — инструменты, сгруппированные по разделам API
```

## Требования

- Python >= 3.11
- mcp[cli]
- requests
- python-dotenv

## Contributing

Issues и pull requests приветствуются. Если нашли баг или хотите предложить улучшение — создайте issue.

## Лицензия

[MIT](LICENSE)

---

Нет аккаунта на Beget? [Зарегистрируйтесь по ссылке](https://beget.com/p1211871) — вы получите хостинг, а автор проекта небольшой бонус.

TDQS

C2.9/5.0

Scored across 73 tools

Disambiguation3/5

Most resource areas are distinct, but backup tools have confusingly similar names (backup_files_list vs backup_file_list, backup_mysql_list vs backup_mysql_db_list) and DNS offers many overlapping set/patch variants. Descriptions help clarify boundaries, but an agent could still misselect among near-duplicates.

Naming Consistency3/5

All names use snake_case, but the pattern mixes resource_action (domain_delete), verb_resource (toggle_ssh), noun-only (account_info), and inconsistent verbs (add/create/set/change/remove/drop). It remains readable but not predictably uniform.

Tool Count1/5

73 tools far exceeds the typical 3-15 range and the 50+ threshold for extreme mismatch. While the hosting domain is broad, many granular operations could be consolidated without losing functionality.

Completeness4/5

Coverage spans domains, DNS, mail, FTP, MySQL, sites, cron, backups, stats, and account management, giving strong lifecycle support. Gaps include SSL certificate management and direct file-manager operations, but most core hosting workflows are present.

Maintenance

ActivityMaintained
ResponsivenessNo issues