Servidor MCP
hdply incluye un servidor MCP integrado. Cualquier cliente MCP —Claude Code, Claude Desktop o tu propio agente— puede listar tus sitios, crear uno, leer el HTML que está en línea, publicar una nueva versión y consultar el historial de despliegues. Cinco herramientas, una clave de API, nada que ejecutar en local.
Seguro para dejárselo a un agente
No hay herramienta de borrado. Eliminar un sitio solo se puede hacer desde la consola web, por diseño. Un agente con todos los permisos de despliegue puede publicar una versión mala, pero no puede destruir tu trabajo.
Cada despliegue —humano o agente— queda versionado. Un despliegue erróneo se restaura con un clic en la consola, y get_deploy_history muestra exactamente qué despliegues llegaron por MCP ("source": "mcp"). Esa es la diferencia con un MCP de despliegue genérico: hdply se limita a un archivo HTML por sitio, así que el peor caso es una página que se ve mal durante un minuto.
El caso de uso principal
Claude te escribe una página —una propuesta, un panel, una maqueta— como artefacto HTML. En vez de guardar el archivo y subirlo a algún sitio, dices "publica esto" y la misma conversación termina con una URL pública que puedes enviar. Después, "cambia el título y vuelve a publicar" es otro único turno.
Conectar
Claude Code, un comando:
claude mcp add --transport http hdply https://api.app.hdply.com/mcp \ --header "Authorization: Bearer hdply_sk_…"
Claude Desktop, en claude_desktop_config.json (a través de mcp-remote, ya que Desktop solo lanza comandos locales):
{
"mcpServers": {
"hdply": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.app.hdply.com/mcp",
"--header", "Authorization: Bearer hdply_sk_…"]
}
}
}
Cualquier otro cliente: es un endpoint Streamable HTTP sin estado. Envía JSON-RPC a la URL de abajo con la misma cabecera bearer.
POST https://api.app.hdply.com/mcp
Authorization: Bearer hdply_sk_…
Content-Type: application/json
{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}
La clave se crea en el panel de la consola (tarjeta "API key"). Se muestra una sola vez y da acceso a todos los sitios de la cuenta: trátala como una contraseña.
Herramientas
Cada herramienta recibe un objeto JSON y devuelve contenido de texto. Los errores vuelven como texto con isError: true, nunca como fallo de transporte, para que el agente pueda leer el motivo y reintentar.
list_sites
Todos los sitios que puedes gestionar, personales y de equipo, con su URL y si hay algo desplegado. Sin argumentos.
Ejemplo de llamada
{ "name": "list_sites", "arguments": {} }
Resultado
[
{
"id": 42,
"name": "Q3 proposal",
"subroute": "k3v9x2m7q1",
"url": "https://k3v9x2m7q1.hdply.com",
"live": true
},
{
"id": 43,
"name": "Launch page",
"subroute": "launch",
"url": "https://launch.hdply.com",
"live": false,
"team_id": 7,
"team_name": "Design"
}
]
create_site
Crea un sitio. Con html está en línea en cuanto vuelve la llamada, en un subdominio aleatorio asignado por el servidor; sin él, el sitio existe vacío hasta deploy_site.
Entrada
{
"html": string // optional — full HTML document, max 1 MB; live immediately when given
"name": string // optional — falls back to the HTML <title>
"team_id": number // optional — create inside a team (0 = personal)
}
Ejemplo de llamada
{
"name": "create_site",
"arguments": {
"html": "<!doctype html><html><head><title>Q3 proposal</title></head><body><h1>Q3 proposal</h1></body></html>"
}
}
Resultado
Site "Q3 proposal" live at https://k3v9x2m7q1.hdply.com (id 42, subroute k3v9x2m7q1)
get_site_html
El HTML que reciben los visitantes ahora mismo. Léelo antes de editar para que el agente cambie lo que está en línea de verdad, no lo que recuerda.
Entrada
{
"site": string // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}
Ejemplo de llamada
{ "name": "get_site_html", "arguments": { "site": "k3v9x2m7q1" } }
Resultado
<!doctype html><html><head><title>Q3 proposal</title>…
deploy_site
Publica HTML nuevo en un sitio existente. En línea cuando vuelve la llamada, versionado como cualquier despliegue y etiquetado mcp en el historial.
Entrada
{
"site": string // required — numeric project id or subdomain
"html": string // required — full HTML document, max 1 MB
}
Ejemplo de llamada
{
"name": "deploy_site",
"arguments": {
"site": "k3v9x2m7q1",
"html": "<!doctype html>…"
}
}
Resultado
Deployed. Live at https://k3v9x2m7q1.hdply.com
get_deploy_history
El historial de despliegues: quién, cuándo, qué tamaño y por qué vía (web, api, mcp, restore). El más reciente primero.
Entrada
{
"site": string // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}
Ejemplo de llamada
{ "name": "get_deploy_history", "arguments": { "site": "k3v9x2m7q1" } }
Resultado
[
{
"id": 918,
"size": 4812,
"hash": "3f9c1a7b2d4e6f80",
"source": "mcp",
"actor_email": "you@example.com",
"created_at": "2026-09-08T09:41:12Z"
},
{
"id": 902,
"size": 4790,
"hash": "b81e0c5d9a2f4711",
"source": "web",
"actor_email": "you@example.com",
"created_at": "2026-09-07T18:02:55Z"
}
]
Errores
Los errores de herramienta son resultados normales con isError: true. El texto empieza por un código estable cuando existe: file_too_large (más de 1 MB), project_limit (límite del plan alcanzado), site not found. Los únicos errores a nivel HTTP son los de autenticación (401).
{ "content": [{ "type": "text", "text": "file_too_large: html exceeds the 1MB size limit" }], "isError": true }
Límites
- Un archivo HTML por sitio, 1 MB como máximo. Pon CSS y JavaScript en línea; las imágenes pueden ser URL externas o data URI.
- Las cuentas gratuitas tienen 6 sitios; Light sube a 25 y Pro es ilimitado. Más allá,
create_sitefalla conproject_limit. - Los sitios nuevos se sirven con
X-Robots-Tag: noindexhasta que el propietario activa la indexación en la consola (o vía RESTPATCH /v1/projects/{id}/settings). Un agente no puede hacer una página buscable por sí solo.
Descubrimiento
El servidor se describe en dos URL sin autenticación: una server card con la lista de herramientas y esquemas en vivo, y el manifiesto usado para los directorios MCP.
https://api.app.hdply.com/.well-known/mcp/server-card.json # tools + schemas, live https://api.app.hdply.com/.well-known/mcp/server.json # registry manifest (com.hdply/hdply)
¿Prefieres HTTP simple? Las mismas operaciones existen como API REST, y hdply.com/llms.txt resume ambas para agentes.