MCP-сервер

Последнее обновление: 2026-09-08

В 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 }

Ограничения

Обнаружение

Сервер описывает себя по двум 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 кратко описывает оба для агентов.