Máy chủ MCP
hdply có sẵn máy chủ MCP tích hợp. Bất kỳ client MCP nào — Claude Code, Claude Desktop hay agent của riêng bạn — đều có thể liệt kê trang của bạn, tạo trang mới, đọc HTML đang chạy, đăng phiên bản mới và xem lịch sử triển khai. Năm công cụ, một khóa API, không cần chạy gì ở máy cục bộ.
An toàn khi giao cho agent
Không có công cụ xóa. Xóa trang chỉ làm được từ console web, đó là chủ ý. Một agent có toàn quyền triển khai có thể đăng một phiên bản tệ, nhưng không thể phá hủy công sức của bạn.
Mọi lần triển khai — bởi người hay agent — đều được lưu phiên bản. Triển khai sai chỉ cần một cú nhấp để khôi phục trong console, và get_deploy_history cho biết chính xác lần nào đi qua MCP ("source": "mcp"). Đó là khác biệt so với MCP triển khai đa dụng: hdply giới hạn một file HTML mỗi trang, nên trường hợp xấu nhất chỉ là một trang trông sai trong một phút.
Trường hợp sử dụng chính
Claude viết cho bạn một trang — đề xuất, bảng điều khiển, bản mẫu — dưới dạng artifact HTML. Thay vì lưu file rồi tải lên đâu đó, bạn nói "đăng cái này lên" và chính cuộc trò chuyện đó kết thúc bằng một URL công khai để gửi đi. Sau đó, "đổi tiêu đề rồi đăng lại" cũng chỉ là một lượt nữa.
Kết nối
Claude Code, một lệnh:
claude mcp add --transport http hdply https://api.app.hdply.com/mcp \ --header "Authorization: Bearer hdply_sk_…"
Claude Desktop, trong claude_desktop_config.json (qua mcp-remote, vì Desktop chỉ chạy lệnh cục bộ):
{
"mcpServers": {
"hdply": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.app.hdply.com/mcp",
"--header", "Authorization: Bearer hdply_sk_…"]
}
}
}
Client khác: đây là endpoint Streamable HTTP không trạng thái. Gửi JSON-RPC tới URL bên dưới với cùng header bearer.
POST https://api.app.hdply.com/mcp
Authorization: Bearer hdply_sk_…
Content-Type: application/json
{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}
Khóa được tạo ở bảng điều khiển console (thẻ "API key"). Chỉ hiển thị một lần và cho phép truy cập mọi trang trong tài khoản — hãy giữ như mật khẩu.
Công cụ
Mỗi công cụ nhận một đối tượng JSON và trả về nội dung văn bản. Lỗi trả về dưới dạng văn bản kèm isError: true, không bao giờ là lỗi truyền tải, để agent đọc được lý do và thử lại.
list_sites
Mọi trang bạn có thể quản lý, cá nhân và nhóm, kèm URL đang chạy và đã triển khai gì chưa. Không có tham số.
Ví dụ gọi
{ "name": "list_sites", "arguments": {} }
Kết quả
[
{
"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
Tạo trang. Có html thì trang lên sóng ngay khi lệnh trả về, ở subdomain ngẫu nhiên do máy chủ cấp; không có thì trang để trống cho đến deploy_site.
Đầu vào
{
"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)
}
Ví dụ gọi
{
"name": "create_site",
"arguments": {
"html": "<!doctype html><html><head><title>Q3 proposal</title></head><body><h1>Q3 proposal</h1></body></html>"
}
}
Kết quả
Site "Q3 proposal" live at https://k3v9x2m7q1.hdply.com (id 42, subroute k3v9x2m7q1)
get_site_html
HTML mà khách truy cập đang nhận. Đọc trước khi sửa để agent thay đổi thứ thực sự đang chạy, không phải thứ nó nhớ.
Đầu vào
{
"site": string // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}
Ví dụ gọi
{ "name": "get_site_html", "arguments": { "site": "k3v9x2m7q1" } }
Kết quả
<!doctype html><html><head><title>Q3 proposal</title>…
deploy_site
Đăng HTML mới lên trang có sẵn. Lên sóng khi lệnh trả về, được lưu phiên bản như mọi lần triển khai, gắn nhãn mcp trong lịch sử.
Đầu vào
{
"site": string // required — numeric project id or subdomain
"html": string // required — full HTML document, max 1 MB
}
Ví dụ gọi
{
"name": "deploy_site",
"arguments": {
"site": "k3v9x2m7q1",
"html": "<!doctype html>…"
}
}
Kết quả
Deployed. Live at https://k3v9x2m7q1.hdply.com
get_deploy_history
Lịch sử triển khai: ai, khi nào, dung lượng bao nhiêu và qua đường nào (web, api, mcp, restore). Mới nhất trước.
Đầu vào
{
"site": string // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}
Ví dụ gọi
{ "name": "get_deploy_history", "arguments": { "site": "k3v9x2m7q1" } }
Kết quả
[
{
"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"
}
]
Lỗi
Lỗi công cụ là kết quả bình thường kèm isError: true. Văn bản bắt đầu bằng mã ổn định nếu có: file_too_large (quá 1 MB), project_limit (đạt giới hạn gói), site not found. Lỗi cấp HTTP duy nhất là lỗi xác thực (401).
{ "content": [{ "type": "text", "text": "file_too_large: html exceeds the 1MB size limit" }], "isError": true }
Giới hạn
- Một file HTML mỗi trang, tối đa 1 MB. Đặt CSS và JavaScript inline; ảnh có thể là URL ngoài hoặc data URI.
- Tài khoản miễn phí có 6 trang; Light nâng lên 25 và Pro không giới hạn. Vượt quá thì
create_sitethất bại vớiproject_limit. - Trang mới được phục vụ với
X-Robots-Tag: noindexcho đến khi chủ sở hữu bật lập chỉ mục trong console (hoặc qua RESTPATCH /v1/projects/{id}/settings). Agent không thể tự làm một trang trở nên tìm kiếm được.
Khám phá
Máy chủ tự mô tả ở hai URL không cần xác thực: một server card với danh sách công cụ và schema hiện hành, và manifest dùng cho các thư mục 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)
Thích HTTP thuần? Các thao tác tương tự có ở REST API, và hdply.com/llms.txt tóm tắt cả hai cho agent.