افتح صندوق بريد

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

صندوق بريد لـ Claude Code وCursor وWindsurf عبر MCP

يتوقف كل وكيل برمجة عند الجملة نفسها: «تحقق من بريدك الإلكتروني للحصول على الرمز». والحل هو خادم MCP واحد، ورابط واحد، بلا مفتاح وبلا حساب — لكن الإعداد يختلف في كل عميل. وهذا هو الإعداد لـClaude Code وClaude Desktop وCursor وWindsurf وVS Code وCodex CLI وGemini CLI، مع استدعاءات الأدوات الأربعة التي تُتمّ عملية تسجيل، والفقرة التي تُضاف إلى تعليمات الوكيل نفسه.

  • مبتدئ
  • 14 دقيقةً للقراءة
حاسوب محمول رمادي مفتوح، مظروف أزرق موصول بجانبه كذاكرة USB، وقابس أزرق مستقر في مقبس رمادي في المقدمة

خادم واحد، سبعة عملاء

الخادم نقطة نهاية HTTPS واحدة تتحدث بروتوكول Model Context Protocol عبر Streamable HTTP: طلب POST واحد يحمل JSON-RPC، ورد JSON واحد، بلا أي تدفق مفتوح. لا شيء يجب تثبيته، ولا شيء يجب تشغيله محليًا، ولا شيء يستلزم التسجيل من أجله على النطاقات العامة — فالرابط هو الإعداد كله:

نقطة نهاية MCPhttps://grabmail.io/mcp

يقبل كل عميل MCP خادم HTTP بعيدًا، لكن كل واحد منها يحفظ إعداده في ملف مختلف باسم مفتاح مختلف قليلاً. وتعطي الأقسام أدناه السطر الدقيق لكل واحد منها. والصيغ هنا هي المعتمدة حتى سبتمبر 2026؛ ووثائق كل عميل هي المرجع إن كان قد تغيّر شيء منذ ذلك الحين.

تحقق من أنه يستجيب، من الطرفية

قبل التعامل مع أي عميل، تأكد من أن الخادم موجود وانظر ما الذي يقدمه. ولأن وسيلة النقل هي HTTP عادي، يكفي أمر curl واحد:

سرد الأدوات
$ curl -s -X POST https://grabmail.io/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq '.result.tools[].name'
ما الذي يعود
"create_inbox"
"list_domains"
"list_messages"
"read_message"
"wait_for_message"
"delete_message"

إذا نجح هذا، فسيعمل كل عميل أدناه أيضًا، وأي عميل يفشل بعد ذلك يكون العطل فيه مشكلة إعداد في العميل نفسه لا مشكلة في الخادم. وإن لم ينجح، تحقق من أن شبكتك تسمح باتصالات HTTPS الصادرة إلى grabmail.io — فهذا كل أثره على الشبكة.

Claude Code

أمر واحد، من أي مجلد. يسجِّل الخادم لمستخدمك، بحيث يصبح متاحًا في كل مشروع:

الطرفية
$ claude mcp add --transport http grabmail https://grabmail.io/mcp

ولمشاركته مع فريق عبر المستودع بدلاً من ذلك، اجعل نطاقه على مستوى المشروع. فهذا يكتب ملف .mcp.json في الجذر، وهو ملف يُدرَج في المستودع ويُطلب من زملاء الفريق الموافقة عليه:

الطرفية — نطاق المشروع
$ claude mcp add --transport http --scope project grabmail https://grabmail.io/mcp
.mcp.json — ما يكتبه نطاق المشروع
{
  "mcpServers": {
    "grabmail": {
      "type": "http",
      "url": "https://grabmail.io/mcp"
    }
  }
}

أعد تشغيل Claude Code، ونفِّذ /mcp، وستجد grabmail مدرجًا بأدواته الست. ويستجيب الخادم أيضًا لاستدعاء initialize الخاص بالبروتوكول بفقرة تعليمات قصيرة، يقدّمها Claude Code للنموذج — بحيث يصل الوكيل وهو يعرف مسبقًا أن عليه تسليم المستعار والانتظار على العنوان.

Claude Desktop

تُضاف الخوادم البعيدة عبر التطبيق نفسه لا عبر ملف الإعداد:

  1. الإعدادات (Settings) ← الموصلات (Connectors) ← إضافة موصل مخصص (Add custom connector).
  2. الصق https://grabmail.io/mcp بوصفه الرابط (URL)، وأعطه اسمًا.
  3. ابدأ محادثة جديدة وستظهر الأدوات تحت الموصل.

وفي إصدار لا يقبل إلا الخوادم المحلية في claude_desktop_config.json، اربط نقطة النهاية البعيدة عبر mcp-remote، الذي يعمل كعملية محلية ويوجِّه الاتصال إلى الرابط:

claude_desktop_config.json — عبر جسر mcp-remote
{
  "mcpServers": {
    "grabmail": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://grabmail.io/mcp"]
    }
  }
}

Cursor

يقرأ Cursor ملف .cursor/mcp.json في المشروع (أو ~/.cursor/mcp.json لكل المشاريع). والخادم البعيد هو url:

.cursor/mcp.json
{
  "mcpServers": {
    "grabmail": {
      "url": "https://grabmail.io/mcp"
    }
  }
}

افتح إعدادات Cursor (Cursor Settings) ← MCP لتراه مدرجًا وتفعّل أدواته. وفي وضع Agent يستدعيها النموذج من تلقاء نفسه؛ وفي المحادثة يمكنك طلبها بالاسم.

Windsurf

يحفظ Windsurf خوادمه في ~/.codeium/windsurf/mcp_config.json، ومفتاح الخادم البعيد هو serverUrl لا url — وهذا هو المكان الوحيد الذي يختلف فيه الشكل:

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "grabmail": {
      "serverUrl": "https://grabmail.io/mcp"
    }
  }
}

يسرد Cascade الخادم بعد تحديث من لوحة MCP. ويمكن الوصول إلى الملف نفسه من إعدادات Windsurf (Windsurf Settings) ← Cascade ← خوادم MCP (MCP servers) ← عرض الإعداد الخام (View raw config).

VS Code

يقرأ وضع الوكيل (agent mode) في VS Code ملف .vscode/mcp.json في مساحة العمل، أو الملف على مستوى المستخدم الذي يكتبه أمر MCP: Add Server من لوحة الأوامر. وتوجد الخوادم تحت servers، لا mcpServers، ويصرِّح الخادم البعيد بوسيلة نقله:

.vscode/mcp.json
{
  "servers": {
    "grabmail": {
      "type": "http",
      "url": "https://grabmail.io/mcp"
    }
  }
}

يظهر رابط صغير بعنوان «Start» فوق المُدخَل في المحرر؛ وبعدها تظهر الأدوات في منتقي أدوات المحادثة، ويستدعيها وضع الوكيل دون أن يُطلَب منه ذلك.

Codex CLI وGemini CLI

يحفظ Codex CLI إعداده بصيغة TOML في ~/.codex/config.toml. والخادم البعيد جدول فيه url:

~/.codex/config.toml
[mcp_servers.grabmail]
url = "https://grabmail.io/mcp"

يقرأ Gemini CLI ملف ~/.gemini/settings.json (أو .gemini/settings.json في المشروع)، ومفتاح خادم Streamable HTTP هو httpUrl:

~/.gemini/settings.json
{
  "mcpServers": {
    "grabmail": {
      "httpUrl": "https://grabmail.io/mcp"
    }
  }
}

أي إصدار من أي منهما لا يقبل إلا الخوادم المحلية يمكنه الوصول إلى نقطة النهاية عبر جسر mcp-remote نفسه الموضح لـClaude Desktop: command = "npx"، args = ["-y", "mcp-remote", "https://grabmail.io/mcp"].

الأدوات الست

أيًا كان العميل، يرى النموذج الأدوات الست نفسها بالأسماء نفسها. ولا توجد حالة يجب إدارتها بين الاستدعاءات، ولا تحتاج أي منها إلى وسيط لم يُعِده الاستدعاء السابق.

create_inbox
يبتكر عنوانًا جديدًا ويعيده مع مستعاره وحقل next_step يوضح أيهما يُستخدم أين. لا شيء يُحجز من جهة الخادم، لذا لا يمكن أن يفشل. ويقبل prefix اختياريًا قابلاً للقراءة.
wait_for_message
ينتظر حتى تصل رسالة إلى العنوان، حتى 25 ثانية، ثم يعيدها كاملة — الموضوع، والمرسِل، والنص العادي، وHTML. رشِّح بـsubject_contains أو from_contains؛ ومرِّر since_id لتجاهل ما كان موجودًا مسبقًا. وبعد انتظار هادئ يجيب بـtimed_out ويطلب أن يُستدعى مرة أخرى.
read_message
رسالة واحدة كاملة بحسب المعرِّف. نادرًا ما تُحتاج، لأن أداة الانتظار تعيد الرسالة كاملة أصلاً.
list_messages
كل ما ينتظر في عنوان، الأحدث أولاً، فورًا — حتى حين لا يوجد شيء.
list_domains
النطاقات العامة التي يستطيع أي شخص استخدامها، لوقت أن يرفض نموذج ما واحدًا منها للتو.
delete_message
يحذف رسالة الآن بدل أن تُحذف خلال 5 يومًا. وهي idempotent — لا يتغيّر أثرها إن تكررت — فإعادة المحاولة من وكيل لا تكلِّف شيئًا.

حلقة التسجيل في أربعة استدعاءات

هذا هو التسلسل الذي تحتاج إليه كل مهمة تقريبًا، ولا يغيّره العميل المستخدَم:

  1. create_inbox. فيعود عنوان، ومستعار، وملاحظة توضح أيهما أيهما.
  2. المستعار يذهب إلى النموذج. فيحصل الموقع على عنوان يعمل ويصل إلى صندوق البريد، لكن لا يمكن استخدامه لفتحه.
  3. wait_for_message على العنوان، فور الإرسال، مع ضبط subject_contains على كلمة ستحملها رسالة التأكيد. وهي تنتظر؛ فلا يحتاج الوكيل إلى تكرار الاستدعاء بنفسه.
  4. يخرج الرمز من الرسالة التي أعادها الانتظار. وعادةً لا يكون هناك أي استدعاء آخر على الإطلاق.
أمر (prompt) يُشغِّل الحلقة كاملة
Sign up for a trial at https://app.example.com/signup with a fresh GrabMail inbox.
Use the ALIAS in the form, wait for the confirmation code with wait_for_message
on the ADDRESS, enter it, and tell me the resulting login.

ما الذي يجب وضعه في تعليمات الوكيل نفسه

يخبر الخادم النموذج بكيفية استخدامه وقت الاتصال، لكن النموذج الذي قرأ القواعد الأربع نفسها في تعليمات مشروعه الخاصة يتبعها في كل مرة بدل معظم المرات. أضف هذا إلى CLAUDE.md أو .cursor/rules أو .windsurfrules أو AGENTS.md أو GEMINI.md — أيًا كان الملف الذي يقرؤه عميلك:

CLAUDE.md، .cursor/rules، AGENTS.md — الفقرة نفسها
## Email

- To receive email, use the `grabmail` MCP server. Call `create_inbox` once per task.
- Put the **alias** it returns into forms; poll the **address** it returns with `wait_for_message`.
- Call `wait_for_message` right after submitting a form, with `subject_contains` set to a word
  you expect ("code", "verify", "confirm"). If it returns `timed_out`, call it again — up to
  three times — before concluding the mail was not sent.
- Never reuse an inbox across tasks. Never send anything confidential to one: it is public.

أهم قاعدتين هما اللتان يخطئ فيهما الوكيل ما لم يُخبَر بهما: أن يضع المستعار في النموذج ويستطلع العنوان، وأن يعامل timed_out على أنه «استدعِ مرة أخرى» لا «البريد لم يُرسَل أبدًا». ويتناول دليل صندوق وارد يستطيع وكيل ذكاء اصطناعي قراءته الأمرين بتعمق، بما في ذلك سبب عودة الانتظار قبل وصول البريد.

حين لا يعمل الأمر

العرَضالسببالحل
الخادم غير مدرَجملف الإعداد في المكان الخطأ، أو يستخدم المفتاح الخطأ (url / serverUrl / httpUrl / servers)، أو لم تتم إعادة تشغيل العميل.انسخ الكتلة الخاصة بعميلك بالضبط، وأعد التشغيل، ونفِّذ أمر curl أعلاه لاستبعاد الخادم كسبب.
الأدوات مدرَجة لكن النموذج لا يستدعيها أبدًاالأدوات معطَّلة في لوحة MCP الخاصة بالعميل، أو لم يُخبَر النموذج بوجود خطوة بريد إلكتروني.فعِّلها، وأضف فقرة التعليمات أعلاه.
wait_for_message يستمر في إعادة timed_outالنموذج لم يُرسَل أبدًا، أو كُتب المستعار خطأً، أو رفض الموقع النطاق، أو أن 8 من عمليات الانتظار تعمل بالفعل.استدعِ مرة أخرى حتى ثلاث مرات؛ وتحقق من رسالة الخطأ الخاصة بالنموذج نفسه؛ واقرأ دليل لماذا تحظر نماذج التسجيل البريد المؤقت.
يقول الموقع إن العنوان غير صالحالنطاق العام مدرَج في قائمة حظر البريد المؤقت.استخدم نطاقًا تملكه أنت (سجل MX واحد) أو نطاقًا من المجموعة التي تُبقى بعيدة عن القوائم.
الجسر (mcp-remote) يفشل في البدءلا يوجد Node على الجهاز، أو لا يستطيع npx الوصول إلى السجل (registry).ثبِّت Node 18 أو أحدث، أو استخدم إصدارًا من العميل يقبل الرابط مباشرة.

قبل أن تعتبر الأمر منتهيًا

  • أمر curl أعلاه يسرد ست أدوات من جهازك.
  • الخادم يظهر في لوحة MCP الخاصة بالعميل بعد إعادة التشغيل، وأدواته مفعَّلة.
  • فقرة التعليمات موجودة في الملف الذي يقرؤه عميلك.
  • أمر اختباري (prompt) أكمل تسجيلاً: المستعار في النموذج، والانتظار على العنوان، وقراءة الرمز في النهاية.
  • لن يُرسَل أي شيء سرّي أبدًا إلى واحد من صناديق البريد هذه — فهي عامة.

هذا هو الإعداد كله. ويعمل الخادم نفسه من أي إطار عمل يتحدث MCP، وللوكلاء المبنيين بلا MCP — دالة أداة بسيطة في LangChain، أو OpenAI Agents SDK، أو حلقتك الخاصة — يعرض دليل البريد لوكلاء الذكاء الاصطناعي نسخة REST من الخطوات الأربع نفسها.

أسئلة

هل أحتاج إلى مفتاح API أو حساب لخادم MCP؟

لا. فالنطاقات العامة لا تتطلب مفتاحًا ولا حسابًا ولا ترويسة، ويكشف خادم MCP بالضبط ما تكشفه REST API. ولا تستخدم رمز حامل (bearer token) إلا مجموعة النطاقات المدفوعة التي تُبقى بعيدة عن قوائم حظر البريد المؤقت، يُمرَّر كترويسة Authorization على نقطة النهاية.

هل هو Streamable HTTP أم SSE؟

Streamable HTTP: طلب POST واحد، ورد JSON واحد. ولا يوجد تدفق أحداث يجب إبقاؤه مفتوحًا، ولهذا السبب فإن wait_for_message محدودة بـ25 ثانية — والعميل الذي يفتح طلب GET متوقعًا SSE يُخبَر، بصيغة JSON عادية، أنه لا وجود لذلك.

هل يمكن لعدة وكلاء مشاركة الخادم في الوقت نفسه؟

نعم. فلا توجد حالة جلسة؛ ويحمل كل استدعاء كل ما يحتاجه. والحد المشترك الوحيد هو أن 8 من استدعاءات wait_for_message تعمل في الوقت نفسه عبر الجميع — وبعد تجاوز ذلك تجيب الأداة فورًا بـtimed_out وتطلب أن تُستدعى مرة أخرى، وهو ما تتكفل به فقرة التعليمات أعلاه.

لماذا تعود wait_for_message قبل وصول البريد؟

لأن عملية خادم نائمة لدقائق هي عملية لا يستطيع أحد آخر استخدامها. والانتظار محدود بـ25 ثانية ويقول timed_out بصدق بدل أن يفشل؛ ويستدعي الوكيل الأداة مرة أخرى. وثلاثة استدعاءات تعني أكثر من دقيقة انتظار، وهذا يغطي أي بريد معاملاتي أُرسل فعلاً.

هل يستطيع الوكيل إرسال بريد أيضًا؟

لا. فالخدمة تستقبل فقط، بحكم التصميم — فأي خادم مجاني بلا حساب يستطيع الإرسال سيتحول إلى مُرحِّل بريد مزعج خلال ساعة واحدة. والوكيل الذي عليه إرسال بريد يحتاج إلى مزوّد إرسال؛ أما هذا فهو لقراءة ما يعود إليك.

هل صندوق الوارد خاص بوكيلي؟

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

أي إعداد للعميل هو المرجع إن تغيّرت هذه؟

وثائق كل عميل نفسها. والصيغ أعلاه هي المعتمدة حتى سبتمبر 2026؛ أما جانب الخادم فلا يتغيّر معها — فهو رابط واحد، وأي عميل يستطيع استدعاء خادم MCP بعيد عبر HTTP يستطيع استدعاءه.

تابع القراءة

جرّبه وهو جديد

عنوان واحد يستغرق نقرة واحدة، بلا حساب وبلا بطاقة. كل ما في هذا الدليل يعمل عليه فورًا.

أهلًا بعودتك

صناديقك ونطاقاتك في مكان واحد.