MCP-сервер
В hdply встроен MCP-сервер. Любой MCP-клиент — Claude Code, Claude Desktop или ваш собственный агент — может вывести список ваших сайтов, создать сайт, прочитать опубликованный HTML, выложить новую версию и посмотреть историю деплоев. Пять инструментов, один API-ключ, ничего не нужно запускать локально.
Безопасно доверить агенту
Инструмента удаления нет. Удалить сайт можно только из веб-консоли — так задумано. Агент с полными правами на деплой может выложить плохую версию, но не может уничтожить вашу работу.
Каждый деплой — человека или агента — сохраняется как версия. Ошибочный деплой восстанавливается в консоли одним кликом, а get_deploy_history точно показывает, какие деплои прошли через MCP ("source": "mcp"). В этом отличие от универсальных MCP для деплоя: hdply ограничен одним HTML-файлом на сайт, так что худший случай — страница, которая минуту выглядит неправильно.
Основной сценарий
Claude пишет вам страницу — предложение, дашборд, макет — как HTML-артефакт. Вместо того чтобы сохранять файл и куда-то загружать, вы говорите «опубликуй это», и тот же диалог заканчивается публичной ссылкой, которую можно отправить. Позже «поменяй заголовок и опубликуй заново» — ещё один ход.
Подключение
Claude Code, одна команда:
claude mcp add --transport http hdply https://api.app.hdply.com/mcp \ --header "Authorization: Bearer hdply_sk_…"
Claude Desktop — в claude_desktop_config.json (через mcp-remote, поскольку Desktop запускает только локальные команды):
{
"mcpServers": {
"hdply": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.app.hdply.com/mcp",
"--header", "Authorization: Bearer hdply_sk_…"]
}
}
}
Любой другой клиент: это stateless-эндпоинт Streamable HTTP. Отправляйте JSON-RPC на URL ниже с тем же bearer-заголовком.
POST https://api.app.hdply.com/mcp
Authorization: Bearer hdply_sk_…
Content-Type: application/json
{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}
Ключ создаётся на панели консоли (карточка «API key»). Он показывается один раз и даёт доступ ко всем сайтам аккаунта — обращайтесь с ним как с паролем.
Инструменты
Каждый инструмент принимает JSON-объект и возвращает текст. Ошибки приходят текстом с isError: true, а не сбоем транспорта, чтобы агент мог прочитать причину и повторить попытку.
list_sites
Все сайты, которыми вы можете управлять, личные и командные, с их URL и признаком, опубликовано ли что-то. Без аргументов.
Пример вызова
{ "name": "list_sites", "arguments": {} }
Результат
[
{
"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
Создаёт сайт. С html он публикуется сразу после ответа на случайном поддомене, который назначает сервер; без него сайт остаётся пустым до deploy_site.
Вход
{
"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)
}
Пример вызова
{
"name": "create_site",
"arguments": {
"html": "<!doctype html><html><head><title>Q3 proposal</title></head><body><h1>Q3 proposal</h1></body></html>"
}
}
Результат
Site "Q3 proposal" live at https://k3v9x2m7q1.hdply.com (id 42, subroute k3v9x2m7q1)
get_site_html
HTML, который посетители получают прямо сейчас. Читайте его перед правкой, чтобы агент менял то, что реально опубликовано, а не то, что он помнит.
Вход
{
"site": string // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}
Пример вызова
{ "name": "get_site_html", "arguments": { "site": "k3v9x2m7q1" } }
Результат
<!doctype html><html><head><title>Q3 proposal</title>…
deploy_site
Публикует новый HTML на существующем сайте. Онлайн сразу после ответа, версионируется как любой деплой, в истории помечен mcp.
Вход
{
"site": string // required — numeric project id or subdomain
"html": string // required — full HTML document, max 1 MB
}
Пример вызова
{
"name": "deploy_site",
"arguments": {
"site": "k3v9x2m7q1",
"html": "<!doctype html>…"
}
}
Результат
Deployed. Live at https://k3v9x2m7q1.hdply.com
get_deploy_history
История деплоев: кто, когда, какого размера и каким путём (web, api, mcp, restore). Новые сверху.
Вход
{
"site": string // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}
Пример вызова
{ "name": "get_deploy_history", "arguments": { "site": "k3v9x2m7q1" } }
Результат
[
{
"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"
}
]
Ошибки
Ошибки инструментов — обычные результаты с isError: true. Текст начинается со стабильного кода, если он есть: file_too_large (больше 1 МБ), project_limit (лимит тарифа), site not found. Единственные ошибки уровня HTTP — ошибки аутентификации (401).
{ "content": [{ "type": "text", "text": "file_too_large: html exceeds the 1MB size limit" }], "isError": true }
Ограничения
- Один HTML-файл на сайт, максимум 1 МБ. CSS и JavaScript встраивайте в файл; изображения — внешние URL или data URI.
- Бесплатный аккаунт вмещает 6 сайтов; Light поднимает до 25, Pro без ограничений. Сверх этого
create_siteпадает сproject_limit. - Новые сайты отдаются с
X-Robots-Tag: noindex, пока владелец не включит индексацию в консоли (или через RESTPATCH /v1/projects/{id}/settings). Агент не может сам сделать страницу доступной для поиска.
Обнаружение
Сервер описывает себя по двум URL без аутентификации: server card с актуальным списком инструментов и схем и манифест для каталогов 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)
Предпочитаете обычный HTTP? Те же операции есть в REST API, а hdply.com/llms.txt кратко описывает оба для агентов.