Leniwe ładowanie narzędzi MCP: Kto je obsługuje i jak?
Większość ludzi uważa, że koszty serwera MCP kryją się w kodzie. Mylą się.
Jeśli budujesz serwer MCP, mierzysz się z dwoma rodzajami kosztów tokenów:
- Koszt stały: Definicje narzędzi ładowane do kontekstu w każdej turze.
- Koszt zmienny: Rozmiar odpowiedzi zwracanej przez narzędzie.
Kontrolujesz koszt zmienny. Możesz stosować paginację wyników lub ograniczać rozmiar wyjścia.
Nie masz kontroli nad kosztem stałym. To zadanie hosta (klienta).
Jeśli masz dziesięć serwerów z wieloma narzędziami, możesz zmarnować 40 000 tokenów, zanim model w ogóle przeczyta Twoją pierwszą wiadomość. Dzieje się tak, ponieważ host ładuje wszystkie definicje narzędzi z góry.
Rozwiązaniem jest lazy loading (leniwe ładowanie). Oznacza to, że host ładuje jedynie małe narzędzie wyszukiwania i pobiera pozostałe definicje dopiero wtedy, gdy są potrzebne.
Problem? Większość klientów jeszcze tego nie obsługuje.
Aktualny status lazy loading:
- Claude Code: Obsługuje to. Narzędzia są ładowane na żądanie za pomocą narzędzia wyszukiwania.
- Cursor, Devin i inne: Nie obsługują tego. Ładują wszystko naraz.
Jeśli Twój kontekst puchnie w kliencie, który nie obsługuje lazy loadingu, masz dwie opcje:
Użyj lazy proxy Skieruj swojego hosta na serwer proxy zamiast na prawdziwe serwery. Proxy udostępnia tylko dwa narzędzia:
search_toolsiexecute_tool. Ładuje prawdziwe definicje dopiero na żądanie. Zmniejsza to Twój kontekst, ale pozbawia Cię precyzyjnej kontroli uprawnień.Użyj wzorca routera (router pattern) Jeśli jeden serwer staje się zbyt duży, nie dodawaj kolejnych narzędzi. Zamiast tego stwórz jedno narzędzie z parametrem operacji. Na przykład użyj jednego narzędzia "docs" z komendami takimi jak "list", "get" lub "search". Zmniejsza to liczbę schematów, które host musi załadować.
Podsumowanie strategii:
- 6 do 15 narzędzi: Nie rób nic. Koszt jest zbyt niski, by się nim przejmować.
- Wiele narzędzi w jednym serwerze: Użyj wzorca routera.
- Wiele różnych serwerów: Użyj lazy proxy.
Sprawdź zachowanie swojego klienta, zanim poświęcisz godziny na optymalizację kodu. Rozwiązanie może wcale nie leżeć w Twoim serwerze.
Źródło: https://dev.to/ismaestro/lazy-loading-mcp-tools-which-clients-support-it-and-how-4414
Opcjonalna społeczność edukacyjna: https://t.me/GyaanSetuAi