বড় ভাষার মডেল (LLM) বিশাল পরিমাণ পূর্ব-প্রশিক্ষিত ডেটার ওপর ভিত্তি করে প্রশ্নের উত্তর দিতে পারে, কিন্তু বাস্তব সময়ের তথ্য, নির্দিষ্ট অ্যাপ্লিকেশন বা কোনো বহিরাগত সিস্টেমের সঙ্গে সরাসরি সংযোগ স্থাপনের ক্ষমতা তাদের থাকে না। ঠিক এই শূন্যস্থান পূরণ করতেই এসেছে মডেল কনটেক্সট প্রটোকল বা MCP। MCP একটি ওপেন স্ট্যান্ডার্ড যা LLM-কে টুল, ডেটাবেস, ফাইল সিস্টেম ও অন্যান্য এক্সটার্নাল রিসোর্সের সঙ্গে নিরাপদ ও অভিন্ন উপায়ে যুক্ত করে। এখানে আমরা MCP-এর ধারণা, এর প্রয়োজনীয়তা, কার্যপ্রণালী এবং একটি সহজ সার্ভার তৈরির হাতে-কলমে উদাহরণ দেখব।

MCP কী?

Model Context Protocol (MCP) মূলত Anthropic কর্তৃক উদ্ভাবিত একটি ওপেন প্রটোকল, যা এআই অ্যাপ্লিকেশন এবং বাইরের কনটেক্সট সরবরাহকারী সিস্টেমের মধ্যে একটি স্ট্যান্ডার্ড ইন্টারফেস হিসেবে কাজ করে। অনেকটা USB-C পোর্ট যেমন বিভিন্ন ডিভাইসের সংযোগ সহজ করে, তেমনি MCP যেকোনো LLM-ভিত্তিক অ্যাপকে একটিমাত্র প্রটোকলের মাধ্যমে অসংখ্য টুল ও ডেটাসোর্সের সঙ্গে সংযুক্ত করতে দেয়।

প্রটোকলটি ক্লায়েন্ট-সার্ভার আর্কিটেকচার অনুসরণ করে। একটি MCP হোস্ট অ্যাপ্লিকেশন (যেমন Claude ডেস্কটপ, IDE কিংবা কাস্টম চ্যাটবট) এক বা একাধিক MCP ক্লায়েন্ট ধারণ করে, যারা JSON-RPC 2.0 মেসেজিং ব্যবস্থার মাধ্যমে MCP সার্ভারের সঙ্গে যোগাযোগ স্থাপন করে। সার্ভারগুলো বিভিন্ন ক্যাপাবিলিটি প্রকাশ করতে পারে—রিসোর্স (ডেটা), টুল (ফাংশন কল), প্রম্পট টেমপ্লেট ইত্যাদি। এই একীভূত কাঠামোর কারণে প্রতিটি টুল বা সার্ভিসের জন্য আলাদা ইন্টিগ্রেশন লেখার ঝামেলা দূর হয়।

MCP-এর ডিজাইন মডুলার ও বিস্তারণযোগ্য। যে কেউ নিজের প্রয়োজনমতো কাস্টম MCP সার্ভার তৈরি করে নিতে পারে, যা LLM-কে গুগল ড্রাইভ, ডেটাবেস, ইন্টারনাল এপিআই বা অন্য যেকোনো সিস্টেমের সঙ্গে যুক্ত করতে পারে। এটি LLM-কে নিছক টেক্সট জেনারেটরের বাইরে নিয়ে গিয়ে একটি সত্যিকারের এজেন্টে পরিণত করে, যে বাস্তব বিশ্বে কার্যকরী অ্যাকশন নিতে পারে।

কেন MCP গুরুত্বপূর্ণ

LLM সাধারণত প্রশিক্ষণের সময়সীমার পরবর্তী কোনো ইভেন্ট সম্পর্কে জ্ঞাত থাকে না এবং কোনো এক্সটারনাল কল করতে পারে না। ফলে ব্যবহারকারী যদি সরাসরি “আমার জিরা বোর্ডে গত সপ্তাহের সব বাগ দেখাও” বলেও বসেন, মডেল নিজে থেকে তা করতে পারে না। MCP এই সীমাবদ্ধতা দূর করে।

MCP গ্রহণ করলে মডেল পায়:

  • রিয়েল-টাইম ডেটা অ্যাক্সেস – লাইভ ওয়েদার, স্টক প্রাইস, কোম্পানির ড্যাশবোর্ড সরাসরি আনা সম্ভব।
  • টুল-ইউজ – ডেটাবেস কোয়েরি করা, ইমেইল পাঠানো, ক্যালেন্ডার ইভেন্ট তৈরি ইত্যাদি অটোমেশন সরাসরি কথোপকথন থেকে চালানো যায়।
  • একক প্রটোকল, বহু সংযোগ – প্রতিটি নতুন টুলের জন্য মডেলের ইন্টারফেস পুনর্লিখন করতে হয় না; শুধুমাত্র একটি MCP সার্ভার দাঁড় করালেই চলে।
  • নিরাপত্তা ও কন্ট্রোল – হোস্ট অ্যাপ্লিকেশন নির্ধারণ করতে পারে কোন সার্ভার কী কী পারমিশন পাবে, ফলে সংবেদনশীল ডেটা সুরক্ষিত থাকে।

একজন ডেভেলপার হিসেবে, এমসিপি আপনাকে LLM-এর সক্ষমতা দ্রুত বাড়ানোর সুযোগ দেয়, কোনো ভেন্ডর-লক-ইন ছাড়াই। ওপেন স্ট্যান্ডার্ড হওয়ায় কমিউনিটি ইতিমধ্যেই নানা প্রি-বিল্ট MCP সার্ভার তৈরি করেছে, যা ডকার, গিটহাব, স্ল্যাক প্রভৃতি জনপ্রিয় পরিষেবার সঙ্গে জুড়ে যায়।

MCP কীভাবে কাজ করে

MCP-এর কার্যপ্রণালী প্রধানত তিনটি জিনিসের ওপর দাঁড়িয়ে: হোস্ট, ক্লায়েন্ট ও সার্ভার। হোস্ট হলো ব্যবহারকারীর অ্যাপ্লিকেশন, যেমন Claude Desktop, যা নিজের ভেতরে এক বা একাধিক MCP ক্লায়েন্ট চালায়। প্রতিটি ক্লায়েন্ট একটি নির্দিষ্ট MCP সার্ভারের সঙ্গে একটি সংযোগ তৈরি করে, সাধারণত stdio (স্ট্যান্ডার্ড ইনপুট/আউটপুট) অথবা Server-Sent Events (SSE)-র মাধ্যমে।

যোগাযোগ পুরোপুরি JSON-RPC 2.0 ভিত্তিক। সংযুক্ত হওয়ার পর ক্লায়েন্ট প্রথমে একটি initialize রিকোয়েস্ট পাঠায়, যার উত্তরে সার্ভার তার ক্যাপাবিলিটি জানায়—কী কী রিসোর্স, টুল বা প্রম্পট টেমপ্লেট পাওয়া যাবে। এরপর ব্যবহারকারী যখন কোনো প্রশ্ন করেন বা কাজ দেন, তখন মডেল প্রয়োজনীয় টুল কল নির্ধারণ করে এবং ক্লায়েন্টের মাধ্যমে সার্ভারে tools/call রিকোয়েস্ট প্রেরণ করে। সার্ভার কাজ শেষে রেজাল্ট ফেরত দিলে মডেল সেটিকে প্রক্রিয়া করে চূড়ান্ত উত্তর তৈরি করে।

একটি MCP সার্ভার যে তিন ধরনের ক্যাপাবিলিটি প্রকাশ করতে পারে:

  • রিসোর্স – স্ট্যাটিক বা ডাইনামিক ডেটা, যেমন ফাইলের কনটেন্ট, ডাটাবেস রেকর্ড।
  • টুল – ফাংশন যা মডেল চাইলে কল করতে পারে, যেমন create_ticket, search_docs
  • প্রম্পট – পুনর্ব্যবহারযোগ্য প্রম্পট টেমপ্লেট যা মডেল সরাসরি ব্যবহার করতে বা ব্যবহারকারীকে দেখাতে পারে।

এই ডিজাইন মডেলকে প্রয়োজন অনুযায়ী কনটেক্সট টেনে আনার এবং বাস্তব অ্যাকশন নেওয়ার স্বাধীনতা দেয়, সম্পূর্ণ লোকালি বা প্রাইভেট ক্লাউডে সবকিছু চালানোই সম্ভব।

একটি সহজ MCP সার্ভার তৈরি

সবচেয়ে ভালো অভিজ্ঞতা হচ্ছে হাতে-কলমে কিছু বানানো। চলুন Python দিয়ে একটি মিনিমাল MCP সার্ভার লিখি যা একটি weather_by_city টুল প্রকাশ করবে।

প্রথমে প্রয়োজনীয় প্যাকেজ ইন্সটল করুন:

pip install mcp

তারপর নিচের কোডটি একটি ফাইলে সংরক্ষণ করুন (যেমন weather_server.py) এবং রান করুন।

from mcp.server import Server
from mcp.server.stdio import stdio_server
import asyncio

# সার্ভার অবজেক্ট তৈরি
server = Server("weather-info-server")

@server.tool()
def weather_by_city(city: str) -> str:
    """শহরের নাম দেখে সেখানকার আবহাওয়া জানায়"""
    # ডেমো ডেটা — বাস্তবে এখানে কোনো API কল হবে
    return f"{city}: ২৫°C, রৌদ্রোজ্জ্বল"

async def main():
    # stdio-র মাধ্যমে ক্লায়েন্টের সাথে সংযোগ স্থাপন
    async with stdio_server() as (read_stream, write_stream):
        await server.run(
            read_stream,
            write_stream,
            server.create_initialization_options()
        )

if __name__ == "__main__":
    asyncio.run(main())

এই সার্ভারটি প্রস্তুত। @server.tool() ডেকোরেটর দিয়ে আমরা weather_by_city ফাংশনকে একটি টুল হিসেবে প্রকাশ করেছি, যা MCP ক্লায়েন্ট স্বয়ংক্রিয়ভাবে ডিটেক্ট করে নেবে। Claude Desktop-এর মতো কোনো MCP হোস্টে এই সার্ভারের পাথ কনফিগার করলেই মডেলটি কথোপকথনের সময় “ঢাকার আবহাওয়া কেমন?” বললেই এই টুল কল করে রিয়েল টাইম (ডেমো) তথ্য ফেরত পাবে। বাস্তব প্রয়োজনে ফাংশনের ভেতরে REST API কল জুড়ে দিলেই পুরো সিস্টেম লাইভ ডেটা নিয়ে কাজ শুরু করবে।

সেরা অনুশীলন ও পরামর্শ

MCP সার্ভার তৈরি ও ব্যবস্থাপনার সময় নিচের বিষয়গুলো মাথায় রাখা আপনার ইন্টিগ্রেশনকে শক্তিশালী ও নিরাপদ করবে:

  • টুলের নাম ও বিবরণ পরিষ্কার রাখুন – মডেল টুলের নাম ও ডকস্ট্রিং দেখেই সেটি কখন কল করবে তা নির্ধারণ করে। সংক্ষিপ্ত কিন্তু অর্থপূর্ণ নাম দিন।
  • ইনপুট ভ্যালিডেশন করুন – Pydantic বা টাইপ হিন্ট ব্যবহার করে নিশ্চিত হোন যে টুল কেবল গ্রহণযোগ্য আর্গুমেন্টই পাবে।
  • স্কোপ ও পারমিশন নিয়ন্ত্রণ – সংবেদনশীল অপারেশনের (যেমন ডেটাবেস রাইট) জন্য আলাদা পারমিশন লেয়ার রাখুন এবং ইউজার কনফার্মেশন চালু করুন।
  • এরর হ্যান্ডলিং শক্তিশালী করুন – সার্ভার-লেভেল এক্সেপশন মডেলের কাছে অর্থপূর্ণ মেসেজ দিক, যাতে সে ব্যবহারকারীকে পরিষ্কার ফিডব্যাক জানাতে পারে।
  • ভার্সনিং ও ডকুমেন্টেশন – প্রতিটি টুলের ফাংশনালিটি পরিবর্তিত হলে ভার্সন বাড়ান, এবং কমিউনিটি যাতে পুনরায় ব্যবহার করতে পারে সেজন্য সংক্ষিপ্ত রিডমি তৈরি করুন।
  • লোকাল রানকেই অগ্রাধিকার দিন – সম্ভব হলে সার্ভার লোকাল মেশিনে বা প্রাইভেট নেটওয়ার্কে চালান, যাতে ডেটা বাইরে লিক না হয়।

MCP একটি ক্রমবর্ধমান ইকোসিস্টেম। সার্ভার তৈরি করা মানে শুধু নিজের প্রজেক্টের জন্য সুবিধা নয়, বরং অন্যদের জন্যও একটি বিল্ডিং ব্লক রেখে যাওয়া।

সারসংক্ষেপ

মডেল কনটেক্সট প্রটোকল (MCP) LLM-এর জগতে একটি নীরব বিপ্লব, কারণ এটিই প্রথম ওপেন স্ট্যান্ডার্ড যা দৈনন্দিন টুল ও ডেটাকে মডেলের চিন্তা-প্রক্রিয়ার সরাসরি অংশ করে তোলে। এর মাধ্যমে একটি LLM শুধু কথাই বলতে পারে না, বরং দেখতে, ডেটা টানতে, এবং বাস্তব কাজও করতে পারে। সাধারণ JSON-RPC ভিত্তিক যোগাযোগ, ক্লায়েন্ট-সার্ভার নকশা এবং প্রি-বিল্ট লাইব্রেরির কারণে MCP-তে প্রবেশ করা অত্যন্ত সহজ। প্রথম সার্ভারটি পাঁচ মিনিটেই বানানো সম্ভব, আর তারপর স্কেল করার পথ একেবারে খোলা। এখন সময় নিজের প্রথম MCP সার্ভারটি দাঁড় করিয়ে LLM-কে আরও কার্যকরী রূপ দেওয়ার।

Share