eurodns-mcp
Un servidor de Model Context Protocol para la API de usuario de EuroDNS: dominios, zonas DNS, contactos, suscripciones, SSL, facturas y pedidos.
Documentación
eurodns-mcp
Gestiona tus dominios, zonas DNS y suscripciones simplemente pidiéndolo.
Un servidor de Model Context Protocol para la API de usuario de EuroDNS: dominios, zonas DNS, contactos, suscripciones, SSL, facturas y pedidos.
Este es un proyecto de código abierto independiente. No está afiliado, respaldado ni soportado por EuroDNS. "EuroDNS" se utiliza únicamente para identificar la API con la que habla este servidor.
Escrito por un ingeniero profesional con asistencia de IA. Cada línea fue revisada antes de ser confirmada, y la responsabilidad de lo que hace es humana.
Lo que obtienes
- Cobertura completa de la API en 36 herramientas: cada una de las 79 operaciones de la API, con cada par de listado/obtención, par de creación/actualización de perfil, conmutador de activación/desactivación y lectura por producto integrados en una sola herramienta; 55 herramientas una vez que se habilitan las operaciones de facturación e irreversibles.
- Cada herramienta y argumento descrito para el modelo que los lee: qué hace y qué devuelve, cuándo preferir su vecina y cuándo no, qué hace que las anotaciones no pueden decir, de dónde proviene un id. Una prueba mantiene toda la superficie bajo control, y un flujo de trabajo ejecuta el propio linter de los registros sobre ella.
- Tres herramientas de flujo de trabajo DNS que hacen seguras las ediciones de registros, porque guardar una zona la reemplaza.
- Protecciones para que un despliegue pueda rechazar operaciones que gasten dinero o destruyan cosas.
- Cuatro indicaciones para los flujos de trabajo que merecen un nombre, y dos recursos: la cartera, navegable, y uno que dice qué permite este despliegue, incluido por qué una herramienta que esperabas no está en la lista.
- Dos transportes:
stdiopara un cliente local, HTTP transmisible para un despliegue compartido. - Ambas eras de protocolo en un solo punto final: habla la revisión del 2026-07-28 de forma nativa y aún atiende a clientes de la era 2025, que son la mayoría hoy en día.
- OAuth 2.1 o un token compartido en HTTP, con una línea de auditoría por llamada.
- Historial consultable: pregunta al servidor qué se ha hecho y quién lo hizo.
- 1Password Connect como fuente opcional para cualquier secreto que lea.
Cómo funciona
flowchart TD
client(["MCP client"])
client -->|stdio| registry
client -->|streamable HTTP| origin
subgraph http ["HTTP transport only"]
origin["Origin check"] --> bearer["Bearer token<br/>OAuth 2.1 or shared secret"]
bearer --> scopes["Scope gate"]
end
scopes --> registry["Tool registry"]
registry --> guard{"Guardrails<br/>read-only, billing, destructive"}
guard -->|refused| deny["Error naming the setting to change"]
guard -->|allowed| api[("EuroDNS User API")]
op[("1Password Connect")] -.->|"op:// refs, at startup"| creds["Credentials"]
creds -.-> api
registry -.-> log[("Audit log")]
guard -.-> log
log -.->|eurodns_audit_query| client
Dos cosas merecen leerse de ese diagrama. La autorización tiene dos puertas independientes: lo que el despliegue permite en absoluto, y luego lo que los alcances del llamante permiten dentro de eso. Y el registro de auditoría se alimenta de todas las rutas, incluidos los rechazos, porque la API ascendente autentica a cada llamante con una clave compartida y no puede atribuir nada por sí misma.
Requisitos
- Node.js 22 o más reciente. Node 20 llegó al final de su vida útil el 30 de abril de 2026 y no recibe parches de seguridad; la imagen del contenedor ejecuta Node 24, el LTS activo.
- Credenciales de la API de EuroDNS: un ID de aplicación y una clave de API, creados en el panel de EuroDNS bajo acceso a la API.
- La IP pública de la máquina que ejecuta este servidor debe estar en la lista de
permitidos en el mismo panel. Un
403de la API casi siempre es una entrada faltante en la lista de permitidos, no credenciales incorrectas.
Inicio rápido
Para un cliente que inicia el servidor por sí mismo, como Claude Desktop:
{
"mcpServers": {
"eurodns": {
"command": "npx",
"args": ["-y", "@jigsawfr/eurodns-mcp"],
"env": {
"EURODNS_APP_ID": "your-application-id",
"EURODNS_API_KEY": "your-api-key"
}
}
}
}
Para probarlo en una terminal primero:
npx -y @jigsawfr/eurodns-mcp
Sin credenciales, aún se inicia, enumera cada herramienta, indicación y recurso, y rechaza
cada llamada con un mensaje que nombra las dos variables, de modo que un mercado, o
npx @modelcontextprotocol/inspector, puede mostrar la superficie antes de que tengas una clave.
El paquete incluye dos comandos: eurodns-mcp para stdio, que es el anterior, y
eurodns-mcp-http para el transporte HTTP, accesible como
npx -p @jigsawfr/eurodns-mcp eurodns-mcp-http.
Para un despliegue compartido sobre HTTP, usa el contenedor en su lugar: consulta Despliegue.
Intenta no poner la clave de API en el archivo de configuración del cliente: Secretos muestra dos formas de evitarlo.
Qué puedes pedirle
| Pregunta | Herramienta a la que recurre |
|---|---|
| "¿Qué registros DNS tiene example.com?" | eurodns_dns_get_zone |
"Añade un registro TXT _acme-challenge en example.com" | eurodns_dns_upsert_record |
| "¿Qué cambiaría si apunto www a 203.0.113.10?" | eurodns_dns_diff_zone |
| "¿Está disponible example.lu?" | eurodns_domain_check_availability |
| "¿Cuáles de mis dominios tienen DNSSEC habilitado?" | eurodns_domain_get |
| "¿Cuándo caduca este certificado SSL?" | eurodns_subscription_get |
| "¿Cuál es mi saldo prepagado?" | eurodns_account_get_prepaid_balance |
| "¿Qué cambié la semana pasada?" | eurodns_audit_query |
| "¿Qué fue rechazado y por qué?" | eurodns_audit_query |
Documentación
| Página | Qué cubre |
|---|---|
| Herramientas | Las 55 herramientas, las operaciones que integran, las indicaciones y los recursos |
| Protecciones | Clases de riesgo, qué puede prohibir un despliegue, confirmación antes de una llamada |
| Configuración | Cada variable de entorno, con su valor predeterminado |
| Transporte HTTP | Atender a varios clientes, tokens estáticos, OAuth 2.1 y alcances |
| Secretos | Mantener la clave de API fuera de la configuración del cliente y 1Password Connect |
| Registro de auditoría | Qué se registra, la cadena de hash, preguntar al servidor qué ocurrió |
| Entra ID | OAuth paso a paso con Microsoft Entra ID y sus trampas |
| Despliegue | Contenedores, Fly.io, Render, Railway y envío del registro a un SIEM |
| Protocolo | Qué revisiones de MCP se hablan y cómo se atienden ambas en un punto final |
| Desarrollo | Compilación, pruebas, la superficie de herramientas generada y cómo funcionan los lanzamientos |
Despliegue
cp .env.example .env # credentials, plus a token: openssl rand -hex 32
docker compose up -d
curl localhost:3000/healthz
Las imágenes publicadas viven en ghcr.io/jigsawfr/eurodns-mcp, compiladas para linux/amd64 y
linux/arm64 con una atestación de procedencia de compilación.
Dos cosas deciden dónde se ejecuta esto, y ninguna es el argumento habitual de latencia o precio:
- La API de EuroDNS filtra por IP de origen, por lo que el host debe darte una dirección de salida estable, idealmente dedicada. Una IP compartida con otros inquilinos mantiene el mecanismo y pierde la protección.
- La herramienta de consulta de historial lee un archivo, por lo que el host necesita un disco persistente. Eso descarta plataformas con un sistema de archivos efímero.
En ambos aspectos, Fly.io sale adelante, a un par de dólares al mes por una IPv4 dedicada
frente a aproximadamente $100 en otros lugares. deploy/ tiene el
detalle por plataforma, fly.toml y render.yaml listos, y la comparación completa.
Una configuración atrapa a todos una vez: dentro de un contenedor, el servidor escucha en
0.0.0.0 y se niega a iniciarse en una dirección que no sea de bucle local sin
autenticación. Establece EURODNS_MCP_AUTH a token o oauth.
Cuál de esos dos
La elección no se trata de cuán seguro quieres ser (ambos lo son), sino de si los llamantes necesitan identidades separadas, y tiene un costo que deberías ver venir.
token es un secreto compartido en un encabezado. Funciona en un minuto, no
necesita nada más que el servidor, y es la respuesta correcta para un despliegue que usa una
persona. Lo que pierdes es la atribución: el registro de auditoría registra una etiqueta, por
lo que puede decirte que ocurrió una llamada destructiva, pero no quién la hizo.
oauth le da a cada persona su propia credencial, permite que los cinco alcances
decidan quién puede hacer qué, y pone una identidad real en el registro de auditoría. Los
alcances deciden qué puede hacer un llamante; tu proveedor de identidad decide quién recibe un
token en absoluto, y la mayoría predetermina a todos en el directorio, por lo que esa
configuración es parte de la configuración, no una ocurrencia tardía. Su precio de entrada es
un nombre de host en un dominio que tu proveedor de identidad aceptará: con Microsoft Entra
ID, eso significa un dominio verificado en tu inquilino, porque la URL pública del
servidor debe duplicar el URI del ID de aplicación. Un nombre de host de plataforma como
*.fly.dev no se puede verificar, por lo que el dominio no es opcional allí.
Entra ID recorre todo el proceso, incluidos los errores que produce cuando
los tres nombres involucrados se desalinean, y cómo ir un paso más allá y darle a cada
persona un conjunto diferente de alcances en lugar del mismo.
Comenzar en token y pasar a oauth más tarde no cuesta nada más que un
reinicio: sin migración de datos, sin cambios en cómo se comportan las herramientas.
Contribuciones
CONTRIBUTING.md tiene el flujo de trabajo, y docs/development.md los comandos. Los títulos de las solicitudes de extracción se verifican contra Conventional Commits, porque de eso se genera el registro de cambios.
Licencia
MIT.
"EuroDNS" es una marca comercial de EuroDNS S.A. y no está cubierta por esa licencia.