레이지 로딩 MCP 도구: 지원 현황 및 방법
대부분의 사람들은 MCP 서버 비용이 코드 내에 존재한다고 생각합니다. 하지만 이는 틀렸습니다.
MCP 서버를 구축할 때 두 가지 유형의 토큰 비용에 직면하게 됩니다:
- 고정 비용: 매 턴마다 컨텍스트에 로드되는 도구 정의(Tool definitions).
- 가변 비용: 도구가 반환하는 응답의 크기.
가변 비용은 직접 제어할 수 있습니다. 결과에 페이지네이션을 적용하거나 출력 크기를 제한할 수 있습니다.
고정 비용은 제어할 수 없습니다. 이는 호스트(클라이언트)의 역할입니다.
만약 많은 도구를 가진 서버가 10개 있다면, 모델이 첫 메시지를 읽기도 전에 40,000개의 토큰을 낭비할 수도 있습니다. 이는 호스트가 모든 도구 정의를 사전에 로드하기 때문에 발생합니다.
해결책은 레이지 로딩(lazy loading)입니다. 이는 호스트가 아주 작은 검색 도구만 로드하고, 다른 정의는 필요할 때만 가져오는 것을 의미합니다.
문제는 무엇일까요? 대부분의 클라이언트가 아직 이를 지원하지 않는다는 점입니다.
레이지 로딩의 현재 상태:
- Claude Code: 지원함. 검색 도구를 통해 필요할 때마다 도구를 로드함.
- Cursor, Devin 및 기타: 지원하지 않음. 모든 것을 한꺼번에 로드함.
레이지 로딩을 지원하지 않는 클라이언트에서 컨텍스트가 비대해지고 있다면, 두 가지 옵션이 있습니다:
레이지 프록시(lazy proxy) 사용 호스트가 실제 서버 대신 프록시 서버를 가리키도록 설정합니다. 프록시는
search_tools와execute_tool이라는 두 가지 도구만 노출합니다. 실제 정의는 요청이 있을 때만 로드합니다. 이 방식은 컨텍스트를 줄여주지만, 세밀한 권한 제어 기능은 사라집니다.라우터 패턴(router pattern) 사용 서버 하나가 너무 커진다면 도구를 더 추가하지 마세요. 대신, 연산(operation) 파라미터를 가진 하나의 도구를 만드세요. 예를 들어, "list", "get", "search"와 같은 명령어를 사용하는 하나의 "docs" 도구를 사용하는 식입니다. 이렇게 하면 호스트가 로드해야 하는 스키마의 수를 줄일 수 있습니다.
전략 요약:
- 도구 6~15개: 아무것도 하지 마세요. 비용이 너무 낮아 걱정할 수준이 아닙니다.
- 한 서버에 많은 도구가 있는 경우: 라우터 패턴을 사용하세요.
- 여러 개의 서로 다른 서버가 있는 경우: 레이지 프록시를 사용하세요.
코드를 최적화하는 데 몇 시간을 허비하기 전에 클라이언트의 동작 방식을 먼저 확인하세요. 해결책이 서버에 없을 수도 있습니다.
Source: https://dev.to/ismaestro/lazy-loading-mcp-tools-which-clients-support-it-and-how-4414
Optional learning community: https://t.me/GyaanSetuAi