Skip to content

שרת ה-MCP: אין תקרת גודל לגוף בקשה ואין הגבלת קצב — חל על כל הכלים #3431

Description

@amirbiron

מה חסר

נמדד על הקוד של היום: ב-mcp_server/ אין שום מידלוור שמגביל גודל גוף בקשה ואין שום הגבלת קצב. המידלוור היחיד שרשום הוא PATAuthMiddleware (mcp_server/server.py), שמאמת טוקן ותו לא. כלומר כל משתמש מאומת יכול לשלוח בקשות בכל גודל ובכל תדירות.

grep "add_middleware|Middleware(" mcp_server/   -> רק PATAuthMiddleware
grep "rate.limit|RateLimit|slowapi|limiter"     -> אפס תוצאות

למה זה עולה עכשיו

PR #3428 הוסיף תקרת אורך ל-path בכלי codekeeper_docs_get_section, אחרי שנמדד שנתיב של 400KB עלה 608ms של מעבד — הגברה של פי 246 לעומת המצב לפני שסינון הסודות התחיל לסרוק כל רכיב בנתיב.

התקרה ההיא היא הקטנת משטח ולא תחליף להגבלת קצב. היא חוסמת את ההגברה בכל בקשה בודדת, ואינה נוגעת במספר הבקשות. היא גם מקומית לכלי אחד: כל שאר הכלים ממשיכים לקבל ארגומנטים בכל גודל.

מה כדאי שיהיה

  1. תקרת גודל לגוף בקשה ברמת האפליקציה, כך שאף כלי לא יקבל ארגומנט שגדול מסדר גודל סביר.
  2. הגבלת קצב לפי זהות — הטוקן כבר מזוהה במידלוור הקיים, כלומר המפתח לספירה קיים.

מה לשים לב אליו במימוש

blanket-policy-silent-block §7 מתאר את המלכודת הקלאסית: מגבלת קצב גורפת שחלה גם על נתיבי בדיקת דופק. / ו-/health נדגמים על ידי מוניטור חיצוני בתדירות קבועה, ובלי פטור מפורש הם יקבלו 429 — והמוניטור יכריז על שירות בריא כמנותק. אותו היגיון חל על כל תעבורה לגיטימית בתדירות גבוהה.

ובאותה רוח, ומאותה סיבה שבגללה path_too_long קיבל קוד משלו ב-PR #3428: הסירוב צריך לנקוב בסיבתו. בקשה שנחסמה בגלל גודל או בגלל קצב צריכה לומר את זה, ולא להיראות מבחוץ כמו תקלה.

הקשר

התגלה בסקירת הקוד על PR #3428. הדוח המלא: code-review-3428-docs-path-policy.md ב-CodeKeeper.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions