MCP टूल ने अपना स्कीमा बदल दिया। आपके एजेंट ने ध्यान नहीं दिया।
आपका टूल कॉल क्रैश नहीं हुआ। इसने 200 स्टेटस कोड और वैध JSON लौटाया।
लेकिन यह गलत कॉन्ट्रैक्ट के साथ चला। अपस्ट्रीम सर्वर ने तीन दिन पहले एक फ़ील्ड का नाम बदल दिया था। आपका एजेंट पुराना नाम ही भेजता रहा। सर्वर ने चुपचाप उसे छोड़ दिया। परिणाम खाली आया। कोई एरर नहीं दिखा। एक हफ्ते तक किसी ने ध्यान नहीं दिया।
यह एक साइलेंट फेलियर (silent failure) है। यह उस तरह का शोर मचाने वाला फेलियर नहीं है जहाँ लॉग्स लाल हो जाते हैं। यह उस तरह का है जहाँ सर्वर तो जवाब देता है, लेकिन डेटा गलत होता है।
MCP सर्वर कॉल्स के बीच में टूल कॉन्ट्रैक्ट बदल सकते हैं। वे किसी पैरामीटर का नाम बदल सकते हैं या फ़ील्ड का विवरण (description) बदल सकते हैं। ये बदलाव अक्सर स्ट्रक्चरल रूप से वैध रहते हैं। JSON वैलिडेशन पास हो जाता है। सर्वर 200 का जवाब देता है। आपका एजेंट बिना किसी एरर के गलत डेटा पर काम करता है।
इसका समाधान सरल है: • प्रत्येक टूल कॉन्ट्रैक्ट का एक SHA-256 हैश पिन करें। • उस हैश में स्कीमा और विवरण (description) दोनों को शामिल करें। • हर कॉल से पहले हैश की जाँच करें। • यदि कॉन्ट्रैक्ट में बदलाव (drift) हो, तो कॉल रोक दें।
हमारा ध्यान इस बात पर होता है कि टूल जवाब दे रहा है या नहीं। हम स्टेटस कोड चेक करते हैं। हम टाइमआउट सेट करते हैं। हम 5xx एरर्स पर रिट्राय करते हैं। लगभग कोई भी यह चेक नहीं करता कि जिस क्षण एजेंट ने स्कीमा सीखा और जिस क्षण उसने कॉल किया, उसके बीच में कॉन्ट्रैक्ट बदल तो नहीं गया।
एक MCP सर्वर tools/list के माध्यम से टूल्स को एक्सपोज़ करता है। प्रत्येक टूल में एक inputSchema और एक विवरण (description) होता है। आपका एजेंट सेशन की शुरुआत में इसे एक बार पढ़ता है।
यदि सर्वर अपडेट होता है, तो