dynu-mcp
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
contextvarsde Python, no con una instancia de cliente global/compartida.Puntos de entrada:
POST /mcp(protocolo MCP) yGET /health(comprobación de salud).Puerto predeterminado:
8080(configurable medianteMCP_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 |
| string | Sí | Ninguno | Ninguno | Clave API estática de Dynu, se reenvía tal cual como cabecera |
|
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 |
| int | No |
| Puerto de escucha HTTP |
| string | No |
| Dirección de escucha HTTP |
| string | No |
| 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 |
| Añadir un nuevo registro DNS para el servicio DNS. | POST /dns/{id}/record | id(obligatorio), body(obligatorio, dict) |
dns |
| Añadir un nuevo servicio DNS. | POST /dns | body(obligatorio, dict) |
dns |
| Obtener detalles de un registro DNS para el servicio DNS. | GET /dns/{id}/record/{dnsRecordId} | id(obligatorio), dns_record_id(obligatorio) |
dns |
| Obtener detalles de un dominio para el servicio DNS. | GET /dns/{id} | id(obligatorio) |
dns |
| Obtener una lista de registros DNS para el servicio DNS. | GET /dns/{id}/record | id(obligatorio) |
dns |
| Obtener una lista de dominios para el servicio DNS. | GET /dns | |
dns |
| Eliminar un registro DNS del servicio DNS. | DELETE /dns/{id}/record/{dnsRecordId} | id(obligatorio), dns_record_id(obligatorio) |
dns |
| Actualizar un registro DNS existente para el servicio DNS. | POST /dns/{id}/record/{dnsRecordId} | id(obligatorio), dns_record_id(obligatorio), body(obligatorio, dict) |
domain |
| Obtener detalles de un dominio de registro de dominios. | GET /domain/{id} | id(obligatorio) |
domain |
| Obtener una lista de dominios para el servicio de registro de dominios. | GET /domain | |
| Añadir una nueva cuenta de correo para el servicio de correo. | POST /email/{id}/account | id(obligatorio), body(obligatorio, dict) | |
| Obtener detalles de la cuenta de correo. | GET /email/{id}/account/{accountId} | id(obligatorio), account_id(obligatorio) | |
| Obtener detalles de un servicio de correo. | GET /email/{id} | id(obligatorio) | |
| Obtener una lista de cuentas de correo para el servicio de correo. | GET /email/{id}/account | id(obligatorio) | |
| Obtener una lista de servicios de correo. | GET /email | ||
| Eliminar una cuenta de correo del servicio de correo. | DELETE /email/{id}/account/{accountId} | id(obligatorio), account_id(obligatorio) | |
| 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 |
| Obtener una instancia. | GET /compute/instance/{id} | id(obligatorio) |
compute |
| Obtener una lista de instancias. | GET /compute/instance | |
compute |
| Iniciar una instancia. | GET /compute/instance/{id}/start | id(obligatorio) |
compute |
| Detener (suspender) una instancia. | GET /compute/instance/{id}/stop | id(obligatorio) |
monitor |
| Añadir un nuevo monitor. | POST /monitor | body(obligatorio, dict) |
monitor |
| Eliminar un monitor. | DELETE /monitor/{id} | id(obligatorio) |
monitor |
| Obtener detalles de un monitor. | GET /monitor/{id} | id(obligatorio) |
monitor |
| Obtener una lista de monitores. | GET /monitor | |
monitor |
| Límites asociados con la monitorización. | GET /monitor/limit | |
monitor |
| Pausar un monitor. | GET /monitor/{id}/pause | id(obligatorio) |
monitor |
| Reanudar un monitor. | GET /monitor/{id}/unpause | id(obligatorio) |
ping |
| Hacer ping al servidor API para obtener la respuesta pong. | GET /ping | message(obligatorio) |
ping |
| 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
Descripción general: https://www.dynu.com/Support/API
Especificación oficial OpenAPI 3.0 (Swagger): https://www.dynu.com/files/dynu.api/Dynu.API.OAS.zip
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 /dnsde 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_instanceactúan sobre instancias VPS reales. Trátelas como destructivas/irreversibles y confirme con un humano antes de invocarlas.Los parámetros
bodyno 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 dictbodysegú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/listdel 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.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for DNSimple — domains, DNS zone records, availability, pricing and contacts.
Remote MCP for 1,500+ APIs. Vault-managed credentials; OAuth or API key. Search, load, and execute.
135 MCP tools: geo, email, phone, company, DNS, FX, equities, weather, tax, econ, intel — one key.
49 developer tools via MCP: DNS, WHOIS, IP lookup, JWT, hashing, QR, and more.
Related MCP Servers
- AlicenseBqualityAmaintenanceMCP server for Dynadot domain registrar API3 — manage domains, DNS, contacts, transfers & more6736 npm1MIT
- FlicenseCqualityCmaintenanceMCP server for Dynadot API to manage domains, DNS, contacts, nameservers, folders, and aftermarket.1001-
- AlicenseNot gradedqualityDmaintenanceEnables DNS record CRUD operations (list, get, create, update, delete) through MCP tools, provider-agnostic and secure.MIT
- FlicenseNot gradedqualityDmaintenanceEnables managing Cloudflare domains, DNS records, SSL certificates, zone operations, analytics, and cache purging via MCP or CLI.5 npm-