beget-mcp
# 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
Scored across 73 tools
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.
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.
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.
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.