پرش به محتوای اصلی
پرش به محتوای مقاله

آزمون‌های MCP: نفوذ ۵۰ هزار توکن به پنجرهٔ متنی Claude Code

·۱ مهر ۱۴۰۵۱۴ دقیقه مطالعه
محدودیت ۲۵ هزار توکن MCP در Claude Code اجازه عبور نتیجه‌ای با ۴۹ هزار توکن را داد. هر دو بررسی را اندازه‌گیری کردیم.
محدودیت ۲۵ هزار توکن MCP در Claude Code اجازه عبور نتیجه‌ای با ۴۹ هزار توکن را داد. هر دو بررسی را اندازه‌گیری کردیم.
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

کشف یک رخنه در Claude Code که اجازه می‌دهد متون متراکم CJK با دور زدن بررسی‌های اندازه، تقریباً دو برابر سقف توکن‌های مجاز را وارد پنجره متنی کنند.

اگر برای مدیریت هزینه‌های API خود روی سقف توکن‌های ابزارهای هوش مصنوعی حساب می‌کنید، باید بدانید که این سقف‌ها همیشه امن نیستند. یک نقص فنی در نحوه محاسبه حجم داده‌ها در Claude Code می‌تواند صورت‌حساب ماهانه شما را به‌طور غیرمنتظره‌ای چند برابر کند.

طبق گزارشی که در ۲۳ سپتامبر ۲۰۲۶ در وب‌سایت dev.to منتشر شد، ابزار Claude Code با وجود اعلام محدودیت ۲۵ هزار توکنی، در برابر متون متراکم زبان‌های CJK (چینی، ژاپنی و کره‌ای) تسلیم می‌شود. در یک آزمایش، رشته‌ای از متن با ۲۴ هزار نویسه توانست ۴۹٬۹۶۴ توکن (Token) — یعنی تقریباً دو برابر سقف مجاز — را مستقیماً وارد پنجره زمینه (Context Window) مدل کند.

همان‌طور که در تحلیل قبلی ما درباره‌ی تلاش‌های Anthropic برای کاهش هزینه‌های استنتاج در مدل Opus 5.5 اشاره کردیم، بهینه‌سازی در سطح مدل تنها نیمی از مسیر است. اگر ابزارهای واسط در مدیریت خروجی‌ها ناکارآمد باشند، تمام دستاوردهای کاهش هزینه در سطح مدل با جهش‌های ناگهانی توکن‌ها از بین می‌رود.

تصور کنید یک سرور پروتکل زمینه مدل (MCP) — شبیه به یک مترجم تخصصی که ابزارهای خارجی را به زبان مدل ترجمه می‌کند — می‌سازید که لاگ‌های بین‌المللی را پردازش می‌کند. شما برای پیش‌بینی هزینه‌ها روی سقف ۲۵ هزار توکنی تکیه می‌کنید، اما وقتی ابزار شما متنی متراکم برمی‌گرداند، این سقف عملاً ناپدید می‌شود.

جزئیات محیط آزمایش

پژوهشگران این تست‌ها را در ۱۶ سپتامبر ۲۰۲۶ روی نسخه v2.1.273 ابزار Claude Code و مدل claude-opus-5[1m] اجرا کردند. برای ایزوله کردن محیط، آن‌ها از یک اسکریپت پایتون بدون وابستگی استفاده کردند که از طریق JSON-RPC با مدل ارتباط برقرار می‌کرد.

این سرور دارای دو ابزار بود: emit_text برای بازگرداندن تعداد مشخصی نویسه و emit_text_annotated که یک محدودیت ۳۰۰٬۰۰۰ نویسه‌ای را در متادیتای خود تعریف کرده بود. برای تأیید دریافت کامل متن، از سیستم نشانگر (Marker) در ابتدا و انتهای متن استفاده شد تا مشخص شود آیا مدل تمام خروجی را دریافت کرده است یا خیر.

برای حذف متغیرهای مزاحم، از دستور --strict-mcp-config استفاده شد تا ابزارهای داخلی غیرفعال شوند. هزینه‌ها با تحلیل ترنسکریپت‌ها در مسیر ~/.claude/projects/ و جمع زدن توکن‌های ورودی و توکن‌های خوانده‌شده از حافظه پنهان (Cache) محاسبه شد.

سازوکار شکست سیستم

بر اساس بررسی‌های فنی، سیستم برای مدیریت نتایج حجیم از دو بررسی متوالی استفاده می‌کند که روی انواع مختلف متن، یکسان عمل نمی‌کنند:

  • بررسی اندازه (Size Check): زمانی فعال می‌شود که خروجی بین ۴۵٬۰۰۰ تا ۵۲٬۰۰۰ نویسه باشد. در این حالت، خروجی با یک پیش‌نمایش ۲ کیلوبایتی جایگزین شده و متن کامل در یک فایل JSON ذخیره می‌شود.
  • بررسی توکن (Token Check): این مرحله یک درخواست به API شمارش توکن‌ها ارسال می‌کند. اگر تعداد توکن‌ها از ۲۵٬۰۰۰ بیشتر باشد، پیام خطا نمایش داده شده و مسیر فایل متنی جایگزین می‌شود.

محدودیت ۲۵۰۰۰ توکن MCP در Claude Code، نتیجه‌ای ۴۹۹۶۴ توکن را عبور داد. هر دو بررسی را اندازه‌گیری کردیم.

مشکل اینجاست که بررسی توکن تنها بعد از عبور از آستانه نویسه‌ها در بررسی اول اجرا می‌شود. اگر متنی از نظر تعداد نویسه کوتاه اما از نظر توکن متراکم باشد، هر دو لایه حفاظتی را دور می‌زند. لاگ‌های دیباگ تأیید کردند که برای نتایجی زیر ۴۵٬۰۰۰ نویسه، هیچ درخواستی برای شمارش توکن‌ها ارسال نمی‌شود.

رخنه در زبان‌های CJK

در یک آزمایش مشخص، پژوهشگران ۲۴٬۰۰۰ نویسه تصادفی CJK را بازگرداندند. در حالی که هر نویسه انگلیسی حدود ۰.۳۹ توکن هزینه دارد، هر نویسه CJK حدود ۲ توکن مصرف می‌کند.

چون ۲۴٬۰۰۰ نویسه بسیار کمتر از آستانه ۴۵٬۰۰۰ نویسه بود، Claude Code هرگز درخواست شمارش توکن نداد. در نتیجه، ۴۹٬۹۶۴ توکن به‌طور کامل وارد بستر متن شد. این خطا اثر مالی مستقیم داشت: هزینه این اجرای واحد ۰.۵۱ دلار بود، در حالی که اجراهای مشابه که به‌درستی به فایل منتقل شده بودند، تنها ۰.۰۲ دلار هزینه داشتند.

تحلیل سلسله‌مراتبی اندازه

پژوهشگران با تغییر اندازه خروجی، مرزهای سیستم را به‌صورت زیر ترسیم کردند:

  • ۲٬۰۰۰ نویسه: ارسال کامل در متن (۸۷۱+ توکن). بدون شمارش توکن.
  • ۳۰٬۰۰۰ نویسه: ارسال کامل در متن (۱۱٬۶۸۷+ توکن). بدون شمارش توکن، علی‌رغم عبور از آستانه هشدار ۱۰ هزار توکنی.
  • ۴۵٬۰۰۰ نویسه: ارسال کامل در متن (۱۷٬۵۱۴+ توکن). بدون شمارش توکن.
  • ۵۲٬۰۰۰ نویسه: فعال شدن بررسی اندازه. ارسال پیش‌نمایش ۲ کیلوبایتی و فراخوانی count_tokens.
  • ۶۲٬۰۰۰ نویسه: فعال شدن بررسی اندازه، اما چون تعداد توکن‌ها (حدود ۲۴٬۱۰۰) زیر سقف بود، پیش‌نمایش ارسال شد.
  • ۶۶٬۰۰۰ نویسه: فعال شدن بررسی توکن. جایگزینی متن با پیام خطا و مسیر فایل.
  • ۲۴٬۰۰۰ نویسه CJK: دور زدن تمام بررسی‌ها و ارسال کامل ۴۹٬۹۶۴ توکن.

تفاوت در فرمت فایل‌ها

وقتی محدودیت‌ها فعال می‌شوند، سیستم بسته به نوع بررسی، داده‌ها را متفاوت ذخیره می‌کند:

  • نتایج مبتنی بر توکن: به‌صورت فایل‌های .txt ساده ذخیره می‌شوند که شکست خطوط را حفظ می‌کنند و اجازه می‌دهند ابزار Read با استفاده از آفست‌ها (Offset) به‌طور بهینه عمل کند.
  • نتایج مبتنی بر اندازه: به‌صورت آرایه‌های JSON ذخیره می‌شوند که کل خروجی را در یک رشته متنی در یک خط قرار می‌دهند. برای یک نتیجه ۵۲٬۰۰۰ نویسه‌ای، یک خط واحد با طول ۵۲٬۸۹۱ نویسه ایجاد شد.

محدودیت ۲۵هزار توکن MCP در Claude Code، خروجی ۴۹هزار توکن را عبور داد. هر دو بررسی را اندازه‌گیری کردیم.

دور زدن محدودیت‌ها

پژوهشگران دو روش برای تغییر این سقف‌ها را بررسی کردند:

۱. متغیر محیطی MAX_MCP_OUTPUT_TOKENS: افزایش این مقدار به ۵۰٬۰۰۰ برای یک نتیجه ۶۶٬۰۰۰ نویسه‌ای، بررسی توکن را خاموش کرد اما نتیجه همچنان به‌دلیل بررسی اندازه به فایل منتقل شد.

۲. متادیتای anthropic/maxResultSizeChars: ابزاری که محدودیت ۳۰۰٬۰۰۰ نویسه را اعلام کرده بود، توانست ۶۶٬۰۰۰ نویسه را بدون هیچ بررسی توکنی به‌صورت inline ارسال کند. این نشان می‌دهد متادیتای ابزار، هر دو بررسی پیش‌فرض را لغو می‌کند.

اثر بر عملکرد مدل

جالب است که مسیر فایل اغلب بهینه‌تر است. برای یافتن یک نشانگر در انتهای یک متن ۶۶٬۰۰۰ نویسه‌ای، مدل با یک بار خواندن فایل و استفاده از آفست، تنها ۵٬۲۴۵ توکن مصرف کرد، در حالی که ارسال inline هزینه ۲۸٬۸۶۷ توکنی داشت — یعنی کمتر از یک‌پنجم هزینه.

گام بعدی شما

  • اگر توسعه‌دهنده MCP هستید، هرگز به محدودیت‌های کلاینت برای کنترل بودجه تکیه نکنید.
  • برای متون CJK یا داده‌های Base64، سیستم سقف‌گذاری (Capping) را در لایه سرور پیاده‌سازی کنید.
  • از ابزار Read برای دسترسی به داده‌های حجیم به‌جای ارسال مستقیم در متن استفاده کنید تا هزینه استنتاج کاهش یابد.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

این یافته بر اساس تجربه عملی نشان می‌دهد که استانداردهای فعلی MCP در مدیریت توکن‌ها برای زبان‌های غیرانگلیسی ناقص است. این موضوع اعتبار ادعاهای مربوط به کنترل هزینه در ابزارهای Agentic را زیر سؤال می‌برد و توسعه‌دهندگان را مجبور به بازنگری در معماری سرورهای خود می‌کند.

تأثیر برای ایران

برای توسعه‌دهندگان ایرانی که از مدل‌های Claude در پروژه‌های چندزبانه استفاده می‌کنند، این نقص می‌تواند منجر به افزایش پیش‌بینی‌نشده هزینه‌های API شود. توصیه می‌شود سقف خروجی را در لایه کد سرور اعمال کنند.

·نگاه ما
تحریریه دات‌هوش

این نقص نشان می‌دهد که تکیه بر شمارش نویسه‌ها (Character Count) به‌جای توکن‌ها در لایه‌های حفاظتی، یک ریسک امنیتی و مالی است. در دنیای مدل‌های چندزبانه، متراکم بودن توکن‌ها در زبان‌های غیرانگلیسی می‌تواند منجر به حملات Denial-of-Wallet شود که در آن هزینه‌های API به‌سرعت تخلیه می‌شوند. مسئولیت کنترل حجم داده باید از کلاینت به سرور منتقل شود تا پایداری سیستم تضمین گردد.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.