یہ باب HTTPS کے ذریعے ماڈل کانٹیکسٹ پروٹوکول (MCP) کے ساتھ محفوظ، قابل توسیع، اور حقیقی وقت کی اسٹریمنگ کو نافذ کرنے کے لیے جامع رہنمائی فراہم کرتا ہے۔ اس میں اسٹریمنگ کی ضرورت، دستیاب ٹرانسپورٹ میکانزم، MCP میں اسٹریمنگ HTTP کو کیسے نافذ کیا جائے، سیکیورٹی کی بہترین مشقیں، SSE سے مائیگریشن، اور اپنے MCP اسٹریمنگ ایپلیکیشنز بنانے کے عملی مشورے شامل ہیں۔
یہ سیکشن MCP میں دستیاب مختلف ٹرانسپورٹ میکانزم اور ان کے کلائنٹس اور سرورز کے درمیان حقیقی وقت کی مواصلات کے لیے اسٹریمنگ کی صلاحیتوں کو فعال کرنے میں ان کے کردار کا جائزہ لیتا ہے۔
ٹرانسپورٹ میکانزم یہ طے کرتا ہے کہ کلائنٹ اور سرور کے درمیان ڈیٹا کیسے تبادلہ کیا جاتا ہے۔ MCP مختلف ماحول اور ضروریات کے مطابق متعدد ٹرانسپورٹ اقسام کی حمایت کرتا ہے:
- stdio: معیاری ان پٹ/آؤٹ پٹ، مقامی اور CLI پر مبنی ٹولز کے لیے موزوں۔ سادہ لیکن ویب یا کلاؤڈ کے لیے مناسب نہیں۔
- SSE (Server-Sent Events): سرورز کو HTTP کے ذریعے کلائنٹس کو حقیقی وقت کی اپ ڈیٹس بھیجنے کی اجازت دیتا ہے۔ ویب یوزر انٹرفیس کے لیے اچھا، لیکن توسیع پذیری اور لچک میں محدود۔
- Streamable HTTP: جدید HTTP پر مبنی اسٹریمنگ ٹرانسپورٹ، نوٹیفیکیشنز اور بہتر توسیع پذیری کی حمایت کرتا ہے۔ زیادہ تر پروڈکشن اور کلاؤڈ کے منظرناموں کے لیے تجویز کردہ۔
نیچے دیے گئے موازنہ جدول کو دیکھیں تاکہ ان ٹرانسپورٹ میکانزم کے درمیان فرق کو سمجھ سکیں:
| ٹرانسپورٹ | حقیقی وقت کی اپ ڈیٹس | اسٹریمنگ | توسیع پذیری | استعمال کا کیس |
|---|---|---|---|---|
| stdio | نہیں | نہیں | کم | مقامی CLI ٹولز |
| SSE | ہاں | ہاں | درمیانہ | ویب، حقیقی وقت کی اپ ڈیٹس |
| Streamable HTTP | ہاں | ہاں | زیادہ | کلاؤڈ، کثیر کلائنٹ |
[!TIP]: درست ٹرانسپورٹ کا انتخاب کارکردگی، توسیع پذیری، اور صارف کے تجربے پر اثر انداز ہوتا ہے۔ Streamable HTTP جدید، قابل توسیع، اور کلاؤڈ کے لیے تیار ایپلیکیشنز کے لیے تجویز کیا جاتا ہے۔
نوٹ کریں کہ stdio اور SSE ٹرانسپورٹس آپ کو پچھلے ابواب میں دکھائے گئے تھے اور اس باب میں Streamable HTTP کو کور کیا گیا ہے۔
اسٹریمنگ کے بنیادی تصورات اور محرکات کو سمجھنا مؤثر حقیقی وقت کی مواصلات کے نظام کو نافذ کرنے کے لیے ضروری ہے۔
اسٹریمنگ نیٹ ورک پروگرامنگ کی ایک تکنیک ہے جو ڈیٹا کو چھوٹے، قابل انتظام حصوں یا واقعات کی ترتیب کے طور پر بھیجنے اور وصول کرنے کی اجازت دیتی ہے، بجائے اس کے کہ پورا جواب تیار ہونے کا انتظار کیا جائے۔ یہ خاص طور پر مفید ہے:
- بڑے فائلز یا ڈیٹا سیٹس کے لیے۔
- حقیقی وقت کی اپ ڈیٹس (مثلاً چیٹ، پروگریس بار) کے لیے۔
- طویل مدتی حساب کتاب جہاں آپ صارف کو معلومات دیتے رہنا چاہتے ہیں۔
یہاں اسٹریمنگ کے بارے میں اعلی سطح پر جاننے والی باتیں ہیں:
- ڈیٹا بتدریج فراہم کیا جاتا ہے، ایک ساتھ نہیں۔
- کلائنٹ ڈیٹا کو جیسے ہی پہنچے پراسیس کر سکتا ہے۔
- محسوس شدہ تاخیر کو کم کرتا ہے اور صارف کے تجربے کو بہتر بناتا ہے۔
اسٹریمنگ استعمال کرنے کی وجوہات درج ذیل ہیں:
- صارفین کو فوری فیڈبیک ملتا ہے، صرف آخر میں نہیں۔
- حقیقی وقت کی ایپلیکیشنز اور جوابدہ یوزر انٹرفیسز کو فعال کرتا ہے۔
- نیٹ ورک اور کمپیوٹ وسائل کا زیادہ مؤثر استعمال۔
یہاں ایک سادہ مثال ہے کہ اسٹریمنگ کو کیسے نافذ کیا جا سکتا ہے:
سرور (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، 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 کے reactive stack کے ساتھ
Fluxاستعمال کرتا ہے اسٹریمنگ کے لیے ServerSentEventساختہ ایونٹ اسٹریمنگ فراہم کرتا ہے جس میں ایونٹ کی اقسام شامل ہیںWebClientکے ساتھbodyToFlux()ریئیکٹو اسٹریمنگ کنزمپشن کو فعال کرتا ہےdelayElements()ایونٹس کے درمیان پراسیسنگ وقت کی نقل کرتا ہے- ایونٹس کی اقسام ہو سکتی ہیں (
info,result) تاکہ کلائنٹ بہتر طریقے سے ہینڈل کر سکے
کلاسیکی اسٹریمنگ اور 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 کے سیاق و سباق میں اس کا کیا مطلب ہے؟
نوٹیفیکیشن ایک پیغام ہے جو سرور سے کلائنٹ کو بھیجا جاتا ہے تاکہ طویل مدتی آپریشن کے دوران پروگریس، اسٹیٹس، یا دیگر ایونٹس کے بارے میں آگاہ کیا جا سکے۔ نوٹیفیکیشنز شفافیت اور صارف کے تجربے کو بہتر بناتی ہیں۔
مثال کے طور پر، کلائنٹ کو ایک نوٹیفیکیشن بھیجنی چاہیے جب سرور کے ساتھ ابتدائی ہینڈشیک مکمل ہو جائے۔
نوٹیفیکیشن ایک 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 میں، آپ ایسے ٹولز ڈیفائن کرتے ہیں جو درخواست کی پراسیسنگ کے دوران نوٹیفیکیشنز بھیج سکتے ہیں۔ سرور کلائنٹ کو پیغامات بھیجنے کے لیے عام طور پر ctx کانٹیکسٹ آبجیکٹ استعمال کرتا ہے۔
@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")[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();کلائنٹ کو ایک میسج ہینڈلر نافذ کرنا چاہیے جو نوٹیفیکیشنز کو وصول کر کے پراسیس اور دکھائے۔
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 کو message_handler کے ساتھ انیشیئلائز کیا گیا ہے تاکہ آنے والی نوٹیفیکیشنز کو ہینڈل کیا جا سکے۔
// 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!"
پروگریس نوٹیفیکیشنز کئی وجوہات کی بنا پر ضروری ہیں:
- بہتر صارف تجربہ: صارفین کام کی پیش رفت کو دیکھتے ہیں، صرف آخر میں نہیں۔
- حقیقی وقت کا فیڈبیک: کلائنٹس پروگری
SSE سے Streamable HTTP پر اپ گریڈ کرنے کی دو اہم وجوہات ہیں:
- Streamable HTTP، SSE کے مقابلے میں بہتر اسکیل ایبلٹی، مطابقت، اور زیادہ جامع نوٹیفیکیشن سپورٹ فراہم کرتا ہے۔
- یہ نئے MCP ایپلیکیشنز کے لیے تجویز کردہ ٹرانسپورٹ ہے۔
اپنی MCP ایپلیکیشنز میں SSE سے Streamable HTTP پر مائیگریٹ کرنے کا طریقہ درج ذیل ہے:
- سرور کوڈ کو اپ ڈیٹ کریں تاکہ
mcp.run()میںtransport="streamable-http"استعمال ہو۔ - کلائنٹ کوڈ کو اپ ڈیٹ کریں تاکہ SSE کلائنٹ کی جگہ
streamablehttp_clientاستعمال ہو۔ - کلائنٹ میں ایک میسج ہینڈلر نافذ کریں جو نوٹیفیکیشنز کو پروسیس کرے۔
- موجودہ ٹولز اور ورک فلو کے ساتھ مطابقت کی جانچ کریں۔
مائیگریشن کے دوران موجودہ SSE کلائنٹس کے ساتھ مطابقت برقرار رکھنا تجویز کیا جاتا ہے۔ کچھ حکمت عملیاں یہ ہیں:
- آپ دونوں SSE اور Streamable HTTP کو مختلف اینڈ پوائنٹس پر چلا کر سپورٹ کر سکتے ہیں۔
- کلائنٹس کو آہستہ آہستہ نئے ٹرانسپورٹ کی طرف منتقل کریں۔
مائیگریشن کے دوران درج ذیل چیلنجز کا خیال رکھیں:
- تمام کلائنٹس کو اپ ڈیٹ کرنا یقینی بنائیں
- نوٹیفیکیشن کی ترسیل میں فرق کو سنبھالنا
کسی بھی سرور کو نافذ کرتے وقت، خاص طور پر MCP میں HTTP پر مبنی ٹرانسپورٹس جیسے Streamable HTTP استعمال کرتے ہوئے، سیکیورٹی کو اولین ترجیح دینی چاہیے۔
MCP سرورز کو HTTP پر مبنی ٹرانسپورٹس کے ساتھ نافذ کرتے وقت، سیکیورٹی ایک اہم مسئلہ بن جاتی ہے جس کے لیے مختلف حملوں کے طریقوں اور حفاظتی اقدامات پر غور کرنا ضروری ہے۔
MCP سرورز کو HTTP کے ذریعے ایکسپوز کرتے وقت سیکیورٹی انتہائی اہم ہوتی ہے۔ Streamable HTTP نئے حملوں کے امکانات پیدا کرتا ہے اور محتاط کنفیگریشن کا تقاضا کرتا ہے۔
یہاں کچھ اہم سیکیورٹی نکات دیے گئے ہیں:
- Origin Header کی تصدیق: DNS rebinding حملوں سے بچنے کے لیے ہمیشہ
Originہیڈر کی تصدیق کریں۔ - Localhost بائنڈنگ: مقامی ترقی کے لیے سرورز کو
localhostپر بائنڈ کریں تاکہ انہیں عوامی انٹرنیٹ سے محفوظ رکھا جا سکے۔ - تصدیق (Authentication): پروڈکشن میں تعیناتی کے لیے تصدیق (جیسے API keys، OAuth) نافذ کریں۔
- CORS: رسائی کو محدود کرنے کے لیے Cross-Origin Resource Sharing (CORS) پالیسیز ترتیب دیں۔
- HTTPS: پروڈکشن میں ٹریفک کو انکرپٹ کرنے کے لیے HTTPS استعمال کریں۔
اپنے MCP اسٹریمنگ سرور میں سیکیورٹی نافذ کرتے وقت درج ذیل بہترین طریقے اپنائیں:
- بغیر تصدیق کے آنے والی درخواستوں پر کبھی اعتماد نہ کریں۔
- تمام رسائی اور غلطیوں کا لاگ بنائیں اور نگرانی کریں۔
- سیکیورٹی کی کمزوریوں کو دور کرنے کے لیے باقاعدگی سے dependencies کو اپ ڈیٹ کریں۔
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 اپ ڈیٹس حاصل ہوں۔
- اگلا: Utilising AI Toolkit for VSCode
دستخطی نوٹ:
یہ دستاویز AI ترجمہ سروس Co-op Translator کے ذریعے ترجمہ کی گئی ہے۔ اگرچہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنی مادری زبان میں ہی معتبر ماخذ سمجھی جانی چاہیے۔ اہم معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم پر عائد نہیں ہوتی۔