قراردادهای ابزار MCP و محتوای آن
Type: Build
Languages: Python
Prerequisites: Phase 13, Lessons 07, 09, and 10
Time: ~120 minutes
اهداف یادگیری
- ورودی و خروجی ابزار را با طرح JSON 2020-12 تعریف کنید.
- نتایج ساختاری را بدون فرض اینکه آنها اشیاء JSON باشند تأیید کنید.
- بین متن، تصویر، صوتی، لینک های منابع و منابع داخلی انتخاب کنید.
- رد کردن خطرناکی
x-mcp-headerتعریف قبل از اینکه یک ابزار به مدل برسد. - ارزش های پارامتر سر و سر را رمزگذاری کنید و تراز دقیق سر و بدن را تایید کنید.
- صفحه سازی کرسر را بدون تفسیر ارزش های کرسر عبور کنید.
- پابند و مجاز
completion/completeپیشنهادات
مشکل
تماس با یک تابع پایتون آسان است. تماس با یک قابلیت از راه دور از طریق یک میزبان هوش مصنوعی یک مشکل قرارداد است.
سرور یک توصیف کننده منتشر می کند. مشتری آن توصیف کننده را به زمینه مدل و رابط کاربری تبدیل می کند. مدل استدلال ایجاد می کند. یک دروازه ممکن است درخواست را از سرپرستی آینه ای هدایت کند. سرور ابزار را اجرا می کند. سپس مشتری تصمیم می گیرد که آیا نتیجه به اندازه کافی ایمن و معتبر است تا به مدل بازگردد.
يک مرز ضعيف کل زنجیره رو خراب ميکنه
پنج اشتباه را در نظر بگیرید:
- توضیحات می گوید نتیجه یک شی است، اما سرور یک آرایه را باز می گرداند.
- مشتری وقتی صفحه بندی را متوقف می کند
nextCursorیک رشته خالی است. - یک پارامتر رمزنگاری در یک سرنامۀ HTTP منعکس می شود و برای واسطه ها قابل مشاهده می شود.
- یک ارزش رویت یونیکود به عنوان یک سرنخ خام ارسال می شود، سپس دروازه و اصل باایت های مختلف را تفسیر می کنند.
- یک نقطه پایان تکمیل، یک محیط تولید را به یک تماس گیرنده که نمی تواند به آن دسترسی داشته باشد پیشنهاد می کند.
هیچ یک از این شکست ها با کمک بهتر حل نمی شوند. آنها نیاز به قرارداد های صریح پروتکل و برنامه دارند.
خط لوله قرارداد
هر تماس ابزار رو به عنوان پنج دروازه نگاه کن:
- Discover.یک لیست ابزار تعیین کننده و صفحات شده را بخوانید.
- Admit.هر توصیف کننده را تایید کنید و سیاست امنیتی محلی را اعمال کنید.
- Invoke.استدلال ها را تأیید کنید و متاداتا های حمل و نقل را ایجاد کنید.
- Execute.کنترل رو اجرا کن و شکست ها رو درست طبقه بندي کن
- Consume.قبل از استفاده از مدل، بلوک های محتوا و خروجی ساختاری را تأیید کنید.
میزبان مالک دروازه های ورود و مصرف است. سرور نمی تواند مشتری را مجبور کند به یادداشت ها، طرح ها یا خروجی های خود اعتماد کند.
طرح JSON یک مرز زمان اجرا است
در MCP 2026-07-28،inputSchemaوoutputSchemaاز طرح JSON استفاده کنید.$schemaاز دست رفته، گویش پیش فرض 2020-12 است.
طرح ورودی باید یک شیمی باشد. یک ابزار بدون استدلال باید هنوز دقیقاً آنچه را که قبول می کند بگوید:
json{
"type": "object",
"additionalProperties": false
}اين سخت تر از{ "type": "object" }، که خواص تعسفی را قبول می کند.
یک طرح خروجی اختیاری است. هنگامی که یک سرور یک طرح را منتشر می کند، هر ابزار کامل
نتیجه متعهد به بازگشت مطابق استstructuredContent، از جمله نتایج
باisError: true. پرچم خطا نتیجه اجرا را طبقه بندی می کند؛
از قرارداد انتشار داده شده دست بردارید. مشتریان باید نتیجه را تأیید کنند
از اعتماد به توصيف کننده
محتوای ساختار یافته هر مقدار JSON است
سخت کود نکنstructuredContentبه عنوان یک فرهنگ لغت می تواند:
- یک شی؛
- یک تشکيل
- یک رشته
- یک شماره
- یک boolean؛
null. .
این ابزار یک آرایه را باز می گرداند:
json{
"name": "tag_catalog",
"inputSchema": {
"type": "object",
"additionalProperties": false
},
"outputSchema": {
"type": "array",
"items": {"type": "string"}
}
}نتیجه موفق آن معتبر است:
json{
"resultType": "complete",
"content": [
{
"type": "text",
"text": "[\"contracts\", \"mcp\", \"stateless\"]"
}
],
"structuredContent": ["contracts", "mcp", "stateless"],
"isError": false
}برای مطابقت، نتایج ساختاری باید JSON سریالیز شده را در یک بلوک متن نیز شامل کنند. متن منبع اعتبار نیست. structuredContentآره
يه اعتبارگر کوچولو هنوز هم مرز رو مي آموزد
درسی از زیر مجموعه ای از طرح JSON عمدا استفاده می کند زیرا در کتابخانه استاندارد پایتون باقی می ماند. این مکانیسم هایی را که توسط ابزارهای نمونه استفاده می شود بررسی می کند:
- انواع شی، صف، رشته، عدد، عدد، بولین و صفر؛
- خواص مورد نیاز؛
additionalProperties: false؛- عناصر آرایه
- ارزش های enum؛
- حداقل طول رشته
این جایگزین یک اعتبار دهنده تولید کامل نیست. درس قابل استفاده مجدد در جایی است که اعتبارگذاری اتفاق می افتد: پس از کشف برای توصیف کنندگان، قبل از اجرای برای استدلال ها و قبل از مصرف برای نتایج ساختاری.
بلاک های محتوا هزینه های متفاوتی دارند
.contentآری می تواند انواع مختلفی از محتوا را ترکیب کند.
| Type | Use it for | Main boundary |
|---|---|---|
text | Human and model-readable summaries | Treat text as untrusted output |
image | Visual evidence encoded as base64 | Validate media type and size |
audio | Spoken or recorded output encoded as base64 | Validate media type and duration limits |
resource_link | A URI the client may fetch later | Reauthorize the later resource read |
resource | Data embedded directly in the result | Enforce payload and content limits now |
یک لینک منابع اثبات نمی کند که این منبع در resources/list. این یک مرجع است که توسط این تماس ابزار بازگردانده می شود. مشتری هنوز سیاست منابع خود را در هنگام دنبال کردن URI اعمال می کند.
یک منبع داخلی از یک سفر دور و عقب دیگر اجتناب می کند اما اندازه پاسخ فعلی را افزایش می دهد. از لینک ها برای آثار بزرگ یا مستقل تغییر می کنند. از منابع داخلی برای شواهد کوچک استفاده کنید که باید به صورت اتوماتیک با نتیجه سفر کنند.
درس اینهevidence_bundleنتیجه شامل تمام پنج نوع است. مشتری قبل از قبول نتیجه هر بلوک را تایید می کند.
x-mcp-headerآیا روت کردن متاداتا
یه ملک توی اونinputSchemaمی تواند اعلام کندx-mcp-header. در HTTP Streamable، مشتری این استدلال را به Mcp-Param-{name}. .
json{
"region": {
"type": "string",
"x-mcp-header": "Region"
}
}باregion: "eu-west"، حمل و نقل می تواند:
httpMcp-Param-Region: eu-westاین نوتاسیون وجود دارد تا یک ترازنده بار، دروازه یا موتور سیاست بدون تجزیه و تحلیل جسم JSON بتواند مسیر را هدایت کند. این مکان برای قرار دادن اعتبار نیست.
پروتکل این نوتاژ را محدود می کند:
- نام سرنویس خالی نیست و از ترکیب توکن های HTTP نام میدان پیروی می کند.
- نام های سر و کله بدون توجه به مورد منحصر به فرد هستند.
- نوع ملکیت رشته، عدد کامل یا بولی است؛
numberاجازه ندارد؛- این نوتاسیون تنها در یک عضو مستقیم از
inputSchema.properties؛ - ارزش های عددی در داخل
-9007199254740991از طریق9007199254740991. .
قانون موقعیت هم نحوی و هم ناکامی بسته شده
نه فقط خواصي که اعتبارگر شما اتفاقاً مي فهمه
تشریح زیر یک شیب سرپوشیدهproperties، یکoneOfشاخهitems، یک
تعریف که توسط $ref، یا هر طرح خروجی. حل یک مرجع
تبدیل نود مرجع به یک خاصیت مستقیم سطح بالا نیست.
این درس یک سیاست پیاده سازی را اضافه می کند: توصیفات را که نام هایی مانند password،secret،token،api_key، یاauthorization. مشخصات رسمی به نویسندگان سرور توصیه می کند که پارامترهای حساس را منعکس نکنند. یک مشتری می تواند این توصیه را به یک قانون پذیرش سخت تبدیل کند.
اسم سر را بررسی کنید نه ارزشش.Mcp-Param-Regionدر حالیکه نگه داری می کنمeu-westاز رویداد حسابرسی خارج می شود.
ارزش های کدگذاری قبل از ایجاد سرنخ های HTTP
یک مقدار پارامتر فقط می تواند به عنوان متن ساده حرکت کند زمانی که یک رشته خالی نیست
از نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نمایان نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد نماد!از طریق~و شبیه به
هرچیزی دیگه از این شکل استفاده میکنه
text=?base64?{Base64UTF8}?=Base64UTF8باط های UTF-8 است.
این کد یونیکوید، رشته های خالی، فضاهای
تب، کنترل کاراکترها، CR یا LF، فضای سفید پیش یا عقب و هر
ارزش شروع شده با =?base64?. رمزنگاري يک ارزش به نظر مي رسد که به عنوان نگهبان دوباره
چه چیزی به گیرنده اجازه می دهد متن اصلی را به جای رمزگذاری دوباره بازیابی کند
به عنوان ترکیب حمل و نقل.
با " بول " به صورت حرف های کوچکtrueیاfalse. عددی که در پایه 10 ارائه می شود و
باید در محدوده کامل های ایمن جاوا اسکریپت باقی بماند. ارزش ها خارج از این محدوده
در عوض توسط یک واسطه رد می شوند.
سرور کپی عکس را بررسی می کند
نسل عنوان تنها نیمی از مشتری است. در مرز HTTP Streamable،
سرور باید:
- شناختن رو پیدا کن
Mcp-Param-*نام بدون توجه به صورت عنوان نام؛ - کد دقیق فرم sentinel base64 را در صورت وجودش رمزگذاری کند.
- متن رمزگذاری شده را با استدلال جسم JSON مربوطه مقایسه کنید.
- رد یک گمشده، تکراری، غیر منتظره، بد شکل یا نامناسب
سرنخ شناسايي قبل از ارسال
ردش HTTP است400با کد خطا JSON-RPC -32020نه هم
ارزش بدن و یا شکل سرش کوده شده در پرونده حسابرسی تعلق دارد.
فقط نام سر و سر شناخته شده و دسته بندی رد.
code/main.pyاین مرز را به طور مستقیم مدل می کند.Lesson 09
پوشش گسترده تر Streamable HTTP تایید ترتیب، از جمله روش و
برابری پروتکل-ورژن
کُرسر های صفحه ای غیر شفاف هستند
عملیات لیست MCP از صفحات کرسر استفاده می کند. سرور اندازه صفحه و فرمت کرسر را انتخاب می کند. مشتری یک تصمیم می گیرد:
pythonif result.get("nextCursor") is None:
break
cursor = result["nextCursor"]اینو ننوسی:
pythonif not result.get("nextCursor"):
breakیک رشته خالی یک کرسر معتبر است. حقیقت خیلی زود متوقف می شود.
مشتریان نباید یک کرسر را رمزگذاری کنند، آن را افزایش دهند، آن را با یک کرسر قبلی برای سفارش مقایسه کنند یا یک شماره صفحه را نتیجه دهند. یک سرور ممکن است یک کرسر را امضا کند، آن را به یک نسخه کاتالوگ متصل کند یا آن را به حالت خصوصی نقشه برداری کند. این جزئیات پیاده سازی سرور است.
سرور نمونه عمداً بازمی گردد""پس از صفحه اول، مشتری باید در درخواست دوم این مقدار را ارسال کند.
text<first request with no cursor>
<second request with cursor "">کرسرهای ناشناس پارامای ناشناس JSON-RPC را تولید می کنند، کد -32602. .
تکمیل یک سطح مجاز است
completion/completeاین ابزار برای فرم های تعاملی مفید است، اما می تواند نام هایی را که روش های لیست معمولی محافظت می کنند، به طور غیرقابل توجهی از آن استفاده کند.
در یک درخواست تکمیل، یک مرجع و استدلال تکمیل شده نامگذاری می شود:
json{
"method": "completion/complete",
"params": {
"ref": {
"type": "ref/prompt",
"name": "deployment_review"
},
"argument": {
"name": "environment",
"value": "st"
}
}
}نتیجه حداکثر 100 مقدار را به ارجاع می دهد و می تواند گزارش دهد totalو اضافهhasMore. .
همان مرز مجوز را که توسط پیام یا منبع مورد اشاره استفاده می شود اعمال کنید. یک تحلیلگر در نمونه دریافت می کند developmentوstagingفقط يه اپراتور ميتونه دریافت کنهproduction. .
تکمیل تولید همچنین نیاز به:
- اعتبارگذاری ورودی
- فیلتر کردن آگاه با تماس
- درخواست تخفیف در مشتری
- محدودیت نرخ در سرور؛
- تعداد نتایج محدود؛
- سوابق که ارزش های حساس پیشنهاد را نشان نمی دهند.
تکمیل کمک است نه کشف بازتاب
دو لایه خطا
خطاهای پروتکل را از خطاهای اجرای ابزار جدا نگه دارید.
استفاده از خطای JSON-RPC هنگامی که درخواست MCP نمی تواند به درستی ارسال شود:
- نام ابزار ناشناخته؛
- شکل درخواست اشتباه؛
- متاداتا درخواست که از دست رفته است؛
- کرسر ناشناس
با استفاده از یک نتیجه کامل از ابزار isError: trueوقتی درخواست به ابزار رسید و ابزار یک شکست قابل اجرا را گزارش می کند:
- منبع گزارش در دسترس نیست؛
- یک تاریخ خارج از محدوده پشتیبانی شده است؛
- یک قانون تجاری عملیات مورد نیاز را رد می کند.
مدل ها اغلب می توانند یک خطا اجرای ابزار را اصلاح کنند. آنها نمی توانند یک سرور را که در شکستن طرح خروجی خود است، اصلاح کنند.
اگر ابزار یک طرح خروجی را اعلام کند، یک مدل شکست قابل اجرا در داخل آن
طرح. نمونهroute_reportشکست بخش مورد نظر خود را با
accepted: false، همراه با متن خطا قابل خواندن انسان وisError: true. .
آن را بسازید
code/main.pyبا کتابخانه استاندارد پایتون هر دو طرف مرز را می سازد.
سرور اجرا می کند:
- اعتبارسنجی متادای MCP بر حسب درخواست
server/discoverبا ابزار و قابلیت تکمیل؛- تعیین کننده
tools/listصفحه بندی - چهار توصیف کننده ابزار، از جمله یک که باید رد شود؛
- تولید ساختار یافته ی آرایه؛
- هر نوع بلاک محتوای ابزار فعلی؛
- یک دروازه برابر HTTP قابل جریان که سرنخ پارامتر های شناخته شده را رمزگذاری می کند و
HTTP را بازمی گرداند400+ JSON-RPC -32020در مورد عدم مطابقت؛
- تکمیل مجاز و محدود شده.
مشتری انجام می دهد:
- پذیرش توصیف کننده
- درخت پر
x-mcp-headerاعتبارگذاری قرار دادن و سیاست های حساس در زمینه؛ - کدگذاری دقیق ارزش UTF-8 ASCII یا base64 به صورت آشکار؛
- یک حلقه کرسر غیر شفاف که یک رشته خالی را دنبال می کند؛
- استدلال و اعتبار نتیجه
- اعتبارسنجی بلوک محتوا
- رویدادهای بازرسی سر و پا که شامل نام ها اما ارزش ها نیستند.
توصیف کننده غیر امن به عمد داده های آموزشی است. این ثابت می کند که یک ابزار رد شده مانع از بارگیری ابزار معتبر نمی شود.
ازش استفاده کن
از ریشه مخزن:
bashcd phases/13-tools-and-protocols/28-mcp-tool-contracts-and-content/code
python3 main.py
python3 -m unittest discover tests -vنسخه های دمو ابزار پذیرفته شده، توصیف کننده رد شده، هر دو صفحه بندی
درخواست ها، محتوای ساختار یافته آرایه، انواع بلوک محتوا، سرگوشه آینه ای
نام ها، آیا ارزش مورد نیاز کدگذاری، وضعیت برابر HTTP، و
ارزش های تکمیل شده توسط تماس گیرنده فیلتر شده است.
آزمایشگاه تعاملی
باز شدcode/main.pyو مکانش رو پیدا کنTOOLS. .
- تغییر
tag_catalog.outputSchema.typeازarrayبهobject. . - ديمو رو اجرا کنين.مصرفي بايد آرایه برگشتي رو رد کنه.
- نقشه رو برگردون
- صفحه اول رو نگه دار
nextCursorمثل""، پس صفحه آخر رو برگردون
nextCursor: Noneبه جای حذف زمینه.
- تست ها رو انجام بده و ردیابی کرسر رو مقایسه کن
- اضافه کردن
x-mcp-header: "Authorization"به یک ویژگی رشته ای. - تصریح تایید قبل از درخواست پذیرش آن را رد می کند.
- سعی کن
regionارزش هایی که حاوی یونیکوید، یک خط جدید، فضاهای اطراف هستند و
متن واقعی=?base64?SGVsbG8=?=. هر سرپرستی که منتشر شده رو رمزگشایی کن و ثابت کن
ارزش اصلی دقیقاً زنده می ماند.
- نوتاسیون را زیر حرکت دهید
oneOf،items، یا یک$refتعریفش رو تایید کن
هر توصیف کننده حتی اگر این شاخه هرگز توسط دمو استفاده نشود رد می شود.
- سرنخ شناخته شده را حذف کنید یا ارزش رمزگذاری شده آن را تغییر دهید.
وضعیت بازپرداخت مرزی 400و کد JSON-RPC -32020. .
نکته این نیست که یک شکل JSON را به یاد داشته باشید بلکه این است که به دیدن شکست هر دروازه در مرز مالکیت آن نگاه کنید.
آزمایشگاه تمرین
آزمایشگاه قرارداد رو با یکsearch_evidenceابزار
الزامات:
- طرح ورودی آن قبول می کند
query،limit، و يه خزينهregionمیدان رویتینگ - طرح خروجی آن یک سری از اشیاء با
uri،titleوscore. . - نتیجه شامل متن سازگاری و یک لینک منابع در هر قطعه است.
- استدلال ها خواص ناشناخته را رد می کنند.
limitبا اعتبار درخواست محدود می شود.- یک تماس گیرنده بدون دسترسی به یک URI هرگز آن URI را از طریق تکمیل یا ورودی ابزار نمی بیند.
- آزمون ها شامل نمره ای غیر متناسب، یک یادداشت عنوان غیرفعال و یک لیست دو صفحه است.
- تست های ارزش سر و کله ای شامل ASCII، یونیکود، کنترل کاراکترهای قابل مشاهده،
فضای سفید، متن شبیه به یک نگهبان، و هر دو محدودیتهای کامل با جاوا اسکریپت امن است.
- نصب HTTP نام های سرنخ های غیر حساس را می پذیرد اما نام های گمشده را رد می کند
یا ارزش های شناخته شده با وضعیت متفاوت است400و کد-32020. .
آثار هنری ارسال شده
outputs/skill-mcp-contract-reviewer.mdیک مهارت بازبینی مسطح و قابل استفاده مجدد است. یک توصیف کننده ابزار، نتایج نمونه، رفتار صفحات بندی و سیاست تکمیل را به آن بدهید. این یک تصمیم پذیرش، برنامه اعتبار نتیجه، سیاست سر و بررسی شکست های مشخص را باز می گرداند.
بررسی کنید
درس کامل می شود وقتی این اظهارات درست است:
tools/listدر تماس های مکرر، همان ترتیب منطقی را باز می گرداند.- مشتری درخواست دوم را انجام می دهد وقتی
nextCursor."". . - توصیف کننده سرخی حساس غیر امن حذف شده است در حالی که ابزارهای دیگر در دسترس باقی می ماند.
- یک آرایه از طرح خروجی آرایه خود عبور می کند.
- یک شیف همان طرح آرایه را شکست می دهد.
- نتایج خطا نمی تواند یک طرح انتشار یافته را حذف یا نقض کند.
- متن، تصویر، صوتی، لینک منابع و بلوک های منابع داخلی معتبر می شوند.
- رویدادهای سرنوشت آدیتی شامل نام ها و هیچ ارزش ای نیست.
- ASCII ساده قابل مشاهده همچنان ساده است؛ یونیکود، کنترل، پوشیده، خالی و
ارزش های به نظر می رسد sentinel از طریق کدگذاری دقیق base64 UTF-8
- اعداد کامل در خارج از محدوده امن جاوا اسکریپت رد می شوند.
- تشریحات زیر
oneOf،items، اجسام سرسبز ،$refتعریف ها یا
طرح های تولید در هنگام پذیرش رد می شوند.
- نام های سرونی شناخته شده که در مورد پرونده حساس نیستند تنها زمانی که ارزش رمزگذاری شده عبور می کند
دقیقا با بدن مطابقت دارد. کپی های گمشده یا نامتناسب HTTP را تولید می کنند 400
و JSON-RPC -32020. .
- تحلیلگرها هيچ وقت برنميگردن
production. . - یک شکست ابزار استفاده می کند
isError: true؛ یک تماس پروتکل اشتباه از JSON-RPC استفاده می کندerror. .
روش های شکست تولید
| Failure | What the learner sees | Correct response |
|---|---|---|
| Client assumes object output | Valid arrays fail or are silently wrapped | Validate against the published schema without object-only types |
| Empty cursor treated as false | Final pages disappear | Continue whenever nextCursor is present and non-null |
| Sensitive value mirrored | Secret appears in proxy, WAF, or trace data | Reject the descriptor and keep secrets in protected request data |
| Raw Unicode or whitespace mirrored | Gateway and origin disagree or the value is normalized | Use exact base64 UTF-8 sentinel encoding and compare after decoding |
| Annotation hidden in a schema branch | A client misses routing metadata during admission | Traverse the entire schema tree and allow only direct top-level properties |
| Large integer mirrored | JavaScript intermediary rounds the routing value | Reject values outside the JavaScript safe integer range |
| Header and body disagree | Gateway routes one target while the origin executes another | Reject before dispatch with HTTP 400 and JSON-RPC -32020 |
| Output schema ignored | Downstream code consumes corrupt structure | Validate before model or application use |
| Resource link trusted automatically | Caller follows an unauthorized URI | Reauthorize every resource read |
| Completion shares global suggestions | Hidden tenant names leak | Filter by caller, reference, and authorization |
| Tool annotations treated as policy | Destructive operation bypasses confirmation | Enforce authorization and approval outside annotations |
| One malformed tool breaks discovery | Entire server becomes unavailable | Reject the bad descriptor and admit valid tools independently |
اتصال Capstone
سنگ پایان مرحله 13 نیاز به یک دروازه دارد که می تواند ابزارهای چندین سرور را ترکیب کند. این درس هسته پذیرش را فراهم می کند.
از اين آثار استفاده کن تا چهار تا از شواهد سنگ معلق رو طبقه بندي کني:
- کشف تعیین کننده و کامل صفحات شده
- اعتبار رسانی توصیف کننده قبل از قرار گرفتن در معرض مدل
- تولید ساختار یافته تایید شده و بلوک های محتوای محدود؛
- تکمیل و مسیر متاداتا که محدودیت های مجوز را حفظ می کند.
از توافق گیتوئید موفق استفاده نکنیدtools/callتنها. وصف، ردیابی صفحه، مجموعه ابزار پذیرفته شده، مجموعه ابزار رد شده و یک نتیجه تایید شده را ضبط کنید.
اصطلاحات کلیدی
| Term | Meaning |
|---|---|
inputSchema | JSON Schema object defining accepted tool arguments |
outputSchema | Optional JSON Schema defining structuredContent |
structuredContent | Any JSON value produced by a tool result |
| Content block | Typed text, image, audio, resource link, or embedded resource |
x-mcp-header | Schema annotation that mirrors a primitive argument into Streamable HTTP metadata |
| Opaque cursor | Server-issued pagination token whose value the client does not interpret |
| Completion reference | Prompt name or resource URI/template whose argument is being completed |
| Admission | Client decision to expose or reject a discovered descriptor |
خواندن بیشتر
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.