Skip to main content
Glama

dynu-mcp

Servidor MCP para Dynu — un proveedor de DNS dinámico, registro de dominios, alojamiento de correo electrónico y computación en la nube (VPS). Expone la API REST pública completa de Dynu v2 como herramientas MCP.

Descripción general

  • Servicio HTTP sin estado. Nunca se persisten credenciales: cada solicitud proporciona su propia clave API mediante una cabecera, utilizada solo durante la vida de esa única solicitud.

  • Admite solicitudes concurrentes; el aislamiento de credenciales por solicitud se realiza mediante contextvars de Python, no con una instancia de cliente global/compartida.

  • Puntos de entrada: POST /mcp (protocolo MCP) y GET /health (comprobación de salud).

  • Puerto predeterminado: 8080 (configurable mediante MCP_HTTP_PORT).

Related MCP server: dynadot-mcp

Alcance

30 herramientas, reducidas de una compilación inicial de 117 herramientas que cubrían la especificación OpenAPI 3.0 completa de Dynu. La plataforma detrás de este MCP agrega las herramientas de cada MCP de proveedor habilitado en una única llamada de modelo Gemini/Vertex, que tiene un límite de 512 declaraciones de funciones en total; con más de 50 MCP de proveedores registrados, cada uno debe mantenerse ágil. Se conservan, en las mismas 6 categorías: dns (8 — el endpoint real GET /dns de MSPbots más el CRUD básico de registros/servicios), email (7 — lista/detalle de servicios, crear/leer/actualizar/eliminar cuentas), compute (4 — lista/detalle de instancias, iniciar/detener), domain (2 — lista/detalle), monitor (7, categoría completa), ping (2, categoría completa). Se eliminaron por completo: administración de registro de dominios (registros glue, servidores de nombres, renovación automática, bloqueo/desbloqueo), gestión de listas negras/blancas/alias/listas de distribución/DKIM de correo electrónico, y operaciones de copia de seguridad/snapshot/VNC/reinstalación de compute — ver Brechas conocidas. MSPbots solo llama a 1 endpoint (GET /dns), que se conserva.

Autenticación

Dynu autentica con una única clave API estática (que se encuentra en el área de Credenciales API del panel de control de Dynu). La convención de integración de MSPbots envía esta clave como el valor bruto de la cabecera API-Key, y este servidor la reenvía exactamente de esa manera.

Parámetros de autorización de cabecera

Cabecera

Tipo

¿Requerido?

Valor por defecto

Valores posibles

Descripción del campo

Ejemplo

X-Dynu-Api-Key

string

Ninguno

Ninguno

Clave API estática de Dynu, se reenvía tal cual como cabecera API-Key aguas arriba

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

Si falta la cabecera, se devuelve 401:

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

Variables de entorno

Variable

Tipo

¿Requerido?

Valor por defecto

Descripción

MCP_HTTP_PORT

int

No

8080

Puerto de escucha HTTP

MCP_HTTP_HOST

string

No

0.0.0.0

Dirección de escucha HTTP

DYNU_BASE_URL

string

No

https://api.dynu.com/v2

URL base de la API de Dynu

Endpoint MCP

  • POST /mcp — protocolo MCP (transporte HTTP transmisible)

  • GET /health — comprobación de salud, devuelve {"status": "ok"} (sonda de disponibilidad local pura, no depende de la API de Dynu)

Lista de herramientas

Los nombres de las herramientas se derivan del resumen de cada operación en la especificación OpenAPI del proveedor (por ejemplo, "Get a list of domains for DNS service" → dynu_get_list_domains_dns_service); la única colisión de nombres (tanto GET /ping como POST /ping comparten un resumen idéntico) se desambigua con un sufijo _get/_post. Los parámetros body para operaciones POST se aceptan como un dict genérico — consulte la sección Modelos de la especificación OpenAPI del proveedor (enlazada abajo) para los nombres y tipos de campos exactos de cada recurso.

Categoría

Herramienta

Función

Método + ruta

Parámetros

dns

dynu_add_new_dns_record_dns_service

Añadir un nuevo registro DNS para el servicio DNS.

POST /dns/{id}/record

id(obligatorio), body(obligatorio, dict)

dns

dynu_add_new_dns_service

Añadir un nuevo servicio DNS.

POST /dns

body(obligatorio, dict)

dns

dynu_get_details_dns_record_dns_service

Obtener detalles de un registro DNS para el servicio DNS.

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

id(obligatorio), dns_record_id(obligatorio)

dns

dynu_get_details_domain_dns_service

Obtener detalles de un dominio para el servicio DNS.

GET /dns/{id}

id(obligatorio)

dns

dynu_get_list_dns_records_dns_service

Obtener una lista de registros DNS para el servicio DNS.

GET /dns/{id}/record

id(obligatorio)

dns

dynu_get_list_domains_dns_service

Obtener una lista de dominios para el servicio DNS.

GET /dns

dns

dynu_remove_dns_record_dns_service

Eliminar un registro DNS del servicio DNS.

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

id(obligatorio), dns_record_id(obligatorio)

dns

dynu_update_existing_dns_record_dns_service

Actualizar un registro DNS existente para el servicio DNS.

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

id(obligatorio), dns_record_id(obligatorio), body(obligatorio, dict)

domain

dynu_get_details_domain_registration_domain

Obtener detalles de un dominio de registro de dominios.

GET /domain/{id}

id(obligatorio)

domain

dynu_get_list_domains_domain_registration_service

Obtener una lista de dominios para el servicio de registro de dominios.

GET /domain

email

dynu_add_new_email_account_email_service

Añadir una nueva cuenta de correo para el servicio de correo.

POST /email/{id}/account

id(obligatorio), body(obligatorio, dict)

email

dynu_get_details_email_account

Obtener detalles de la cuenta de correo.

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

id(obligatorio), account_id(obligatorio)

email

dynu_get_details_email_service

Obtener detalles de un servicio de correo.

GET /email/{id}

id(obligatorio)

email

dynu_get_list_email_accounts_email_service

Obtener una lista de cuentas de correo para el servicio de correo.

GET /email/{id}/account

id(obligatorio)

email

dynu_get_list_email_services

Obtener una lista de servicios de correo.

GET /email

email

dynu_remove_email_account_email_service

Eliminar una cuenta de correo del servicio de correo.

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

id(obligatorio), account_id(obligatorio)

email

dynu_update_existing_email_account_email_service

Actualizar una cuenta de correo existente para el servicio de correo.

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

id(obligatorio), account_id(obligatorio), body(obligatorio, dict)

compute

dynu_get_instance

Obtener una instancia.

GET /compute/instance/{id}

id(obligatorio)

compute

dynu_get_list_instances

Obtener una lista de instancias.

GET /compute/instance

compute

dynu_start_instance

Iniciar una instancia.

GET /compute/instance/{id}/start

id(obligatorio)

compute

dynu_stop_suspend_instance

Detener (suspender) una instancia.

GET /compute/instance/{id}/stop

id(obligatorio)

monitor

dynu_add_new_monitor

Añadir un nuevo monitor.

POST /monitor

body(obligatorio, dict)

monitor

dynu_delete_monitor

Eliminar un monitor.

DELETE /monitor/{id}

id(obligatorio)

monitor

dynu_get_details_monitor

Obtener detalles de un monitor.

GET /monitor/{id}

id(obligatorio)

monitor

dynu_get_list_monitors

Obtener una lista de monitores.

GET /monitor

monitor

dynu_limits_associated_monitoring

Límites asociados con la monitorización.

GET /monitor/limit

monitor

dynu_pause_monitor

Pausar un monitor.

GET /monitor/{id}/pause

id(obligatorio)

monitor

dynu_unpause_monitor

Reanudar un monitor.

GET /monitor/{id}/unpause

id(obligatorio)

ping

dynu_ping_api_server_obtain_pong_response_get

Hacer ping al servidor API para obtener la respuesta pong.

GET /ping

message(obligatorio)

ping

dynu_ping_api_server_obtain_pong_response_post

Hacer ping al servidor API para obtener la respuesta pong.

POST /ping

body(obligatorio, dict)

Ejemplo de prueba

# 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": {}
    }
  }'

Verificado en vivo (2026-07-29): dynu_get_list_domains_dns_service (el mismo endpoint que MSPbots llama, con cero parámetros) se llamó de extremo a extremo a través de este servidor en ejecución con una clave API real y devolvió registros de dominios DNS reales para la cuenta.

Referencia de API

Brechas conocidas

  • Reducido de 117 a 30 herramientas, por decisión explícita del usuario: la plataforma sobre la que se ejecuta este MCP agrega las herramientas de cada MCP de proveedor habilitado en una única llamada de modelo Gemini/Vertex, que tiene un límite de 512 declaraciones de función en total — con más de 50 MCP de proveedores registrados, cada uno debe mantenerse ágil. Se conservaron: el endpoint real GET /dns de MSPbots, el CRUD básico de registros/servicios DNS (8), el CRUD básico de servicios/cuentas de correo (7), el listado/detalle/inicio/detención básico de instancias de cómputo (4), el listado/detalle de dominios (2) y Monitor/Ping en su totalidad (9). Se eliminaron por completo: la administración del registrador de dominios (registros glue, servidores de nombres, renovación automática, bloqueo/desbloqueo/cancelación), la gestión de listas negras/listas blancas/alias/listas de distribución/DKIM del correo, y las operaciones de copia de seguridad/snapshot/VNC/reinstalación/cambio de contraseña de cómputo. Cualquiera de estas puede volver a añadirse si un caso de uso real lo requiere.

  • Las operaciones de escritura de cómputo y dominios siguen siendo de mayor riesgo incluso después del recorte — dynu_start_instance/dynu_stop_suspend_instance actúan sobre instancias VPS reales. Trátelas como destructivas/irreversibles y confirme con un humano antes de invocarlas.

  • Los parámetros body no están tipados (dict) en lugar de estar completamente modelados — la sección Models de la especificación OpenAPI define el esquema exacto por recurso (por ejemplo, DNS.dnsRecordA), pero reproducir todos ellos como parámetros Python tipados estaba fuera del alcance. Los llamadores deben dar forma al dict body según la especificación enlazada.

  • Solo dynu_get_list_domains_dns_service (el endpoint propio de MSPbots) se verificó en vivo con datos reales de la cuenta. Las 29 herramientas restantes son estructuralmente correctas (esquema validado, tools/list del protocolo MCP confirmado, recuento de herramientas re-verificado después del recorte) pero no se probaron individualmente con pruebas de humo — varias son operaciones de escritura/destructivas que crearían, modificarían o eliminarían registros DNS reales, cuentas de correo o instancias VPS, por lo que no se ejercitaron contra la cuenta de prueba en vivo.

Related MCP Connectors

Related MCP Servers