MCP Sunucusu
hdply yerleşik bir MCP sunucusuyla gelir. Herhangi bir MCP istemcisi — Claude Code, Claude Desktop ya da kendi ajanınız — sitelerinizi listeleyebilir, yeni site oluşturabilir, yayındaki HTML’i okuyabilir, yeni sürüm yayınlayabilir ve dağıtım geçmişini inceleyebilir. Beş araç, bir API anahtarı, yerelde çalıştırılacak hiçbir şey yok.
Bir ajana teslim etmek güvenli
Silme aracı yok. Bir siteyi kaldırmak bilerek yalnızca web konsolundan yapılır. Tam dağıtım yetkisine sahip bir ajan kötü bir sürüm yayınlayabilir ama çalışmanızı yok edemez.
Her dağıtım — insan ya da ajan — sürümlenir. Yanlış bir dağıtım konsolda tek tıkla geri alınır ve get_deploy_history hangi dağıtımların MCP üzerinden geldiğini tam olarak gösterir ("source": "mcp"). Genel amaçlı bir dağıtım MCP’sinden fark budur: hdply site başına tek HTML dosyasıyla sınırlıdır, dolayısıyla en kötü ihtimal bir dakikalığına bozuk görünen bir sayfadır.
Ana kullanım senaryosu
Claude size bir sayfa yazar — teklif, pano, taslak — HTML çıktısı olarak. Dosyayı kaydedip bir yere yüklemek yerine "bunu yayınla" dersiniz ve aynı sohbet gönderebileceğiniz herkese açık bir URL ile biter. Sonra "başlığı değiştir, yeniden yayınla" da tek bir turdur.
Bağlanma
Claude Code, tek komut:
claude mcp add --transport http hdply https://api.app.hdply.com/mcp \ --header "Authorization: Bearer hdply_sk_…"
Claude Desktop, claude_desktop_config.json içinde (Desktop yalnızca yerel komut çalıştırdığı için mcp-remote üzerinden):
{
"mcpServers": {
"hdply": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.app.hdply.com/mcp",
"--header", "Authorization: Bearer hdply_sk_…"]
}
}
}
Başka herhangi bir istemci: durumsuz bir Streamable HTTP uç noktasıdır. Aşağıdaki URL’ye aynı bearer başlığıyla JSON-RPC gönderin.
POST https://api.app.hdply.com/mcp
Authorization: Bearer hdply_sk_…
Content-Type: application/json
{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}
Anahtar konsol panosundan ("API key" kartı) alınır. Bir kez gösterilir ve hesaptaki tüm sitelere erişim verir — parola gibi saklayın.
Araçlar
Her araç bir JSON nesnesi alır ve metin içeriği döndürür. Hatalar taşıma hatası olarak değil, isError: true ile metin olarak döner; böylece ajan nedeni okuyup yeniden deneyebilir.
list_sites
Yönetebildiğiniz tüm siteler, kişisel ve takım, yayın URL’si ve bir şey dağıtılıp dağıtılmadığıyla birlikte. Argüman yok.
Örnek çağrı
{ "name": "list_sites", "arguments": {} }
Sonuç
[
{
"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
Site oluşturur. html verilirse çağrı döner dönmez sunucunun atadığı rastgele bir alt alan adında yayındadır; verilmezse site deploy_site’a kadar boş kalır.
Girdi
{
"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)
}
Örnek çağrı
{
"name": "create_site",
"arguments": {
"html": "<!doctype html><html><head><title>Q3 proposal</title></head><body><h1>Q3 proposal</h1></body></html>"
}
}
Sonuç
Site "Q3 proposal" live at https://k3v9x2m7q1.hdply.com (id 42, subroute k3v9x2m7q1)
get_site_html
Ziyaretçilerin şu anda aldığı HTML. Düzenlemeden önce okuyun ki ajan hatırladığını değil, gerçekten yayında olanı değiştirsin.
Girdi
{
"site": string // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}
Örnek çağrı
{ "name": "get_site_html", "arguments": { "site": "k3v9x2m7q1" } }
Sonuç
<!doctype html><html><head><title>Q3 proposal</title>…
deploy_site
Mevcut bir siteye yeni HTML yayınlar. Çağrı dönünce yayında, diğer dağıtımlar gibi sürümlenir, geçmişte mcp olarak etiketlenir.
Girdi
{
"site": string // required — numeric project id or subdomain
"html": string // required — full HTML document, max 1 MB
}
Örnek çağrı
{
"name": "deploy_site",
"arguments": {
"site": "k3v9x2m7q1",
"html": "<!doctype html>…"
}
}
Sonuç
Deployed. Live at https://k3v9x2m7q1.hdply.com
get_deploy_history
Dağıtım geçmişi: kim, ne zaman, hangi boyutta ve hangi yoldan (web, api, mcp, restore). En yeni önce.
Girdi
{
"site": string // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}
Örnek çağrı
{ "name": "get_deploy_history", "arguments": { "site": "k3v9x2m7q1" } }
Sonuç
[
{
"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"
}
]
Hatalar
Araç hataları isError: true içeren sıradan sonuçlardır. Varsa metin kararlı bir kodla başlar: file_too_large (1 MB üstü), project_limit (plan sınırına ulaşıldı), site not found. HTTP düzeyindeki tek hata kimlik doğrulama hatasıdır (401).
{ "content": [{ "type": "text", "text": "file_too_large: html exceeds the 1MB size limit" }], "isError": true }
Sınırlar
- Site başına bir HTML dosyası, en fazla 1 MB. CSS ve JavaScript’i satır içi yazın; görseller harici URL ya da data URI olabilir.
- Ücretsiz hesaplar 6 site tutar; Light bunu 25’e çıkarır, Pro sınırsızdır. Ötesinde
create_site,project_limitile başarısız olur. - Yeni siteler, sahibi konsoldan (ya da REST
PATCH /v1/projects/{id}/settingsile) dizinlemeyi açana kadarX-Robots-Tag: noindexile sunulur. Bir ajan tek başına bir sayfayı aranabilir yapamaz.
Keşif
Sunucu kendini kimlik doğrulaması gerektirmeyen iki URL’de tanımlar: canlı araç listesi ve şemaları içeren bir sunucu kartı ile MCP dizinleri için kullanılan manifest.
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)
Düz HTTP mi tercih edersiniz? Aynı işlemler REST API olarak da var ve hdply.com/llms.txt ikisini de ajanlar için özetler.