MCP ટૂલનું તેનું સ્કીમા બદલાઈ ગયું. તમારા એજન્ટે તે નોંધ્યું નહીં.
તમારું ટૂલ કોલ ક્રેશ થયું નથી. તેણે 200 સ્ટેટસ કોડ અને માન્ય JSON રિટર્ન કર્યું.
પરંતુ તે ખોટા કોન્ટ્રાક્ટ સામે ચાલ્યું. અપસ્ટ્રીમ સર્વરે ત્રણ દિવસ પહેલા એક ફિલ્ડનું નામ બદલી નાખ્યું હતું. તમારો એજન્ટ જૂનું નામ મોકલવાનું ચાલુ રાખતો રહ્યો. સર્વરે તેને શાંતિથી ડ્રોપ કરી દીધું. પરિણામ ખાલી આવ્યું. કોઈ એરર દેખાઈ નહીં. એક અઠવાડિયા સુધી કોઈએ નોંધ્યું નહીં.
આ એક 'સાયલન્ટ ફેઈલિયર' (શાંત નિષ્ફળતા) છે. આ એ પ્રકારની મોટી ભૂલ નથી જ્યાં લોગ્સ લાલ થઈ જાય છે. આ એ પ્રકારની છે જ્યાં સર્વર સ્મિત આપે છે (સાચો પ્રતિસાદ આપે છે), પરંતુ ડેટા ખોટો હોય છે.
MCP સર્વર્સ કોલ્સ વચ્ચે ટૂલ કોન્ટ્રાક્ટ બદલી શકે છે. તેઓ પેરામીટરનું નામ બદલી શકે છે અથવા ફિલ્ડનું વર્ણન (description) બદલી શકે છે. આ ફેરફારો ઘણીવાર સ્ટ્રક્ચરલ રીતે માન્ય રહે છે. JSON વેલિડેશન પાસ થાય છે. સર્વર 200 જવાબ આપે છે. તમારો એજન્ટ એક પણ ભૂલ વગર ખોટા ડેટા પર કામ કરે છે.
ઉકેલ સરળ છે: • દરેક ટૂલ કોન્ટ્રાક્ટનો SHA-256 હેશ પિન કરો. • તે હેશમાં સ્કીમા અને વર્ણન (description) બંનેનો સમાવેશ કરો. • દરેક કોલ પહેલા હેશ તપાસો. • જો કોન્ટ્રાક્ટમાં ફેરફાર (drift) જણાય તો કોલ અટકાવી દો.
આપણે ટૂલ જવાબ આપે છે કે નહીં તેના પર ધ્યાન આપીએ છીએ. આપણે સ્ટેટસ કોડ તપાસીએ છીએ. આપણે ટાઈમઆઉટ સેટ કરીએ છીએ. આપણે 5xx એરર પર ફરી પ્રયાસ (retry) કરીએ છીએ. એજન્ટે સ્કીમા શીખ્યા ત્યારથી લઈને તેણે કોલ કર્યો તે સમયની વચ્ચે કોન્ટ્રાક્ટ બદલાયો છે કે નહીં તે લગભગ કોઈ તપાસતું નથી.
એક MCP સર્વર tools/list દ્વારા ટૂલ્સ એક્સપોઝ કરે છે. દરેક ટૂલમાં એક inputSchema અને એક વર્ણન (description) હોય છે. તમારો એજન્ટ સત્ર (session) ની શરૂઆતમાં આ એકવાર વાંચે છે.
જો સર્વર અપડેટ થાય છે, તો તે આ કરી શકે છે:
- વધારાના પ્રોપર્ટીઝ ખુલ્લા રાખીને પેરામીટરનું નામ બદલી શકે છે (જેમ કે
queryથીqમાં). જૂનું પેરામીટર શાંતિથી ડ્રોપ થઈ જાય છે. - ફિલ્ડનો અર્થ બદલી શકે છે.
limitએ "max results" થી બદલાઈને "page index" થઈ શકે છે. પ્રકાર (type) ઇન્ટિજર જ રહે છે, તેથી વેલિડેશન પાસ થાય છે. enumને મર્યાદિત કરી શકે છે. એક માન્ય વેલ્યુને નવા ડિફોલ્ટમાં ફેરવી દેવામાં આવી શકે છે.
MCP સ્પેસિફિકેશન કહે છે કે જો લિસ્ટ બદલાય તો સર્વરે ક્લાયન્ટને જાણ કરવી જોઈએ (SHOULD). તે એમ નથી કહેતું કે તેણે જાણ કરવી જ જોઈએ (MUST). ઘણા સર્વર્સ આ નોટિફિકેશન મોકલશે નહીં. જો તેઓ મોકલે તો પણ, તેઓ તમને કદાચ જણાવશે નહીં કે કોઈ ચોક્કસ ટૂલ સ્કીમા બદલાઈ ગઈ છે.
સ્ટ્રક્ચરલ વેલિડેશન પર આધાર રાખવાનું બંધ કરો. તે અર્થમાં થતા ફેરફારને જોઈ શકતું નથી.
તમારા MCP ટૂલ્સને સોફ્ટવેર ડિપેન્ડન્સીઝની જેમ ગણો. લોકફાઇલ (lockfile) અભિગમનો ઉપયોગ કરો. પ્રથમ સંપર્ક વખતે, ટૂલના સ્કીમા અને વર્ણનનો SHA-256 હેશ લો. દરેક કોલ પહેલા, હેશ ફરીથી ગણો. જો તેઓ મેચ થાય, તો આગળ વધો. જો તેઓ મેચ ન થાય, તો ફેરફાર (drift) નો સંકેત આપો અને અટકી જાઓ.
વર્ણન (description) ને હેશ કરવું એ જ રહસ્ય છે. જો પેરામીટર "max results" થી બદલાઈને "page index" થઈ જાય, તો સ્કીમા સમાન દેખાય છે. પરંતુ શબ્દો બદલાયા હોવાથી હેશ બદલાઈ જાય છે. આ તે સેમેન્ટિક ડ્રિફ્ટ (semantic drift) ને પકડી લે છે જે વેલિડેશન ચૂકી જાય છે.
જ્યારે કોન્ટ્રાક્ટ બદલાય ત્યારે અનુમાન ન લગાવો. આંધળું રિટ્રાય (retry) ન કરો. થોભો, તફાવત લોગ કરો અને કોન્ટ્રાક્ટ સુધારો.
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