لوكلاء الذكاء الاصطناعي

خادم SendHQ MCP

امنح وكيل ذكاء اصطناعي تحكمًا كاملًا وآمنًا في مساحة عمل SendHQ واحدة: أرسل البريد واستقبله، ووثّق النطاقات، وانشر القوالب، وتحرَّ قابلية التسليم، عبر 59 أداة محددة الأنواع بصرامة. كُتب للوكلاء أولًا؛ والبشر مرحَّب بهم.

59 أداةنقل stdio، بأمر واحد0 أدوات لإدارة المفاتيح
التثبيت والاتصال (Claude Code)
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp

ما هذا الخادم

يتيح خادم SendHQ MCP لوكيل ذكاء اصطناعي تشغيل مساحة عمل SendHQ واحدة عبر بروتوكول سياق النموذج (Model Context Protocol): إرسال البريد (المفرد والدفعي وبالقوالب والردود والمرفقات وإعادة المحاولة غير المكرِّرة)، وقراءة البريد المرسل والمستلَم والبحث فيه (الموضوعات والنصوص وأسماء المرفقات) وأحداث تسليمه، وتنظيم البريد في تصنيفات بقواعد فرز تلقائي، وإدارة المسودات والمرفقات الخاصة، وتأليف القوالب المستضافة ونشرها، وإضافة النطاقات وتوثيقها مع DNS الخاص بها، وإعداد استقبال البريد الوارد وعناوينه، وفحص قابلية التسليم والارتدادات والشكاوى وقوائم المنع، وقراءة استخدام الحساب وحالة الفوترة والتحليلات والبيانات الوصفية لمفاتيح API.

وهو خادم stdio محلي مدمج في الملف التنفيذي لـ CLI باسم sendhq. يشغّل عميل MCP لديك الأمر sendhq mcp بوصفه عملية فرعية ويتخاطب بـ JSON-RPC عبر stdin/stdout. وكل استدعاء أداة يتحول إلى طلب موثَّق واحد إلى SendHQ REST API على https://sendhq.cc/api/v1 بمصادقة مفتاح API الخاص بمساحة عملك، فتكون لخادم MCP صلاحيات ذلك المفتاح تمامًا ولا تزيد.

  • 59 أداة في 8 مجموعات، مولَّدة من فهرس واحد يُنشَر أيضًا بصيغة tools.json.
  • مخططات JSON Schema صارمة: تُرفض الوسائط غير المعروفة والأنواع الخاطئة والحقول المطلوبة المفقودة محليًا قبل أن يصل أي شيء إلى SendHQ.
  • أخطاء منظَّمة تتضمن code ثابتًا، وstatus بحالة HTTP، وexplanation، وremedy ملموسًا، وما إذا كانت إعادة المحاولة قد تفيد.
  • كل أداة ترسل بريدًا حقيقيًا أو تتلف بيانات تنص على ذلك في أولى كلمات وصفها وتحمل توصيفات أمان MCP.
  • يُخفي وضع --read-only كل أداة إرسال وكل أداة تُغيّر الحالة.
  • لا يُسجَّل شيء. يحمل stdout رسائل البروتوكول فقط؛ ولا يصل مفتاح API ولا محتوى الرسائل إلى أي سجل.
هذا ليس نقطة نهاية MCP الخاصة بالتوثيق.تستضيف SendHQ أيضًا نقطة نهاية MCP صغيرة للتوثيق للقراءة فقط على https://sendhq.cc/api/mcp (بحث في الأسعار والتوثيق، دون وصول إلى الحساب). أما الخادم في هذه الصفحة فهو الكامل المرتبط بنطاق الحساب؛ ويعمل محليًا أو بوصفه الموصّل المستضاف أدناه.

استخدم SendHQ في Claude وChatGPT

لا حاجة إلى تثبيت: تشغّل SendHQ هذا الخادم أيضًا بوصفه موصّلًا (connector) مستضافًا على https://mcp.sendhq.cc/mcp بالأدوات نفسها. وتسجّل الدخول بحساب SendHQ بدل لصق مفتاح.

Claude

  1. افتح Settings ← Connectors وابحث عن SendHQ في الدليل، أو اختر Add custom connector والصق https://mcp.sendhq.cc/mcp.
  2. انقر Connect، وسجّل الدخول إلى SendHQ، وراجع الصلاحيات ثم انقر Allow.
  3. اطلب من Claude فحص صندوق الوارد، أو إرسال رسالة من نطاقك الموثَّق، أو شرح سبب ارتداد.

ChatGPT

  1. Open Settings → Security and login and turn on Developer mode.
  2. Go to chatgpt.com/plugins, click Create MCP app, name it SendHQ and enter https://mcp.sendhq.cc/mcp.
  3. Sign in to SendHQ and click Allow, then pick SendHQ from the tools menu in a new chat.

Muse by Meta

In Muse, open Connectors and search for SendHQ. Click Connect, sign in to SendHQ and click Allow.

الموافقة وقطع الاتصال

  • The request_feature tool sends a feature request to the SendHQ team with your account details, so we can follow up by email.
  • الأدوات التي ترسل بريدًا حقيقيًا أو تحذف بيانات موسومة بذلك. وما إذا كان المساعد يسألك أولًا يُضبط لكل أداة في المساعد نفسه: في Claude، اختر Needs approval لتلك الأدوات ضمن Settings ← Connectors ← SendHQ.
  • يحصل الموصّل على مفتاح API خاص به، يحمل اسم المساعد (مثل «Claude (AI connector)»). احذفه ضمن API Keys لقطع الاتصال فورًا.
  • لا يستطيع إنشاء مفاتيح API أو إلغاءها ولا تغيير الفوترة. تُرسَل المرفقات وتُعاد بترميز base64؛ ولا يوجد وصول إلى الملفات المحلية.
  • لا يمكن لمساحات العمل غير المدفوعة (الفترة التجريبية للتكامل) التسليم إلا إلى البريد الإلكتروني للحساب أو إلى عنوان محاكاة في AWS SES.

للاستفسارات: postmaster@sendhq.cc. الخصوصية: sendhq.cc/privacy.

التثبيت

ثبّت الملف التنفيذي sendhq (Linux وmacOS وWindows على x86-64 وarm64). يتحقق المثبّت من المجموع الاختباري للإصدار ويضع الملف التنفيذي في ~/.local/bin افتراضيًا.

macOS وLinux
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
Windows PowerShell
irm https://downloads.sendhq.cc/install.ps1 | iex
تحقق من التثبيت
sendhq version
SENDHQ_API_KEY=re_your_key sendhq doctor

أنشئ مفتاح API في لوحة التحكم على https://sendhq.cc/app#/keys. لا يستطيع خادم MCP إنشاء المفاتيح. والأمر الوحيد الذي يشغّل الخادم هو:

تشغيل خادم stdio
SENDHQ_API_KEY=re_your_key sendhq mcp

لا تشغّل ذلك يدويًا عادةً: يطلقه عميل MCP. وعند تشغيله في طرفية ينتظر JSON-RPC على stdin.

اضبط عميلك

Claude Code

claude mcp add
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp

# read-only variant
claude mcp add sendhq-readonly --env SENDHQ_API_KEY=re_your_key -- sendhq mcp --read-only

أضف --scope user لإتاحته في كل مشروع، أو --scope project لكتابته في ملف .mcp.json الخاص بالمشروع. وفي ملف .mcp.json المشترك، أشِر إلى المفتاح من البيئة بدل إيداعه في المستودع؛ إذ يوسّع Claude Code القيمة ${VAR} في .mcp.json.

.mcp.json
{
  "mcpServers": {
    "sendhq": {
      "command": "sendhq",
      "args": [
        "mcp"
      ],
      "env": {
        "SENDHQ_API_KEY": "${SENDHQ_API_KEY}"
      }
    }
  }
}

OpenAI Codex

~/.codex/config.toml
[mcp_servers.sendhq]
command = "sendhq"
args = ["mcp"]
env = { SENDHQ_API_KEY = "re_your_key" }

أو من سطر الأوامر: codex mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp.

Claude Desktop

عدّل claude_desktop_config.json (في macOS: ~/Library/Application Support/Claude/، وفي Windows: %APPDATA%\Claude\) وأعد تشغيل التطبيق. لا ترث تطبيقات سطح المكتب PATH الخاص بالصدفة لديك، فاستخدم المسار المطلق للملف التنفيذي (which sendhq).

claude_desktop_config.json
{
  "mcpServers": {
    "sendhq": {
      "command": "/Users/you/.local/bin/sendhq",
      "args": [
        "mcp"
      ],
      "env": {
        "SENDHQ_API_KEY": "re_your_key"
      }
    }
  }
}

أي عميل MCP آخر

اضبط خادم stdio بالأمر sendhq والوسائط ["mcp"] (مع "--read-only" اختياريًا) ومتغيرات البيئة أدناه. يدعم الخادم إصدارات بروتوكول MCP 2024-11-05 و2025-03-26 و2025-06-18 و2025-11-25، وينفّذ initialize وping وtools/list وtools/call. وتحمل نتائج الأدوات كتلة نصية بصيغة JSON وstructuredContent معًا.

اختبار أولي خام لـ stdio (مرّر المدخلات إلى sendhq mcp)
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_service_health","arguments":{}}}

لا يوجد نقل HTTP مستضاف للخادم المرتبط بنطاق الحساب. فنقطة نهاية MCP بعيدة وقادرة على الكتابة تتطلب OAuth لكل مستخدم، وهو ما لا تقدّمه SendHQ؛ ويُبقي الملف التنفيذي المحلي المفتاح على الجهاز الذي يحتفظ به أصلًا.

البيئة والخيارات

المتغير أو الخيارمطلوبالمعنى
SENDHQ_API_KEYنعممفتاح API لمساحة العمل (re_…). تحتاجه كل أداة عدا get_service_health. وبدونه يبدأ الخادم مع ذلك ويُعيد كل استدعاء auth_error منظَّمًا يشرح كيفية الإصلاح.
SENDHQ_API_BASE_URLلاعنوان URL الأساسي لـ API. القيمة الافتراضية https://sendhq.cc/api/v1. استخدمه فقط لنشر محلي أو تجريبي (staging). ويُقبل SENDHQ_BASE_URL بوصفه اسمًا مستعارًا أقدم.
SENDHQ_MCP_READ_ONLYلاالقيمة 1 أو true أو yes تعمل مثل --read-only.
--read-onlyلالا يكشف إلا الأدوات التي لا ترسل بريدًا ولا تغيّر الحالة. وتُرفض الأدوات المخفية أيضًا إذا استُدعيت بالاسم.
SENDHQ_PROFILE / --profileلااستخدم مفتاحًا مخزَّنًا بـ sendhq auth login في سلسلة مفاتيح نظام التشغيل بدل SENDHQ_API_KEY. ويتقدّم متغير البيئة عند وجود الاثنين.

يُرسَل المفتاح فقط في الترويسة Authorization: Bearer إلى عنوان URL الأساسي المضبوط. ولا يُطبع ولا يُسجَّل ولا يتردد في الأخطاء ولا يُدرج في نتائج الأدوات.

نموذج الأمان للوكلاء

  • يرسل بريدًا حقيقيًا. تسلّم send_email وsend_batch وsend_template_test الرسائل إلى أشخاص حقيقيين وتستهلك أرصدة التسليم. تبدأ أوصافها بعبارة SENDS REAL EMAIL. لا تستدعها إلا عندما يطلب المستخدم صراحةً إرسال تلك الرسالة بعينها، بعد تأكيد المستلِمين والمُرسِل والمحتوى.
  • مُتلِفة. الأدوات delete_email وdelete_draft وdelete_attachment وdelete_domain وdelete_inbox وremove_suppression موسومة بـ destructiveHint: true وتبدأ أوصافها بـ DESTRUCTIVE. أكّد مع المستخدم أولًا. تُضعف remove_suppression حاجز أمان ولا تناسب إلا عندما يؤكد إنسان أن العنوان يعمل مجددًا.
  • تغيّر الحالة. إنشاء المسودات والقوالب والنطاقات وصناديق البريد أو تحديثها، ونشر القوالب، وبدء التوثيق، كلها تغيّر مساحة العمل لكنها لا ترسل بريدًا.
  • للقراءة فقط. كل ما عدا ذلك موسوم بـ readOnlyHint: true ويمكن استدعاؤه بحرية.
  • لا يغيّر هذا الخادم DNS أبدًا. تُعيد add_domain سجلات ينشرها إنسان؛ وتُعيد get_domain_connect_link عنوان URL للموافقة يجب أن يفتحه شخص ويوافق عليه لدى مزوّد DNS الخاص به.
  • لا يغيّر هذا الخادم الفوترة أبدًا. تقرأ get_account الباقة والاستخدام وحالة الاشتراك فقط.
  • مساحات العمل غير المدفوعة (الفترة التجريبية للتكامل) لا يمكنها التسليم إلا إلى البريد الإلكتروني لمالك الحساب (get_account ← user.email) أو إلى عنوان محاكاة في AWS SES مثل success@simulator.amazonses.com، ولا يمكنها إرسال مرفقات.
  • القبول ليس تسليمًا. يُعيد الإرسال الناجح معرّفًا؛ وتصل أدلة التسليم والارتداد والشكوى لاحقًا في list_email_events. لا تدّعِ أبدًا الوصول إلى صندوق الوارد أو أن شخصًا قرأ الرسالة.
  • لا تبدّل إلى عنوان From مختلف للالتفاف على إيقاف 423، ولا تُعِد أبدًا إضافة مستلِمين ألغوا اشتراكهم أو قدّموا شكاوى.

مفاتيح API خارج النطاق

بحكم التصميم لا توجد أدوات تنشئ مفاتيح API أو تعدّلها أو تدوّرها أو تلغيها أو تحذفها. يجب ألا يُنشئ الوكيل بيانات اعتماد أو يتلفها. تُعيد list_api_keys الأسماء والبادئات غير السرية وأوقات آخر استخدام فقط. وتبقى إدارة المفاتيح في لوحة التحكم مع إنسان مسجَّل الدخول.

سير العمل

1. أول إرسال

  1. تؤكد get_service_health أن API يمكن الوصول إليها (تعمل دون مفتاح).
  2. تعرض get_account الباقة (access.tier) والحصة المتبقية وuser.email. وفي الفترة التجريبية، هذا البريد هو المستلِم الحقيقي الوحيد المسموح به.
  3. تسرد list_sending_identities عناوين From التي يمكنك استخدامها. وإذا كانت فارغة، فابدأ بسير عمل النطاق.
  4. أكّد المُرسِل والمستلِم والموضوع والنص مع المستخدم، ثم استخدم send_email مع idempotency_key.
  5. تُظهر list_email_events مع id المُعاد الأحداث delivery أو bounce أو complaint أو reject بمجرد أن يبلّغ عنها المزوّد (عادةً بعد ثوانٍ إلى دقائق).
أول إرسال
{
  "name": "send_email",
  "arguments": {
    "from": "Acme <hello@example.com>",
    "to": [
      "owner@example.com"
    ],
    "subject": "SendHQ is connected",
    "text": "It works.",
    "idempotency_key": "first-send-2026-09-26"
  }
}

2. توثيق النطاق من البداية إلى النهاية

  1. استخدم add_domain مع name: "example.com". تتضمن النتيجة سجلات DNS (سجلات DKIM من نوع CNAME، والتحقق من SES، وSPF، وDMARC الموصى به).
  2. تكتشف get_dns_provider مع domain_id مزوّد DNS المعتمد وتُعيد المضيف النسبي الدقيق الذي تُدخله لكل سجل لدى ذلك المزوّد.
  3. إذا كانت providers.domainConnect.available مساوية لـ true، فإن get_domain_connect_link تُعيد عنوان URL للموافقة. سلّمه إلى الإنسان؛ فلا يتغير شيء إلى أن يوافق لدى المزوّد. وإلا فسلّم الإنسان السجلات لينشرها. لا تنشر سجل SPF ثانيًا أبدًا: ادمج include:amazonses.com في قيمة v=spf1 الحالية.
  4. تعيد verify_domain فحص DNS وSES. تنتقل الحالة عبر pending وchecking وpropagating إلى verified. استعلم دوريًا عبر verify_domain أو get_domain كل 30 إلى 60 ثانية؛ فقد يستغرق DNS من دقائق إلى ساعات.
  5. عندما تكون status مساوية لـ verified، تظهر عناوين النطاق في list_sending_identities.

3. الارتدادات والشكاوى وقوائم المنع

  1. تُعيد list_blocked_recipients كل عنوان محظور مع سببه (bounce أو complaint أو unsubscribe) وعددًا إجماليًا.
  2. تُعيد list_suppressions عناصر المنع الناتجة عن الارتداد الدائم والشكاوى؛ وتعطي deliverability_stats معدلات التسليم والارتداد والشكاوى لآخر 30 يومًا؛ وتُظهر list_sender_reputation عناوين From التي خُنقت أو أُوقفت مؤقتًا.
  3. يخفق الإرسال الذي يتضمن مستلِمًا مدرجًا في قائمة المنع بالخطأ 422 recipient_suppressed. أزل ذلك المستلِم وأعد الإرسال.
  4. لا تستدعِ remove_suppression إلا عندما يؤكد إنسان أن صندوق بريد ارتدت رسائله صار يعمل. وعناصر المنع الناتجة عن الشكاوى دائمة (409 complaint_suppression_locked).

4. استقبال البريد الوارد

  1. يجب أن يكون النطاق (وغالبًا نطاق فرعي مثل inbound.example.com) موثَّقًا.
  2. تهيّئ setup_inbound الاستقبال وتُعيد سجل MX واحدًا. وينشره إنسان.
  3. استخدم verify_inbound إلى أن تصبح status مساوية لـ ready.
  4. تنشئ create_inbox مع domain_id وlocal_part (مثل support) العنوان support@inbound.example.com.
  5. استعلم دوريًا عبر list_emails مع direction: "in" وunread: true (وinbox_id اختياريًا). اقرأ رسالة بـ get_email ومحادثتها بـ get_thread ومرفقاتها بـ download_attachment، وعلّمها على أنها عولجت بـ mark_email (read: true).
  6. ردّ ضمن السلسلة بـ send_email وreply_to_email_id؛ وتضبط SendHQ قيم In-Reply-To وReferences والسلسلة.

5. Webhooks وإشعارات الأحداث

لا تقدّم SendHQ حاليًا webhooks قابلة للضبط من العميل، ولذلك لا توجد أداة webhook. تُعالَج إشعارات المزوّد داخل SendHQ وتُتاح عبر عمليات القراءة. استعلم دوريًا بدل ذلك: list_email_events لنتيجة رسالة واحدة، وlist_emails مع status (مثل bounced) أو after للتغييرات الأخيرة، وlist_emails مع direction: "in" وunread: true للبريد الوارد الجديد، وlist_blocked_recipients لعناصر المنع الجديدة. لا تستعلم أكثر من مرة واحدة تقريبًا كل دقيقة لكل سؤال.

6. تشخيص إخفاق التسليم

  1. جد الرسالة: list_emails مع direction: "out" وto أو query، أو get_email إذا كان لديك المعرّف. تعني status: failed أن SendHQ أو المزوّد رفضها عند الإرسال؛ ويوضح خطأ الرسالة السبب.
  2. list_email_events: bounce (دائم أو عابر، مع تشخيص المزوّد)، أو complaint، أو reject، أو delivery. وعدم وجود أحداث بعد يعني أن المزوّد لم يبلّغ؛ فانتظر وأعد الفحص.
  3. إذا أخفق استدعاء الإرسال نفسه، فاقرأ code الخطأ: sender_domain_unverified ← أكمل توثيق النطاق؛ recipient_suppressed ← ارتدت رسائل العنوان ارتدادًا دائمًا أو قدّم شكوى سابقًا؛ sender_paused ← افحص list_sender_reputation وأصلح مصدر القائمة؛ trial_recipient_restricted ← حدود الفترة التجريبية؛ quota_exhausted ← استخدام get_account.
  4. تتحقق get_domain من أن DKIM وSPF وDMARC لا تزال منشورة؛ وتُظهر deliverability_stats ما إذا كانت المشكلة في رسالة واحدة أم اتجاهًا عامًا.
  5. أبلغ بما تُظهره الأدلة. فحدث delivery يعني أن خادم المستلِم قبِل الرسالة، لا أنها وصلت إلى صندوق الوارد أو قُرئت.

7. امتلاك مجموعة مهام (التصنيفات)

  1. استخدم create_label مع name (مثل Agent/Orders) وskip_inbox: true. وهذا يحوّل التصنيف إلى مجموعة: يُؤرشَف البريد المستلَم الذي يحصل عليه، فيظهر داخل التصنيف فقط ولا يظهر أبدًا في صندوق وارد الإنسان.
  2. أرسل بريد المهمة بـ send_email (أو send_batch) مع labels: ["Agent/Orders"]. وترث الردود على تلك المحادثة التصنيف تلقائيًا وتتخطى صندوق الوارد.
  3. للبريد الذي يبدأ خارج محادثاتك، أضف قاعدة فرز: create_label_rule مع inbox_id (عنوان مخصص مثل orders@…) أو from أو to أو subject. ومرّر apply_to_existing: true لفرز البريد المستلَم أصلًا.
  4. اعمل على المجموعة: list_emails مع label: "Agent/Orders" وdirection: "in" وunread: true؛ واقرأ بـ get_email أو get_thread، وردّ بـ send_email وreply_to_email_id، وطبّق mark_email مع read: true عند المعالجة.
  5. انقل رسالة شاردة إلى تصنيف أو خارجه بـ label_email (add / remove). وإضافة تصنيف مجموعة إلى رسالة مستلَمة تؤرشفها أيضًا.
  6. اختياريًا، ترسل set_inbox_forwarding نسخة من كل ما يستقبله عنوان استقبال إلى صندوق بريد آخر (يؤكد الهدف بالبريد أولًا).
الإرسال إلى مجموعة
{
  "name": "send_email",
  "arguments": {
    "from": "Orders <orders@example.com>",
    "to": [
      "customer@example.net"
    ],
    "subject": "Order 1042: confirm delivery window",
    "text": "Reply with a time that works.",
    "labels": [
      "Agent/Orders"
    ],
    "idempotency_key": "order-1042-window"
  }
}

8. المرفقات والقوالب

أرفق حتى 10 ملفات بالمعلمة attachments في send_email (يحتاج كل ملف إلى content_base64 أو file_path محلي؛ وتكون قيمة filename الافتراضية اسم الملف الأساسي) في باقة مدفوعة. وللقوالب المستضافة: create_template ← update_template_draft ← render_template للمعاينة ببيانات عيّنة ← send_template_test (يرسل اختبارًا حقيقيًا واحدًا) ← publish_template، ثم أرسل بـ send_email أو send_batch باستخدام template: {key, data} ومستلِم to واحد بالضبط.

النتائج والترقيم والأخطاء

يُعيد الاستدعاء الناجح كائن JSON الخاص بـ API بوصفه structuredContent وككتلة نصية JSON. وتقبل كل أداة list_* المعلمة limit (من 1 إلى 200، والافتراضي 50) وoffset، وتضيف كائن pagination. واصل الاستدعاء بـ offset: pagination.next_offset ما دامت has_more مساوية لـ true.

نتيجة مرقَّمة
{
  "data": [
    "…"
  ],
  "count": 50,
  "pagination": {
    "offset": 0,
    "limit": 50,
    "returned": 50,
    "total": 180,
    "has_more": true,
    "next_offset": 50
  }
}

يُعيد الاستدعاء الفاشل isError: true مع خطأ منظَّم. اتبع remedy بدل إعادة المحاولة عشوائيًا؛ ولا تعد المحاولة إلا عندما تكون retryable مساوية لـ true.

خطأ أداة منظَّم
{
  "error": {
    "code": "trial_recipient_restricted",
    "status": 402,
    "message": "The integration trial can deliver only to your account email or an AWS SES simulator address",
    "retryable": false,
    "explanation": "This workspace is on the unpaid integration trial. Trial sends can be delivered only to the account owner's email address or an AWS SES simulator address.",
    "remedy": "Send to the account email (get_account -> user.email) or a simulator address such as success@simulator.amazonses.com to test. To email anyone else, the account owner must activate a paid plan in the dashboard (Profile & Billing). Do not retry the same recipients."
  }
}

حقول الخطأ الاختيارية: request_id (اذكره للدعم)، وretry_after_seconds، وproblems (قائمة بمخالفات المخطط لـ invalid_arguments)، وidempotent_replayed (انظر عدم التكرار).

عدم التكرار (Idempotency)

تقبل send_email وsend_batch المعلمة idempotency_key (200 حرف كحد أقصى)، وتُرسَل بوصفها الترويسة Idempotency-Key. ولّد مفتاحًا ثابتًا واحدًا لكل رسالة منطقية، مثل invoice-4812-receipt.

  • يجب أن تعيد المحاولة استخدام المفتاح نفسه مع جسم طلب مطابق. المفتاح نفسه مع أي تغيير (المستلِم أو الموضوع أو النص أو الترويسة أو بيانات القالب، وحتى قيم الوسائط) يُعيد 409 idempotency_conflict.
  • المفتاح نفسه والجسم نفسه وانتهاء الطلب الأصلي: تُعيد SendHQ النتيجة المخزَّنة دون إرسال مجددًا. بهذه الطريقة تعيد المحاولة بأمان بعد انتهاء المهلة أو network_error.
  • المفتاح نفسه بينما الطلب الأصلي لا يزال قيد التنفيذ: 409 idempotency_in_progress، ويمكن إعادة المحاولة بعد انتظار قصير.
  • الرسالة المنطقية الجديدة تحتاج إلى مفتاح جديد.
  • تُعاد الإخفاقات المخزَّنة كذلك. فإذا أخفقت المحاولة الأولى، فإن إعادة المحاولة بالمفتاح نفسه تُعيد الإخفاق نفسه مع idempotent_replayed: true وretryable: false. افحص list_emails (direction: out) للتأكد من أن شيئًا لم يُرسَل، وأصلح السبب، ثم أرسل بمفتاح جديد.
  • لا يعيد الخادم محاولة POST من تلقاء نفسه أبدًا. تُعاد استدعاءات GET للقراءة فقط تلقائيًا (حتى 3 محاولات عند أخطاء الشبكة و429 و5xx).
  • لا يمكن لـ send_email مع attachments المضمَّنة أن تأخذ idempotency_key، لأنها تنفّذ عدة طلبات. ولإرسال مرفقات آمن لإعادة المحاولة: create_draft ← upload_attachment ← send_email مع draft_id وidempotency_key.
إرسال آمن لإعادة المحاولة (كرّره كما هو تمامًا عند انتهاء المهلة)
{
  "name": "send_email",
  "arguments": {
    "from": "Acme <billing@example.com>",
    "to": [
      "owner@example.com"
    ],
    "subject": "Receipt #4812",
    "text": "Thanks for your payment.",
    "idempotency_key": "receipt-4812"
  }
}

حدود المعدّل والحصص

لا تنشر SendHQ حدًّا ثابتًا لعدد الطلبات في الثانية لـ API. والحدود التي يواجهها الوكيل فعلًا هي حدود استخدام تُعاد بالرمز 429:

  • عمليات التسليم الشهرية للمستلِمين لكل باقة. يُحتسب كل عنوان في To وCc وBcc تسليمًا واحدًا. راجع get_account ← usage.recipientDeliveries مقابل usage.emailQuotaMonth.
  • المستلِمون اليوميون لكل عنوان From بعينه، ويحدّدهم حال سمعة ذلك المُرسِل (list_sender_reputation ← dailyLimit، والافتراضي 2,000 في الباقات المدفوعة).
  • الفترة التجريبية للتكامل: 100 مستلِم إجمالًا، فقط إلى البريد الإلكتروني للحساب أو عناوين محاكاة SES.
  • المرفقات: 10 ملفات كحد أقصى و10 MB لكل رسالة؛ و10 GB من نقل المرفقات المرجَّح بعدد المستلِمين شهريًا في الباقات المدفوعة.
  • لكل طلب: To + Cc + Bcc حتى 100 عنوان؛ وsend_batch حتى 100 رسالة.
  • قاطع دائرة السمعة (circuit breaker): في نافذة متجددة مدتها 7 أيام، تؤدي الارتدادات أو الشكاوى التي تتجاوز الحد إلى خنق عنوان From واحد أو إيقافه مؤقتًا (423 sender_paused). ويتعافى تلقائيًا بمجرد انخفاض المعدلات.

quota_exhausted غير قابل لإعادة المحاولة إلى أن تُعاد ضبط الفترة أو تتغير الباقة. أما rate_limited فيمكن إعادة المحاولة بعد retry_after_seconds؛ وفي الإرسال، أعد المحاولة بـ idempotency_key نفسه وجسم مطابق.

فهرس الأخطاء

قيمة code ثابتة؛ فرّع عليها بدل message.

codeHTTPإعادة المحاولة؟المعنى وما يجب فعله
invalid_arguments—لاأخفقت الوسائط في مخطط JSON Schema الخاص بالأداة محليًا؛ ولم يصل شيء إلى SendHQ. أصلح الحقول المذكورة في problems.
auth_error401لامفتاح API مفقود أو ملغى أو خاطئ. اضبط SENDHQ_API_KEY لعملية الخادم؛ وينشئ إنسان المفاتيح في لوحة التحكم.
trial_recipient_restricted402لالا تستطيع الفترة التجريبية للتكامل التسليم إلا إلى البريد الإلكتروني للحساب أو عنوان محاكاة SES. أرسل إليه، أو يفعّل المالك باقة مدفوعة.
payment_required402لاالميزة تتطلب باقة مدفوعة (مثل المرفقات). أرسل بدونها أو رقِّ الباقة.
sender_domain_not_owned403لانطاق From ليس في مساحة العمل هذه. استخدم list_sending_identities أو add_domain.
sender_domain_unverified403لانطاق From لم يُوثَّق بعد. استخدم get_domain، وانشر السجلات الناقصة، ثم verify_domain.
domain_limit_reached403لابلغ حد النطاقات في الباقة. أزل نطاقًا غير مستخدم (بموافقة) أو رقِّ الباقة.
marketing_not_enabled403لاالفئة التسويقية غير مفعّلة لهذا النطاق أو هذه الباقة. لا تستخدم transactional إلا إذا كانت الرسالة كذلك فعلًا.
forbidden403لاالسياسة لا تسمح بالعملية. عدّل الطلب.
not_found404لاالمعرّف ليس في مساحة العمل هذه. اعرض المورد للعثور على المعرّف الصحيح؛ واستعد القوالب المؤرشفة أولًا.
idempotency_conflict409لاأُعيد استخدام المفتاح مع جسم مختلف. أعد إرسال الأصل تمامًا، أو استخدم مفتاحًا جديدًا لرسالة جديدة.
idempotency_in_progress409نعمالطلب الأصلي لا يزال قيد التنفيذ. انتظر ثم أعد المحاولة بالمفتاح والجسم نفسيهما.
revision_conflict409لاتغيّرت مسودة القالب منذ قراءتك لها. استخدم get_template، ثم ادمج، وأعد الحفظ.
complaint_suppression_locked409لاقدّم المستلِم شكوى. لا تراسله مرة أخرى أبدًا.
inbound_not_ready409لااستقبال البريد الوارد غير جاهز. استخدم setup_inbound، وانشر MX، ثم verify_inbound.
conflict409لاالمورد موجود بالفعل أو في حالة خاطئة. اقرأه وعدّل.
attachments_too_large413لاأكثر من 10 ملفات أو 10 MB. أزل المرفقات أو قلّص حجمها.
recipient_suppressed422لاارتدت رسائل مستلِم ارتدادًا دائمًا أو قدّم شكوى سابقًا. أزله؛ وراجع list_blocked_recipients.
recipient_unsubscribed422لاألغى مستلِم اشتراكه في البريد التسويقي. أزله نهائيًا.
validation_failed422لارُفض المحتوى، مثل بيانات قالب تخالف عقد المتغيّرات. أصلح المدخلات.
sender_paused423لاعنوان From هذا موقوف مؤقتًا بواسطة قاطع الدائرة الخاص بارتدادات وشكاوى الأيام السبعة. توقف، وأصلح القائمة، وانتظر التعافي التلقائي.
quota_exhausted429لابلغت الحد الشهري أو اليومي لكل مُرسِل أو حد المرفقات أو حد الفترة التجريبية. افحص get_account؛ وانتظر إعادة الضبط أو رقِّ الباقة.
rate_limited429نعمخفّف السرعة؛ وانتظر retry_after_seconds. في الإرسال: المفتاح نفسه والجسم نفسه.
server_error5xxنعمإخفاق مؤقت في SendHQ أو لدى المزوّد. تراجع وأعد المحاولة؛ وفي الإرسال بالمفتاح والجسم نفسيهما. وإذا كانت idempotent_replayed مساوية لـ true، فاستخدم مفتاحًا جديدًا بعد التأكد من أن شيئًا لم يُرسَل.
network_error—نعمفُقد الطلب أو الاستجابة. أعد المحاولة؛ وفي الإرسال يجعل idempotency_key نفسه ذلك آمنًا.
invalid_request400لاطلب مشوَّه. اقرأ message وصحّحه.
tool_error—لاإخفاق محلي داخل خادم MCP (مثل file_path غير قابل للقراءة). اقرأ message.

مرجع الأدوات

كل أداة مع فئة الأمان الخاصة بها ونقطة نهاية REST التي تستدعيها ومعلماتها وشكل القيمة المُعادة ومثال على كائن معلمات tools/call. المعلمات دقيقة: يرفض الخادم أي شيء غير مدرج.

الرسائل وسلاسل الرسائل: send_email, send_batch, list_emails, get_email, mark_email, delete_email, list_email_events, get_thread
التصنيفات وقواعد الفرز التلقائي: list_labels, get_label, create_label, update_label, delete_label, create_label_rule, delete_label_rule, label_email
المسودات والمرفقات وهويات الإرسال: list_sending_identities, create_draft, list_drafts, get_draft, update_draft, delete_draft, upload_attachment, download_attachment, delete_attachment
القوالب المستضافة: list_templates, create_template, get_template, update_template_draft, create_template_draft, render_template, send_template_test, publish_template, archive_template, restore_template
النطاقات وDNS: list_domains, get_domain, add_domain, verify_domain, delete_domain, get_dns_provider, get_domain_connect_link
البريد الوارد: setup_inbound, verify_inbound, list_inboxes, get_inbox, create_inbox, update_inbox, set_inbox_forwarding, delete_inbox
قابلية التسليم والارتدادات وقوائم المنع: deliverability_stats, list_sender_reputation, list_suppressions, remove_suppression, list_blocked_recipients
الحساب والاستخدام والتحليلات والمفاتيح: get_account, get_analytics, list_api_keys, get_service_health

الرسائل وسلاسل الرسائل

يرسل بريدًا حقيقيًاsend_email
POST /emails

إرسال رسالة واحدة

SENDS REAL EMAIL. أرسل رسالة واحدة من نطاق موثَّق: html/text خام، أو قالب مستضاف منشور، أو ردًّا في سلسلة قائمة، أو رسالة بمرفقات. مرّر idempotency_key حتى لا يؤدي إعادة المحاولة إلى إرسال مزدوج؛ ويجب أن تعيد المحاولة استخدام المفتاح نفسه مع طلب مطابق، وإلا تُعيد SendHQ الرمز 409. المعلمة attachments وسيلة مريحة تنشئ مسودة وترفع كل ملف وترسل بتلك المسودة؛ ولا يمكن دمجها مع idempotency_key أو draft_id (استخدم create_draft + upload_attachment + send_email مع draft_id لإرسال مرفقات آمن لإعادة المحاولة). لا يمكن لمساحات العمل غير المدفوعة (الفترة التجريبية للتكامل) التسليم إلا إلى البريد الإلكتروني للحساب أو إلى عنوان محاكاة في AWS SES، ولا يمكنها إرسال مرفقات.

قدّم واحدًا على الأقل من: html أو text أو template.

المعلمةالنوعمطلوبالوصف
fromstringنعمالمُرسِل، مثل Acme <hello@example.com>. يجب أن يكون النطاق موثَّقًا في مساحة العمل هذه (راجع list_sending_identities). (حتى 998 حرفًا)
tostring[]نعمالمستلِمون. كل عنصر عنوان، مع اسم عرض اختياري. يمكن أن يبلغ مجموع to وcc وbcc 100 على الأكثر؛ وتستهلك كل وجهة رصيد تسليم واحدًا. (من 1 إلى 100 عنصر)
ccstring[]لامستلِمو النسخة الكربونية. (من 0 إلى 100 عنصر)
bccstring[]لامستلِمو النسخة المخفية. (من 0 إلى 100 عنصر)
subjectstringلاسطر الموضوع. احذفه عند إرسال قالب. (حتى 998 حرفًا)
textstringلانص الرسالة العادي. قدّم text أو html أو template.
htmlstringلانص الرسالة بصيغة HTML. تعقّمه SendHQ وتشتق النص العادي عند حذف text.
reply_tostringلاعنوان Reply-To.
headersobjectلاترويسات مخصصة آمنة إضافية (قيم نصية)، مثل {"X-Entity-Ref-ID": "123"}. أما ترويسات التوجيه مثل From/To/Message-ID فتتحكم فيها SendHQ.
message_classstringلاtransactional (الافتراضي) أو marketing. تتطلب marketing باقة أو نطاقًا مفعَّلًا للتسويق وتضيف معالجة إلغاء الاشتراك. (إحدى القيم transactional أو marketing)
reply_to_email_idstringلاالرد داخل محادثة قائمة: معرّف em_… للرسالة التي يُردّ عليها. تضبط SendHQ In-Reply-To/References والسلسلة.
thread_idstringلامعرّف سلسلة صريح لحفظ الرسالة تحته.
draft_idstringلاأرسل مرفقات مسودة مخزَّنة مع هذه الرسالة (dr_…). تُحذف المسودة بعد إرسال ناجح.
templateobjectلاأرسل قالبًا مستضافًا منشورًا بدل html/text خام. يتطلب مستلِمًا واحدًا بالضبط في to ودون cc/bcc؛ ويوفّر القالب الموضوع. قدّم واحدًا على الأقل من: id أو key.
template.idstringلامعرّف القالب (tmpl_…). قدّم id أو key.
template.keystringلامفتاح القالب مثل account-welcome. قدّم id أو key.
template.version_idstringلامعرّف إصدار منشور اختياري (tmplv_…). الافتراضي هو الإصدار المنشور الحالي.
template.dataobjectلاقيم المتغيّرات المُنمَّطة في القالب.
labelsstring[]لاأسماء تصنيفات أو معرّفات lbl_… لحفظ هذه الرسالة تحتها. تُنشأ الأسماء غير المعروفة. وترث الردود في المحادثة التصنيفات، ويُبقي تصنيف المجموعة (skip_inbox) تلك الردود خارج صندوق الوارد. 10 كحد أقصى. (من 0 إلى 10 عناصر)
idempotency_keystringلاترويسة Idempotency-Key (حتى 200 حرف). أعد استخدامه فقط لإعادة محاولة هذا الطلب نفسه تمامًا. (حتى 200 حرف)
attachmentsobject[]لاالملفات المراد إرفاقها (10 ملفات و10 MB إجمالًا كحد أقصى). يحتاج كل ملف إلى content_base64 (مع filename) أو file_path محلي. (من 0 إلى 10 عناصر) قدّم واحدًا على الأقل من: content_base64 أو file_path.
attachments[].filenamestringلااسم الملف الظاهر للمستلِم. مطلوب مع content_base64؛ والافتراضي هو الاسم الأساسي لـ file_path. (حتى 255 حرفًا)
attachments[].content_typestringلانوع MIME، مثل application/pdf. الافتراضي application/octet-stream.
attachments[].content_base64stringلامحتوى الملف بترميز base64 القياسي.
attachments[].file_pathstringلاالمسار المطلق لملف محلي يمكن لعملية خادم MCP قراءته.
القيمة المُعادة{id: em_…, providerMessageId, threadId, templateId, templateVersionId, isTest}. القبول ليس تسليمًا: تابع بـ list_email_events.
مثال على معلمات tools/call
{
  "name": "send_email",
  "arguments": {
    "from": "Acme <hello@example.com>",
    "to": [
      "owner@example.com"
    ],
    "subject": "Your export is ready",
    "text": "Download it from your dashboard.",
    "idempotency_key": "export-ready-42"
  }
}
يرسل بريدًا حقيقيًاsend_batch
POST /emails/batch

إرسال دفعة من الرسائل المخصّصة

SENDS REAL EMAIL. أرسل من 1 إلى 100 رسالة مستقلة في طلب واحد (استخدمها لتخصيص القالب لكل مستلِم). لكل عنصر الشكل نفسه كما في send_email (دون attachments/idempotency_key). تنجح العناصر أو تخفق فرديًا: يعني HTTP 207 نجاحًا جزئيًا؛ فافحص data[i].ok وdata[i].error لكل عنصر. ويغطي idempotency_key واحد جسم الدفعة كله.

المعلمةالنوعمطلوبالوصف
emailsobject[]نعمالرسائل المراد إرسالها. (من 1 إلى 100 عنصر) قدّم واحدًا على الأقل من: html أو text أو template.
idempotency_keystringلاIdempotency-Key للدفعة كلها (حتى 200 حرف). (حتى 200 حرف)
القيمة المُعادة{data: [{index, ok, id?, error?: {message, status}}], count, successful, failed}.
مثال على معلمات tools/call
{
  "name": "send_batch",
  "arguments": {
    "emails": [
      {
        "from": "Acme <hello@example.com>",
        "to": [
          "owner@example.com"
        ],
        "template": {
          "key": "account-welcome",
          "data": {
            "first_name": "Asha"
          }
        }
      }
    ],
    "idempotency_key": "welcome-batch-2026-09-26"
  }
}
للقراءة فقطlist_emails
GET /emails

عرض البريد والبحث فيه

اعرض البريد المرسل (direction: out) والمستلَم (direction: in) من الأحدث إلى الأقدم مع عوامل تصفية. يُصنَّف البريد المستلَم: اقرأ صندوق الوارد البشري بـ direction: in وarchived: false وcategory: primary؛ وافرز بـ important: true؛ ويُخفى البريد المزعج ما لم تستخدم category: spam أو include_spam: true. مقسَّمة إلى صفحات: تتضمن النتيجة pagination {offset, limit, returned, total?, has_more, next_offset}.

المعلمةالنوعمطلوبالوصف
directionstringلاin للمستلَم، وout للمرسَل. (إحدى القيم in أو out)
statusstringلاعامل تصفية الحالة، مثل queued أو sent أو delivered أو bounced أو complained أو failed.
domainstringلاالرسائل الخاصة بهذا النطاق فقط، أو بقائمة نطاقات مفصولة بفواصل (تُطابَق أي قيمة منها).
inbox_idstringلاالرسائل التي استلمها صندوق البريد هذا فقط (inb_…).
labelstringلاالرسائل التي تحمل هذا التصنيف فقط: معرّف تصنيف lbl_… أو اسم مطابق تمامًا، أو قائمة مفصولة بفواصل (تُطابَق أي قيمة منها). استخدم list_labels لرؤية المجلدات.
archivedbooleanلاfalse = عرض صندوق الوارد (البريد المستلَم غير المؤرشف)، وtrue = المؤرشف فقط. احذفها لعرض كل البريد.
categorystringلاprimary (الأشخاص)، أو updates (النشرات والبريد الجماعي والآلي)، أو spam؛ أو قائمة مفصولة بفواصل. يُخفى البريد المزعج ما لم يُطلب.
importantbooleanلاtrue = الرسائل الموسومة بأنها مهمة فقط (الردود على محادثات بدأتَها، والمُرسِلون الموسومون بالأهمية).
include_spambooleanلاتضمين البريد المزعج في النتائج (للبحث في كل المجلدات).
fromstringلاعنوان المُرسِل يحتوي على هذه القيمة.
tostringلاعنوان المستلِم يحتوي على هذه القيمة.
unreadbooleanلاtrue = غير المقروء فقط، وfalse = المقروء فقط.
afterstringلاطابع زمني بصيغة ISO-8601؛ الرسائل المُنشأة بعده فقط. (date-time)
beforestringلاطابع زمني بصيغة ISO-8601؛ الرسائل المُنشأة قبله فقط. (date-time)
querystringلابحث نصي حر في الموضوعات والنصوص وعناوين المُرسِل/المستلِم وأسماء ملفات المرفقات. (حتى 200 حرف)
limitintegerلاحجم الصفحة. الافتراضي 50. (الافتراضي 50؛ من 1 إلى 200)
offsetintegerلاعدد السجلات المراد تخطيها. استخدم pagination.next_offset من الصفحة السابقة. (الافتراضي 0؛ من 0 فصاعدًا)
القيمة المُعادة{data: [ملخصات الرسائل], count, pagination}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_emails",
  "arguments": {
    "direction": "in",
    "unread": true,
    "limit": 25
  }
}
للقراءة فقطget_email
GET /emails/:email_id

استرجاع رسالة واحدة

استرجع رسالة واحدة مع الترويسات ونص html/text والحالة وبيانات السلسلة الوصفية وبيانات المرفقات الوصفية (نزّل البايتات بـ download_attachment).

المعلمةالنوعمطلوبالوصف
email_idstringنعممعرّف الرسالة (يبدأ بـ em_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادةكائن الرسالة: {id, direction, status, from, to, cc, bcc, subject, html, text, threadId, messageId, providerMessageId, readAt, createdAt, attachments: [{id, filename, contentType, sizeBytes, available}]}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "get_email",
  "arguments": {
    "email_id": "em_123"
  }
}
يغيّر الحالةmark_email
PATCH /emails/:email_id

تعليم رسالة كمقروءة أو مؤرشفة أو مزعجة أو مهمة

حدّث رسالة واحدة: read وarchived وcategory (primary أو updates أو spam؛ للبريد المستلَم فقط) وimportant. يُعلِّم الإبلاغ عن بريد مزعج أو الوسم بالأهمية نظام SendHQ عن ذلك المُرسِل للبريد المستقبلي؛ ومرّر learn: false لتغيير هذه الرسالة وحدها. مرّر حقلًا واحدًا على الأقل.

المعلمةالنوعمطلوبالوصف
email_idstringنعممعرّف الرسالة (يبدأ بـ em_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
readbooleanلاtrue = مقروءة، وfalse = غير مقروءة.
archivedbooleanلاtrue = أرشفة (تخطي صندوق الوارد)، وfalse = إعادتها إلى صندوق الوارد.
categorystringلاانقل رسالة مستلَمة إلى primary أو updates أو spam. (إحدى القيم primary أو updates أو spam)
importantbooleanلاوسم الرسالة بأنها مهمة أو إزالة الوسم.
learnbooleanلاfalse = لا تتذكر هذا الحكم بشأن المُرسِل (الافتراضي true).
القيمة المُعادةكائن الرسالة المحدَّث.
التوصيفاتidempotentHint
مثال على معلمات tools/call
{
  "name": "mark_email",
  "arguments": {
    "email_id": "em_123",
    "read": true
  }
}
مُتلِفةdelete_email
DELETE /emails/:email_id

حذف رسالة

DESTRUCTIVE: احذف نهائيًا رسالة محفوظة ومرفقاتها المخزَّنة من SendHQ. لا يسحب ذلك رسالة سُلِّمت بالفعل.

المعلمةالنوعمطلوبالوصف
email_idstringنعممعرّف الرسالة (يبدأ بـ em_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادة{ok: true}.
التوصيفاتdestructiveHint idempotentHint
مثال على معلمات tools/call
{
  "name": "delete_email",
  "arguments": {
    "email_id": "em_123"
  }
}
للقراءة فقطlist_email_events
GET /emails/:email_id/events

عرض أحداث التسليم لرسالة

أحداث المزوّد لرسالة مرسَلة واحدة: delivery وbounce وcomplaint وreject وopen وclick. وهذا هو الدليل على ما إذا كانت الرسالة سُلِّمت أو سبب إخفاقها. مقسَّمة إلى صفحات: تتضمن النتيجة pagination {offset, limit, returned, total?, has_more, next_offset}.

المعلمةالنوعمطلوبالوصف
email_idstringنعممعرّف الرسالة (يبدأ بـ em_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
limitintegerلاحجم الصفحة. الافتراضي 50. (الافتراضي 50؛ من 1 إلى 200)
offsetintegerلاعدد السجلات المراد تخطيها. استخدم pagination.next_offset من الصفحة السابقة. (الافتراضي 0؛ من 0 فصاعدًا)
القيمة المُعادة{data: [{event_type, recipient, reason, created_at, …}], count, pagination}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_email_events",
  "arguments": {
    "email_id": "em_123"
  }
}
للقراءة فقطget_thread
GET /threads/:thread_id

استرجاع محادثة

استرجع كل رسالة في محادثة بترتيب زمني (المرسلة والمستلَمة)، مع بيانات المرفقات الوصفية لكل منها.

المعلمةالنوعمطلوبالوصف
thread_idstringنعممعرّف السلسلة (عادةً معرّف em_… للرسالة الأولى؛ راجع threadId في أي رسالة). (حتى 128 حرفًا)
القيمة المُعادة{id, subject, data: [الرسائل]}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "get_thread",
  "arguments": {
    "thread_id": "em_123"
  }
}

التصنيفات وقواعد الفرز التلقائي

للقراءة فقطlist_labels
GET /labels

عرض التصنيفات

اعرض تصنيفات مساحة العمل (المجلدات) مع الأعداد الإجمالية وغير المقروءة وقواعد الفرز التلقائي الخاصة بها. مقسَّمة إلى صفحات: تتضمن النتيجة pagination {offset, limit, returned, total?, has_more, next_offset}.

المعلمةالنوعمطلوبالوصف
limitintegerلاحجم الصفحة. الافتراضي 50. (الافتراضي 50؛ من 1 إلى 200)
offsetintegerلاعدد السجلات المراد تخطيها. استخدم pagination.next_offset من الصفحة السابقة. (الافتراضي 0؛ من 0 فصاعدًا)
القيمة المُعادة{data: [{id, name, color, totalCount, unreadCount, rules: [...]}], count, pagination}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_labels",
  "arguments": {}
}
للقراءة فقطget_label
GET /labels/:label_id

استرجاع تصنيف

استرجع تصنيفًا واحدًا مع الأعداد وقواعد الفرز التلقائي.

المعلمةالنوعمطلوبالوصف
label_idstringنعممعرّف التصنيف (يبدأ بـ lbl_) أو اسم التصنيف المطابق تمامًا. (حتى 128 حرفًا)
القيمة المُعادةكائن التصنيف.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "get_label",
  "arguments": {
    "label_id": "Billing"
  }
}
يغيّر الحالةcreate_label
POST /labels

إنشاء تصنيف

أنشئ تصنيفًا على هيئة مجلد. اضبط skip_inbox: true لتحويله إلى مجموعة يملكها الوكيل: أرسل بـ labels: [name] فتُفرز الردود إلى التصنيف وتبقى خارج صندوق الوارد. وتفرز قواعد الفرز التلقائي الاختيارية البريد المرسل/المستلَم الجديد (يجب أن تتحقق كل الشروط في القاعدة). واضبط apply_to_existing لفرز البريد المحفوظ أيضًا.

المعلمةالنوعمطلوبالوصف
namestringنعماسم التصنيف، مثل Billing أو Clients/Acme. فريد لكل مساحة عمل (دون مراعاة حالة الأحرف). (حتى 64 حرفًا)
colorstringلالون بصيغة hex مثل #1a73e8. اختياري.
skip_inboxbooleanلاوضع المجموعة: يُؤرشَف البريد المستلَم الذي يحصل على هذا التصنيف (بقاعدة، أو بالرد على محادثة أُرسلت بهذا التصنيف، أو يدويًا) فيظهر داخل التصنيف فقط وليس في صندوق الوارد.
rulesobject[]لاقواعد فرز تلقائي اختيارية (20 كحد أقصى). تحتاج كل قاعدة إلى واحد على الأقل من inbox_id أو from أو to أو subject. (من 0 إلى 20 عنصرًا)
rules[].directionstringلاالبريد in (المستلَم) أو out (المرسَل) فقط. احذفها للاثنين معًا. (إحدى القيم in أو out)
rules[].inbox_idstringلاالبريد الذي استلمه صندوق البريد هذا فقط (inb_…). يفرز كل عنوان استقبال في مجلده الخاص.
rules[].fromstringلاالمُرسِل يحتوي على هذا النص (دون مراعاة حالة الأحرف)، مثل @stripe.com. (حتى 200 حرف)
rules[].tostringلاTo/Cc يحتوي على هذا النص (دون مراعاة حالة الأحرف). (حتى 200 حرف)
rules[].subjectstringلاالموضوع يحتوي على هذا النص (دون مراعاة حالة الأحرف). (حتى 200 حرف)
rules[].skip_inboxbooleanلاأرشفة البريد المستلَم المطابق ليظهر داخل مجلد التصنيف فقط وليس في صندوق الوارد.
apply_to_existingbooleanلافرز البريد المحفوظ أصلًا الذي يطابق القواعد أيضًا.
القيمة المُعادةالتصنيف المُنشأ مع قواعده.
مثال على معلمات tools/call
{
  "name": "create_label",
  "arguments": {
    "name": "Agent/Orders",
    "skip_inbox": true,
    "rules": [
      {
        "from": "@stripe.com"
      }
    ]
  }
}
يغيّر الحالةupdate_label
PATCH /labels/:label_id

إعادة تسمية تصنيف أو تغيير لونه أو تحويله إلى مجموعة

أعد تسمية تصنيف أو غيّر لونه أو بدّل وضع المجموعة (skip_inbox). يؤدي تفعيل وضع المجموعة إلى أرشفة البريد المستلَم الموجود أصلًا في التصنيف.

المعلمةالنوعمطلوبالوصف
label_idstringنعممعرّف التصنيف (يبدأ بـ lbl_) أو اسم التصنيف المطابق تمامًا. (حتى 128 حرفًا)
namestringلاالاسم الجديد. (حتى 64 حرفًا)
colorstringلالون hex الجديد.
skip_inboxbooleanلاوضع المجموعة: يُؤرشَف البريد المستلَم الذي يحصل على هذا التصنيف (بقاعدة، أو بالرد على محادثة أُرسلت بهذا التصنيف، أو يدويًا) فيظهر داخل التصنيف فقط وليس في صندوق الوارد.
القيمة المُعادةالتصنيف المحدَّث.
التوصيفاتidempotentHint
مثال على معلمات tools/call
{
  "name": "update_label",
  "arguments": {
    "label_id": "lbl_123",
    "name": "Finance/Billing"
  }
}
مُتلِفةdelete_label
DELETE /labels/:label_id

حذف تصنيف

DESTRUCTIVE: احذف تصنيفًا وقواعده. تبقى الرسالة نفسها؛ وتفقد هذا التصنيف فقط.

المعلمةالنوعمطلوبالوصف
label_idstringنعممعرّف التصنيف (يبدأ بـ lbl_) أو اسم التصنيف المطابق تمامًا. (حتى 128 حرفًا)
القيمة المُعادة{ok: true}.
التوصيفاتdestructiveHint idempotentHint
مثال على معلمات tools/call
{
  "name": "delete_label",
  "arguments": {
    "label_id": "lbl_123"
  }
}
يغيّر الحالةcreate_label_rule
POST /labels/:label_id/rules

إضافة قاعدة فرز تلقائي

أضف قاعدة إلى تصنيف ليُفرز البريد الجديد المطابق تلقائيًا. يجب أن تتحقق كل الشروط التي تضبطها. استخدم inbox_id لمنح عنوان استقبال مجلده الخاص؛ وأضف skip_inbox لإبقائه خارج صندوق الوارد.

المعلمةالنوعمطلوبالوصف
label_idstringنعممعرّف التصنيف (يبدأ بـ lbl_) أو اسم التصنيف المطابق تمامًا. (حتى 128 حرفًا)
directionstringلاالبريد in (المستلَم) أو out (المرسَل) فقط. احذفها للاثنين معًا. (إحدى القيم in أو out)
inbox_idstringلاالبريد الذي استلمه صندوق البريد هذا فقط (inb_…). يفرز كل عنوان استقبال في مجلده الخاص.
fromstringلاالمُرسِل يحتوي على هذا النص (دون مراعاة حالة الأحرف)، مثل @stripe.com. (حتى 200 حرف)
tostringلاTo/Cc يحتوي على هذا النص (دون مراعاة حالة الأحرف). (حتى 200 حرف)
subjectstringلاالموضوع يحتوي على هذا النص (دون مراعاة حالة الأحرف). (حتى 200 حرف)
skip_inboxbooleanلاأرشفة البريد المستلَم المطابق ليظهر داخل مجلد التصنيف فقط وليس في صندوق الوارد.
apply_to_existingbooleanلافرز البريد المحفوظ أصلًا الذي يطابق أيضًا.
القيمة المُعادة{id: lrule_…, labelId, direction, inboxId, from, to, subject, skipInbox}.
مثال على معلمات tools/call
{
  "name": "create_label_rule",
  "arguments": {
    "label_id": "Billing",
    "inbox_id": "inb_123",
    "skip_inbox": true
  }
}
مُتلِفةdelete_label_rule
DELETE /labels/:label_id/rules/:rule_id

حذف قاعدة فرز تلقائي

DESTRUCTIVE: أزل قاعدة فرز تلقائي واحدة. يحتفظ البريد المفروز أصلًا بتصنيفه.

المعلمةالنوعمطلوبالوصف
label_idstringنعممعرّف التصنيف (يبدأ بـ lbl_) أو اسم التصنيف المطابق تمامًا. (حتى 128 حرفًا)
rule_idstringنعممعرّف القاعدة (يبدأ بـ lrule_)، من get_label. (حتى 128 حرفًا)
القيمة المُعادة{ok: true}.
التوصيفاتdestructiveHint idempotentHint
مثال على معلمات tools/call
{
  "name": "delete_label_rule",
  "arguments": {
    "label_id": "lbl_123",
    "rule_id": "lrule_123"
  }
}
يغيّر الحالةlabel_email
POST /emails/:email_id/labels

إضافة تصنيفات إلى رسالة أو إزالتها منها

انقل رسالة بين المجلدات: أضف و/أو أزل تصنيفات بالاسم أو بمعرّف lbl_…. تُنشأ الأسماء غير المعروفة في add ما لم تكن create مساوية لـ false.

المعلمةالنوعمطلوبالوصف
email_idstringنعممعرّف الرسالة (يبدأ بـ em_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
addstring[]لاالتصنيفات المراد إضافتها. (من 0 إلى 10 عناصر)
removestring[]لاالتصنيفات المراد إزالتها. (من 0 إلى 10 عناصر)
createbooleanلاإنشاء التصنيفات غير المعروفة في add (الافتراضي true).
القيمة المُعادةالرسالة المحدَّثة مع labels.
التوصيفاتidempotentHint
مثال على معلمات tools/call
{
  "name": "label_email",
  "arguments": {
    "email_id": "em_123",
    "add": [
      "Billing"
    ],
    "remove": [
      "Support"
    ]
  }
}

المسودات والمرفقات وهويات الإرسال

للقراءة فقطlist_sending_identities
GET /sending-identities

عرض هويات الإرسال الموثَّقة

العناوين والنطاقات التي يمكن لمساحة العمل الإرسال منها الآن (النطاقات الموثَّقة وعنوان From الافتراضي لكل منها وعناوين صناديق البريد النشطة). استدعِها قبل send_email لاختيار قيمة from صالحة.

لا توجد معلمات.

القيمة المُعادة{domains: [أسماء النطاقات الموثَّقة], addresses: [عناوين المُرسِل], localParts: [...]}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_sending_identities",
  "arguments": {}
}
يغيّر الحالةcreate_draft
POST /drafts

إنشاء مسودة

أنشئ مسودة في المحرّر. تحتفظ المسودات بالمرفقات: أنشئ مسودة، ثم upload_attachment، ثم send_email مع draft_id. لا ترسل أي شيء.

المعلمةالنوعمطلوبالوصف
fromstringلاعنوان المُرسِل على نطاق موثَّق (قد يكون فارغًا أثناء الصياغة).
tostring[]لاالمستلِمون. (من 0 إلى 100 عنصر)
ccstring[]لامستلِمو النسخة الكربونية. (من 0 إلى 100 عنصر)
bccstring[]لامستلِمو النسخة المخفية. (من 0 إلى 100 عنصر)
subjectstringلاسطر الموضوع. (حتى 998 حرفًا)
htmlstringلانص الرسالة بصيغة HTML.
textstringلانص الرسالة العادي.
reply_to_email_idstringلامعرّف الرسالة التي تردّ عليها هذه المسودة.
thread_idstringلامعرّف السلسلة التي تنتمي إليها هذه المسودة.
القيمة المُعادةكائن المسودة {id: dr_…, from, to, cc, bcc, subject, html, text, attachments: []}.
مثال على معلمات tools/call
{
  "name": "create_draft",
  "arguments": {
    "from": "hello@example.com",
    "to": [
      "owner@example.com"
    ],
    "subject": "Invoice"
  }
}
للقراءة فقطlist_drafts
GET /drafts

عرض المسودات

اعرض مسودات المحرّر، الأحدث تحديثًا أولًا. مقسَّمة إلى صفحات: تتضمن النتيجة pagination {offset, limit, returned, total?, has_more, next_offset}.

المعلمةالنوعمطلوبالوصف
limitintegerلاحجم الصفحة. الافتراضي 50. (الافتراضي 50؛ من 1 إلى 200)
offsetintegerلاعدد السجلات المراد تخطيها. استخدم pagination.next_offset من الصفحة السابقة. (الافتراضي 0؛ من 0 فصاعدًا)
القيمة المُعادة{data: [المسودات], count, pagination}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_drafts",
  "arguments": {}
}
للقراءة فقطget_draft
GET /drafts/:draft_id

استرجاع مسودة

استرجع مسودة واحدة مع بيانات مرفقاتها الوصفية.

المعلمةالنوعمطلوبالوصف
draft_idstringنعممعرّف المسودة (يبدأ بـ dr_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادةكائن المسودة مع attachments.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "get_draft",
  "arguments": {
    "draft_id": "dr_123"
  }
}
يغيّر الحالةupdate_draft
PUT /drafts/:draft_id

استبدال محتوى مسودة

استبدل محتوى مسودة ومستلِميها. وهذا استبدال كامل: تُمسح الحقول التي تحذفها، فاقرأ get_draft أولًا وأرسل كل حقل تريد الاحتفاظ به. لا تتأثر المرفقات.

المعلمةالنوعمطلوبالوصف
draft_idstringنعممعرّف المسودة (يبدأ بـ dr_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
fromstringلاعنوان المُرسِل على نطاق موثَّق (قد يكون فارغًا أثناء الصياغة).
tostring[]لاالمستلِمون. (من 0 إلى 100 عنصر)
ccstring[]لامستلِمو النسخة الكربونية. (من 0 إلى 100 عنصر)
bccstring[]لامستلِمو النسخة المخفية. (من 0 إلى 100 عنصر)
subjectstringلاسطر الموضوع. (حتى 998 حرفًا)
htmlstringلانص الرسالة بصيغة HTML.
textstringلانص الرسالة العادي.
reply_to_email_idstringلامعرّف الرسالة التي تردّ عليها هذه المسودة.
thread_idstringلامعرّف السلسلة التي تنتمي إليها هذه المسودة.
القيمة المُعادةكائن المسودة المحدَّث.
التوصيفاتidempotentHint
مثال على معلمات tools/call
{
  "name": "update_draft",
  "arguments": {
    "draft_id": "dr_123",
    "from": "hello@example.com",
    "to": [
      "owner@example.com"
    ],
    "subject": "Invoice (updated)",
    "text": "Attached."
  }
}
مُتلِفةdelete_draft
DELETE /drafts/:draft_id

تجاهل مسودة

DESTRUCTIVE: تجاهل مسودة واحذف مرفقاتها المخزَّنة نهائيًا.

المعلمةالنوعمطلوبالوصف
draft_idstringنعممعرّف المسودة (يبدأ بـ dr_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادة{ok: true}.
التوصيفاتdestructiveHint idempotentHint
مثال على معلمات tools/call
{
  "name": "delete_draft",
  "arguments": {
    "draft_id": "dr_123"
  }
}
يغيّر الحالةupload_attachment
POST /drafts/:draft_id/attachments

رفع مرفق إلى مسودة

ارفع ملفًا واحدًا إلى مسودة (10 ملفات و10 MB إجمالًا كحد أقصى لكل رسالة). قدّم content_base64 أو file_path محليًا. تتطلب المرفقات باقة مدفوعة وقت الإرسال.

قدّم واحدًا على الأقل من: content_base64 أو file_path.

المعلمةالنوعمطلوبالوصف
draft_idstringنعممعرّف المسودة (يبدأ بـ dr_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
filenamestringلااسم الملف الظاهر للمستلِم. الافتراضي هو الاسم الأساسي لـ file_path. (حتى 255 حرفًا)
content_typestringلانوع MIME، مثل application/pdf. الافتراضي application/octet-stream.
content_base64stringلامحتوى الملف بترميز base64 القياسي.
file_pathstringلاالمسار المطلق لملف محلي يمكن لعملية خادم MCP قراءته.
القيمة المُعادة{id: att_…, filename, contentType, sizeBytes, available}.
مثال على معلمات tools/call
{
  "name": "upload_attachment",
  "arguments": {
    "draft_id": "dr_123",
    "filename": "invoice.pdf",
    "content_type": "application/pdf",
    "file_path": "/tmp/invoice.pdf"
  }
}
للقراءة فقطdownload_attachment
GET /attachments/:attachment_id

تنزيل مرفق

نزّل مرفقًا خاصًا (مرسَلًا أو مستلَمًا أو في مسودة). يُعيد المحتوى بترميز base64، أو يكتب الملف عند ضبط save_to_path (ويرفض الكتابة فوق ملف موجود ما لم تكن overwrite مساوية لـ true).

المعلمةالنوعمطلوبالوصف
attachment_idstringنعممعرّف المرفق (يبدأ بـ att_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
save_to_pathstringلامسار محلي مطلق اختياري لكتابة الملف إليه بدل إعادة base64.
overwritebooleanلاالسماح باستبدال ملف موجود في save_to_path. الافتراضي false.
القيمة المُعادة{attachment_id, filename, content_type, size_bytes, content_base64} أو {attachment_id, filename, content_type, size_bytes, saved_to}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "download_attachment",
  "arguments": {
    "attachment_id": "att_123",
    "save_to_path": "/tmp/invoice.pdf"
  }
}
مُتلِفةdelete_attachment
DELETE /attachments/:attachment_id

حذف مرفق

DESTRUCTIVE: احذف نهائيًا مرفقًا مخزَّنًا (مثلًا لإزالة ملف من مسودة قبل الإرسال).

المعلمةالنوعمطلوبالوصف
attachment_idstringنعممعرّف المرفق (يبدأ بـ att_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادة{ok: true}.
التوصيفاتdestructiveHint idempotentHint
مثال على معلمات tools/call
{
  "name": "delete_attachment",
  "arguments": {
    "attachment_id": "att_123"
  }
}

القوالب المستضافة

للقراءة فقطlist_templates
GET /templates

عرض القوالب المستضافة

اعرض قوالب البريد المستضافة مع حالة النشر والاستخدام. مقسَّمة إلى صفحات: تتضمن النتيجة pagination {offset, limit, returned, total?, has_more, next_offset}.

المعلمةالنوعمطلوبالوصف
lifecyclestringلاactive (الافتراضي) أو archived أو all. (إحدى القيم active أو archived أو all)
querystringلابحث بالاسم أو المفتاح. (حتى 120 حرفًا)
limitintegerلاحجم الصفحة. الافتراضي 50. (الافتراضي 50؛ من 1 إلى 200)
offsetintegerلاعدد السجلات المراد تخطيها. استخدم pagination.next_offset من الصفحة السابقة. (الافتراضي 0؛ من 0 فصاعدًا)
القيمة المُعادة{data: [القوالب], count, pagination}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_templates",
  "arguments": {
    "lifecycle": "active"
  }
}
يغيّر الحالةcreate_template
POST /templates

إنشاء قالب مستضاف

أنشئ قالبًا بمسودة قابلة للتعديل، ويمكن أن يبدأ اختياريًا من قالب ابتدائي (welcome أو reset أو receipt أو blank). انشره قبل الإرسال بالمفتاح.

المعلمةالنوعمطلوبالوصف
namestringنعماسم مقروء للبشر. (حتى 120 حرفًا)
keystringلامفتاح إرسال ثابت: أحرف لاتينية صغيرة وأرقام وواصلات، ويبدأ بحرف (من 2 إلى 64 حرفًا). يُشتق من الاسم عند حذفه.
starterstringلامحتوى ابتدائي. (إحدى القيم blank أو welcome أو reset أو receipt)
القيمة المُعادة{template, draft, activeVersion, versions, usage}.
مثال على معلمات tools/call
{
  "name": "create_template",
  "arguments": {
    "name": "Account welcome",
    "key": "account-welcome",
    "starter": "welcome"
  }
}
للقراءة فقطget_template
GET /templates/:template_id

استرجاع قالب

استرجع المسودة الحالية للقالب (مع revision) والإصدار المنشور النشط وسجل الإصدارات والاستخدام. يقبل المعرّف أو المفتاح.

المعلمةالنوعمطلوبالوصف
template_idstringنعممعرّف القالب (tmpl_…) أو مفتاحه. (حتى 128 حرفًا)
القيمة المُعادة{template, draft: {id, revision, subjectTemplate, htmlTemplate, textTemplate, variables, sampleData, …} | null, activeVersion, versions, usage}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "get_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
يغيّر الحالةupdate_template_draft
PUT /templates/:template_id/draft

حفظ مسودة قالب

احفظ المسودة القابلة للتعديل للقالب باستخدام التزامن المتفائل: مرّر revision الحالية من get_template (يعني 409 أن شخصًا آخر حفظ أولًا؛ فأعد القراءة وأعد المحاولة). وهذا استبدال كامل لمحتوى المسودة: تُمسح الحقول المحذوفة، فأرسل كل حقل تريد الاحتفاظ به. استخدم العناصر النائبة {{variable}}.

المعلمةالنوعمطلوبالوصف
template_idstringنعممعرّف القالب أو مفتاحه. (حتى 128 حرفًا)
revisionintegerنعممراجعة المسودة الحالية من get_template. (من 1 فصاعدًا)
namestringلااسم القالب. (حتى 120 حرفًا)
subject_templatestringلاالموضوع مع عناصر نائبة. (حتى 998 حرفًا)
preheader_templatestringلانص المعاينة. (حتى 240 حرفًا)
html_templatestringلانص HTML مع عناصر نائبة.
text_templatestringلاالنص العادي مع عناصر نائبة.
fromstringلاالمُرسِل الافتراضي لعمليات إرسال هذا القالب.
reply_tostringلاReply-To الافتراضي.
variablesobject[]لاعقد المتغيّرات المُنمَّطة. كل عنصر: {key (أحرف صغيرة/شرطات سفلية), label, type: text|number|url|boolean, required (الافتراضي true), fallback, description}.
variables[].keystringنعم
variables[].labelstringلا
variables[].typestringلا(إحدى القيم text أو number أو url أو boolean)
variables[].requiredbooleanلا
variables[].fallbackanyلا
variables[].descriptionstringلا
sample_dataobjectلاقيم عيّنة تُستخدم في المعاينات والاختبارات.
القيمة المُعادة{template, draft: {revision: next}, validation: {valid, findings}}.
مثال على معلمات tools/call
{
  "name": "update_template_draft",
  "arguments": {
    "template_id": "account-welcome",
    "revision": 3,
    "name": "Account welcome",
    "subject_template": "Welcome, {{first_name}}",
    "text_template": "Hi {{first_name}}",
    "variables": [
      {
        "key": "first_name",
        "type": "text",
        "required": true
      }
    ],
    "sample_data": {
      "first_name": "Asha"
    }
  }
}
يغيّر الحالةcreate_template_draft
POST /templates/:template_id/draft

بدء مسودة جديدة من الإصدار المنشور

أنشئ مسودة جديدة قابلة للتعديل منسوخة من الإصدار المنشور الحالي (409 إذا كانت هناك مسودة قائمة أو لم يُنشر شيء).

المعلمةالنوعمطلوبالوصف
template_idstringنعممعرّف القالب أو مفتاحه. (حتى 128 حرفًا)
القيمة المُعادة{draft}.
مثال على معلمات tools/call
{
  "name": "create_template_draft",
  "arguments": {
    "template_id": "account-welcome"
  }
}
للقراءة فقطrender_template
POST /templates/:template_id/render

توليد معاينة قالب

ولّد المخرجات الدقيقة كما يُنتجها الخادم (subject وhtml وtext) للمسودة أو للإصدار المنشور أو لإصدار محدد بالبيانات المعطاة. لا يرسل. يُعيد 422 مع findings عندما تخالف البيانات عقد المتغيّرات.

المعلمةالنوعمطلوبالوصف
template_idstringنعممعرّف القالب أو مفتاحه. (حتى 128 حرفًا)
version_idstringلامعرّف إصدار اختياري؛ الافتراضي المسودة، ثم الإصدار المنشور.
dataobjectلاقيم المتغيّرات؛ والافتراضي بيانات العيّنة للإصدار.
القيمة المُعادة{subject, html, text, preheader, versionId, versionNumber, isDraft, findings}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "render_template",
  "arguments": {
    "template_id": "account-welcome",
    "data": {
      "first_name": "Asha"
    }
  }
}
يرسل بريدًا حقيقيًاsend_template_test
POST /templates/:template_id/test

إرسال رسالة اختبار للقالب

SENDS REAL EMAIL. أرسل لقطة للمسودة (أو لإصدار معيّن) مسبوقة بـ [Test] إلى المستلِمين المحددين. تُحتسب ضمن الاستخدام؛ ولا يمكن لمساحات العمل التجريبية الإرسال إلا إلى البريد الإلكتروني للحساب أو إلى عنوان محاكاة في SES.

المعلمةالنوعمطلوبالوصف
template_idstringنعممعرّف القالب أو مفتاحه. (حتى 128 حرفًا)
tostring[]نعممستلِمو الاختبار. (من 1 إلى 100 عنصر)
fromstringلاالمُرسِل على نطاق موثَّق؛ والافتراضي From الخاص بالقالب.
version_idstringلامعرّف إصدار اختياري.
dataobjectلاقيم المتغيّرات؛ والافتراضي بيانات العيّنة.
القيمة المُعادة{id: em_…, providerMessageId, threadId, isTest: true}.
مثال على معلمات tools/call
{
  "name": "send_template_test",
  "arguments": {
    "template_id": "account-welcome",
    "to": [
      "owner@example.com"
    ]
  }
}
يغيّر الحالةpublish_template
POST /templates/:template_id/publish

نشر إصدار قالب

انشر المسودة الحالية بوصفها إصدارًا غير قابل للتعديل ستستخدمه send_email مع template.key. يخفق مع نتائج 422 عند أخطاء التحقق، أو 409 إذا كان النشر سيخالف عقد المتغيّرات الحي لقالب مستخدم أصلًا في بيئة الإنتاج.

المعلمةالنوعمطلوبالوصف
template_idstringنعممعرّف القالب أو مفتاحه. (حتى 128 حرفًا)
القيمة المُعادة{template, published}.
مثال على معلمات tools/call
{
  "name": "publish_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
يغيّر الحالةarchive_template
POST /templates/:template_id/archive

أرشفة قالب

أوقف عمليات الإرسال الجديدة التي تستخدم هذا القالب (يُحتفظ بالسجل؛ ويمكن التراجع بـ restore_template). وأي تكامل يرسل بهذا المفتاح سيبدأ بالإخفاق بالرمز 404.

المعلمةالنوعمطلوبالوصف
template_idstringنعممعرّف القالب أو مفتاحه. (حتى 128 حرفًا)
القيمة المُعادة{template}.
التوصيفاتidempotentHint
مثال على معلمات tools/call
{
  "name": "archive_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
يغيّر الحالةrestore_template
POST /templates/:template_id/restore

استعادة قالب مؤرشف

أعِد تفعيل قالب مؤرشف.

المعلمةالنوعمطلوبالوصف
template_idstringنعممعرّف القالب أو مفتاحه. (حتى 128 حرفًا)
القيمة المُعادة{template}.
التوصيفاتidempotentHint
مثال على معلمات tools/call
{
  "name": "restore_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}

النطاقات وDNS

للقراءة فقطlist_domains
GET /domains

عرض النطاقات

اعرض نطاقات الإرسال مع setup_status إجمالية (verified | checking | pending) وحالة DNS لكل سجل وحالة الوارد. قد تكون بطيئة: تُعاد مراجعة النطاقات غير الموثَّقة مباشرةً. مقسَّمة إلى صفحات: تتضمن النتيجة pagination {offset, limit, returned, total?, has_more, next_offset}.

المعلمةالنوعمطلوبالوصف
limitintegerلاحجم الصفحة. الافتراضي 50. (الافتراضي 50؛ من 1 إلى 200)
offsetintegerلاعدد السجلات المراد تخطيها. استخدم pagination.next_offset من الصفحة السابقة. (الافتراضي 0؛ من 0 فصاعدًا)
القيمة المُعادة{data: [النطاقات مع سجلاتها], count, pagination}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_domains",
  "arguments": {}
}
للقراءة فقطget_domain
GET /domains/:domain_id

استرجاع تفاصيل إعداد النطاق

استرجع نطاقًا واحدًا مع سجلات DNS الدقيقة المطلوب نشرها (النوع والاسم والقيمة)، والحالة الحية لكل سجل من محلّلَي DNS عامّين، وdns_issues مع الإصلاحات، وحالة الوارد.

المعلمةالنوعمطلوبالوصف
domain_idstringنعممعرّف النطاق (يبدأ بـ dom_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادة{id, name, status, setup_status, dns_propagating, records: [{type, name, value, verified, dns_state}], dns_issues: [{code, message, …}], inbound_domain, inbound_status}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "get_domain",
  "arguments": {
    "domain_id": "dom_123"
  }
}
يغيّر الحالةadd_domain
POST /domains

إضافة نطاق إرسال

سجّل نطاقًا تتحكم فيه للإرسال. يُعيد سجلات DNS (سجلات SES Easy DKIM من نوع CNAME) التي يجب على المالك نشرها. لا يغيّر DNS بنفسه. ويُحتسب ضمن حد النطاقات في الباقة.

المعلمةالنوعمطلوبالوصف
namestringنعماسم نطاق مجرد، مثل example.com أو mail.example.com. (حتى 253 حرفًا)
default_fromstringلاعنوان مُرسِل افتراضي اختياري على هذا النطاق.
القيمة المُعادة{id: dom_…, name, status: pending, records: [...], ses: {configured}}.
مثال على معلمات tools/call
{
  "name": "add_domain",
  "arguments": {
    "name": "example.com"
  }
}
يغيّر الحالةverify_domain
POST /domains/:domain_id/verify

توثيق نطاق

شغّل فحص تحقق حيًا من SES/DNS الآن. آمن للتكرار؛ استعلم دوريًا كل 30 إلى 60 ثانية بعد تغييرات DNS (قد يستغرق الانتشار من دقائق إلى ساعات). يُسمح بالإرسال بمجرد أن تصبح الحالة verified.

المعلمةالنوعمطلوبالوصف
domain_idstringنعممعرّف النطاق (يبدأ بـ dom_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادة{domain, checks: {ses, dkim, dkim_status}, status: verified|pending}.
التوصيفاتidempotentHint
مثال على معلمات tools/call
{
  "name": "verify_domain",
  "arguments": {
    "domain_id": "dom_123"
  }
}
مُتلِفةdelete_domain
DELETE /domains/:domain_id

حذف نطاق

DESTRUCTIVE: أزل النطاق من مساحة العمل، بما في ذلك مسار استقبال الوارد الخاص به. وتخفق عمليات الإرسال منه فورًا بعد ذلك. لا يحذف سجلات DNS لدى مزوّد DNS الخاص بك.

المعلمةالنوعمطلوبالوصف
domain_idstringنعممعرّف النطاق (يبدأ بـ dom_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادة{ok: true}.
التوصيفاتdestructiveHint idempotentHint
مثال على معلمات tools/call
{
  "name": "delete_domain",
  "arguments": {
    "domain_id": "dom_123"
  }
}
للقراءة فقطget_dns_provider
GET /dns/provider

اكتشاف مزوّد DNS ومضيفات السجلات

اكتشف مزوّد DNS المعتمد للنطاق وأعِد المضيف النسبي الذي تكتبه لدى ذلك المزوّد لكل سجل، وسجل DMARC الموصى به، وإرشادات MX للوارد، وما إذا كان الإعداد بنقرة واحدة (Domain Connect) متاحًا.

المعلمةالنوعمطلوبالوصف
domain_idstringنعممعرّف النطاق (يبدأ بـ dom_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادة{detectionStatus, detected, zone, nameservers, recordHosts: {recordId: host}, inbound, recommendations, authentication, providers: {domainConnect: {available, providerName}}}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "get_dns_provider",
  "arguments": {
    "domain_id": "dom_123"
  }
}

البريد الوارد

يغيّر الحالةsetup_inbound
POST /domains/:domain_id/inbound/setup

تفعيل استقبال الوارد لنطاق

هيّئ استقبال الوارد في SES لنطاق موثَّق. يستخدم النطاق الجذر عندما لا يكون له MX متعارض، وإلا يستخدم inbound.<domain>. يُعيد سجل MX الذي يجب على المالك نشره؛ ولا يعدّل DNS.

المعلمةالنوعمطلوبالوصف
domain_idstringنعممعرّف النطاق (يبدأ بـ dom_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادة{domain: نطاق الاستقبال, status: dns_pending|ready, record: {type: MX, name, value}}.
التوصيفاتidempotentHint
مثال على معلمات tools/call
{
  "name": "setup_inbound",
  "arguments": {
    "domain_id": "dom_123"
  }
}
يغيّر الحالةverify_inbound
POST /domains/:domain_id/inbound/verify

التحقق من MX الوارد

أعد فحص سجل MX الوارد. تصبح الحالة ready عندما يراه محلّلا DNS العامّان كلاهما.

المعلمةالنوعمطلوبالوصف
domain_idstringنعممعرّف النطاق (يبدأ بـ dom_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادة{domain, status: ready|dns_pending|propagating|checking, record}.
التوصيفاتidempotentHint
مثال على معلمات tools/call
{
  "name": "verify_inbound",
  "arguments": {
    "domain_id": "dom_123"
  }
}
للقراءة فقطlist_inboxes
GET /inboxes

عرض عناوين الوارد

اعرض عناوين الاستقبال، ولنطاق واحد اختياريًا. مقسَّمة إلى صفحات: تتضمن النتيجة pagination {offset, limit, returned, total?, has_more, next_offset}.

المعلمةالنوعمطلوبالوصف
domain_idstringلاعامل تصفية اختياري بمعرّف النطاق.
limitintegerلاحجم الصفحة. الافتراضي 50. (الافتراضي 50؛ من 1 إلى 200)
offsetintegerلاعدد السجلات المراد تخطيها. استخدم pagination.next_offset من الصفحة السابقة. (الافتراضي 0؛ من 0 فصاعدًا)
القيمة المُعادة{data: [{id, address, name, status, domainId}], count, pagination}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_inboxes",
  "arguments": {
    "domain_id": "dom_123"
  }
}
للقراءة فقطget_inbox
GET /inboxes/:inbox_id

استرجاع صندوق بريد

استرجع عنوان وارد واحدًا.

المعلمةالنوعمطلوبالوصف
inbox_idstringنعممعرّف صندوق البريد (يبدأ بـ inb_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادةكائن صندوق البريد.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "get_inbox",
  "arguments": {
    "inbox_id": "inb_123"
  }
}
يغيّر الحالةcreate_inbox
POST /inboxes

إنشاء عنوان وارد

أنشئ عنوانًا مثل support@<receiving domain> على نطاق حالة الوارد فيه ready (شغّل setup_inbound وverify_inbound أولًا). يظهر البريد المستلَم في list_emails مع الاتجاه in.

المعلمةالنوعمطلوبالوصف
domain_idstringنعممعرّف النطاق (يبدأ بـ dom_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
local_partstringنعمالجزء الذي يسبق @، مثل support. (حتى 64 حرفًا)
namestringلااسم عرض اختياري.
القيمة المُعادة{id: inb_…, address, name, status: active}.
مثال على معلمات tools/call
{
  "name": "create_inbox",
  "arguments": {
    "domain_id": "dom_123",
    "local_part": "support",
    "name": "Support"
  }
}
يغيّر الحالةupdate_inbox
PATCH /inboxes/:inbox_id

إعادة تسمية صندوق بريد أو تفعيله أو تعطيله

أعد تسمية صندوق بريد أو اضبط حالته على active / disabled.

المعلمةالنوعمطلوبالوصف
inbox_idstringنعممعرّف صندوق البريد (يبدأ بـ inb_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
namestringلااسم العرض الجديد.
statusstringلاالحالة الجديدة. (إحدى القيم active أو disabled)
القيمة المُعادةصندوق البريد المحدَّث.
التوصيفاتidempotentHint
مثال على معلمات tools/call
{
  "name": "update_inbox",
  "arguments": {
    "inbox_id": "inb_123",
    "status": "disabled"
  }
}
يرسل بريدًا حقيقيًاset_inbox_forwarding
PUT /inboxes/:inbox_id/forwarding

إعادة توجيه صندوق بريد إلى عنوان آخر

SENDS REAL EMAIL عند إعادة التوجيه إلى شخص غير مالك الحساب: يحدد الوجهة التي يُعاد توجيه البريد المستلَم في صندوق البريد إليها. يُفعَّل عنوان المالك نفسه فورًا؛ أما أي عنوان آخر فيتلقى رسالة تأكيد وتبقى إعادة التوجيه pending إلى أن يؤكدها أحد هناك. مرّر forward_to: null لإيقاف إعادة التوجيه. تصدر النسخ المُعاد توجيهها من عنوان صندوق البريد مع المُرسِل الأصلي في Reply-To.

المعلمةالنوعمطلوبالوصف
inbox_idstringنعممعرّف صندوق البريد (يبدأ بـ inb_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
forward_tostring,nullنعمعنوان البريد الإلكتروني المستهدف لإعادة التوجيه، أو null لإيقاف إعادة التوجيه. (حتى 254 حرفًا)
القيمة المُعادةصندوق البريد مع forwardTo وforwardStatus (off أو pending أو active).
التوصيفاتidempotentHint
مثال على معلمات tools/call
{
  "name": "set_inbox_forwarding",
  "arguments": {
    "inbox_id": "inb_123",
    "forward_to": "team@example.net"
  }
}
مُتلِفةdelete_inbox
DELETE /inboxes/:inbox_id

حذف صندوق بريد

DESTRUCTIVE: احذف عنوان وارد. يُحتفظ بالبريد المستلَم أصلًا؛ ولا يُفرز البريد الجديد المرسَل إلى العنوان إليه بعد ذلك.

المعلمةالنوعمطلوبالوصف
inbox_idstringنعممعرّف صندوق البريد (يبدأ بـ inb_)، كما تُعيده أداة عرض أو إنشاء. (حتى 128 حرفًا)
القيمة المُعادة{ok: true}.
التوصيفاتdestructiveHint idempotentHint
مثال على معلمات tools/call
{
  "name": "delete_inbox",
  "arguments": {
    "inbox_id": "inb_123"
  }
}

قابلية التسليم والارتدادات وقوائم المنع

للقراءة فقطdeliverability_stats
GET /deliverability/stats

الحصول على إحصاءات التسليم لآخر 30 يومًا

إجماليات آخر 30 يومًا على مستوى مساحة العمل: sent وdelivery وbounce وcomplaint وreject وopen وclick وdeliveryRate (%).

لا توجد معلمات.

القيمة المُعادة{window: 30d, sent, delivery, bounce, complaint, reject, open, click, deliveryRate}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "deliverability_stats",
  "arguments": {}
}
للقراءة فقطlist_sender_reputation
GET /deliverability/reputation

عرض سمعة المُرسِل

حالة السمعة لكل عنوان From بعينه: active أو throttled (حد يومي أقل) أو paused (تُعيد عمليات الإرسال 423)، مع السبب والحد اليومي. افحصها عندما تخفق عمليات الإرسال بالرمز 423 أو 429. مقسَّمة إلى صفحات: تتضمن النتيجة pagination {offset, limit, returned, total?, has_more, next_offset}.

المعلمةالنوعمطلوبالوصف
limitintegerلاحجم الصفحة. الافتراضي 50. (الافتراضي 50؛ من 1 إلى 200)
offsetintegerلاعدد السجلات المراد تخطيها. استخدم pagination.next_offset من الصفحة السابقة. (الافتراضي 0؛ من 0 فصاعدًا)
القيمة المُعادة{data: [{sender, status, dailyLimit, reason, cleanSince, warnedAt, pausedAt, evaluatedAt}], count, pagination}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_sender_reputation",
  "arguments": {}
}
للقراءة فقطlist_suppressions
GET /suppressions

عرض عناصر المنع

قائمة المنع في مساحة العمل: المستلِمون المحظورون بعد ارتداد دائم أو شكوى بريد مزعج. تخفق عمليات الإرسال إليهم بالرمز 422. مقسَّمة إلى صفحات: تتضمن النتيجة pagination {offset, limit, returned, total?, has_more, next_offset}.

المعلمةالنوعمطلوبالوصف
limitintegerلاحجم الصفحة. الافتراضي 50. (الافتراضي 50؛ من 1 إلى 200)
offsetintegerلاعدد السجلات المراد تخطيها. استخدم pagination.next_offset من الصفحة السابقة. (الافتراضي 0؛ من 0 فصاعدًا)
القيمة المُعادة{data: [{email, reason, detail, created_at}], count, pagination}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_suppressions",
  "arguments": {}
}
مُتلِفةremove_suppression
DELETE /suppressions/:email

إزالة عنصر منع ناتج عن ارتداد

DESTRUCTIVE (يُضعف حاجز أمان): أزل عنصر منع ناتجًا عن ارتداد ليصبح بالإمكان مراسلة العنوان مجددًا. لا تفعل ذلك إلا عندما يؤكد الإنسان أن العنوان صار صالحًا. لا يمكن إزالة عناصر المنع الناتجة عن الشكاوى (409).

المعلمةالنوعمطلوبالوصف
emailstringنعمعنوان المستلِم المدرج في قائمة المنع. (حتى 320 حرفًا)
القيمة المُعادة{ok: true}.
التوصيفاتdestructiveHint idempotentHint
مثال على معلمات tools/call
{
  "name": "remove_suppression",
  "arguments": {
    "email": "fixed-mailbox@example.net"
  }
}
للقراءة فقطlist_blocked_recipients
GET /blocked-recipients

عرض المستلِمين المحظورين

كل مستلِم سترفضه SendHQ: الارتدادات والشكاوى وعمليات إلغاء الاشتراك التسويقية على مستوى النطاق، مع ملخص حسب النوع. تقرأ حتى أحدث 500. مقسَّمة إلى صفحات: تتضمن النتيجة pagination {offset, limit, returned, total?, has_more, next_offset}.

المعلمةالنوعمطلوبالوصف
limitintegerلاحجم الصفحة. الافتراضي 50. (الافتراضي 50؛ من 1 إلى 200)
offsetintegerلاعدد السجلات المراد تخطيها. استخدم pagination.next_offset من الصفحة السابقة. (الافتراضي 0؛ من 0 فصاعدًا)
القيمة المُعادة{data: [{email, domain, kind: bounce|complaint|unsubscribe, reason, detail, source, status, created_at}], count, summary: {total, bounce, complaint, unsubscribe}, pagination}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_blocked_recipients",
  "arguments": {}
}

الحساب والاستخدام والتحليلات والمفاتيح

للقراءة فقطget_account
GET /account

الحصول على الحساب والاستخدام والفوترة

البريد الإلكتروني لمالك الحساب، والباقة/مستوى الوصول، وعمليات تسليم المستلِمين المستخدمة في الفترة الحالية مقابل الحصة، والنطاقات المستخدمة مقابل الحد، ونقل المرفقات، وملخص السمعة، وحالة الاشتراك، والباقات المنشورة، وأعداد مساحة العمل. استخدمها لمعرفة الحصة المتبقية أو الجهة التي يمكن للفترة التجريبية التسليم إليها (البريد الإلكتروني للحساب).

لا توجد معلمات.

القيمة المُعادة{user: {email, …}, usage: {domainsUsed, domainLimit, recipientDeliveries, emailQuotaMonth, attachmentBytes, attachmentByteLimit, periodKey}, access: {tier, planCode}, reputation, infrastructure, billing: {status, subscriptions, …}, plans, workspace: {mailer, stats}}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "get_account",
  "arguments": {}
}
للقراءة فقطget_analytics
GET /analytics

الحصول على تحليلات الإرسال

تحليلات لوحة التحكم لآخر 7 أو 30 أو 90 يومًا: إجماليات المرسل/المستلَم/المسلَّم/المرتد/المحظور/المفتوح/المنقور/الشكاوى، وجدول زمني يومي، وأكثر نطاقات الإرسال استخدامًا، وأكثر الموضوعات تكرارًا.

المعلمةالنوعمطلوبالوصف
daysintegerلاالنافذة بالأيام: 7 أو 30 (الافتراضي) أو 90. (إحدى القيم 7 أو 30 أو 90)
القيمة المُعادة{window, days, metrics, timeline: [{day, sent, received}], domains, topContent}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "get_analytics",
  "arguments": {
    "days": 30
  }
}
للقراءة فقطlist_api_keys
GET /keys

عرض البيانات الوصفية لمفاتيح API

اعرض أسماء مفاتيح API والبادئات غير السرية وأوقات آخر استخدام. للقراءة فقط: لا يستطيع خادم MCP هذا إنشاء المفاتيح أو تدويرها أو إلغاءها؛ يفعل ذلك إنسان في لوحة التحكم. مقسَّمة إلى صفحات: تتضمن النتيجة pagination {offset, limit, returned, total?, has_more, next_offset}.

المعلمةالنوعمطلوبالوصف
limitintegerلاحجم الصفحة. الافتراضي 50. (الافتراضي 50؛ من 1 إلى 200)
offsetintegerلاعدد السجلات المراد تخطيها. استخدم pagination.next_offset من الصفحة السابقة. (الافتراضي 0؛ من 0 فصاعدًا)
القيمة المُعادة{data: [{id, name, prefix, lastUsedAt, createdAt}], count, pagination}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "list_api_keys",
  "arguments": {}
}
للقراءة فقطget_service_health
GET /health

فحص سلامة خدمة SendHQ

تحقق من أن SendHQ API تعمل ومن مزوّد البريد النشط. لا تحتاج إلى مفتاح API صالح.

لا توجد معلمات.

القيمة المُعادة{ok, service, mailer}.
التوصيفاتreadOnlyHint idempotentHint
مثال على معلمات tools/call
{
  "name": "get_service_health",
  "arguments": {}
}

جرد تغطية API

كل عملية في API العامة والأداة التي تغطيها. كل ما يمكن للمستخدم فعله في لوحة التحكم ولديه API مغطًّى؛ أما الاستثناءات أدناه فمقصودة.

نقطة النهايةالأداةملاحظات
POST /emailssend_emailإرسال رسالة واحدة
POST /emails/batchsend_batchإرسال ما يصل إلى 100 رسالة مخصّصة
GET /emailslist_emailsعرض الرسائل المرسلة والمستلَمة
GET /emails/:idget_emailاسترجاع رسالة ومرفقاتها
PATCH /emails/:idmark_emailتحديث حالة القراءة أو الأرشفة أو التصنيف كبريد مزعج أو الفئة أو الأهمية
POST /emails/:id/labelslabel_emailإضافة تصنيفات إلى رسالة أو إزالتها منها
DELETE /emails/:iddelete_emailحذف رسالة محفوظة
GET /emails/:id/eventslist_email_eventsعرض أحداث التسليم لرسالة
GET /threads/:idget_threadاسترجاع محادثة بترتيب زمني
GET /labelslist_labelsعرض التصنيفات مع أعداد الرسائل وقواعد الفرز
POST /labelscreate_labelإنشاء تصنيف، مع قواعد فرز تلقائي اختيارية
GET /labels/:idget_labelاسترجاع تصنيف بمعرّفه أو اسمه
PATCH /labels/:idupdate_labelإعادة تسمية تصنيف أو تغيير لونه أو تحويله إلى مجموعة
DELETE /labels/:iddelete_labelحذف تصنيف دون حذف رسائله
POST /labels/:id/rulescreate_label_ruleإضافة قاعدة فرز تلقائي إلى تصنيف
DELETE /labels/:id/rules/:rule_iddelete_label_ruleحذف قاعدة فرز تلقائي
POST /draftscreate_draftإنشاء مسودة في المحرّر
GET /draftslist_draftsعرض مسودات المحرّر
GET /drafts/:idget_draftاسترجاع مسودة ومرفقاتها
PUT /drafts/:idupdate_draftاستبدال محتوى مسودة
DELETE /drafts/:iddelete_draftتجاهل مسودة
POST /drafts/:id/attachmentsupload_attachmentرفع مرفق إلى مسودة
GET /attachments/:iddownload_attachmentتنزيل مرفق خاص
DELETE /attachments/:iddelete_attachmentحذف مرفق خاص
GET /sending-identitieslist_sending_identitiesعرض هويات الإرسال الموثَّقة
GET /templateslist_templatesعرض القوالب المستضافة
POST /templatescreate_templateإنشاء قالب مستضاف
GET /templates/:idget_templateاسترجاع المسودات والإصدارات المنشورة والاستخدام
PUT /templates/:id/draftupdate_template_draftالحفظ التلقائي لمسودة قالب
POST /templates/:id/draftcreate_template_draftإنشاء مسودة جديدة من الإصدار المنشور
POST /templates/:id/renderrender_templateتوليد المخرجات الدقيقة كما يُنتجها الخادم
POST /templates/:id/testsend_template_testإرسال لقطة اختبارية
POST /templates/:id/publishpublish_templateنشر إصدار قالب غير قابل للتعديل
POST /templates/:id/archivearchive_templateأرشفة قالب
POST /templates/:id/restorerestore_templateاستعادة قالب مؤرشف
POST /domainsadd_domainإضافة نطاق إرسال
GET /domainslist_domainsعرض النطاقات وحالة DNS المخزَّنة مؤقتًا
GET /domains/:idget_domainاسترجاع تفاصيل إعداد النطاق
POST /domains/:id/verifyverify_domainتحديث حالة التحقق في SES وDNS
POST /domains/:id/inbound/setupsetup_inboundتهيئة استقبال الوارد في SES
POST /domains/:id/inbound/verifyverify_inboundالتحقق من توجيه MX الوارد
DELETE /domains/:iddelete_domainحذف نطاق
GET /dns/providerget_dns_providerاكتشاف مزوّد DNS المعتمد ومضيفات السجلات النسبية
GET /dns/domain-connect/connectget_domain_connect_linkإنشاء رابط موافقة Domain Connect لإعداد DNS بنقرة واحدة
POST /inboxescreate_inboxإنشاء عنوان وارد
GET /inboxeslist_inboxesعرض عناوين الوارد
GET /inboxes/:idget_inboxاسترجاع عنوان وارد
PATCH /inboxes/:idupdate_inboxإعادة تسمية صندوق بريد أو تفعيله أو تعطيله
PUT /inboxes/:id/forwardingset_inbox_forwardingإعادة توجيه البريد المستلَم في صندوق بريد إلى عنوان آخر
DELETE /inboxes/:iddelete_inboxحذف صندوق بريد مع الاحتفاظ بالرسائل
GET /deliverability/statsdeliverability_statsاسترجاع إحصاءات التسليم لآخر 30 يومًا
GET /deliverability/reputationlist_sender_reputationعرض حالة السمعة حسب هوية المُرسِل بدقة
GET /suppressionslist_suppressionsعرض عناصر قائمة المنع في مساحة العمل
DELETE /suppressions/:emailremove_suppressionإزالة عنصر منع ناتج عن ارتداد مؤهَّل للإزالة
GET /blocked-recipientslist_blocked_recipientsعرض الارتدادات والشكاوى وطلبات إلغاء الاشتراك
GET /accountget_accountاسترجاع الحساب والاستخدام وحالة الفوترة وأعداد مساحة العمل بمفتاح API
GET /analyticsget_analyticsاسترجاع تحليلات الإرسال في لوحة التحكم لمدة 7 أو 30 أو 90 يومًا
GET /profileget_accountالنظير الخاص بالجلسات فقط لـ GET /account؛ ويقرأ خادم MCP مسار مفتاح API.
POST /billing/checkoutغير مكشوفةتغييرات الفوترة مخصصة للجلسات فقط بحكم التصميم وتتطلب مالك الحساب في لوحة التحكم. يمكن قراءة حالة الفوترة بـ get_account.
POST /billing/cancelغير مكشوفةتغييرات الفوترة مخصصة للجلسات فقط بحكم التصميم وتتطلب مالك الحساب في لوحة التحكم. يمكن قراءة حالة الفوترة بـ get_account.
POST /keysغير مكشوفةمستبعَدة عمدًا: يجب ألا يُنشئ الوكيل بيانات اعتماد أو يتلفها. يدير إنسان المفاتيح في لوحة التحكم.
GET /keyslist_api_keysعرض البيانات الوصفية لمفاتيح API
DELETE /keys/:idغير مكشوفةمستبعَدة عمدًا: يجب ألا يُنشئ الوكيل بيانات اعتماد أو يتلفها. يدير إنسان المفاتيح في لوحة التحكم.

غير متاحة عمدًا

القدرةنقاط النهايةالسبب
إنشاء مفاتيح API أو تدويرها أو إلغاؤها أو حذفهاPOST /keys, DELETE /keys/:idمستبعَدة عمدًا: يجب ألا يُنشئ الوكيل بيانات اعتماد أو يتلفها. يدير إنسان المفاتيح في لوحة التحكم.
بدء عملية دفع أو إلغاء اشتراكPOST /billing/checkout, POST /billing/cancelتغييرات الفوترة مخصصة للجلسات فقط بحكم التصميم وتتطلب مالك الحساب في لوحة التحكم. يمكن قراءة حالة الفوترة بـ get_account.
إعداد DNS بنقرة واحدة عبر Cloudflare (OAuth)GET /api/dns/cloudflare/connectيتطلب جلسة متصفح تفاعلية وموافقة OAuth من Cloudflare. استخدم سجلات get_domain أو مضيفات get_dns_provider أو get_domain_connect_link بدلًا من ذلك.
التسجيل وتسجيل الدخول وتسجيل الخروج وربط حساب Google/api/auth/*مصادقة بشرية عبر المتصفح؛ ويصادق خادم MCP بمفتاح API.
نموذج الاتصال بالدعمPOST /api/contactنموذج عام في موقع التسويق للبشر، وليس عملية في مساحة العمل.

الفهرس المقروء آليًا: /docs/mcp/tools.json (المخططات والتوصيفات وربط نقاط النهاية والاستثناءات). نسخة Markdown من هذه الصفحة: /docs/mcp.md. وعند تثبيت CLI، تطبع sendhq commands --format json الفهرس نفسه.