الإجابة المختصرة
عندما تنتهي مهلة استدعاء أداة MCP، لا تعرف إن كان التغيير قد حدث. ربما فقد الذكاء الاصطناعي لديك الرد، لا العمل. تحقق قبل إعادة المحاولة: ابحث في الأداة عمّا حاول إنشاءه. أعد المحاولة فقط إن كان مفقودًا. ولا تُعِد الإرسال من تلقاء نفسك أبدًا.
في هذا الدليل
لماذا لا تخبرك المهلة إن كان التغيير قد حدث؟
طلب الذكاء الاصطناعي لديك من أداة أن تُجري تغييرًا، ثم انتظر. ولم يصل أي رد، فتوقف تطبيقه عن الانتظار وأبلغ عن فشل. هذه التسمية تصف الانتظار، لا التغيير. وإن أعدت محاولة تغيير سبق أن أُجري، صار لديك تذكرتان أو صفحتان أو رسالتان.
يسمّي المطورون هذا التغيير كتابةً (write). وقد يكون أحد ثلاثة أمور قد حدث.
| ما الذي حدث | هل التغيير موجود في الأداة؟ | إذا أعدت المحاولة |
|---|---|---|
| لم يصل الطلب أبدًا. | لا. | القرار الصحيح: يُجرى التغيير مرة واحدة. |
| الأداة ما زالت تعمل. | ليس بعد. يظهر بعد أن يكون الذكاء الاصطناعي لديك قد استسلم. | يُجرى التغيير مرتين، إلا إذا كان تكراره لا يضر. |
| انتهت الأداة وضاع الرد. | نعم. | يُجرى التغيير مرتين، إلا إذا كان تكراره لا يضر. |
تتوقع مواصفات MCP هذا الأمر. ينبغي للعميل أن يضبط مهلة على كل طلب، وإذا انقضت، أن يلغي الطلب ويكفّ عن الانتظار. والإلغاء ليس ضمانًا: قد يتجاهله الخادم إذا كان العمل قد انتهى أو لا يمكن إيقافه. وقد يصل الإلغاء أيضًا بعد أن يكون الرد قد أُرسل.
يقول دليل واجهة Stripe البرمجية الشيء نفسه: بعد فشل الاتصال، قد لا تعرف إن كان الطلب قد نُفّذ. ويطلب منك أن تعامل خطأ الخادم كنتيجة مجهولة أيضًا.
ماذا تفعل بعد انتهاء المهلة، وبهذا الترتيب؟
افعل هذه الخطوات بالترتيب. الأولى والثانية لا تستغرقان أكثر من دقيقة.
- أوقف إعادة المحاولةالآن
قل للذكاء الاصطناعي لديك ألا يكرر الاستدعاء: «لا تُعِد المحاولة. تحقّق أولًا إن كان قد أُجري.» فإعادة المحاولة وحدها هي ما يجعل التغيير يُجرى مرتين.
- ابحث في الأداة، لا في المحادثة1 دقيقة
افتح الأداة نفسها: صفحة Notion، أو بلاغات GitHub، أو المجلد. ابحث بالعنوان أو المعرّف الذي طلبته. فالمحادثة لا تعرف إلا أن الاستدعاء فشل.
- اقرأ ما وجدت2 دقيقتان
وجدته كاملًا: التغيير قد أُجري. تابع ولا تكرره.
وجدته نصف منجز: أكمل الجزء الناقص بتحديث، لا بإنشاء جديد.
لم تجده: إما أنه لم يصل أبدًا، أو أنه ما زال يعمل. انتظر دقيقة وابحث من جديد. - أعد المحاولة مرة واحدة، ولاستدعاء آمن فقطبعد ذلك
إن كان ما زال مفقودًا، فأعد المحاولة مرة واحدة. يبيّن الجدول أدناه أي الاستدعاءات آمن تكرارها. وقبل أي إرسال، تحقّق من المكان الذي وصلت إليه.
- إن تكررت انتهاءات المهلة، فعالج السببلاحقًا
الاستدعاء الذي تنتهي مهلته دائمًا يعني أن الحد قصير أكثر من اللازم، أو أن العمل أكبر من أن يُنجز. ارفع الحد لذلك الخادم، أو اطلب قدرًا أقل في كل استدعاء.
أي الاستدعاءات آمن إعادة محاولتها؟
يكون الاستدعاء آمنًا لإعادة المحاولة حين يترك تنفيذه مرتين النتيجة نفسها كما لو نُفّذ مرة واحدة. والقراءات مؤهلة لذلك، أما كثير من التغييرات فلا. ويعدّ معيار HTTP الطلب PUT (ضبط قيمة) والطلب DELETE آمنين للتكرار، والصفوف أدناه تتبعه. ويتقدّم عليها idempotentHint الخاص بالأداة أو وصفها.
| الاستدعاء | أعِد المحاولة كما هو؟ | كيف تتحقق أولًا |
|---|---|---|
| القراءة: بحث، أو عرض قائمة، أو فتح | نعم. لا يغيّر شيئًا. | لا شيء يُتحقَّق منه. |
| ضبط قيمة: حالة، أو عنوان، أو تسمية | غالبًا. ضبط القيمة نفسها مرتين يترك النتيجة نفسها، كما في PUT في HTTP. | بقراءة الحقل. فإن كان شخص قد غيّره منذ ذلك، فإن إعادة المحاولة تستبدل تعديله. |
| الإضافة إلى شيء: تعليق، أو صف، أو سطر | لا. مرتين تعني إضافته مرتين. | بفتح العنصر والبحث عن الإضافة التي أضفتها. |
| الإنشاء: صفحة، أو بلاغ، أو ملف | لا. إعادة المحاولة تنشئ نسخة ثانية. | بالبحث بالعنوان أو المعرّف الذي أعطيته. أعد المحاولة فقط إن لم يطابق شيء. |
| الحذف | غالبًا، إذا كان يحدد عنصرًا واحدًا بعينه، كما في DELETE في HTTP. لا إذا قال «الأحدث»: فالاستدعاء الثاني يصيب عنصرًا آخر. | بالبحث عن العنصر. إن كان قد اختفى فقد تمّ. |
| الإرسال: رسالة، أو بريد إلكتروني، أو إشعار | أبدًا من تلقاء نفسك. لا يمكن استرجاع الإرسال. | بالنظر إلى المكان الذي وصل إليه: قائمة الرسائل المرسلة، أو القناة، أو الطرف الآخر. وإن لم تستطع أن تتبيّن، فاسأل قبل أن ترسل مرة أخرى. |
هل يمنع مفتاح idempotency التكرار؟
أحيانًا. مفتاح idempotency تسمية فريدة تُرسل مع الطلب. فإن وصلت التسمية نفسها مرتين، ينفّذ الخدمة العمل مرة واحدة ويكرر ردها الأول. وقد صُمّم لطلب لم يصل إليه رد.
- كيف يعمل المفتاح في Stripe. تقبل واجهة v1 البرمجية المفتاح في طلبات
POST. وتحفظ النتيجة الأولى، حتى إن كانت خطأً، وتعيدها لإعادة محاولة بالمفتاح نفسه. وتحتفظ بالمفاتيح 24 ساعة على الأقل. ويُرفض المفتاح نفسه إذا جاء مع معاملات أخرى. - ما الذي يجب أن تفعله إعادة المحاولة. أرسل المفتاح نفسه والمعاملات نفسها. وتقول Stripe ألا تعيد المحاولة بمفتاح جديد قبل أن تعرف النتيجة الأولى. والمفتاح الجديد في كل محاولة لا يحميك.
- ما الذي يتيحه MCP لك. يحمل طلب
tools/callاسم الأداة ومعاملاتها. ولا يحدّد المخطط في المواصفات مفتاح idempotency له. وقد تقبل الأداة مفتاحًا كمعامل خاص بها، لذا فاقرأ معاملاتها. - ما الذي يجوز للأداة أن تصرّح به.
idempotentHintيقول إن استدعاء الأداة مرة أخرى بالمعاملات نفسها لا يحدث أثرًا إضافيًا. وهو تلميح فقط. وتقول المواصفات إن العملاء ينبغي ألا يبنوا قراراتهم أبدًا على تلميحات من خوادم لا يثقون بها.
فالمفتاح ميزة إضافية، لا خطة. وحين لا تعرض الأداة أي مفتاح، فالتحقق أعلاه هو ما يحميك.
كيف تغيّر مهلة MCP؟
حد قصير أكثر من اللازم يقطع عملًا سليمًا. وحد طويل أكثر من اللازم يتركك تنتظر. وموضع ضبطه يعتمد على تطبيق الذكاء الاصطناعي لديك. وهذه إعدادات Claude Code.
| الإعداد | ما يحدّه | الافتراضي |
|---|---|---|
MCP_TOOL_TIMEOUT | المدة التي يجوز أن يستغرقها استدعاء أداة واحد، بالملي ثانية. | 100000000 ms، أي نحو 28 ساعة |
timeout في .mcp.json | الحد نفسه، لخادم واحد. ويتجاوز المتغيّر لذلك الخادم. حدّ صارم: إشعارات التقدم لا تمدّده. | قيمة المتغيّر |
CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT | المدة التي قد يبقى فيها الاستدعاء صامتًا، دون رد ودون تقدم، قبل أن يُجهَض. والقيمة 0 تعطّل هذا التحقق. | 5 دقائق للخوادم عبر الشبكة، و30 دقيقة لخوادم stdio |
MCP_TIMEOUT | بدء تشغيل الخادم. وبالنسبة إلى الخادم البعيد، تُحسب أيضًا ضمن مؤقت كل طلب أدناه. | 30000 ms، أي 30 ثانية |
CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS | متى ينتقل استدعاء ما زال يعمل في المحادثة الرئيسية إلى مهمة في الخلفية. والقيمة 0 تعطّله. ابتداءً من الإصدار 2.1.212 فما بعده. | 120000 ms، أي دقيقتان |
الافتراضي البالغ 60 ثانية للخوادم البعيدة. للخادم الذي يُوصل إليه عبر HTTP أو SSE أو كموصّل في claude.ai مؤقت ثانٍ. يعمل على كل طلب حتى أول بايت من الرد. ويستمر 60 ثانية، إلا إذا ضُبط MCP_TOOL_TIMEOUT أو timeout الخاص بالخادم أو MCP_TIMEOUT على قيمة أعلى. وليس لخوادم stdio المحلية مؤقت لكل طلب.
لضبطه لخادم واحد، أضف "timeout": 600000 إلى مدخله في .mcp.json. أي عشر دقائق.
الاستدعاء البطيء ليس دائمًا فاشلًا. ابتداءً من الإصدار 2.1.212، ينقل Claude Code استدعاء MCP في محادثتك الرئيسية إلى مهمة في الخلفية بعد دقيقتين. ويسلّم النتيجة حين ينتهي الاستدعاء.
لا تصف وثائق MCP في Cursor أي إعداد للمهلة. ولا تحدد مواصفات MCP رقمًا. وتقول إن حزم SDK ينبغي أن تتيح ضبط المهلات لكل طلب، وإن على العميل أن يحتفظ دائمًا بحد أقصى.
للأعمال التي تستغرق دقائق، يمكن للخادم أن يستخدم MCP Tasks. فيعيد مقبضًا فورًا، ويستطلع العميل النتيجة، حتى بعد إعادة الاتصال. ويجب أن يدعمه الطرفان، ويتفاوت دعم العملاء له.
ماذا يفعل Delta MCP حين يضيع الرد؟
Delta MCP تطبيق مجاني على حاسوبك، يقف بين الذكاء الاصطناعي لديك وأدواته. وحين لا يأتي رد لتغيير، لا يخمّن ولا يكتفي بإعادة المحاولة. بل يقرأ الأداة.
قبل أن يخرج التغيير، يختار Delta MCP قراءة تبيّن إن كان قد حدث. وهذه القراءة هي إعادة قراءة العنصر نفسه، أو إعادة قراءة القائمة. وحين لا يأتي رد، ينفّذ تلك القراءة فورًا. وما تُظهره القراءة هو ما يقرّر:
| ما تُظهره القراءة | ما يفعله Delta MCP |
|---|---|
| التغيير قد أُجري. | تستمر المهمة، ويذكر الرد أنه جرى التحقق منه. |
| لم يُجرَ التغيير. | يرسل التغيير مرة أخرى، بالمعاملات نفسها. ولا يفعل ذلك وحده أبدًا بالنسبة إلى رسالة أو أي إرسال آخر. وفي تلك الحالات، يذكر الرد أنه لم يُرَ، وقد يظهر بعد ذلك، وتتوقف المهمة. |
| غير واضح، أو لا يمكن قراءة ما يبيّن ذلك. | يذكر الرد أن النتيجة غير معروفة، ويبيّن السبب. وتتوقف المهمة. انظر إلى الأداة قبل أن تُجري التغيير مرة أخرى. |
لا يستطيع Delta MCP التراجع عن استدعاء أداة يُستدعى كما هو. وإن نجح استدعاء سابق، فهو يبقى مُنجَزًا، ويذكره الرد حتى لا يكرره الذكاء الاصطناعي لديك. وتُحفظ كل مهمة تغيّر شيئًا في Activity، مع كل تغيير قبل وبعد.
أسئلة
هل إعادة محاولة استدعاء أداة MCP آمنة بعد انتهاء المهلة؟
القراءة آمنة. أما التغيير فليس آمنًا حتى تتحقق. فالمهلة تقول فقط إن الرد لم يصل: وربما تكون الأداة قد أجرت التغيير رغم ذلك. ابحث عنه في الأداة، وأعد المحاولة فقط إن كان مفقودًا. ولا تُعِد الإرسال من تلقاء نفسك أبدًا.
هل نُفّذت كتابتي في MCP إن انتهت مهلة الطلب؟
لا يمكنك أن تعرف من المهلة وحدها. فقد لا يكون الطلب قد وصل أبدًا، أو قد تكون الأداة ما زالت تعمل، أو تكون قد انتهت وضاع الرد. افتح الأداة وابحث عن التغيير.
كيف أرفع مهلة أداة MCP في Claude Code؟
اضبط MCP_TOOL_TIMEOUT بالملي ثانية، أو أضف حقل timeout إلى مدخل الخادم في .mcp.json. وبالنسبة إلى الخادم البعيد، اضبطه على أكثر من 60000 لرفع مؤقت الطلب البالغ 60 ثانية. وMCP_TIMEOUT هو انتظار البدء، لا حد استدعاء الأداة.
كيف أغيّر مهلة MCP في Cursor؟
لا تصف وثائق MCP في Cursor أي إعداد للمهلة. وتقول إن الاستدعاء الفاشل يُعلَّم كفاشل في المحادثة، ويمكنك إعادة المحاولة أو فحص السجلات. تحقّق أولًا مما تحتفظ به الأداة.
هل لدى MCP مفاتيح idempotency؟
لا. يحمل استدعاء الأداة اسم الأداة ومعاملاتها، ولا يحدّد مخطط المواصفات مفتاح idempotency له. وقد تقبل الأداة مفتاحًا خاصًا بها معاملًا. ويمكنها أيضًا أن تضبط idempotentHint، وهو تلميح فقط.
ماذا يفعل Delta MCP حين لا يأتي رد من استدعاء أداة؟
يقرأ الأداة فورًا ليرى إن كان التغيير قد حدث. أُجري: تستمر المهمة. لم يُجرَ: يرسل التغيير مرة أخرى. ولا تُرسل الرسالة أو أي إرسال آخر مرة ثانية من تلقاء نفسه أبدًا. غير واضح: يذكر الرد أن النتيجة غير معروفة، وتتوقف المهمة.
المصادر
- Model Context Protocol, Cancellation ينبغي للعملاء أن يضبطوا المهلات، وأن يلغوا الطلب ويكفّوا عن الانتظار؛ وقد يصل الإلغاء بعد أن يكون العمل قد انتهى (المراجعة 2026-07-28).
- Model Context Protocol, Schema Reference يحمل استدعاء الأداة اسمًا ومعاملات، دون مفتاح idempotency؛ وتوصيف idempotentHint، والتوصيفات تلميحات فقط (المراجعة 2026-07-28).
- Model Context Protocol, Tasks مقبض دائم للعمليات الطويلة، يُستطلع ويُسترجع بعد إعادة الاتصال؛ ويجب أن يشترك فيه الطرفان.
- Claude Code, Connect Claude Code to tools via MCP المهلة لكل خادم، ومؤقت الطلب البالغ 60 ثانية للخوادم البعيدة، ونافذة الخمول، والانتقال إلى الخلفية بعد دقيقتين.
- Claude Code, Environment variables MCP_TOOL_TIMEOUT وMCP_TIMEOUT وCLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT وCLAUDE_CODE_MCP_AUTO_BACKGROUND_MS، مع قيمها الافتراضية.
- Cursor, Model Context Protocol (MCP) يُعلَّم استدعاء MCP الفاشل كفاشل في المحادثة؛ وإعادة المحاولة أو فحص السجلات؛ ولا يُذكر أي إعداد للمهلة.
- Stripe, Idempotent requests كيف يعمل مفتاح idempotency: تُحفظ النتيجة الأولى وتُعاد؛ وتبقى المفاتيح 24 ساعة على الأقل؛ ويُرفض المفتاح مع معاملات أخرى.
- Stripe, Advanced error handling بعد فشل الاتصال قد لا تعرف إن كان الطلب قد نُفّذ؛ وخطأ الخادم نتيجة مجهولة؛ ولا مفتاح جديد قبل معرفة النتيجة.
- IETF, RFC 9110: HTTP Semantics الطرق الآمنة للتكرار في HTTP (الطرق الآمنة، وPUT وDELETE)، وعدم إعادة طلب غير آمن للتكرار إلا إن عرفت أن الأول لم يُطبَّق أبدًا.
- Delta MCP, Writing a task ما يفعله Delta MCP حين لا يأتي رد لتغيير: أُجري، أو لم يُجرَ، أو نتيجة مجهولة؛ ولا يُعاد إرسال أي رسالة من تلقاء نفسه.
- Delta MCP, Activity and Undo تُحفظ كل مهمة غيّرت شيئًا في Activity، مع كل تغيير قبل وبعد.
تابع القراءة
- كيف تتراجع عن تغييرات الذكاء الاصطناعي في Notion وGitHubهل غيّر وكيل الذكاء الاصطناعي لديك شيئًا أو حذفه؟ تعرّف على ما تغيّر، وتراجع عنه في Notion أو GitHub أو ملفاتك، واعرف ما لا يمكن الرجوع فيه أبدًا.
- MCP مقابل CLI لوكلاء الذكاء الاصطناعي: مصدر فاتورة التوكناتMCP أم CLI لوكيل الذكاء الاصطناعي لديك؟ تكلفة كل منهما بالتوكنات، وما تظهره القياسات، ومتى تتفوق CLI، ومتى يتفوق MCP، وأين يتفوق الكود على الاثنين.