MCP প্রোটোকল টিম ২৮ জুলাই, ২০২৬ তারিখে একটি নতুন ভার্সন প্রকাশ করেছে যা প্রোটোকল-লেভেল সেশন বাদ দিয়ে প্রতিটি রিকোয়েস্টকে স্টেটলেস (stateless) হতে বাধ্য করে। আপনি যদি MCP ক্লায়েন্ট, সার্ভার বা এজেন্ট চালান, তবে আপনাকে অবশ্যই সেই কোডগুলো পুনরায় লিখতে হবে যা একটি পারসিস্টেন্ট (persistent) সেশন আইডি ধরে নিয়ে কাজ করে—অন্যথায় আপনি ত্রুটিপূর্ণ রাউটিং, ক্যাশ মিস এবং অনিয়ন্ত্রিত ব্যাকগ্রাউন্ড কাজের সম্মুখীন হবেন।
কেন এই পরিবর্তনটি গুরুত্বপূর্ণ
MCP আগে একটি হ্যান্ডশেক রিকোয়েস্টের প্রয়োজন হতো যা একটি সেশন আইডেন্টিফায়ার তৈরি করত। ডাউনস্ট্রিম সার্ভিসগুলো সেই আইডির ওপর নির্ভর করত যাতে নিশ্চিত করা যায় যে ধারাবাহিক রিকোয়েস্টগুলো একই প্রসেসে পৌঁছাবে, লোড ব্যালেন্সারগুলো স্টিকি রাউটিং (sticky routing) ব্যবহার করতে পারে এবং মেমরিতে পার-সেশন ডেটা সংরক্ষণ করা যায়। জুলাইয়ের এই রিলিজটি সেই মডেলের পরিবর্তে একটি পিওর রিকোয়েস্ট-রেসপন্স ফ্লো (request-response flow) নিয়ে এসেছে। এখন কোনো সেশন হারানোর ভয় ছাড়াই একটি সার্ভার যোগ বা সরিয়ে ফেলা সম্ভব। প্রোটোকলটি আর কনটেক্সট (context) সংরক্ষণ করে না; এখন অ্যাপ্লিকেশনকে তা করতে হবে।
যেসব টিম পুরনো সেশন-কেন্দ্রিক কোড ব্যবহার করে যাবে, তারা দেখবে যে রিকোয়েস্টগুলো ভুল ইন্সট্যান্সে চলে যাচ্ছে, ক্যাশ মিস হচ্ছে এবং ব্যাকগ্রাউন্ড জবগুলো জমে যাচ্ছে। অন্যদিকে, যেসব টিম স্টেটলেস প্যাটার্ন গ্রহণ করবে, তারা নন-স্টিকি লোড ব্যালেন্সারের পেছনে MCP চালাতে পারবে এবং পুরো রিকোয়েস্ট চেইন জুড়ে আরও উন্নত অবজারভেবিলিটি (observability) পাবে।
আসলে কী পরিবর্তন হয়েছে
- প্রোটোকল লাইফসাইকেল – হ্যান্ডশেক এবং সেশন আইডি আর থাকবে না। প্রতিটি রিকোয়েস্টে সার্ভারের প্রয়োজনীয় সমস্ত তথ্য থাকতে হবে; পরবর্তী কোনো রিকোয়েস্ট একই প্রসেসে পৌঁছাবে এমন কোনো গ্যারান্টি নেই।
- HTTP রাউটিং – গেটওয়েগুলো এখন রিকোয়েস্ট কোথায় ফরওয়ার্ড করতে হবে তা নির্ধারণ করতে দুটি নতুন হেডার,
Mcp-MethodএবংMcp-Nameপড়বে। সেশন-কুকি রাউটিং আর কাজ করবে না। - ক্যাশিং – স্পেসিফিকেশনে রিড অপারেশনের জন্য
ttlMs(মিলি-সেকেন্ডে টাইম-টু-লিভ) এবংcacheScopeফিল্ড যুক্ত করা হয়েছে। আপনি ঠিক করবেন যে পুরনো ডেটা গ্রহণযোগ্য কি না এবং সেই অনুযায়ী ক্যাশ কনফিগার করবেন। - অবজারভেবিলিটি – একটি
_metaব্লকে এখন W3C Trace Context পেলোড আশা করা হয়, যা ট্রেসিং সিস্টেমগুলোকে এজ গেটওয়ে, টুলিং এবং ব্যাকএন্ড কাজগুলোকে একটি একক এন্ড-টু-এন্ড ট্রেসে যুক্ত করতে সাহায্য করে। - কম্পোজিশন – এক্সটেনশনগুলো এখন ফরমাল বা আনুষ্ঠানিক করা হয়েছে; কোর স্পেসিফিকে কোনো পরিবর্তন না করেই নতুন সক্ষমতা যোগ করা সম্ভব, যা একটি প্লাগ-ইন স্টাইল আর্কিটেকচারকে উৎসাহিত করে।
- দীর্ঘস্থায়ী কাজ – মিনিট বা ঘণ্টা ধরে চলা কাজের জন্য সাধারণ রিকোয়েস্ট/রেসপন্স আর যথেষ্ট নয়। প্রোটোকলটি এখন অ্যাসিনক্রোনাস কাজের জন্য লাইফসাইকেল কন্ট্রোলসহ একটি
Taskঅবজেক্ট সংজ্ঞায়িত করে।
লিগ্যাসি কোডে লুকিয়ে থাকা ঝুঁকি
একটি দ্রুত অডিট করলে প্রায়ই এমন প্যাটার্ন খুঁজে পাওয়া যায় যা স্টেটফুলনেস (statefulness) ধরে নিয়ে কাজ করে:
- সেশন আইডি দিয়ে কি (key) করা ইন-মেমরি ম্যাপ।
- স্টিকি সেশনের জন্য কনফিগার করা লোড ব্যালেন্সার।
- স্টার্টআপ রুটিন যা লোকাল মেমরিতে পার-সেশন ডেটা প্রি-লোড করে।
- ক্লিনআপ লজিক যা সেশন শেষ হলে বিজনেস ডেটা মুছে ফেলে।
মাইগ্রেশনের সময় যদি এগুলোর কোনোটি থেকে যায়, তবে সিস্টেমটি লোডের সময় ডেটা হারাবে বা রিসোর্স লিক (resource leak) করবে।
একটি সুনির্দিষ্ট মাইগ্রেশন চেকলিস্ট
১. বর্তমান ধারণাগুলোর তালিকা তৈরি করুন
আপনার কোড যেখানে যেখানে সেশন আইডি, স্টিকি-রাউটিং রুল বা প্রসেস-লোকাল ক্যাশ ব্যবহার করছে, তার একটি ম্যাপ তৈরি করুন। কোন কম্পোনেন্ট কোনটির ওপর নির্ভর করে তা নথিভুক্ত করুন।
২. আইডেন্টিটি বা পরিচয়কে স্পষ্ট করুন
প্রতিটি রিকোয়েস্ট পেলোড বা হেডারে টেন্যান্ট আইডি (tenant ID), রান আইডি (run ID) এবং ইউজার আইডি (user ID) যুক্ত করুন। অথরাইজেশন এবং ডেটা পার্টিশনিংয়ের জন্য এই আইডেন্টিফায়ারগুলোকে সত্যের উৎস (source of truth) হিসেবে বিবেচনা করুন।
৩. রাউটিং কনফিগারেশন আপডেট করুন
সেশন-ভিত্তিক রাউটিংয়ের পরিবর্তে Mcp-Method এবং Mcp-Name পড়া নিয়মগুলো ব্যবহার করুন। একটি নন-স্টিকি লোড ব্যালেন্সারের পেছনে ন্যূনতম দুটি ইন্সট্যান্স ব্যবহার করে নতুন গেটওয়ে লজিক পরীক্ষা করুন।
৪. ক্যাশিং লজিক রিফ্যাক্টর করুন
নতুন ttlMs এবং cacheScope ফিল্ড ব্যবহার করুন। বিভিন্ন TTL ভ্যালু হিট রেট এবং ফ্রেশনেস রিকোয়ারমেন্টের ওপর কেমন প্রভাব ফেলে তা দেখতে পারফরম্যান্স টেস্ট চালান।
এন্ড-টু-এন্ড ট্রেসিং চালু করুন: _meta ব্লকে একটি W3C Trace Context হেডার যুক্ত করুন। নিশ্চিত করুন যে ট্রেসগুলো এখন কোনো গ্যাপ ছাড়াই এজ গেটওয়ে থেকে আপনার ব্যাকএন্ড সার্ভিস পর্যন্ত প্রবাহিত হচ্ছে।
অ্যাসিনক্রোনাস কাজের জন্য Task মডেল গ্রহণ করুন: কে টাস্ক তৈরি করতে পারবে তা নির্ধারণ করুন, সর্বোচ্চ রানটাইম সেট করুন এবং কিউ (queue) লিমিট প্রয়োগ করুন। স্পষ্ট ক্যানসেলেশন (cancellation) এবং রিট্রাই (retry) পলিসি যোগ করুন এবং একটি টাস্ক পেন্ডিং থাকা অবস্থায় একজন এজেন্ট কী করতে পারবে তার সীমাবদ্ধতা নির্ধারণ করুন।
২৮ জুলাইয়ের আগে SDK এবং ক্লায়েন্ট লাইব্রেরির রিলিজ নোটগুলো দেখে নিন।
রিগ্রেশন স্যুট চালান যা ফেইলর পাথগুলোকে (failure paths) টার্গেট করে: সাধারণ সফল টেস্টের (happy-path tests) বাইরেও, মিসিং হেডার, মেয়াদোত্তীর্ণ টাস্ক এবং ত্রুটিপূর্ণ ক্যাশ ডিরেক্টিভ ইনজেক্ট করে দেখুন। নিশ্চিত করুন যে সিস্টেমটি সুন্দরভাবে (gracefully) কাজ সামলাতে পারে।
পরবর্তীতে যা খেয়াল রাখতে হবে
যেসব টিম নিরাপদে মাইগ্রেট করবে, তারা শুধু সফল পথ (happy path) নয়, বরং সিস্টেমের সীমানা বা বাউন্ডারিগুলোও পরীক্ষা করবে। ২৮ জুলাইয়ের পরেও যদি কোনো প্রোডাকশন ডিপ্লয়মেন্ট সেশন আইডির ওপর নির্ভর করে, তবে তা নতুন MCP সার্ভারের সাথে কাজ করতে ব্যর্থ হতে পারে।
