خادم 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_…"]
    }
  }
}

أي عميل آخر: هذه نقطة نهاية Streamable HTTP بلا حالة. أرسل JSON-RPC إلى الرابط أدناه مع ترويسة 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

كل موقع يمكنك إدارته، شخصياً أو ضمن فريق، مع رابطه وما إذا كان شيء منشوراً فيه. بلا وسائط.

مثال على الاستدعاء

{ "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 }

الحدود

الاكتشاف

يصف الخادم نفسه على رابطين لا يتطلبان مصادقة: بطاقة خادم تضم قائمة الأدوات ومخططاتها الحية، وبيان يُستخدم لإدراج الخادم في أدلة 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 كليهما للوكلاء.