Claude Code 비용 최적화
Claude Code에 MCP 서버 5개를 연결했다. GitHub, Slack, Sentry, Grafana, Splunk.
첫 메시지를 보내기도 전에 컨텍스트 윈도우에서 약 5만 5천 토큰이 사라졌다.
"MCP를 쓰면 도구가 많아져서 편하다"는 사실이다. 하지만 그 편리함에는 토큰이라는 가격표가 붙어 있다.
반면 Skills는? 10개를 등록해도 세션 시작 시 소모하는 토큰은 300~1,000개 수준이다. 100배 이상 차이가 난다.
왜 이런 차이가 생기는 걸까. 답은 아키텍처에 있다.
MCP(Model Context Protocol)의 도구는 JSON 스키마로 정의된다. 각 도구의 이름, 설명, 파라미터 타입, 반환 값 — 이 모든 정보가 하나의 JSON 블록이다.
문제는 이 스키마가 매 API 요청마다 시스템 프롬프트에 포함된다는 점이다.
[턴 1] 시스템 프롬프트 + 도구 스키마 58개 + 사용자 메시지
[턴 2] 시스템 프롬프트 + 도구 스키마 58개 + 이전 대화 + 사용자 메시지
[턴 3] 시스템 프롬프트 + 도구 스키마 58개 + 이전 대화 + 사용자 메시지 ...
매 턴마다 동일한 도구 정의가 반복 전송된다. 도구를 사용하든 안 하든 상관없다. GitHub MCP의 27개 도구는 Git 관련 질문을 하지 않는 세션에서도 매번 ~18K 토큰을 차지한다.
Anthropic 엔지니어링 블로그에서도 도구 정의는 컨텍스트 윈도우 공간을 차지하면서 응답 시간과 비용을 증가시킨다라고 언급하고 있다.
또한 MCP 서버를 추가할 때마다 오버헤드 _ 프로그램이나 네트워크가 작동할 때, 실제 처리하려는 데이터 외에 시스템을 관리하고 유지하기 위해 소모되는 간접적인 자원(CPU 시간, 메모리 등) 가 선형적으로 증가한다는 것이다. Anthropic 내부에서는 최적화 전에 도구 정의만으로 134K 토큰을 관찰한 적도 있다 한다.
한 개발자는 자신의 MCP 설정이 대화 시작 전에 66,000 토큰 이상을 소모하고 있다는 것을 발견했다. 200K 윈도우의 3분의 1이다. 비용으로 환산하면? MCP 4개만 연결해도 간단한 질문 하나에 약 $0.21의 추가 비용이 발생한다. 하루에 질문 50개를 하면 그것만으로 $10가 넘는다.
한 가지 짚고 넘어갈 것은 Claude Code의 "/context" 명령이 보여주는 MCP 토큰 수치는 실제보다 과대 보고될 수 있다. Cameron Cooke의 조사에 따르면, 공유되는 시스템 지시문이 도구별로 중복 계산되어 최대 3배까지 부풀려진 사례가 있다. XcodeBuildMCP(60개 도구)의 경우 실측 ~15K 토큰이 "/context" 에서 ~45K로 보고됐다. 그래도 교정 후 수치가 15K인 것 자체가 — 아직 작업을 시작하기도 전에 — 적은 양은 아니다.
Skills의 아키텍처는 MCP와 근본적으로 다르다. 핵심은 점진적 공개(Progressive Disclosure)다.
Skills의 메타데이터만 컨텍스트에 올라간다. 스킬 이름과 한 줄 설명 정도다.
- commit: 코드 변경사항 커밋
- review-pr: PR 리뷰 수행
- md-to-html: 마크다운을 HTML로 변환
스킬당 약 30 ~ 100 토큰이다. 10개 스킬이면 300 ~ 1,000 토큰. MCP 서버 하나보다 적다.
사용자가 "/commit" 을 실행하거나, Claude가 스킬이 필요하다고 판단하면 그때 전체 지시문이 로딩된다. 보통 5K 토큰 이내다.
스킬 실행이 끝나면 컨텍스트에서 빠진다. 다음 턴에 다시 올라가지 않는다.
[턴 1] 시스템 프롬프트 + 스킬 메타(300 토큰) + 사용자 메시지
[턴 2] 시스템 프롬프트 + 스킬 메타(300 토큰) + /commit → 스킬 본문 로딩(~4K)
[턴 3] 시스템 프롬프트 + 스킬 메타(300 토큰) + 이전 대화 (스킬 본문은 빠짐)
MCP는 매 턴마다 전체 도구 스키마를 싣는다. Skills는 필요할 때만, 필요한 만큼만 싣는다. 이 차이가 100배의 토큰 격차를 만든다.
MCP는 "모든 도구를 책상 위에 펼쳐놓는" 방식
Skills는 "서랍에 넣어두고 필요할 때 꺼내는" 방식
책상이 넓으면 (컨텍스트 윈도우가 크면) 펼쳐놓는 것도 괜찮다.
하지만 도구가 너무 많으면 정작 작업할 공간이 줄어든다. 30~50개 도구를 넘기면 Claude의 도구 선택 정확도도 떨어지기 시작한다.
Anthropic 공식 문서의 권고:
"gh, aws, gcloud, sentry-cli 같은 CLI 도구는 MCP 서버보다 컨텍스트 효율적이다. 영구적인 도구 정의를 추가하지 않기 때문이다."
GitHub MCP를 연결하면 27개 도구 정의가 매 턴 ~18K 토큰을 차지한다. 대신 gh CLI를 쓰면? Bash 도구(이미 존재)를 통해 실행되므로 추가 스키마 오버헤드가 0이다. 게다가 CLI는 파이프(|)로 출력을 필터링할 수 있어서 결과 토큰도 줄일 수 있다. Simon Willison의 지적대로, "MCP로 가능한 거의 모든 것이 CLI로도 가능하다. LLM은 --help 로 사용법을 스스로 파악할 수 있다". CLI가 있는 서비스라면 MCP보다 CLI를 우선 쓰자.
Claude Code는 MCP 도구가 컨텍스트 윈도우의 10%를 초과하면 자동으로 Tool Search를 활성화한다. 도구 정의를 지연 로딩하는 기능이다. 더 공격적으로 쓰고 싶으면 임계값을 낮출 수 있다:
# 컨텍스트의 5% 초과 시 Tool Search 활성화
ENABLE_TOOL_SEARCH=auto:5
Anthropic에 따르면 Tool Search로 토큰 사용량이 85% 감소하면서 전체 도구 라이브러리 접근은 유지된다. 실전 테스트에서는 MCP 컨텍스트가 51K에서 8.5K로, 약 83% 줄었다.
MCP는 외부 시스템과의 실시간 상호작용이 필요할 때 쓴다. 데이터베이스 쿼리, API 호출, 라이브 모니터링 같은 것.
반면 코딩 컨벤션, 아키텍처 가이드, 리뷰 체크리스트 같은 참조 지식은 Skills로 옮기는 게 맞다. 매 턴 로딩될 필요가 없기 때문이다.
당연한 이야기인데, 실제로는 잘 안 한다. "혹시 쓸까 봐" 연결해둔 MCP 서버도 매 턴 토큰을 소모한다[3]. 지금 프로젝트에서 안 쓰는 서버는 설정에서 빼자.
CLAUDE.md도 매 턴 시스템 프롬프트에 포함된다. 500줄 이하로 유지하고, 상세 문서는 Skills로 분리하는 것이 좋다.
MCP와 Skills는 경쟁 관계가 아니다. 용도가 다르다.
MCP: 실시간 외부 데이터 접근이 필요할 때 (DB 쿼리, API 호출, 모니터링)
Skills: 지식/가이드/절차를 전달할 때 (컨벤션, 리뷰 기준, 배포 절차)
CLI: MCP와 동일한 기능이 CLI로 존재할 때 (gh, aws, gcloud)
핵심은 "토큰도 비용이다"라는 인식이다. MCP 서버를 하나 추가할 때마다 세션 전체의 비용이 올라간다. 그 비용이 해당 도구의 편의성을 정당화하는지 따져봐야 한다.
5만 토큰을 도구 정의에 쓰느니, 그 공간을 더 긴 대화나 더 복잡한 작업에 쓰는 게 낫다.
[1] Bin Wu, "Introducing advanced tool use on the Claude Developer Platform", Anthropic Engineering Blog, 2025. https://www.anthropic.com/engineering/advanced-tool-use
[2] Adam Jones, Conor Kelly, "Code execution with MCP: building more efficient AI agents", Anthropic Engineering Blog, 2025. https://www.anthropic.com/engineering/code-execution-with-mcp
[3] Anthropic, "Manage costs effectively", Claude Code Docs, 2026. https://code.claude.com/docs/en/costs
[4] Anthropic, "Tool search tool", Claude API Docs, 2026. https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool
[5] "Built-in tools + MCP descriptions load on first message causing 10-20k token overhead", GitHub anthropics/claude-code #3406, 2025. https://github.com/anthropics/claude-code/issues/3406
[6] Scott Spence, "Optimising MCP Server Context Usage in Claude Code", 2025. https://scottspence.com/posts/optimising-mcp-server-context-usage-in-claude-code
[7] "Lazy-load MCP tool definitions to reduce context usage", GitHub anthropics/claude-code #11364, 2025. https://github.com/anthropics/claude-code/issues/11364
[8] Joe Njenga, "Claude Code Just Cut MCP Context Bloat by 46.9%", Medium, 2026. https://medium.com/@joe.njenga/claude-code-just-cut-mcp-context-bloat-by-46-9-51k-tokens-down-to-8-5k-with-new-tool-search-ddf9e905f734
[9] Cameron Cooke, "Do MCP Servers Really Eat Half Your Context Window?", Async Let, 2025. https://www.async-let.com/posts/claude-code-mcp-token-reporting/
[10] Mario Zechner, "MCP vs CLI: Benchmarking Tools for Coding Agents", 2025. https://mariozechner.at/posts/2025-08-15-mcp-vs-cli/
[11] Simon Willison, "Claude Skills are awesome, maybe a bigger deal than MCP", 2025. https://simonwillison.net/2025/Oct/16/claude-skills/
[12] Frank Schwichtenberg, "Understanding Claude Skills: Token Economics", Medium, 2025. https://medium.com/@schwicht/understanding-claude-skills-what-they-are-how-they-work-and-the-token-economics-d2d92369b6e3