
در این مقاله
ایجنتی که فقط به پیام کاربر پاسخ میدهد، برای بعضی کارها کافی است. اما وقتی ساخت برنامه شکست میخورد، وضعیت سفارش عوض میشود یا سند مهمی بهروز میشود، شاید بخواهید همان رویداد یک بررسی محدود را آغاز کند. MCP Events در Mastra برای این ارتباط رویدادمحور معرفی شده است. مسئله اصلی فقط دریافت خبر نیست؛ باید مطمئن شویم خبر از منبع معتبر آمده، به حساب درست مربوط است و تحویل دوباره آن باعث اجرای دوباره عملیات نمیشود.
این راهنما بر اساس مستندات ۲۹ اکتبر ۲۰۲۶ نوشته شده و یک معماری آموزشی برای واکنش به شکست استقرار ارائه میدهد. طبق خبر رسمی ۲۳ اکتبر Mastra، API رویدادها هنوز آزمایشی است و ممکن است میان انتشارها تغییر کند. بنابراین «قابلیت Mastra» را با پشتیبانی یکسان همه کلاینتهای MCP اشتباه نگیرید. در نمونه ما، مدل فقط گزارش پیشنهادی میسازد؛ اختیار انتشار دوباره، تغییر Secret یا اجرای فرمان روی سرور ندارد.
MCP Events چه تفاوتی با فراخوانی Tool دارد؟
در فراخوانی معمول Tool، کلاینت عملی را درخواست میکند و پاسخ میگیرد. در مدل رویدادمحور، یک تغییر بیرونی میتواند خبری برای مشترک ارسال کند؛ سپس برنامه تصمیم میگیرد چه کاری مجاز است. خبر «ساخت پروژه شکست خورد» خودِ مجوز تغییر پروژه نیست. این تفکیک برای محصول چندکاربره حیاتی است: اتصال سالم شبکه فقط تحویل داده را نشان میدهد، نه اینکه دریافتکننده اجازه خواندن لاگ یا تغییر سرویس را دارد.
اگر هنوز با نقش سرویس MCP آشنا نیستید، راهنمای میزبانی MCP Stateless را ابتدا بخوانید. در معماری این مقاله، سرویس دریافت رویداد، محل نگهداری وضعیت و Worker تصمیمگیر جدا هستند. مدل زبانی به داده حداقلی و پاکسازیشده دسترسی دارد؛ تصمیم مجوز در کد برنامه و پایگاه داده گرفته میشود. این جداسازی کمک میکند با تغییر مدل، قرارداد امنیتی و معنای وضعیت کار عوض نشود.
Push، Poll و Webhook را بر اساس محیط انتخاب کنید
Mastra برای این قابلیت روشهای Push، Poll و Webhook را توضیح میدهد. برای انتخاب، به امکان نگهداشتن اتصال، زمان پاسخ مورد نیاز و محدودیت محیط اجرا توجه کنید. ارتباط باز میتواند تأخیر اعلان را کم کند، ولی قطع و وصل آن باید مدیریت شود. Polling سادهتر به نظر میرسد اما ممکن است درخواست اضافی بسازد. Webhook به endpoint ورودی، اعتبارسنجی و کنترل تحویل دوباره نیاز دارد. هیچکدام بهتنهایی وضعیت پایدار کار را برای برنامه شما تضمین نمیکند.
همچنین دو جهت Webhook را قاطی نکنید: ممکن است یک سامانه خارجی رویداد را به برنامه شما بفرستد و سپس سرویس MCP آن را به مشترک تحویل دهد. امضای یک بخش، اعتبار بخش دیگر را ثابت نمیکند. کلیدها، محدوده حساب و سیاست تلاش مجدد را برای هر مرز مشخص کنید. اگر زیرساخت اجازه اتصال طولانی نمیدهد، مسئله را با افزایش بیپایان timeout پنهان نکنید؛ روش تحویل و بازیابی را متناسب با محیط انتخاب کنید.
سناریوی آموزشی: گزارش شکست استقرار
فرض کنید سامانه ساخت، پس از شکست یک نسخه، رویدادی شامل شناسه پروژه، شناسه اجرا و کد وضعیت میفرستد. برنامه ما ابتدا اصالت و مالکیت را بررسی میکند، سپس یک کار برای تحلیل لاگ پاکسازیشده میسازد. مدل میتواند علتهای محتمل و قدم تشخیصی کمریسک پیشنهاد دهد. انتشار دوباره یا تغییر منابع باید با تصمیم مستقل کاربر انجام شود. این الگو مانع آن میشود که یک متن خطای آلوده، ایجنت را به اجرای فرمان دلخواه هدایت کند.
داده اولیه را کوچک نگه دارید. شناسه اجرا باید امکان بازیابی مجاز داده را بدهد؛ لازم نیست همه لاگ و تنظیمات پروژه در رویداد قرار بگیرد. اگر کلید یا نشانی خصوصی در خروجی ساخت وجود دارد، پیش از هر فراخوانی مدل آن را حذف یا پوشانده کنید. رویداد، لاگ و پاسخ مدل نیز نباید بیضابطه در چند سرویس تکثیر شوند. برای طراحی مرز Toolها، راهنمای امنیت AI Agent و MCP را ببینید.
قرارداد رویداد را پیش از اتصال SDK بنویسید
نمونه زیر قرارداد آموزشی برنامه خودمان است؛ نام متد SDK یا استاندارد اجباری MCP نیست. شناسه رویداد باید در منبع تولید شود و در تحویلهای دوباره ثابت بماند. نسخه قرارداد اجازه میدهد در آینده فیلد تازه اضافه کنید بدون اینکه معنای داده قدیمی نامعلوم شود. حساب را از یک فیلد قابل جعل بهتنهایی نپذیرید؛ هویت فرستنده و نگاشت مجاز پروژه باید در سرور تعیین شود. زمان رویداد هم صرفاً اطلاعات است تا زمانی که روش اعتبارسنجی آن مشخص باشد.
{
"schema_version": 1,
"event_id": "evt_demo_001",
"type": "deployment.failed",
"project_id": "demo-project",
"run_id": "run-demo-001",
"occurred_at": "2026-10-29T08:00:00Z",
"data": {"phase": "build", "error_code": "BUILD_FAILED"}
}
در اعتبارسنجی، نوع داده، طول شناسه، نام رویداد و اندازه بدنه را محدود کنید. داده ناشناخته را بدون بررسی به مدل یا ابزار بعدی نفرستید. اگر نوع قرارداد را پشتیبانی نمیکنید، پاسخ روشن بدهید و نمونه را برای بررسی کنترلشده نگه دارید؛ تلاش مجدد دائمی فرستنده نباید بار نامحدود ایجاد کند. برای خطاهای موقت و خطاهای دائمی پاسخ متفاوت طراحی کنید تا سامانه تحویل بتواند تصمیم درست بگیرد.


نظرات کاربران (۰)
هنوز نظری ثبت نشده است. اولین نفر باشید.