48 KiB
HTTPS স্ট্রিমিং মডেল কন্টেক্সট প্রোটোকল (MCP) দিয়ে
এই অধ্যায়টি মডেল কন্টেক্সট প্রোটোকল (MCP) ব্যবহার করে HTTPS-এর মাধ্যমে নিরাপদ, স্কেলযোগ্য এবং রিয়েল-টাইম স্ট্রিমিং বাস্তবায়নের একটি বিস্তৃত গাইড প্রদান করে। এটি স্ট্রিমিংয়ের প্রেরণা, উপলব্ধ টران্সপোর্ট মেকানিজম, MCP-তে স্ট্রিমেবল HTTP কিভাবে বাস্তবায়ন করবেন, সুরক্ষা সর্বোত্তম অনুশীলন, SSE থেকে মাইগ্রেশন, এবং নিজের স্ট্রিমিং MCP অ্যাপ্লিকেশন তৈরি করার জন্য ব্যবহারিক নির্দেশনা অন্তর্ভুক্ত করে।
MCP-তে ট্রান্সপোর্ট মেকানিজম এবং স্ট্রিমিং
এই অংশটি MCP-তে উপলব্ধ বিভিন্ন ট্রান্সপোর্ট মেকানিজম নিয়ে আলোচনা করে এবং ক্লায়েন্ট ও সার্ভারের মধ্যে রিয়েল-টাইম যোগাযোগ সক্ষম করতে তাদের ভূমিকা বোঝায়।
ট্রান্সপোর্ট মেকানিজম কী?
একটি ট্রান্সপোর্ট মেকানিজম নির্ধারণ করে কিভাবে ডেটা ক্লায়েন্ট এবং সার্ভারের মধ্যে বিনিময় করা হয়। MCP বিভিন্ন পরিবেশ ও চাহিদার জন্য বিভিন্ন ধরনের ট্রান্সপোর্ট সমর্থন করে:
- stdio: স্ট্যান্ডার্ড ইনপুট/আউটপুট, লোকাল এবং CLI-ভিত্তিক টুলের জন্য উপযুক্ত। সহজ কিন্তু ওয়েব বা ক্লাউডের জন্য উপযুক্ত নয়।
- SSE (Server-Sent Events): সার্ভার থেকে HTTP-এর মাধ্যমে ক্লায়েন্টকে রিয়েল-টাইম আপডেট পাঠানোর অনুমতি দেয়। ওয়েব ইউআইয়ের জন্য ভালো, কিন্তু স্কেলেবিলিটি এবং নমনীয়তায় সীমাবদ্ধ। MCP স্পেসিফিকেশন ২০২৫-০৬-১৮ থেকে স্বতন্ত্র SSE ট্রান্সপোর্ট বাতিল করা হয়েছে এবং এর পরিবর্তে "Streamable HTTP" ট্রান্সপোর্ট ব্যবহৃত হচ্ছে।
- Streamable HTTP: আধুনিক HTTP-ভিত্তিক স্ট্রিমিং ট্রান্সপোর্ট, বিজ্ঞপ্তি এবং উন্নত স্কেলেবিলিটি সমর্থন করে। অধিকাংশ প্রোডাকশন এবং ক্লাউড পরিস্থিতির জন্য প্রস্তাবিত।
তুলনামূলক টেবিল
নিম্নলিখিত তুলনামূলক টেবিলটি দেখে এই ট্রান্সপোর্ট মেকানিজমগুলোর পার্থক্য বুঝুন:
| Transport | রিয়েল-টাইম আপডেট | স্ট্রিমিং | স্কেলেবিলিটি | ব্যবহার ক্ষেত্র |
|---|---|---|---|---|
| stdio | না | না | কম | লোকাল CLI টুলস |
| SSE | হ্যাঁ | হ্যাঁ | মাঝারি | ওয়েব, রিয়েল-টাইম আপডেট |
| Streamable HTTP | হ্যাঁ | হ্যাঁ | উচ্চ | ক্লাউড, মাল্টি-ক্লায়েন্ট |
টিপ: সঠিক ট্রান্সপোর্ট বেছে নেওয়া কর্মক্ষমতা, স্কেলেবিলিটি এবং ব্যবহারকারীর অভিজ্ঞতাকে প্রভাবিত করে। আধুনিক, স্কেলযোগ্য এবং ক্লাউড-রেডি অ্যাপ্লিকেশনের জন্য Streamable HTTP সুপারিশকৃত।
পূর্ববর্তী অধ্যায়ে দেখানো stdio এবং SSE ট্রান্সপোর্ট এবং এই অধ্যায়ে আলোচনা করা streamable HTTP ট্রান্সপোর্ট লক্ষ্য করুন।
স্ট্রিমিং: ধারণা এবং প্রেরণা
স্ট্রিমিংয়ের মৌলিক ধারণা এবং প্রেরণা বোঝা কার্যকর রিয়েল-টাইম যোগাযোগ ব্যবস্থা বাস্তবায়নের জন্য অপরিহার্য।
স্ট্রিমিং হল একটি নেটওয়ার্ক প্রোগ্রামিং প্রযুক্তি যা ডেটাকে ছোট ছোট, পরিচালনাযোগ্য অংশ বা ঘটনার একটি ক্রমে প্রেরণ ও গ্রহণ করতে দেয়, সম্পূর্ণ রেস্পন্সের জন্য অপেক্ষা না করে। এটি বিশেষত উপকারী:
- বড় ফাইল বা ডেটাসেটের জন্য।
- রিয়েল-টাইম আপডেট (যেমন, চ্যাট, প্রগ্রেস বার)।
- দীর্ঘমেয়াদী গণনার জন্য যেখানে ব্যবহারকারীদের তথ্য প্রদান করা দরকার।
উচ্চ স্তরে স্ট্রিমিং সম্পর্কে যা জানা দরকার:
- ডেটা ধাপে ধাপে সরবরাহ করা হয়, একবারে নয়।
- ক্লায়েন্ট ডেটা আসার সঙ্গে সঙ্গে প্রক্রিয়াকরণ করতে পারে।
- অনুভূত বিলম্ব কমায় এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।
কেন স্ট্রিমিং ব্যবহার করবেন?
স্ট্রিমিং ব্যবহারের কারণগুলো হলো:
- ব্যবহারকারীরা তাৎক্ষণিক প্রতিক্রিয়া পায়, শুধুমাত্র শেষে নয়
- রিয়েল-টাইম অ্যাপ্লিকেশন এবং সাড়া দেওয়া ইউআই সক্ষম করে
- নেটওয়ার্ক এবং কম্পিউটিং সম্পদের আরও কার্যকর ব্যবহার
সহজ উদাহরণ: HTTP স্ট্রিমিং সার্ভার ও ক্লায়েন্ট
স্ট্রিমিং কিভাবে বাস্তবায়ন করা যায় তা সহজ উদাহরণে দেখানো হলো:
Python
সার্ভার (Python, FastAPI ও StreamingResponse ব্যবহার করে):
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import time
app = FastAPI()
async def event_stream():
for i in range(1, 6):
yield f"data: Message {i}\n\n"
time.sleep(1)
@app.get("/stream")
def stream():
return StreamingResponse(event_stream(), media_type="text/event-stream")
ক্লায়েন্ট (Python, requests ব্যবহার করে):
import requests
with requests.get("http://localhost:8000/stream", stream=True) as r:
for line in r.iter_lines():
if line:
print(line.decode())
এই উদাহরণে সার্ভার ক্লায়েন্টকে একটি সিরিজ মেসেজ পাঠাচ্ছে যেগুলো প্রস্তুত হতেই প্রেরণ করা হচ্ছে, সব মেসেজ প্রস্তুত হওয়ার জন্য অপেক্ষা করছে না।
কিভাবে কাজ করে:
- সার্ভার প্রতিটি মেসেজ প্রস্তুত হতেই প্রেরণ করে।
- ক্লায়েন্ট প্রতিটি অংশ পেয়ে তা প্রিন্ট করে।
প্রয়োজনীয়তা:
- সার্ভারকে স্ট্রিমিং রেস্পন্স ব্যবহার করতে হবে (যেমন, FastAPI-র
StreamingResponse)। - ক্লায়েন্টকে স্ট্রিম হিসেবে রেস্পন্স প্রসেস করতে হবে (
stream=Truerequests-এ)। - Content-Type সাধারণত
text/event-streamঅথবাapplication/octet-streamহয়।
Java
সার্ভার (Java, Spring Boot এবং Server-Sent Events ব্যবহারে):
@RestController
public class CalculatorController {
@GetMapping(value = "/calculate", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<String>> calculate(@RequestParam double a,
@RequestParam double b,
@RequestParam String op) {
double result;
switch (op) {
case "add": result = a + b; break;
case "sub": result = a - b; break;
case "mul": result = a * b; break;
case "div": result = b != 0 ? a / b : Double.NaN; break;
default: result = Double.NaN;
}
return Flux.<ServerSentEvent<String>>just(
ServerSentEvent.<String>builder()
.event("info")
.data("Calculating: " + a + " " + op + " " + b)
.build(),
ServerSentEvent.<String>builder()
.event("result")
.data(String.valueOf(result))
.build()
)
.delayElements(Duration.ofSeconds(1));
}
}
ক্লায়েন্ট (Java, Spring WebFlux WebClient ব্যবহার করে):
@SpringBootApplication
public class CalculatorClientApplication implements CommandLineRunner {
private final WebClient client = WebClient.builder()
.baseUrl("http://localhost:8080")
.build();
@Override
public void run(String... args) {
client.get()
.uri(uriBuilder -> uriBuilder
.path("/calculate")
.queryParam("a", 7)
.queryParam("b", 5)
.queryParam("op", "mul")
.build())
.accept(MediaType.TEXT_EVENT_STREAM)
.retrieve()
.bodyToFlux(String.class)
.doOnNext(System.out::println)
.blockLast();
}
}
Java বাস্তবায়ন নোটস:
- Spring Boot-এর রিএ্যাকটিভ স্ট্যাক
Fluxব্যবহার করে স্ট্রিমিং ServerSentEventইভেন্ট টাইপসহ কাঠামোগত ইভেন্ট স্ট্রিমিং প্রদান করেWebClient-এরbodyToFlux()রিএ্যাকটিভ স্ট্রিমিং ব্যবহারে সহায়কdelayElements()ইভেন্টের মধ্যে প্রক্রিয়াকরণ সময় সিমুলেট করে- ইভেন্টগুলোতে টাইপ (যেমন
info,result) থাকতে পারে উন্নত ক্লায়েন্ট পরিচালনার জন্য
তুলনা: ক্লাসিক স্ট্রিমিং বনাম MCP স্ট্রিমিং
ক্লাসিক্যাল স্ট্রিমিং এবং MCP-র স্ট্রিমিংয়ের মধ্যে পার্থক্য নিম্নরূপ:
| বৈশিষ্ট্য | ক্লাসিক HTTP স্ট্রিমিং | MCP স্ট্রিমিং (নোটিফিকেশন) |
|---|---|---|
| প্রধান রেস্পন্স | চাঙ্কড | একক, শেষে |
| প্রগ্রেস আপডেট | ডেটা চাঙ্ক হিসাবে প্রেরণ | নোটিফিকেশন হিসাবে প্রেরণ |
| ক্লায়েন্টের প্রয়োজন | স্ট্রিম প্রসেস করতে হবে | মেসেজ হ্যান্ডলার বাস্তবায়ন করা প্রয়োজন |
| ব্যবহার ক্ষেত্র | বড় ফাইল, AI টোকেন স্ট্রিম | প্রগ্রেস, লগ, রিয়েল-টাইম ফিডব্যাক |
পর্যবেক্ষণকৃত মূল পার্থক্য
অতিরিক্ত কিছু মূল পার্থক্য:
-
যোগাযোগ প্যাটার্ন:
- ক্লাসিক HTTP স্ট্রিমিং: সহজ চাঙ্কেড ট্রান্সফার এনকোডিং ব্যবহার করে ডেটা প্রেরণ
- MCP স্ট্রিমিং: JSON-RPC প্রোটোকল সহ কাঠামোগত নোটিফিকেশন সিস্টেম ব্যবহার করে
-
মেসেজ ফরম্যাট:
- ক্লাসিক HTTP: সাধারণ পাঠ্য চাঙ্ক নতুন লাইনের সঙ্গে
- MCP: মেটাডেটার সঙ্গে কাঠামোগত LoggingMessageNotification অবজেক্ট
-
ক্লায়েন্ট বাস্তবায়ন:
- ক্লাসিক HTTP: সহজ ক্লায়েন্ট যা স্ট্রিমিং রেস্পন্স প্রক্রিয়াকরণ করে
- MCP: আরও জটিল ক্লায়েন্ট যা বিভিন্ন ধরনের মেসেজ প্রক্রিয়াকরণের জন্য মেসেজ হ্যান্ডলার ব্যবহার করে
-
প্রগ্রেস আপডেট:
- ক্লাসিক HTTP: প্রধান রেস্পন্স স্ট্রিমের অংশ
- MCP: প্রগ্রেস আলাদা নোটিফিকেশন মেসেজ হিসেবে প্রেরিত হয়, প্রধান রেস্পন্স শেষে আসে
সুপারিশসমুহ
ক্লাসিক্যাল স্ট্রিমিং (যেমন /stream এন্ডপয়েন্ট ব্যবহার করে) এবং MCP স্ট্রিমিংয়ের মধ্যে নির্বাচন করার সময় কিছু সুপারিশ রয়েছে:
-
সরল স্ট্রিমিং প্রয়োজনে: ক্লাসিক HTTP স্ট্রিমিং সহজ এবং মৌলিক স্ট্রিমিং প্রয়োজনে যথেষ্ট।
-
জটিল, ইন্টারেক্টিভ অ্যাপ্লিকেশনের জন্য: MCP স্ট্রিমিং কাঠামোবদ্ধ পদ্ধতি দেয় উন্নত মেটাডেটা ও নোটিফিকেশন ও চূড়ান্ত ফলাফল পৃথককরণের মাধ্যমে।
-
AI অ্যাপ্লিকেশনের জন্য: MCP-এর নোটিফিকেশন সিস্টেম দীর্ঘমেয়াদী AI কাজের জন্য বিশেষ উপযোগী যেখানে ব্যবহারকারীদের আপডেট রাখতে হয়।
MCP-তে স্ট্রিমিং
তাহলে, আপনি এখন পর্যন্ত ক্লাসিক্যাল এবং MCP স্ট্রিমিংয়ের পার্থক্য সম্পর্কে কিছু সুপারিশ ও তুলনা দেখেছেন। আসুন বিস্তারিত জানি MCP-তে স্ট্রিমিং কিভাবে ব্যবহার করবেন।
MCP ফ্রেমওয়ার্কের মধ্যে স্ট্রিমিং কিভাবে কাজ করে তা বোঝা অপরিহার্য, যাতে দীর্ঘমেয়াদী অপারেশনে ব্যবহারকারীদের রিয়েল-টাইম ফিডব্যাক দিয়ে দ্রুত সাড়া দেওয়া যায়।
MCP-তে স্ট্রিমিং মানে প্রধান রেস্পন্স চাঙ্কে পাঠানোর পরিবর্তে, টুল যখন কোনো অনুরোধ প্রক্রিয়াকরণ করছে তখন ক্লায়েন্টকে নোটিফিকেশন পাঠানো। এই নোটিফিকেশনগুলিতে প্রগ্রেস আপডেট, লগ অথবা অন্যান্য ঘটনা থাকতে পারে।
কিভাবে কাজ করে
প্রধান ফলাফল এখনও একক রেস্পন্স হিসাবে পাঠানো হয়। তবে প্রক্রিয়াকরণের সময় আলাদা আলাদা নোটিফিকেশন মেসেজ পাঠিয়ে ক্লায়েন্টকে রিয়েল-টাইমে আপডেট করা যায়। ক্লায়েন্টকে এই নোটিফিকেশনগুলো পরিচালনা ও প্রদর্শন করতে সক্ষম হতে হবে।
নোটিফিকেশন কী?
আমরা বললাম "নোটিফিকেশন", MCP-এর প্রেক্ষাপটে এর অর্থ কী?
নোটিফিকেশন হল সার্ভার থেকে ক্লায়েন্টকে পাঠানো মেসেজ যা দীর্ঘমেয়াদী অপারেশনে প্রগ্রেস, অবস্থা বা অন্যান্য ঘটনার তথ্য দেয়। নোটিফিকেশন স্বচ্ছতা বৃদ্ধি করে এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।
যেমন, ক্লায়েন্টকে সার্ভারের সাথে প্রথম হ্যান্ডশেক সম্পন্ন হলে একটি নোটিফিকেশন পাঠাতে হয়।
একটি নোটিফিকেশন JSON মেসেজের মতো দেখায়:
{
jsonrpc: "2.0";
method: string;
params?: {
[key: string]: unknown;
};
}
নোটিফিকেশন MCP-এর "Logging" টপিকের অন্তর্গত।
লগিং সক্রিয় করতে সার্ভারকে ফিচার/ক্ষমতা হিসেবে এটি চালু করতে হবে এই রকম:
{
"capabilities": {
"logging": {}
}
}
Note
ব্যবহৃত SDK এর ওপর নির্ভর করে, লগিং নিজে থেকেই সক্রিয় থাকতে পারে, অথবা আপনাকে সার্ভার কনফিগারেশনে এটি স্পষ্টভাবে সক্রিয় করতে হতে পারে।
বিভিন্ন ধরনের নোটিফিকেশন রয়েছে:
| স্তর | বর্ণনা | উদাহরণ ব্যবহারের ক্ষেত্র |
|---|---|---|
| debug | বিস্তারিত ডিবাগিং তথ্য | ফাংশন প্রবেশ/প্রস্থান পয়েন্ট |
| info | সাধারণ তথ্যপূর্ণ মেসেজ | অপারেশন প্রগ্রেস আপডেট |
| notice | স্বাভাবিক কিন্তু গুরুত্বপূর্ণ ঘটনা | কনফিগারেশন পরিবর্তন |
| warning | সতর্কতা শর্ত | অব্যবহৃত ফিচারের ব্যবহার |
| error | ত্রুটি শর্ত | অপারেশন ব্যর্থতা |
| critical | গুরুতর শর্ত | সিস্টেম কম্পোনেন্ট ব্যর্থতা |
| alert | দ্রুত ব্যবস্থা নেওয়া প্রয়োজন | ডেটা করাপশন সনাক্তকরণ |
| emergency | সিস্টেম ব্যবহারযোগ্য নয় | পুরো সিস্টেম ব্যর্থ |
MCP-তে নোটিফিকেশন বাস্তবায়ন
MCP-তে নোটিফিকেশন বাস্তবায়নের জন্য সার্ভার এবং ক্লায়েন্ট দুই পক্ষেই রিয়েল-টাইম আপডেট পরিচালনার ব্যবস্থা করতে হয়। এভাবে আপনার অ্যাপ্লিকেশন দীর্ঘমেয়াদী অপারেশনে ব্যবহারকারীদের তাৎক্ষণিক প্রতিক্রিয়া দিতে পারে।
সার্ভার সাইড: নোটিফিকেশন পাঠানো
সার্ভার সাইড থেকে শুরু করা যাক। MCP-তে আপনি এমন টুল সংজ্ঞায়িত করেন যা অনুরোধ প্রক্রিয়াকরণের সময় নোটিফিকেশন পাঠাতে পারে। সার্ভার ক্লায়েন্টকে মেসেজ পাঠাতে সাধারণত কন্টেক্সট অবজেক্ট (ctx) ব্যবহার করে।
Python
@mcp.tool(description="A tool that sends progress notifications")
async def process_files(message: str, ctx: Context) -> TextContent:
await ctx.info("Processing file 1/3...")
await ctx.info("Processing file 2/3...")
await ctx.info("Processing file 3/3...")
return TextContent(type="text", text=f"Done: {message}")
উপরের উদাহরণে, process_files টুল প্রতিটি ফাইল প্রক্রিয়া করার সময় ক্লায়েন্টকে তিনটি নোটিফিকেশন পাঠাচ্ছে। তথ্যপূর্ণ মেসেজ পাঠানোর জন্য ctx.info() পদ্ধতি ব্যবহার করা হয়েছে।
অতিরিক্তভাবে, নোটিফিকেশন চালু রাখতে সার্ভারকে স্ট্রিমিং ট্রান্সপোর্ট (যেমন streamable-http) ব্যবহার করতে হবে এবং ক্লায়েন্টকে নোটিফিকেশন প্রক্রিয়াকরণের জন্য মেসেজ হ্যান্ডলার বাস্তবায়ন করতে হবে। নিচে streamable-http ট্রান্সপোর্ট ব্যবহারের সার্ভার সেটআপ দেখানো হলো:
mcp.run(transport="streamable-http")
.NET
[Tool("A tool that sends progress notifications")]
public async Task<TextContent> ProcessFiles(string message, ToolContext ctx)
{
await ctx.Info("Processing file 1/3...");
await ctx.Info("Processing file 2/3...");
await ctx.Info("Processing file 3/3...");
return new TextContent
{
Type = "text",
Text = $"Done: {message}"
};
}
এই .NET উদাহরণে, ProcessFiles টুলে Tool অ্যাট্রিবিউট ব্যবহার করে প্রতিটি ফাইল প্রক্রিয়াকালে ক্লায়েন্টকে তিনটি নোটিফিকেশন পাঠানো হচ্ছে। তথ্যপূর্ণ মেসেজ পাঠানোর জন্য ctx.Info() পদ্ধতি ব্যবহৃত হয়েছে।
আপনার .NET MCP সার্ভারে নোটিফিকেশন সক্ষম করতে স্ট্রিমিং ট্রান্সপোর্ট ব্যবহার নিশ্চিত করুন:
var builder = McpBuilder.Create();
await builder
.UseStreamableHttp() // Enable streamable HTTP transport
.Build()
.RunAsync();
ক্লায়েন্ট সাইড: নোটিফিকেশন গ্রহণ
ক্লায়েন্টকে মেসেজ হ্যান্ডলার বাস্তবায়ন করতে হবে যাতে আগত নোটিফিকেশনগুলো প্রক্রিয়াকরণ ও প্রদর্শন করা যায়।
Python
async def message_handler(message):
if isinstance(message, types.ServerNotification):
print("NOTIFICATION:", message)
else:
print("SERVER MESSAGE:", message)
async with ClientSession(
read_stream,
write_stream,
logging_callback=logging_collector,
message_handler=message_handler,
) as session:
উপরের কোডে, message_handler ফাংশন চেক করে ইনকামিং মেসেজ নোটিফিকেশন কিনা। যদি হয়, সেটি প্রিন্ট করে; নাহলে স্বাভাবিক সার্ভার মেসেজ হিসেবে প্রক্রিয়া করে। লক্ষ করুন কীভাবে ClientSession মেসেজ হ্যান্ডলার সহ ইনিশিয়ালাইজ করা হয়েছে।
.NET
// Define a message handler
void MessageHandler(IJsonRpcMessage message)
{
if (message is ServerNotification notification)
{
Console.WriteLine($"NOTIFICATION: {notification}");
}
else
{
Console.WriteLine($"SERVER MESSAGE: {message}");
}
}
// Create and use a client session with the message handler
var clientOptions = new ClientSessionOptions
{
MessageHandler = MessageHandler,
LoggingCallback = (level, message) => Console.WriteLine($"[{level}] {message}")
};
using var client = new ClientSession(readStream, writeStream, clientOptions);
await client.InitializeAsync();
// Now the client will process notifications through the MessageHandler
এই .NET উদাহরণে, MessageHandler ফাংশন চেক করে ইনকামিং মেসেজ নোটিফিকেশন কিনা। যদি হয়, সেটি প্রিন্ট করে; নাহলে স্বাভাবিক সার্ভার মেসেজ হিসেবে প্রক্রিয়া করে। ClientSession ClientSessionOptions এর মাধ্যমে মেসেজ হ্যান্ডলার সহ ইনিশিয়ালাইজ করা হয়েছে।
নোটিফিকেশন সক্ষম করতে সার্ভার streamable-http ট্রান্সপোর্ট ব্যবহার নিশ্চিত করুন এবং ক্লায়েন্ট মেসেজ হ্যান্ডলার বাস্তবায়ন করুক।
প্রগ্রেস নোটিফিকেশন ও পরিস্থিতি
এই অংশে MCP-তে প্রগ্রেস নোটিফিকেশনের ধারণা, এর গুরুত্ব এবং Streamable HTTP ব্যবহার করে কিভাবে তা বাস্তবায়ন করবেন তা আলোচনা করা হয়েছে। এতে একটি ব্যবহারিক অনুশীলনও আছে।
প্রগ্রেস নোটিফিকেশন দীর্ঘমেয়াদী অপারেশনে সার্ভার থেকে ক্লায়েন্টকে রিয়েল-টাইমে পাঠানো মেসেজ। পুরো প্রক্রিয়া শেষ হওয়ার জন্য অপেক্ষা না করে সার্ভার চলমান অবস্থা ক্লায়েন্টকে জানায়। এটি স্বচ্ছতা, ব্যবহারকারীর অভিজ্ঞতা বাড়ায় এবং ডিবাগ করা সহজ করে।
উদাহরণ:
"Processing document 1/10"
"Processing document 2/10"
...
"Processing complete!"
কেন প্রগ্রেস নোটিফিকেশন ব্যবহার করবেন?
প্রগ্রেস নোটিফিকেশন গুরুত্বপূর্ণ নানান কারণে:
- ভাল ব্যবহারকারীর অভিজ্ঞতা: কাজ চলাকালীন আপডেট দেখায়, শুধু শেষে নয়।
- রিয়েল-টাইম ফিডব্যাক: ক্লায়েন্ট প্রগ্রেস বার বা লগ দেখাতে পারে, অ্যাপকে সাড়া দেওয়াযোগ্য করে।
- সহজ ডিবাগিং ও মনিটরিং: ডেভেলপার এবং ব্যবহারকারী দেখতে পারে কোথায় প্রক্রিয়া ধীর বা আটকে আছে।
কিভাবে প্রগ্রেস নোটিফিকেশন বাস্তবায়ন করবেন
MCP-তে প্রগ্রেস নোটিফিকেশন বাস্তবায়নের পদ্ধতি:
- সার্ভারে: প্রতিটি আইটেম প্রক্রিয়া করার সময়
ctx.info()বাctx.log()ব্যবহার করে নোটিফিকেশন পাঠান। এটি প্রধান ফলাফল প্রস্তুত হওয়ার আগে ক্লায়েন্টকে মেসেজ পাঠায়। - ক্লায়েন্টে: একটি মেসেজ হ্যান্ডলার বাস্তবায়ন করুন যা আগত নোটিফিকেশন শোনে ও প্রদর্শন করে। এই হ্যান্ডলার নোটিফিকেশন ও চূড়ান্ত ফলাফল আলাদা করে।
সার্ভার উদাহরণ:
Python
@mcp.tool(description="A tool that sends progress notifications")
async def process_files(message: str, ctx: Context) -> TextContent:
for i in range(1, 11):
await ctx.info(f"Processing document {i}/10")
await ctx.info("Processing complete!")
return TextContent(type="text", text=f"Done: {message}")
ক্লায়েন্ট উদাহরণ:
Python
async def message_handler(message):
if isinstance(message, types.ServerNotification):
print("NOTIFICATION:", message)
else:
print("SERVER MESSAGE:", message)
সুরক্ষা বিবেচনা
HTTP-ভিত্তিক ট্রান্সপোর্টের সঙ্গে MCP সার্ভার বাস্তবায়নের সময় সুরক্ষা একটি অত্যন্ত গুরুত্বপূর্ণ বিষয় যা বিভিন্ন আক্রমণের ক্ষেত্র এবং সুরক্ষা প্রক্রিয়া সম্পর্কে যত্ন সহকারে মনোযোগ প্রয়োজন।
ওভারভিউ
HTTP-এর মাধ্যমে MCP সার্ভার প্রকাশ করার সময় নিরাপত্তা অপরিহার্য। Streamable HTTP নতুন আক্রমণের সুযোগ সৃষ্টি করে এবং যত্নশীল কনফিগারেশন প্রয়োজন।
মূল বিষয়সমুহ
- Origin হেডার যাচাই: DNS রিবাইন্ডিং আক্রমণ রোধের জন্য সব সময়
Originহেডার যাচাই করুন। - লোকালহোস্ট বাইনডিং: লোকাল ডেভেলপমেন্টের জন্য সার্ভারগুলো
localhostএ বাইন্ড করুন যাতে পাবলিক ইন্টারনেটে এক্সপোজ না হয়। - অথেনটিকেশন: প্রোডাকশন ডিপ্লয়মেন্টে অথেনটিকেশন (যেমন, API কী, OAuth) বাস্তবায়ন করুন।
- CORS: এক্সেস সীমাবদ্ধ করতে Cross-Origin Resource Sharing (CORS) নীতিমালা কনফিগার করুন।
- HTTPS: প্রোডাকশনে ট্রাফিক এনক্রিপ্ট করতে HTTPS ব্যবহার করুন।
সর্বোত্তম অনুশীলন
- কোনো ইনকামিং রিকোয়েস্টের ওপর বিশ্বাস করবেন না পরীক্ষা-বিনা।
- সব অ্যাক্সেস এবং ত্রুটির লগ রাখুন ও মনিটর করুন।
- নিরাপত্তা দুর্বলতা দূর করার জন্য ডিপেন্ডেন্সি নিয়মিত আপডেট করুন।
চ্যালেঞ্জসমূহ
- উন্নয়নের সহজতার সাথে নিরাপত্তার সামঞ্জস্য বজায় রাখা
- বিভিন্ন ক্লায়েন্ট পরিবেশের সঙ্গে সামঞ্জস্য নিশ্চিত করা
SSE থেকে Streamable HTTP-এ আপগ্রেড করা
বর্তমানে Server-Sent Events (SSE) ব্যবহারকারী অ্যাপ্লিকেশনগুলির জন্য, Streamable HTTP-তে স্থানান্তর আপনার MCP বাস্তবায়নে উন্নত ক্ষমতা এবং দীর্ঘমেয়াদী টেকসইতা প্রদান করে।
কেন আপগ্রেড করবেন?
SSE থেকে Streamable HTTP-তে আপগ্রেড করার দুইটি প্ররোচনামূলক কারণ রয়েছে:
- Streamable HTTP SSE থেকে ভালো স্কেলেবিলিটি, সামঞ্জস্য এবং সমৃদ্ধ বিজ্ঞপ্তি সমর্থন প্রদান করে।
- এটি নতুন MCP অ্যাপ্লিকেশনগুলির জন্য সুপারিশকৃত পরিবহন পদ্ধতি।
স্থানান্তরের ধাপসমূহ
আপনার MCP অ্যাপ্লিকেশনগুলিতে SSE থেকে Streamable HTTP-তে স্থানান্তর করার পদ্ধতি এখানে দেওয়া হল:
- সার্ভার কোড আপডেট করুন
transport="streamable-http"ব্যবহার করতেmcp.run()এ। - ক্লায়েন্ট কোড আপডেট করুন SSE ক্লায়েন্টের পরিবর্তে
streamablehttp_clientব্যবহার করতে। - ক্লায়েন্টে মেসেজ হ্যান্ডলার বাস্তবায়ন করুন যা বিজ্ঞপ্তি প্রসেস করবে।
- মৌলিক সরঞ্জাম ও কর্মপ্রবাহের সঙ্গে সামঞ্জস্য পরীক্ষা করুন।
সামঞ্জস্য বজায় রাখা
স্থানান্তর প্রক্রিয়ার সময় বিদ্যমান SSE ক্লায়েন্টগুলির সঙ্গে সামঞ্জস্য বজায় রাখা সুপারিশ করা হয়। এখানে কিছু কৌশল:
- ভিন্ন এন্ডপয়েন্টে উভয় SSE এবং Streamable HTTP পরিবহন চালানোর মাধ্যমে উভয়কে সমর্থন করতে পারেন।
- ধীরে ধীরে ক্লায়েন্টদের নতুন পরিবহনে স্থানান্তর করুন।
চ্যালেঞ্জসমূহ
স্থানান্তরের সময় নিম্নলিখিত চ্যালেঞ্জগুলি মোকাবেলা করতে হবে:
- সকল ক্লায়েন্ট আপডেট নিশ্চিত করা
- বিজ্ঞপ্তি প্রেরণের পার্থক্যগুলি পরিচালনা করা
নিরাপত্তা বিবেচনা
কোনো সার্ভার বাস্তবায়নের সময় নিরাপত্তা সর্বোচ্চ অগ্রাধিকার হওয়া উচিত, বিশেষ করে MCP-তে Streamable HTTP-এর মতো HTTP-ভিত্তিক পরিবহন ব্যবহারের সময়।
HTTP-ভিত্তিক পরিবহনের মাধ্যমে MCP সার্ভার বাস্তবায়নের সময় নিরাপত্তা একটি গুরুত্বপূর্ণ বিষয় যা বিভিন্ন আক্রমণের পথ এবং সুরক্ষামূলক ব্যবস্থা সম্পর্কে সতর্ক মনোযোগ প্রয়োজন।
সারাংশ
MCP সার্ভারগুলো HTTP-তে প্রকাশ করার সময় নিরাপত্তা অপরিহার্য। Streamable HTTP নতুন আক্রমণের পথ সৃষ্টি করে এবং এটি সুচিন্তিত কনফিগারেশন প্রয়োজন।
নিচে কিছু গুরুত্বপূর্ণ নিরাপত্তা বিবেচনা দেওয়া হল:
- Origin হেডার যাচাই: DNS rebinding আক্রমণ প্রতিরোধের জন্য সবসময়
Originহেডার যাচাই করুন। - লোকালহোস্ট বাউন্ডিং: স্থানীয় উন্নয়নের জন্য সার্ভারগুলোকে
localhostএ বাঁধুন যাতে সেগুলো পাবলিক ইন্টারনেটে প্রকাশ না পায়। - প্রমাণীকরণ: প্রোডাকশনে মোতায়েনকালে প্রমাণীকরণ (যেমন, API কী, OAuth) বাস্তবায়ন করুন।
- CORS: ক্রস-অরিজিন রিসোর্স শেয়ারিং (CORS) নীতি কনফিগার করে প্রবেশাধিকার সীমাবদ্ধ করুন।
- HTTPS: প্রোডাকশনে ট্রাফিক এনক্রিপ্ট করার জন্য HTTPS ব্যবহার করুন।
সেরা অনুশীলনসমূহ
MCP স্ট্রিমিং সার্ভারে নিরাপত্তা বাস্তবায়নের সময় আরও কিছু সেরা অনুশীলন অনুসরণ করুন:
- যাচাই ছাড়া কোনো ইনকামিং রিকোয়েস্টে বিশ্বাস করবেন না।
- সমস্ত প্রবেশাধিকার এবং ত্রুটি লগ ও মনিটর করুন।
- নিয়মিত ডিপেনডেন্সিগুলি আপডেট করুন যাতে নিরাপত্তা দুর্বলতা দূর হয়।
চ্যালেঞ্জসমূহ
MCP স্ট্রিমিং সার্ভারে নিরাপত্তা বাস্তবায়নের সময় আপনি নিম্নলিখিত চ্যালেঞ্জের মুখোমুখি হবেন:
- উন্নয়নের সহজতার সাথে নিরাপত্তার সামঞ্জস্য বজায় রাখা
- বিভিন্ন ক্লায়েন্ট পরিবেশের সঙ্গে সামঞ্জস্য নিশ্চিত করা
অ্যাসাইনমেন্ট: আপনার নিজস্ব স্ট্রিমিং MCP অ্যাপ তৈরি করুন
পরিপ্রেক্ষিত:
একটি MCP সার্ভার ও ক্লায়েন্ট তৈরি করুন যেখানে সার্ভার একটি আইটেমের তালিকা (যেমন, ফাইল বা ডকুমেন্ট) প্রক্রিয়াকরণ করে এবং প্রতিটি প্রক্রিয়াকৃত আইটেমের জন্য একটি বিজ্ঞপ্তি পাঠায়। ক্লায়েন্ট প্রতিটি বিজ্ঞপ্তি পৌঁছানোর সঙ্গে সঙ্গে প্রদর্শন করবে।
ধাপসমূহ:
- একটি সার্ভার টুল বাস্তবায়ন করুন যা একটি তালিকা প্রক্রিয়াকরণ করে প্রতিটি আইটেমের জন্য বিজ্ঞপ্তি পাঠায়।
- একটি ক্লায়েন্ট বাস্তবায়ন করুন যার একটি মেসেজ হ্যান্ডলার থাকবে যা বিজ্ঞপ্তি রিয়েল টাইমে প্রদর্শন করবে।
- আপনার বাস্তবায়ন পরীক্ষা করুন সার্ভার ও ক্লায়েন্ট দুটো চালিয়ে এবং বিজ্ঞপ্তিগুলো পর্যবেক্ষণ করুন।
আরও পড়াশোনা এবং পরবর্তীতে কী?
আপনার MCP স্ট্রিমিং যাত্রা আরও এগিয়ে নিতে এবং আপনার জ্ঞান বাড়াতে, এই বিভাগটি আরও সম্পদ এবং পরবর্তী ধাপ সরবরাহ করে উন্নত অ্যাপ্লিকেশন তৈরির জন্য।
আরও পড়াশোনা
- Microsoft: Introduction to HTTP Streaming
- Microsoft: Server-Sent Events (SSE)
- Microsoft: CORS in ASP.NET Core
- Python requests: Streaming Requests
পরবর্তীতে কী করবেন?
- রিয়েল-টাইম বিশ্লেষণ, চ্যাট, বা সহযোগিতামূলক সম্পাদনার জন্য স্ট্রিমিং ব্যবহার করে আরও উন্নত MCP টুল তৈরি করার চেষ্টা করুন।
- MCP স্ট্রিমিং ফ্রন্টেন্ড ফ্রেমওয়ার্ক (React, Vue ইত্যাদি) এর সঙ্গে ইন্টিগ্রেশন অন্বেষণ করুন লাইভ UI আপডেটের জন্য।
- পরবর্তী: VSCode-এর জন্য AI Toolkit ব্যবহার
অস্বীকৃতি: এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই।