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

شکست پروتکل MCP در انتقال فایل؛ هیچ‌یک از ۷ سرویس برتر پشتیبانی بومی ندارند

·۲۸ مرداد ۱۴۰۵۷ دقیقه مطالعه۱ بازدید
هفت سرویس MCP از آپلود فایل پشتیبانی می‌کنند. این‌ها واقعاً کار می‌کنند.
هفت سرویس MCP از آپلود فایل پشتیبانی می‌کنند. این‌ها واقعاً کار می‌کنند.
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

افشای نرخ شکست ۱۰۰ درصدی سرویس‌های برتر در پشتیبانی بومی از آپلود فایل در MCP؛ این گزارش نشان می‌دهد که آنچه به‌ظاهر «پشتیبانی» نامیده می‌شود، در واقع دور زدن پروتکل است، نه پیاده‌سازی آن.

تصور کنید یک عامل حسابداری را طراحی کرده‌اید که تراکنش‌ها را به‌طور کامل شناسایی می‌کند، اما در آخرین قدم، یعنی پیوست کردن فایل PDF رسید، شکست می‌خورد. عامل یک فراخوانی ابزار (Tool Call) زیبا و خوش‌ساخت تولید می‌کند، اما سرور آن را رد می‌کند زیرا پروتکل هیچ راهی برای انتقال فایل ندارد. این اتفاق نه یک باگ در پیاده‌سازی یک شرکت خاص، بلکه نتیجهٔ یک انتخاب بنیادین در طراحی پروتکل زمینهٔ مدل (Model Context Protocol یا MCP) است.

این پروتکل — که شبیه به یک مترجم است که سعی می‌کند زبان مدل‌های هوش مصنوعی را به زبان ابزارهای نرم‌افزاری ترجمه کند — در حال حاضر هیچ راه بومی برای انتقال فایل ندارد. به همین دلیل، اگر در حال ساخت یک عامل (Agent) برای مدیریت رسیدها، لاگ‌ها یا اسکرین‌شات‌ها هستید، ابزاری که برای هماهنگی عملیات به آن تکیه کرده‌اید، عملاً نمی‌تواند داده‌ها را جابه‌جا کند.

Cover image for Zero of 7 Services Support File Upload Through MCP. Here's What Actually Works.

همان‌طور که در تحلیل‌های پیشین ما درباره‌ی امنیت مدل‌های بازمتن اشاره کردیم، شکاف بین قابلیت‌های تئوریک و اجرای عملی در محیط‌های ایزوله همیشه یک چالش است. در اینجا، توسعه‌دهندگان با شکافی خطرناک بین آنچه یک API می‌تواند انجام دهد و آنچه یک سرور MCP قادر به اجرای آن است، مواجه‌اند. اکثر پلتفرم‌های SaaS مدرن از multipart/form-data برای آپلود استفاده می‌کنند، اما MCP بر پایه JSON-RPC است که ماهیتی متنی دارد. این تضاد، یک قابلیت استاندارد را به یک دیوار فنی تبدیل کرده است.

نرخ شکست در ۷ سرویس کلیدی

بر اساس گزارشی که در ۱۹ اوت ۲۰۲۶ در وب‌سایت dev.to منتشر شد، آزمونی هدفمند روی هفت سرویس حیاتی شامل freee، Jira، Confluence، Notion، GitHub، Gmail و Google Drive انجام شد. این سرویس‌ها به این دلیل انتخاب شدند که «آپلود فایل» هستهٔ اصلی گردش‌کار آن‌هاست: سرویس freee برای رسیدها و فاکتورها، جیرا و کانفلوئنس برای لاگ‌ها و اسکرین‌شات‌ها، نوشن برای فایل‌های PDF، گیت‌هب برای اسکرین‌شات‌های Pull Request، جیمیل برای پیوست‌ها و گوگل درایو برای ذخیره‌سازی عمومی.

نتایج تکان‌دهنده است: در حالی که تمام این سرویس‌ها از طریق APIهای استاندارد HTTP اجازه آپلود می‌دهند، هیچ‌کدام پشتیبانی کامل از پروتکل MCP را ارائه نمی‌کنند. نتایج به سه دسته تقسیم می‌شوند:

  • رد مطلق (۳ سرویس): freee، Jira/Confluence و GitHub به‌سادگی نمی‌توانند آپلود را از طریق MCP مدیریت کنند.
  • دور زدن پروتکل (۴ سرویس): Gmail، Google Drive، Slack و Notion به‌ظاهر «کار می‌کنند»، اما تنها به قیمت رها کردن پروتکل MCP برای انتقال واقعی داده‌ها.
  • پشتیبانی کامل از پروتکل: ۰ سرویس.

A comparison card headed MCP File Upload, 7-service test. The headline reads full protocol support zero of seven. Three grouped rows: freee, Jira and GitHub marked flat reject; Gmail, Drive and Slack marked local path; Notion marked presigned URL. A final tally reads zero of seven in-protocol

کالبدشکافی شکست‌ها

برای درک علت این وضعیت، باید به پیام‌های خطا و پاسخ‌های توسعه‌دهندگان نگاه کنیم:

  • freee: API زیرساختی این سرویس داده‌های multipart/form-data را می‌پذیرد، اما لایه انتقال JSON-RPC در MCP این اجازه را نمی‌دهد. در نتیجه، ابزار در API وجود دارد اما از طریق MCP در دسترس نیست. این موضوع برای سازمان‌هایی که طبق قوانین انطباق (Compliance) باید تصاویر رسیدها را در پرونده‌ها ذخیره کنند، بسیار دردناک است.
  • Jira / Confluence: پاسخ جامعهٔ کاربری اتلاسیان صریح است: «آپلود فایل یا پیوست تصاویر از طریق Remote Agent در MCP پشتیبانی نمی‌شود». علاوه بر این، سرورهای جامعهٔ mcp-atlassian نیاز دارند فایل ابتدا روی سیستم‌فایل (Filesystem) سرور وجود داشته باشد. این موضوع در محیط‌های Docker منجر به شکست می‌شود، همان‌طور که در Issue #618 مشاهده شد: «فایل یافت نشد: /home/user/jira-mcp/grafana.png».
  • GitHub: در Issue #738 مربوط به github-mcp-server، کاربران اشاره کرده‌اند که عدم توانایی در آپلود تصاویر، ایجاد PRهای توصیفی یا بصری را غیرممکن کرده و گردش‌کار رایج پیوست اسکرین‌شات از خطاهای رابط کاربری (UI Regression) را مختل می‌کند.

مکانیسم‌های «دور زدن»

چهار سرویس به‌گونه‌ای عمل می‌کنند که گویی پشتیبانی می‌کنند، اما در واقع بایت‌ها را خارج از پروتکل جابه‌جا می‌کنند:

  • Gmail، Google Drive و Slack: این سرورها اغلب یک مسیر فایل محلی (Local File Path) را به‌عنوان ورودی ابزار می‌پذیرند. سرور سپس فایل را از دیسک می‌خواند و API را فراخوانی می‌کند. این «پشتیبانی از MCP» نیست؛ بلکه یک «فراخوانی متنی MCP است که باعث خواندن فایل از سیستم می‌شود». این روش روی لپ‌تاپ شخصی کار می‌کند اما به محض انتقال سرور به محیط ابری یا ریموت، می‌شکند.
  • Notion: این سرویس از روش پیچیده‌تری از طریق notion-create-file-upload استفاده می‌کند. ابزار یک URL موقت برای آپلود، هدرها و یک فیلد فرم برمی‌گرداند. سپس کلاینت، بایت‌ها (تا ۲۰ مگابایت) را مستقیماً به Notion می‌فرستد. در اینجا بایت‌ها هرگز از مسیر MCP عبور نمی‌کنند.

چرا پروتکل MCP «سخت‌گیر» است؟

عدم وجود نوع FileContent در مشخصات MCP تصادفی نیست. یک نتیجهٔ ابزار در MCP می‌تواند شامل TextContent (متن)، ImageContent (به صورت base64)، AudioContent (صوت)، ResourceLink (لینک منبع) یا EmbeddedResource (جسم جاسازی شده) باشد، اما چیزی برای فایل‌های عمومی ندارد. یکی از توسعه‌دهندگان Anthropic در بحث‌های گیت‌هب (Discussion #1197) تأیید کرد که این مورد به‌طور عمدی «دشوار» (Finicky) طراحی شده است.

سه دلیل اصلی برای این محدودیت وجود دارد:

۱. محدودیت‌های JSON-RPC: پروتکل MCP متن‌محور است. انتقال داده‌های باینری به‌طور عمدی خارج از محدوده (Out of scope) طراحی قرار گرفته است. افزودن آن نیازمند تغییر بنیادین در شکل پروتکل است، نه فقط یک به‌روزرسانی ساده.
۲. ریسک‌های امنیتی: اجازه دادن به عبور مسیرهای произвоال فایل از مرز ابزار، درهای تزریق دستورات مبتنی بر مسیر (Path-based Command Injection)، استخراج داده‌ها از طریق درخواست‌های «لطفاً این فایل را بخوان» و انتقال بدافزارها را باز می‌کند. در این راستا، برای مدیریت دسترسی‌های حساس و جلوگیری از رفتارهای غیرکنترل‌شده، استفاده از لایه‌های نظارتی مانند mcp-fabric-toolmesh به عنوان یک راهکار برای پر کردن شکاف‌های حاکمیتی در عامل‌ها پیشنهاد شده است.
۳. هزینه پنجره متنی: کدگذاری Base64 حجم داده را حدود ۳۳٪ افزایش می‌دهد. یک تصویر ۱ مگابایتی به ۱.۳۳ مگابایت متن تبدیل می‌شود که توکن (Token) — تکه‌های کوچکی از متن که مدل می‌خورد — گران‌بهای مدل را در هر نوبت که مدل آن را می‌بیند، مصرف می‌کند.

تلاش‌های ناموفق و مسیر فعلی

تلاش‌ها برای رفع این مشکل کند بوده و به تعویق افتاده است. پیشنهادی به نام SEP-1306 («استخراج حالت باینری برای آپلود فایل») در اوت ۲۰۲۵ ارائه شد. هدف این بود که قابلیت استخراج (Elicitation) با یک حالت سوم گسترش یابد تا سرورها بتوانند با استفاده از مدل رضایت موجود، از کاربران فایل درخواست کنند.

با این حال، SEP-1306 تا اوایل ۲۰۲۶ در حالت پیش‌نویس باقی ماند. نسخه RC جولای ۲۰۲۶ نیز انتقال باینری را به‌طور کامل به تعویق انداخت و پیش‌نویس بعدی (SEP-2631) نیز به تعویق افتاد. اکنون تمرکز روی یک گروه کاری اختصاصی برای آپلود فایل‌ها در SEP-2356 است. اگرچه برنامه‌ای وجود دارد، اما امروز هیچ پاسخ پروتکلی برای توسعه‌دهندگان ارائه نشده است.

راهکارهای عملی و جایگزین

از آنجایی که پروتکل بایت‌ها را جابه‌جا نمی‌کند، تنها استراتژی آماده برای محیط عملیاتی، انتقال «خارج از باند» (Out-of-band) است. مستحکم‌ترین الگو، روش URL امضا شده (Presigned URL) است که Notion از آن استفاده می‌کند. در این جریان، ابزار MCP یک URL موقت برای آپلود (مانند لینک S3) برمی‌گرداند؛ سپس کلاینت فایل را مستقیماً از طریق HTTPS به آن URL می‌فرستد (PUT می‌کند) و MCP را کاملاً دور می‌زند.

گردش‌کار پیشنهادی:
۱. ابزار اول (prepare_upload): کلاینت MCP را فراخوانی می‌کند تا یک uploadUrl و fileRef برای یک نام فایل و اندازه خاص دریافت کند.
۲. انتقال خارج از باند: کلاینت با استفاده از fetch و پروتکل HTTPS، بافر فایل را به uploadUrl می‌فرستد.
۳. ابزار دوم (attach_receipt): کلاینت دوباره MCP را فراخوانی کرده و fileRef و transactionId را برای نهایی کردن پیوست ارسال می‌کند.

سایر الگوهای رایج اما شکننده شامل موارد زیر است:

  • ذخیره‌سازی مشترک: هر دو کلاینت و سرور به یک Bucket مشترک احراز هویت می‌کنند. کلاینت آپلود می‌کند و فراخوانی MCP فقط کلید شیء (Object Key) را حمل می‌کند. این روش فقط در یک منطقه اعتماد (Trust Zone) مشترک امکان‌پذیر است.
  • Base64 ImageContent: برای اسکرین‌شات‌های بسیار کوچک زیر ۵۰۰ کیلوبایت مفید است. اما برای فایل‌های بزرگ‌تر به‌دلیل هزینه توکن‌ها و محدودیت اندازه درخواست، کاملاً ناکارآمد است. هرگز از این روش برای PDFها استفاده نکنید.
  • پراکسی مسیر محلی: پذیرفتن یک مسیر محلی. این یک «بمب ساعتی» است که به محض انتقال سرور به یک کانتینر، به‌طور بی‌صدا شکست می‌خورد.

این تغییر در رویکرد به این معناست که توسعه‌دهندگان باید از نگاه به MCP به‌عنوان لایه انتقال داده دست بردارند و آن را صرفاً به‌عنوان یک هماهنگ‌کننده (Coordinator) ببینند. بایت‌ها باید از کانال‌هایی عبور کنند که شما به آن‌ها اعتماد دارید، نه از طریق خط لوله فراخوانی ابزارِ عامل.

گام بعدی شما

  • اگر از MCP برای اتوماسیون استفاده می‌کنید، هرگونه انتقال فایل را از مسیر پروتکل حذف کرده و به مدل Presigned URL مهاجرت کنید.
  • در محیط‌های Docker، از ارسال مسیرهای محلی (Local Path) پرهیز کنید زیرا منجر به خطاهای Runtime می‌شود.
  • برای تصاویر بسیار کوچک (زیر ۵۰۰ کیلوبایت)، از ImageContent استفاده کنید اما برای هرچه کوچک‌تر از این مقدار، راهکار HTTPS را جایگزین کنید.

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

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

این محدودیت اعتبار پروتکل MCP را به عنوان یک استاندارد جامع برای عامل‌های هوش مصنوعی به چالش می‌کشد. بر اساس تجربه پیاده‌سازی‌های فعلی، تا زمانی که راهکاری بومی برای داده‌های باینری ارائه نشود، بسیاری از کاربردهای صنعتی (مانند حسابداری و تحلیل لاگ) در سطح آزمایشگاهی باقی می‌مانند.

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

برای توسعه‌دهندگان ایرانی که در حال ساخت عامل‌های اتوماسیون با MCP هستند، این خبر هشدار می‌دهد که نباید روی انتقال فایل داخلی پروتکل حساب کنند و باید از زیرساخت‌های ذخیره‌سازی ابری مستقل استفاده کنند.

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

این شکست نشان می‌دهد که MCP در حال حاضر بیشتر یک «لایه فرماندهی» است تا یک «لایه عملیاتی». تکیه بر JSON-RPC برای جابه‌جایی داده‌های حجیم، یک اشتباه استراتژیک در طراحی است که باعث می‌شود عامل‌های هوش مصنوعی در مواجهه با دنیای واقعیِ فایل‌محور، به ابزارهای ابتدایی‌تر از خودِ مدل وابسته شوند. توسعه‌دهندگان باید پذیرند که MCP برای هماهنگی است، نه برای حمل‌ونقل.

منابع

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

گفتگو

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

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

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

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

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

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

دات‌هوش

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

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