𝗟𝗮𝘇𝘆 𝗟𝗼𝗮𝗱𝗶𝗻𝗴 𝗠𝗖𝗣 𝗧𝗼𝗼𝗹𝘀: 𝗔𝗶 𝗵𝗼̂̃ 𝘁𝗿𝗼̣̂𝗽 𝘃𝗮̀ 𝗰𝗮́𝗰𝗵 𝘁𝗵𝘂̛̣𝗰 𝗵𝗶𝗲̣̂𝗻
Hầu hết mọi người đều nghĩ rằng chi phí máy chủ MCP nằm ở trong mã nguồn. Họ đã lầm.
Nếu bạn xây dựng một máy chủ MCP, bạn sẽ đối mặt với hai loại chi phí token:
- Chi phí cố định: Các định nghĩa công cụ (tool definitions) được tải vào ngữ cảnh (context) trong mỗi lượt.
- Chi phí biến đổi: Kích thước phản hồi mà một công cụ trả về.
Bạn có thể kiểm soát chi phí biến đổi. Bạn có thể phân trang kết quả hoặc giới hạn kích thước đầu ra.
Bạn không thể kiểm soát chi phí cố định. Đó là nhiệm vụ của host (client).
Nếu bạn có mười máy chủ với nhiều công cụ, bạn có thể lãng phí tới 40.000 token ngay cả trước khi mô hình kịp đọc tin nhắn đầu tiên của bạn. Điều này xảy ra vì host tải mọi định nghĩa công cụ ngay từ đầu.
Giải pháp là lazy loading. Điều này có nghĩa là host chỉ tải một công cụ tìm kiếm nhỏ và chỉ lấy các định nghĩa khác khi cần thiết.
Vấn đề là gì? Hầu hết các client vẫn chưa hỗ trợ tính năng này.
Tình trạng hiện tại của lazy loading:
- Claude Code: Có hỗ trợ. Các công cụ được tải theo yêu cầu thông qua một công cụ tìm kiếm.
- Cursor, Devin và các công cụ khác: Không hỗ trợ. Chúng tải mọi thứ cùng một lúc.
Nếu ngữ cảnh của bạn đang bị phình to trên một client thiếu tính năng lazy loading, bạn có hai lựa chọn:
Sử dụng một lazy proxy Trỏ host của bạn đến một máy chủ proxy thay vì các máy chủ thực của bạn. Proxy này chỉ cung cấp hai công cụ:
search_toolsvàexecute_tool. Nó chỉ tải các định nghĩa thực của bạn khi được yêu cầu. Điều này giúp thu nhỏ ngữ cảnh nhưng sẽ làm mất đi khả năng kiểm soát quyền hạn chi tiết.Sử dụng mô hình router (router pattern) Nếu một máy chủ trở nên quá lớn, đừng thêm nhiều công cụ hơn. Thay vào đó, hãy tạo một công cụ duy nhất với một tham số thao tác (operation parameter). Ví dụ: sử dụng một công cụ "docs" với các lệnh như "list", "get" hoặc "search". Điều này làm giảm số lượng schema mà host phải tải.
Tóm tắt chiến lược:
- 6 đến 15 công cụ: Không cần làm gì cả. Chi phí quá thấp để phải lo lắng.
- Nhiều công cụ trong một máy chủ: Sử dụng mô hình router.
- Nhiều máy chủ khác nhau: Sử dụng một lazy proxy.
Hãy kiểm tra hành vi của client trước khi bạn dành hàng giờ để tối ưu hóa mã nguồn của mình. Giải pháp có thể hoàn toàn không nằm ở máy chủ của bạn.
Source: https://dev.to/ismaestro/lazy-loading-mcp-tools-which-clients-support-it-and-how-4414
Optional learning community: https://t.me/GyaanSetuAi