𝗧𝗵𝗲 𝗠𝗖𝗣 𝗧𝗼𝗼𝗹 𝗖𝗵𝗮𝗻𝗴𝗲𝗱 𝗜𝘁𝘀 𝗦𝗰𝗵𝗲𝗺𝗮. 𝗬𝗼𝘂𝗿 𝗔𝗴𝗲𝗻𝘁 𝗗𝗶𝗱𝗻'𝘁 𝗡𝗼𝘁𝗶𝗰𝗲.

तुमचे टूल कॉल क्रॅश झाले नाहीत. त्यांनी 200 स्टेटस कोड आणि वैध JSON परत केले.

पण ते चुकीच्या कॉन्ट्रॅक्टवर (contract) चालले. तीन दिवसांपूर्वी अपस्ट्रीम सर्व्हरने एक फील्डचे नाव बदलले होते. तुमचा एजंट जुने नावच पाठवत राहिला. सर्व्हरने ते शांतपणे दुर्लक्षित केले. निकाल रिक्त (empty) आला. कोणताही एरर दिसला नाही. आठवडाभर कोणाचेही लक्ष गेले नाही.

ही एक 'सायलेंट फेल्युअर' (silent failure) आहे. ही तशी प्रकारची नाही जिथे लॉग्स लाल होतात. ही अशी प्रकारची आहे जिथे सर्व्हर प्रतिसाद देतो, पण डेटा चुकीचा असतो.

MCP सर्व्हर्स कॉल्सच्या दरम्यान टूल कॉन्ट्रॅक्ट बदलू शकतात. ते एखादा पॅरामीटर (parameter) पुन्हा नाव देऊ शकतात किंवा फील्डचे वर्णन (description) बदलू शकतात. हे बदल अनेकदा स्ट्रक्चरलदृष्ट्या वैध राहतात. JSON व्हॅलिडेशन यशस्वी होते. सर्व्हर 200 उत्तर देतो. तुमचा एजंट एकाही एररशिवाय चुकीच्या डेटावर प्रक्रिया करतो.

उपाय सोपा आहे: • प्रत्येक टूल कॉन्ट्रॅक्टचा SHA-256 हॅश (hash) पिन करा. • त्या हॅशमध्ये स्कीमा आणि वर्णन (description) दोन्ही समाविष्ट करा. • प्रत्येक कॉलपूर्वी हॅश तपासा. • जर कॉन्ट्रॅक्टमध्ये बदल (drift) झाला असेल, तर कॉल थांबवा.

आपले लक्ष टूल उत्तर देते की नाही यावर असते. आपण स्टेटस कोड तपासतो. आपण टाइमआउट सेट करतो. आपण 5xx एररवर पुन्हा प्रयत्न (retry) करतो. एजंटने स्कीमा शिकल्यापासून ते कॉल करण्यापर्यंतच्या दरम्यान कॉन्ट्रॅक्ट बदलले आहे का, हे जवळजवळ कोणीही तपासत नाही.

एक MCP सर्व्हर tools/list द्वारे टूल्स उपलब्ध करून देतो. प्रत्येक टूलमध्ये एक inputSchema आणि एक वर्णन (description) असते. तुमचा एजंट सेशनच्या सुरुवातीला हे एकदा वाचतो.

जर सर्व्हर अपडेट झाला, तर तो खालील गोष्टी करू शकतो:

  • अतिरिक्त प्रॉपर्टीज खुली ठेवून पॅरामीटरचे नाव बदलणे (उदा. query ऐवजी q). जुना पॅरामीटर शांतपणे दुर्लक्षित केला जातो.
  • फील्डचा अर्थ बदलणे. एखादी मर्यादा "max results" वरून "page index" मध्ये बदलू शकते. प्रकार (type) 'integer' राहतो, त्यामुळे व्हॅलिडेशन यशस्वी होते.
  • 'enum' मर्यादित करणे. एक वैध व्हॅल्यू नवीन डिफॉल्ट व्हॅल्यूमध्ये बदलली जाऊ शकते.

MCP स्पेसिफिकेशन (spec) सांगते की जर लिस्ट बदलली तर सर्व्हरने क्लायंटला सूचित (notify) केले पाहिजे (SHOULD). ते अनिवार्य (MUST) असल्याचे सांगत नाही. अनेक सर्व्हर्स ही सूचना पाठवणार नाहीत. त्यांनी पाठवली तरीही, एखादा विशिष्ट टूल स्कीमा बदलला आहे हे ते तुम्हाला सांगणार नाहीत.

स्ट्रक्चरल व्हॅलिडेशनवर अवलंबून राहणे थांबवा. ते अर्थातील बदल पाहू शकत नाही.

तुमच्या MCP टूल्सना सॉफ्टवेअर डिपेंडन्सीजप्रमाणे (dependencies) माना. 'lockfile' दृष्टिकोन वापरा. पहिल्या संपर्कावेळी, टूलच्या स्कीमा आणि वर्णनाचा SHA-256 हॅश घ्या. प्रत्येक कॉलपूर्वी, हॅश पुन्हा मोजा. जर ते जुळले, तर पुढे जा. जर ते जुळले नाहीत, तर बदलाची (drift) नोंद करा आणि थांबवा.

वर्णनाचा (description) हॅश करणे हीच खरी गुपिते आहे. जर एखादा पॅरामीटर "max results" वरून "page index" मध्ये बदलला, तर स्कीमा सारखाच दिसतो. पण शब्द बदलल्यामुळे हॅश बदलतो. यामुळे व्हॅलिडेशनमध्ये सुटणारा 'सिमँटिक ड्रिफ्ट' (semantic drift) पकडला जातो.

कॉन्ट्रॅक्ट बदलल्यावर अंदाज लावू नका. आंधळेपणाने पुन्हा प्रयत्न करू नका. थांबा, फरक लॉग करा आणि कॉन्ट्रॅक्ट दुरुस्त करा.

Source: https://dev.to/0012303/the-mcp-tool-your-agent-calls-changed-its-schema-it-didnt-notice-5g6m

Optional learning community: https://t.me/GyaanSetuAi