Skip to main content
Glama

dynu-mcp

MCP-сервер для Dynu — провайдера динамического DNS, регистрации доменов, почтового хостинга и облачных вычислений (VPS). Предоставляет полный публичный REST API v2 Dynu в виде инструментов MCP.

Обзор

  • Статистический HTTP-сервис. Учётные данные никогда не сохраняются — каждый запрос передаёт собственный API-ключ через заголовок, который используется только в течение этого одного запроса.

  • Поддерживает параллельные запросы; изоляция учётных данных для каждого запроса выполняется через contextvars Python, а не через глобальный/общий экземпляр клиента.

  • Точки входа: POST /mcp (протокол MCP) и GET /health (проверка работоспособности).

  • Порт по умолчанию: 8080 (настраивается через MCP_HTTP_PORT).

Related MCP server: dynadot-mcp

Область применения

30 инструментов, сокращённых из первоначальной сборки из 117 инструментов, покрывающих полную спецификацию OpenAPI 3.0 Dynu. Платформа, за которой работает этот MCP, агрегирует инструменты всех включённых MCP-серверов в один вызов модели Gemini/Vertex, который ограничен 512 объявлениями функций — при 50+ зарегистрированных MCP-серверах каждый должен оставаться компактным. Сохранены те же 6 категорий: dns (8 — реальная конечная точка GET /dns от MSPbots плюс основные операции CRUD для записей/сервисов), email (7 — список/детали сервиса, создание/чтение/обновление/удаление учётных записей), compute (4 — список/детали/запуск/остановка экземпляров), domain (2 — список/детали), monitor (7, полная категория), ping (2, полная категория). Полностью исключены: администрирование регистрации доменов (glue-записи, серверы имён, автопродление, блокировка/разблокировка), управление чёрными/белыми списками, алиасами, списками рассылки и DKIM в почте, а также операции резервного копирования, снимков, VNC и переустановки в compute — см. Известные пробелы. Сам MSPbots вызывает только одну конечную точку (GET /dns), которая сохранена.

Аутентификация

Dynu аутентифицируется с помощью одного статического API-ключа (находится в разделе API Credentials панели управления Dynu). Соглашение об интеграции MSPbots отправляет этот ключ как исходное значение заголовка API-Key, и этот сервер пересылает его точно так же.

Описание параметров заголовка

Заголовок

Тип

Обязательность

Значение по умолчанию

Допустимые значения

Описание поля

Пример

X-Dynu-Api-Key

string

да

нет

нет

Статический API-ключ Dynu, передаётся как есть в заголовок API-Key вышестоящего сервиса

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

Отсутствие заголовка возвращает 401:

{
  "error": "Missing credentials",
  "message": "This server requires the X-Dynu-Api-Key header",
  "required_headers": ["X-Dynu-Api-Key"],
  "optional_headers": []
}

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

Переменная

Тип

Обязательность

Значение по умолчанию

Описание

MCP_HTTP_PORT

int

нет

8080

Порт HTTP-прослушивания

MCP_HTTP_HOST

string

нет

0.0.0.0

Адрес HTTP-прослушивания

DYNU_BASE_URL

string

нет

https://api.dynu.com/v2

Базовый URL API Dynu

Конечная точка MCP

  • POST /mcp — протокол MCP (потоковый HTTP-транспорт)

  • GET /health — проверка работоспособности, возвращает {"status": "ok"} (чисто локальный зонд, не зависит от API Dynu)

Список инструментов

Имена инструментов выводятся из собственного описания каждой операции в спецификации OpenAPI поставщика (например, "Get a list of domains for DNS service" → dynu_get_list_domains_dns_service); единственное совпадение имён (оба GET /ping и POST /ping имеют одинаковое описание) разрешается суффиксом _get/_post. Параметры body для операций POST принимаются как универсальный dict — точные имена и типы полей каждого ресурса см. в разделе Models спецификации OpenAPI поставщика (ссылка ниже).

Категория

Инструмент

Функция

Метод+путь

Параметры

dns

dynu_add_new_dns_record_dns_service

Добавить новую DNS-запись для DNS-сервиса.

POST /dns/{id}/record

id (обязательно), body (обязательно, dict)

dns

dynu_add_new_dns_service

Добавить новый DNS-сервис.

POST /dns

body (обязательно, dict)

dns

dynu_get_details_dns_record_dns_service

Получить детали DNS-записи для DNS-сервиса.

GET /dns/{id}/record/{dnsRecordId}

id (обязательно), dns_record_id (обязательно)

dns

dynu_get_details_domain_dns_service

Получить детали домена для DNS-сервиса.

GET /dns/{id}

id (обязательно)

dns

dynu_get_list_dns_records_dns_service

Получить список DNS-записей для DNS-сервиса.

GET /dns/{id}/record

id (обязательно)

dns

dynu_get_list_domains_dns_service

Получить список доменов для DNS-сервиса.

GET /dns

dns

dynu_remove_dns_record_dns_service

Удалить DNS-запись из DNS-сервиса.

DELETE /dns/{id}/record/{dnsRecordId}

id (обязательно), dns_record_id (обязательно)

dns

dynu_update_existing_dns_record_dns_service

Обновить существующую DNS-запись для DNS-сервиса.

POST /dns/{id}/record/{dnsRecordId}

id (обязательно), dns_record_id (обязательно), body (обязательно, dict)

domain

dynu_get_details_domain_registration_domain

Получить детали домена регистрации домена.

GET /domain/{id}

id (обязательно)

domain

dynu_get_list_domains_domain_registration_service

Получить список доменов для сервиса регистрации доменов.

GET /domain

email

dynu_add_new_email_account_email_service

Добавить новую учётную запись электронной почты для почтового сервиса.

POST /email/{id}/account

id (обязательно), body (обязательно, dict)

email

dynu_get_details_email_account

Получить детали учётной записи электронной почты.

GET /email/{id}/account/{accountId}

id (обязательно), account_id (обязательно)

email

dynu_get_details_email_service

Получить детали почтового сервиса.

GET /email/{id}

id (обязательно)

email

dynu_get_list_email_accounts_email_service

Получить список учётных записей электронной почты для почтового сервиса.

GET /email/{id}/account

id (обязательно)

email

dynu_get_list_email_services

Получить список почтовых сервисов.

GET /email

email

dynu_remove_email_account_email_service

Удалить учётную запись электронной почты из почтового сервиса.

DELETE /email/{id}/account/{accountId}

id (обязательно), account_id (обязательно)

email

dynu_update_existing_email_account_email_service

Обновить существующую учётную запись электронной почты для почтового сервиса.

POST /email/{id}/account/{accountId}

id (обязательно), account_id (обязательно), body (обязательно, dict)

compute

dynu_get_instance

Получить экземпляр.

GET /compute/instance/{id}

id (обязательно)

compute

dynu_get_list_instances

Получить список экземпляров.

GET /compute/instance

compute

dynu_start_instance

Запустить экземпляр.

GET /compute/instance/{id}/start

id (обязательно)

compute

dynu_stop_suspend_instance

Остановить (приостановить) экземпляр.

GET /compute/instance/{id}/stop

id (обязательно)

monitor

dynu_add_new_monitor

Добавить новый монитор.

POST /monitor

body (обязательно, dict)

monitor

dynu_delete_monitor

Удалить монитор.

DELETE /monitor/{id}

id (обязательно)

monitor

dynu_get_details_monitor

Получить детали монитора.

GET /monitor/{id}

id (обязательно)

monitor

dynu_get_list_monitors

Получить список мониторов.

GET /monitor

monitor

dynu_limits_associated_monitoring

Лимиты, связанные с мониторингом.

GET /monitor/limit

monitor

dynu_pause_monitor

Приостановить монитор.

GET /monitor/{id}/pause

id (обязательно)

monitor

dynu_unpause_monitor

Возобновить монитор.

GET /monitor/{id}/unpause

id (обязательно)

ping

dynu_ping_api_server_obtain_pong_response_get

Пинговать API-сервер для получения ответа pong.

GET /ping

message (обязательно)

ping

dynu_ping_api_server_obtain_pong_response_post

Пинговать API-сервер для получения ответа pong.

POST /ping

body (обязательно, dict)

Пример тестирования

# Health check
curl -s http://localhost:8080/health

# Call a tool via the MCP protocol (streamable HTTP) — requires an
# initialize handshake first per the MCP spec; abbreviated example below
# shows the tool-call request body only:
curl -s -X POST http://localhost:8080/mcp   -H "X-Dynu-Api-Key: <your-dynu-api-key>"   -H "Content-Type: application/json"   -H "Accept: application/json, text/event-stream"   -H "mcp-session-id: <session-id-from-initialize>"   -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "dynu_get_list_domains_dns_service",
      "arguments": {}
    }
  }'

Проверено вживую (2026-07-29): dynu_get_list_domains_dns_service (та же конечная точка, которую вызывает сам MSPbots, без параметров) была вызвана сквозным образом через этот работающий сервер с реальным API-ключом и вернула реальные записи DNS-доменов для учётной записи.

Справочник по API

Известные пробелы

  • Сокращено со 117 до 30 инструментов по явному решению пользователя: платформа, на которой работает этот MCP, агрегирует инструменты всех включённых вендорских MCP в один вызов модели Gemini/Vertex, который ограничен 512 объявлениями функций — при 50+ зарегистрированных вендорских MCP каждый должен оставаться компактным. Сохранены: реальный эндпоинт GET /dns от MSPbots, базовые операции CRUD для DNS-записей/сервисов (8), базовые операции CRUD для почтовых сервисов/аккаунтов (7), базовые операции со списком/детализацией/запуском/остановкой вычислительных инстансов (4), список/детализация доменов (2) и Monitor/Ping в полном объёме (9). Полностью удалены: администрирование регистратора доменов (glue-записи, nameservers, автопродление, блокировка/разблокировка/отмена), управление чёрным/белым списками, алиасами, списками рассылки и DKIM для почты, а также операции резервного копирования/снапшотов/VNC/переустановки/смены пароля для вычислительных ресурсов. Любые из них могут быть добавлены обратно по запросу, если для них появится реальный сценарий использования.

  • Операции записи для вычислительных ресурсов и доменов остаются более рискованными даже после сокращенияdynu_start_instance/dynu_stop_suspend_instance воздействуют на реальные VPS-инстансы. Относитесь к ним как к разрушительным/необратимым и подтверждайте с человеком перед вызовом.

  • Параметры body не типизированы (dict), а не полностью смоделированы — раздел Models в спецификации OpenAPI определяет точную схему для каждого ресурса (например, DNS.dnsRecordA), но воспроизведение всех их в виде типизированных параметров Python выходило за рамки задачи. Вызывающим следует формировать словарь body в соответствии с указанной спецификацией.

  • Только dynu_get_list_domains_dns_service (собственный эндпоинт MSPbots) был проверен вживую с реальными данными аккаунта. Остальные 29 инструментов структурно корректны (схема проверена, tools/list по протоколу MCP подтверждён, количество инструментов перепроверено после сокращения), но не были индивидуально протестированы дымовым тестированием — несколько из них являются операциями записи/разрушения, которые создали бы, изменили или удалили реальные DNS-записи, почтовые аккаунты или VPS-инстансы, поэтому они не выполнялись на живом тестовом аккаунте.

Related MCP Connectors

Related MCP Servers