Serveur MCP
hdply intègre un serveur MCP. N’importe quel client MCP — Claude Code, Claude Desktop ou votre propre agent — peut lister vos sites, en créer un, lire le HTML en ligne, publier une nouvelle version et consulter l’historique des déploiements. Cinq outils, une clé API, rien à exécuter en local.
Sans risque à confier à un agent
Il n’y a pas d’outil de suppression. Supprimer un site ne se fait que depuis la console web, par conception. Un agent disposant de tous les droits de déploiement peut publier une mauvaise version, mais il ne peut pas détruire votre travail.
Chaque déploiement — humain ou agent — est versionné. Un mauvais déploiement se restaure en un clic dans la console, et get_deploy_history montre exactement quels déploiements sont passés par MCP ("source": "mcp"). C’est la différence avec un MCP de déploiement généraliste : hdply se limite à un fichier HTML par site, donc le pire cas est une page qui s’affiche mal pendant une minute.
Le cas d’usage principal
Claude vous écrit une page — une proposition, un tableau de bord, une maquette — sous forme d’artefact HTML. Au lieu d’enregistrer le fichier et de le téléverser quelque part, vous dites « publie ça » et la même conversation se termine par une URL publique à envoyer. Plus tard, « change le titre et republie » tient en un seul tour.
Connexion
Claude Code, une commande :
claude mcp add --transport http hdply https://api.app.hdply.com/mcp \ --header "Authorization: Bearer hdply_sk_…"
Claude Desktop, dans claude_desktop_config.json (via mcp-remote, car Desktop ne lance que des commandes locales) :
{
"mcpServers": {
"hdply": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.app.hdply.com/mcp",
"--header", "Authorization: Bearer hdply_sk_…"]
}
}
}
Tout autre client : c’est un endpoint Streamable HTTP sans état. Envoyez du JSON-RPC à l’URL ci-dessous avec le même en-tête 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 clé se crée dans le tableau de bord de la console (carte « API key »). Elle n’est affichée qu’une fois et donne accès à tous les sites du compte : traitez-la comme un mot de passe.
Outils
Chaque outil reçoit un objet JSON et renvoie du contenu texte. Les erreurs reviennent en texte avec isError: true, jamais en échec de transport, pour que l’agent puisse lire la raison et réessayer.
list_sites
Tous les sites que vous pouvez gérer, personnels et d’équipe, avec leur URL et l’état de déploiement. Sans argument.
Exemple d’appel
{ "name": "list_sites", "arguments": {} }
Résultat
[
{
"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
Crée un site. Avec html, il est en ligne dès le retour de l’appel, sur un sous-domaine aléatoire attribué par le serveur ; sans, le site existe vide jusqu’à deploy_site.
Entrée
{
"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)
}
Exemple d’appel
{
"name": "create_site",
"arguments": {
"html": "<!doctype html><html><head><title>Q3 proposal</title></head><body><h1>Q3 proposal</h1></body></html>"
}
}
Résultat
Site "Q3 proposal" live at https://k3v9x2m7q1.hdply.com (id 42, subroute k3v9x2m7q1)
get_site_html
Le HTML que reçoivent les visiteurs en ce moment. Lisez-le avant une modification pour que l’agent change ce qui est réellement en ligne, pas ce dont il se souvient.
Entrée
{
"site": string // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}
Exemple d’appel
{ "name": "get_site_html", "arguments": { "site": "k3v9x2m7q1" } }
Résultat
<!doctype html><html><head><title>Q3 proposal</title>…
deploy_site
Publie un nouveau HTML sur un site existant. En ligne au retour de l’appel, versionné comme tout déploiement, marqué mcp dans l’historique.
Entrée
{
"site": string // required — numeric project id or subdomain
"html": string // required — full HTML document, max 1 MB
}
Exemple d’appel
{
"name": "deploy_site",
"arguments": {
"site": "k3v9x2m7q1",
"html": "<!doctype html>…"
}
}
Résultat
Deployed. Live at https://k3v9x2m7q1.hdply.com
get_deploy_history
L’historique des déploiements : qui, quand, quelle taille et par quelle voie (web, api, mcp, restore). Le plus récent en premier.
Entrée
{
"site": string // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}
Exemple d’appel
{ "name": "get_deploy_history", "arguments": { "site": "k3v9x2m7q1" } }
Résultat
[
{
"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"
}
]
Erreurs
Les erreurs d’outil sont des résultats ordinaires avec isError: true. Le texte commence par un code stable quand il existe : file_too_large (plus de 1 Mo), project_limit (limite du forfait atteinte), site not found. Les seules erreurs au niveau HTTP sont celles d’authentification (401).
{ "content": [{ "type": "text", "text": "file_too_large: html exceeds the 1MB size limit" }], "isError": true }
Limites
- Un fichier HTML par site, 1 Mo maximum. Mettez CSS et JavaScript en ligne ; les images peuvent être des URL externes ou des data URI.
- Les comptes gratuits ont 6 sites ; Light passe à 25 et Pro est illimité. Au-delà,
create_siteéchoue avecproject_limit. - Les nouveaux sites sont servis avec
X-Robots-Tag: noindexjusqu’à ce que le propriétaire active l’indexation dans la console (ou via RESTPATCH /v1/projects/{id}/settings). Un agent ne peut pas rendre une page trouvable par lui-même.
Découverte
Le serveur se décrit à deux URL sans authentification : une server card avec la liste des outils et leurs schémas en direct, et le manifeste utilisé pour les annuaires 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)
Vous préférez du HTTP simple ? Les mêmes opérations existent en API REST, et hdply.com/llms.txt résume les deux pour les agents.