본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 30. 00:32

MCP 세금 폭탄: 단일 서버에서 42,000 토큰 소모. 해결 방법은 다음과 같습니다.

요약

MCP(Model Context Protocol) 사용 시 발생하는 과도한 스키마 오버헤드와 토큰 비용 문제를 분석합니다. 단일 서버 연결만으로도 수만 개의 토큰이 소모되는 현상을 지적하며, 이를 해결하기 위한 최적화 전략을 제시합니다.

핵심 포인트

  • MCP 서버의 도구 스키마가 매 요청마다 컨텍스트를 점유하여 비용 급증 유발
  • 도구 사용 여부와 관계없이 모든 스키마 정의가 토큰으로 소비됨
  • 서버 스키마 지연 로딩 등 효율적인 도구 배선 전략 필요

지난달 MCP 서버를 연결했는데, 첫 번째 호출에서 토큰 비용이 37% 급증하는 것을 목격했습니다. 실제 작업은 무엇이었을까요? 단 한 번의 git status였습니다. 그 서버 하나를 위한 스키마(schema)가 모델이 단 한 글자라도 타이핑하기 전에 42,000 토큰을 소비했습니다.

오타가 아닙니다. 4만 2천 개입니다.

만약 당신이 2026년에 AI 에이전트(AI agents)를 출시하면서 MCP 오버헤드(overhead)를 측정하지 않고 있다면, 실제 돈을 길바닥에 버리고 있는 것입니다. 제가 실제로 이 '세금'을 계측했을 때 발견한 사실과, 비용을 다시 통제 가능한 수준으로 되돌린 네 가지 패턴을 소개합니다.

"MCP 세금"의 실체

MCP (Model Context Protocol)는 연결된 모든 서버가 자신의 전체 도구 스키마(tool schema)를 모델의 컨텍스트 윈도우(context window)로 밀어 넣는 JSON-RPC 핸드셰이크(handshake)를 정의합니다. 모델은 어떤 도구가 존재하고 어떻게 호출해야 하는지 알기 위해 해당 정의들이 필요합니다. 프로토콜은 깔끔합니다. 하지만 경제성은 그렇지 않습니다.

평균 M개의 도구를 가진 N개의 서버를 연결하면, 해당 도구들을 단 하나도 사용하지 않는 요청을 포함하여 모든 단일 요청마다 N × M × schema_size만큼의 토큰을 지불해야 합니다. 모델이 스키마를 무시한다고 해서 스키마 크기가 줄어들지는 않습니다. 페이지 아웃(paged out)되지도 않습니다. 대화가 끝날 때까지 컨텍스트를 잡아먹으며 그 자리에 그대로 머물러 있습니다.

200,000 토큰 윈도우에서, 네 개의 "적당한" 서버는 에이전트가 인사를 건네기도 전에 예산의 21%를 태워버릴 수 있습니다.

표준 MCP 라이프사이클(lifecycle)은 다음과 같습니다:

1. Initialize          → 서버가 프로토콜 버전, 기능(capabilities)을 반환
2. ListTools           → 서버가 전체 도구 스키마 배열을 반환
3. CallTool (호출당)   → 모델이 도구를 선택하고, 인자(args)를 보내고, 결과를 받음
...

1단계와 2단계는 모든 세션에서 발생합니다. 세금이 발생하는 지점은 바로 2단계입니다.

나의 영수증: 실제 측정 결과

저는 2026년 6월 한 주 동안 운영 중인 에이전트를 계측했습니다. 동일한 모델 (Claude Opus 4.5), 동일한 워크로드(workloads)를 사용했으며, 오직 도구 배선(tool wiring)만 변경되었습니다. 결과는 다음과 같습니다:

설정 (Configuration)요청당 평균 토큰 (Avg tokens/request)스키마 오버헤드 (Schema overhead)1k 요청당 비용 (Cost per 1k req)
MCP 없음, CLI 도구만 사용18,4000$0.92
...

단일 서버 케이스가 도구당 비용이 가장 심각했습니다. GitHub MCP 하나만으로도 실제 GitHub 작업에 약 800 토큰 정도만 필요했을 대화에 **42,000 토큰의 스키마 (schema)**가 추가되었습니다. 하루 1,000건의 요청을 기준으로 하면, 아무런 유용함 없이 매달 $2,000의 추가 비용이 발생한 셈입니다.

4개 서버 케이스는 훨씬 더 극적이었습니다. 컨텍스트 윈도우 (context window)의 80%가 모델이 거의 사용하지 않는 정의 (definitions)들로 채워졌습니다.

실제로 효과가 있었던 네 가지 해결책

저는 여덟 가지의 서로 다른 최적화 (optimizations)를 시도했습니다. 그중 네 가지가 유의미한 변화를 만들어냈고, 나머지 네 가지는 보여주기식에 불과했습니다.

1. 서버 스키마 지연 로딩 (Lazy-load server schemas)

대부분의 MCP 클라이언트 (clients)는 세션 시작 시 ListTools를 즉시 호출합니다. 저는 모델의 첫 번째 턴 (turn)이 서버의 도메인(파일 시스템 경로, github.com 등)을 참조할 때만 이를 호출하도록 클라이언트를 패치(patch)했습니다.

# 이전 — 즉시 호출 (eager)
await mcp_client.initialize_all_servers()

...

결과: 서버 스키마가 관련이 있을 때만 로드됩니다. 이제 유휴 요청 (idle requests)은 MCP 오버헤드(overhead) 비용을 약 0 토큰만 지불합니다. 혼합 워크로드 (mixed workload)에서 전체 토큰의 38%를 절감했습니다.

2. 설명을 최소한으로 축소 (Strip descriptions to the minimum)

MCP 도구 스키마 (tool schemas)에는 도구 목록을 살펴보는 사람들을 위해 작성된 풍부한 설명 (descriptions)이 포함되어 있습니다. 모델에는

서버는 ListTools 호출 시 허용 목록(allowlisted)에 있는 도구만 반환합니다. 8개의 도구 × 도구당 약 1,200 토큰 = 9,600 토큰 vs 70개의 도구 × 3,500 = 245,000 토큰.

4. 빈도가 높은 읽기 작업을 CLI로 이동

이 부분은 제 자존심에 상처를 주었습니다. 저는 파일 시스템 작업을 위해 아주 멋진 MCP 서버를 구축했습니다. 우아했죠. 하지만 동시에 비용도 많이 들었습니다.

cat, grep, ls, head와 같은 원시 읽기(raw reads) 작업의 경우, bash를 통한 CLI 호출은 도구 정의(tool definition) 비용이 약 200 토큰인 반면, 이에 상응하는 MCP 방식은 약 2,800 토큰이 소모됩니다. 모델은 grep -c "TODO" src/*.ts를 실행할 때 구조화된 출력(structured output)을 필요로 하지 않습니다.

저는 상태 유지 작업(stateful operations, 다단계 트랜잭션, 인증된 API 호출)을 위해 MCP 서버를 유지하고, 그 외의 모든 것은 bash를 통해 라우팅했습니다. 빈도가 높은 경로에서 32배의 토큰 절감을 달성했습니다.

효과가 없었던 방법들

저처럼 주말을 허비하지 않도록 목록을 작성할 가치가 있습니다:

  • 세션 간 스키마 캐싱 (Caching schemas across sessions): 모델은 여전히 세션마다 컨텍스트(context)에 스키마를 로드합니다. 캐시 적중률(cache hit rate)은 높았지만, 비용 절감 효과는 제로였습니다.
  • gzip을 이용한 스키마 압축 (Compressing schemas with gzip): 토크나이저(tokenizer)는 바이트(bytes) 단위로 작동하지 않습니다. 시도해 보았으나, 서버가 전송 전에 이를 다시 확장해야 하므로 이득이 없었습니다.
  • 모델에게 사용하지 않는 도구를 무시하도록 요청하기: 모델은 컨텍스트에 포함된 토큰을 "보지 않을" 방법이 없습니다. 도구를 호출하지 않기로 선택할 수는 있지만, 읽지 않은 상태로 되돌릴 수는 없습니다.
  • 보완을 위해 시스템 프롬프트(system prompts)를 짧게 만들기: 이는 실제 작업을 위한 컨텍스트가 줄어든다는 것을 의미할 뿐입니다. 결과적으로 마이너스입니다.

솔직한 요약

MCP는 올바른 프로토콜입니다. 생태계는 빠르게 움직이고 있습니다 (2026년 중반 기준 14,000개 이상의 서버, 거버넌스가 Linux Foundation의 AAIF로 이전됨). 커뮤니티는 해결책들을 내놓고 있습니다. 현재 MCP Gateway 도구들은 서버 측에서 지연 스키마 로딩(lazy schema loading)을 수행하며, 여러 대형 서버들이 "최소화(minimal)" 모드를 출시했습니다.

하지만 오늘날 실제 운영 환경(production)에서 그 비용(tax)은 실재합니다. 최적화하기 전에 먼저 측정하십시오. tiktoken을 사용하여 스키마 페이로드(schema payload)와 요청 페이로드(request payload)를 비교하며 에이전트를 실행해 보면, 여러분의 수치를 알 수 있을 것입니다.

제 수치는 이전에는 70%였습니다. 지금은 37%입니다. 나머지 20퍼센트 포인트는 제가 혼자서 할 수 없는 서버 측 개선(server-side improvements)을 통해 채워질 것입니다. 하지만 생태계가 따라잡을 때까지는 지연 로딩(lazy-loading) + 설명 트리밍(description trimming) + 허용 목록(allowlists) + 선택적 CLI 라우팅(selective CLI routing)이 가장 방어 가능한 스택입니다.

만약 여러분이 이를 측정하지 않고 오늘 MCP를 배포하고 있다면, 비용 측면에서 눈을 감고 비행하는 것과 같습니다. 프로토콜은 개선될 것입니다. 하지만 여러분의 청구서는 기다려주지 않습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0