MCP 토큰 세금
이번 달 Hacker News와 X에서 싸움이 붙었습니다. 같은 일을 CLI로 하면 수백 토큰인데, 왜 MCP 오퍼레이션 하나에 수만 토큰을 태우는가? MCP 때리기처럼 들립니다. 아닙니다. 가장 크게 목소리를 내는 사람들은 에이전트를 사랑하는 사람들입니다 — 그저 청구서를 만났을 뿐입니다. 이 페이지는 그 청구서에 대한 실전 가이드입니다. 토큰이 실제로 어디로 가는지, 거의 아무도 구분하지 않는 두 가지 비용, 그리고 15만 토큰짜리 워크플로를 2천 토큰으로 바꾸는 세 가지 해법.
- 서로 다른 두 가지 MCP 토큰 비용을 구분하기: 도구 정의 로딩과 중간 결과
- 스키마 비용이 왜 한 번이 아니라 대화마다 지불되는지 이해하기
- defer_loading과 Tool Search Tool로 도구 스키마를 필요할 때만 로드하기
- 코드 실행 / Programmatic Tool Calling으로 큰 결과를 컨텍스트 밖에 두기
- 작업마다 MCP 도구가 값어치를 하는지, 아니면 평범한 CLI 호출이 이기는지 판단하기
비용은 하나가 아니라 둘
MCP 서버를 연결하면 클라이언트가 tools/list를 요청하고 모든 도구를 전체 JSON 스키마와 함께 돌려받습니다. 그 블록 전체가 모델의 컨텍스트에 주입됩니다. 대부분의 사람은 여기서 계산을 멈춥니다. 하지만 세금은 둘이고, 두 번째가 대개 더 큽니다.
비용 1 — 도구 정의. 연결된 모든 도구의 이름, 설명, 파라미터 스키마가 컨텍스트에 앉아 있습니다. Anthropic 자신의 표현: "에이전트가 수천 개의 도구에 연결된 경우, 요청을 읽기도 전에 수십만 개의 토큰을 처리해야 합니다." 엔터프라이즈 서버 하나가 수십에서 수백 개의 도구를 게시할 수 있고, 서드파티 분석은 400개 도구 서버를 스키마만 약 40만 토큰으로 추산합니다 — Claude의 200k 컨텍스트 윈도우가 담을 수 있는 것보다 큽니다.
비용 2 — 중간 결과. 모델이 도구를 직접 호출하면 모든 결과가 모델의 컨텍스트를 통과합니다 — 읽히길 원하지 않았던 부분까지요. Anthropic의 예: 한 도구에서 두 시간짜리 회의록을 끌어와 다른 도구에 넘기면, 한 줄 요약을 만들려고 전체 회의록이 모델을 두 번 통과합니다 — 잠재적으로 약 5만 토큰.
- 비용 1은 프롬프트 캐싱이 걸리기 전까지 매 턴 지불됩니다 — 스키마는 한 번 로드되는 게 아니라 대화의 매 요청마다 다시 전송됩니다. 큰 도구 카탈로그는 일회성 수수료가 아니라 세션 전체에 붙는 세금입니다.
- 비용 2는 도구 개수가 아니라 데이터에 비례합니다. 작은 도구 열 개가 거대한 블롭을 반환하는 도구 하나보다 쌀 수 있습니다.
1차 출처에서 나온 숫자들
| 해법 | 작업 | 이전 | 이후 | 감소 |
|---|---|---|---|---|
| MCP와 코드 실행 | Google Drive → Salesforce 워크플로 | 150,000 | 2,000 | 98.7% |
| Tool Search Tool | 작업 시작 전 정의 로딩 | ~77,000 | ~8,700 | 85% |
| Programmatic Tool Calling | 복잡한 리서치 작업 | 43,588 | 27,297 | 37% |
세 행 모두 Anthropic이 공개한 수치입니다. 놀라운 부분은 비용이 아니라 정확도입니다. Tool Search Tool을 쓰면 도구 선택 정확도가 올라갔습니다(Opus 4.5는 79.5% → 88.1%, Opus 4는 49% → 74%). 컨텍스트를 붐비게 하는 도구가 줄면 모델이 올바른 것을 더 자주 고릅니다. 여기서는 비용과 품질이 같은 방향으로 움직이는데, 이는 드문 일입니다.
해법 1 — 도구 스키마를 필요할 때 로드하기
모든 스키마를 미리 주입하는 대신 defer_loading: true로 표시하세요. 그러면 Claude는 가벼운 인덱스만 봅니다. GitHub이 필요해지면 Tool Search Tool을 호출하고, 그것이 매칭되는 GitHub 스키마만 돌려줍니다 — 다른 모든 서버의 50여 개 도구는 오지 않습니다. Anthropic은 이 방식이 전부 미리 로드했을 때의 약 122,800 토큰 대비 약 191,300 토큰의 컨텍스트를 보존한다고 보고합니다.
MCP 서버를 많이 붙인 Claude Code를 쓰고 있다면 지금 이 패턴을 보고 있는 셈입니다. 도구는 지연(deferred) 상태로 도착하고, 에이전트는 작업이 필요로 할 때만 검색 단계를 통해 각 스키마를 가져옵니다. 커뮤니티 보고에 따르면 Claude Code는 연결된 도구 설명이 컨텍스트 윈도우의 약 10%를 넘길 상황이 되면 MCP Tool Search를 자동으로 켭니다 — 정확한 발동 조건은 사용 중인 버전에서 확인하세요.
- 활성 서버와 각각이 게시하는 도구 개수를 대략 파악하세요. 지난주 한 작업을 위해 연결한 서버가 오늘도 매 턴 세금을 물리고 있습니다.
- 가장 싼 해법은 서버를 줄이는 것입니다. 전체 카탈로그가 아니라 작업이 실제로 쓰는 두세 개만 연결하세요.
- 연결은 유지하되 거의 쓰지 않는 서버는, 스키마가 검색될 때만 로드되도록 defer_loading + Tool Search를 지원하는 클라이언트/설정을 선호하세요.
해법 2 — 코드 실행으로 결과를 컨텍스트 밖에 두기
더 깊은 해법은 비용 2를 겨냥합니다. 모델이 도구를 하나씩 호출하며 모든 결과가 모델을 통과하는 대신, 모델이 도구를 호출하는 코드를 작성하고 중간 데이터는 실행 환경에 머뭅니다. Anthropic은 MCP 서버를 에이전트가 파일시스템처럼 탐색하는 도구의 파일 트리로 노출해 필요한 정의만 로드하게 합니다 — 그리고 "중간 결과는 기본적으로 실행 환경에 머뭅니다… 에이전트는 여러분이 명시적으로 로그하거나 반환한 것만 봅니다."
바로 그 하나의 설계 변경이 Drive→Salesforce 워크플로를 150,000에서 2,000 토큰으로 무너뜨립니다. 레코드는 코드를 통해 움직이고, 최종 개수만 모델로 돌아옵니다. 개발자 플랫폼에서는 같은 아이디어가 Programmatic Tool Calling으로 제공됩니다 — Claude가 여러 도구를 오케스트레이션하고 출력이 컨텍스트에 닿기 전에 필터링하는 Python을 작성합니다.
- 경험칙: 도구가 큰 것을 반환한다면(회의록, 쿼리 덤프, 파일) 블롭이 컨텍스트 밖에서 처리되도록 코드 실행을 원하게 됩니다. 도구가 작은 일을 그저 수행하기만 한다면(이슈 생성, 한 행 전송) 직접 호출로 충분합니다.
해법 3 — CLI 호출이 그냥 이기는 때를 알기
때로는 정답이 더 나은 MCP 설정이 아니라 MCP를 아예 안 쓰는 것입니다. HN/X 논쟁에는 진짜 논점이 있습니다. gh pr list나 psql -c '…' 같은 셸 명령은 왕복 수백 토큰인 반면, 동등한 MCP 경로는 스키마에 구조화된 결과까지 지불합니다. 에이전트가 이미 터미널을 가지고 있고 CLI가 존재한다면, 그것이 대개 가장 날렵한 경로입니다.
도구가 이미 CLI라면 CLI를 선호하세요
# Instead of connecting a GitHub MCP server for read-only work, # let the agent use the gh CLI it already has: gh pr list --state open --json number,title,author # ~200 tokens of command + compact output, no schema tax, # no server to keep connected across the session.
MCP가 오버헤드 값을 하는 때는 타입이 있고, 권한이 통제되고, 여러 표면에 걸친 능력이 필요할 때입니다 — 읽기 전용 롤이 있는 데이터베이스, 조종할 수 있는 브라우저, OAuth가 걸린 SaaS API — 또는 같은 도구를 여러 턴에 걸쳐 재사용해 캐싱이 스키마 비용을 분산시킬 때입니다. 능력이 일회성이고, 이미 스크립트로 가능하고, 작은 것을 반환한다면 CLI를 집으세요. 어느 쪽도 "더 낫지" 않습니다. 비용 곡선 위의 다른 지점일 뿐입니다.
- MCP에는 두 가지 토큰 비용이 있습니다: 도구 정의 스키마(거의 매 턴 지불)와 중간 결과(데이터에 비례).
- Tool Search + defer_loading은 스키마 비용을 약 85% 줄이면서 도구 선택 정확도도 올립니다 — 스키마는 검색될 때만 로드하세요.
- 코드 실행 / Programmatic Tool Calling은 큰 결과를 실행 환경에 붙잡아 둡니다. 로그하거나 반환한 것만 모델에 도달합니다(Anthropic 예시에서 150k → 2k).
- 가장 싼 최적화는 작업당 더 적은 서버를 연결하는 것입니다.
- 능력이 작은 것을 반환하는 일회성이고 이미 CLI가 있다면, 셸 호출(약 200 토큰)이 MCP 왕복을 이깁니다.
확인해 보세요
0/4AILmanac 관련 문서
- Claude Code의 MCP 서버 — 서버를 추가하고, 범위를 정하고, 보안을 잡는 법.
- 토큰 경제 — 명령 출력이 모델에 닿기 전에 압축하기.
- 동적 워크플로 — 오케스트레이션 비용이 드러나는 지점과, 지출을 가늠하기 위한 슬라이싱.
- API의 도구 사용 — 이 모든 것 뒤에 있는 요청/응답 형태.
출처 및 더 읽을거리
- MCP와 코드 실행: 더 효율적인 AI 에이전트 만들기 — Anthropic Engineering. 150,000 → 2,000 토큰(98.7%) 수치와 "중간 결과는 실행 환경에 머문다" 패턴의 출처.
- Claude 개발자 플랫폼의 고급 도구 사용 소개 — Anthropic Engineering. Tool Search Tool(
defer_loading, 약 85% 감소, 정확도 향상)과 Programmatic Tool Calling(43,588 → 27,297 토큰). - Claude Code MCP 문서 — 서버 연결과 범위 지정에 대한 공식 레퍼런스.
- modelcontextprotocol — Progressive Tool Discovery 논의 — 필요 시 도구 로딩에 대한 커뮤니티 설계 논의.
- MCP Progressive Disclosure (Solo.io) — 가벼운 인덱스 / 필요 시 스키마 가져오기 패턴에 대한 서드파티 설명.