MCP Sunucusu

Son güncelleme: 2026-09-08

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

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.