← 글

MCP가 에이전트의 Context를 잡아먹게 두지 마세요

· 17 분 읽기
5계층 아키텍처 MCP CLI Context 관리 AI 툴체인
아키텍처 의사결정 기록

MCP가

당신 Agent의 Context를 잡아먹게 두지 마세요

199개 도구, 매 턴마다 schema 오버헤드 40K tokens——우리가 5계층 아키텍처로 90%를 줄이기까지.
Service → SDK → CLI → MCP → Skill로 AI Agent가 최소한의 token으로 최대한 많은 일을 하게 합니다.

문제점

우리는 어떤 문제를 겪었을까요?

세 가지 실제 문제 때문에 이 5계층 아키텍처가 탄생했습니다. Token 폭증, MCP 프로세스 폭증, 너무 많은 Tool로 인한 선택 오류입니다.

1

Token 폭증

Playwright MCP는 호출할 때마다 많은 token을 소비합니다. 사용하지 않을 때도tool schema가 context window를 차지해,매 턴마다비용을 치릅니다.

Playwright CLI로 교체한 뒤:

-98% Token 사용량
2

MCP 프로세스 폭증

Claude Code session을 하나 열 때마다 모든 MCP server 프로세스가비례해서 복제됩니다.

3 sessions × 23 MCP servers
= 69 개의 상주 프로세스
// RAM과 CPU 사용량이 선형으로 늘어남
3

Tool이 너무 많아 정확히 고르기 어려움

하나의 MCP server에 tool이 너무 많으면 LLM의도구 선택 정확도가 떨어집니다.

업계 모범 사례: MCP server당 ≤ 10 tools.

8 tools × 200 tokens/schema = 1,600 tokens/turn(사용 여부와 관계없이)

데이터

Token 비용 비교

MCP는 매 턴 1,600 tokens의 schema를 부담하지만 CLI는 0입니다(실제 I/O 제외).

1,600
MCP(도구 8개)
매 턴 schema 오버헤드(tokens)
0
Bash를 통한 CLI
매 턴 schema 오버헤드(tokens)
80K
대화 50턴
사용하지 않은 schema에 누적 낭비된 양
2
Cloudflare Code Mode
IDE 전체에 도구 2개만 사용
아키텍처

다섯 계층은 각각 무슨 일을 할까요?

위에서 아래로 다섯 계층은 Skill(의도 라우팅), MCP(쓰기 작업), CLI(읽기 작업), SDK(HTTP를 직접 다루는 유일한 래퍼 계층), Service(비즈니스 로직 본체)입니다. 상위 계층은 항상 하위 계층을 import합니다.

Skill
의도 라우팅 계층——작업 유형에 따라 CLI 또는 MCP를 선택하며 AI 워크플로의 진입점입니다
🤖 AI 오케스트레이터 / 자동화 흐름
MCP
쓰기 작업 + typed schema return——LLM 입력을 JSON schema로 검증해야 합니다
🤖 Claude Code (tool call)
CLI
읽기 작업을 위한 범용 인터페이스——schema overhead가 0이며 shell을 실행할 수 있으면 누구나 사용할 수 있습니다
👤🤖📋 사람 / AI / Cron / Script
SDK
유일한 HTTP 경계 래퍼——CLI와 MCP는 모두 SDK를 import하고 HTTP를 직접 다루지 않습니다
🐍 Python 프로그램 / Notebook
Service
비즈니스 로직 본체——FastAPI routes + business logic + DB
⚙️ 모듈 간 내부 호출

핵심 원칙:Bug Fix 자동 전파——SDK bug 하나를 고치면 CLI와 MCP가 동시에 고쳐집니다. SDK 계층이 없다면 각 소비자가 HTTP + auth + error handling을 따로 구현해야 하므로 유지 관리가 지옥이 됩니다.

// 의존성 방향(상위 계층이 하위 계층을 import)

Skill ──invoke──► CLI (읽기) / MCP (쓰기)
MCP  ──import──► SDK ──HTTP──► Service
CLI  ──import──► SDK ──HTTP──► Service

// SDK만 HTTP를 직접 다룹니다
// SDK를 바꾸면 모든 상위 소비자가 함께 업데이트됩니다
소비자 매트릭스

계층을 하나라도 빼면 왜 안 될까요?

소비자 최적의 접근 계층 이유
다른 Core Module Service 같은 프로세스에서 services.py를 직접 호출하므로 overhead가 0입니다
Python 스크립트 / Notebook SDK 프로그램에서 접근할 수 있고 완전한 error handling을 제공합니다
사람(터미널) CLI --help 발견하기 쉽고 pipe로 조합할 수 있습니다
AI Coding Agent
Claude Code / Codex CLI / Gemini CLI
CLI (읽기) / MCP (쓰기) 읽기는 Bash를 사용해 schema가 0이고, 쓰기에는 typed input이 필요합니다
스케줄링 시스템 CLI shell command는 스케줄링의 공통 언어입니다
AI 워크플로 Skill 상위 수준의 의도 라우팅으로 CLI 또는 MCP를 자동 선택합니다

“CLI는 overhead가 0인 범용 인터페이스입니다——shell을 실행할 수 있는 모든 것이 사용할 수 있고,
MCP는 MCP protocol을 지원하는 client만 사용할 수 있습니다.”

발전 과정

우리는 어떻게 여기까지 왔을까요?

이 아키텍처는 한 번에 설계된 것이 아닙니다——네 단계에서 당시 막혔던 문제를 하나씩 해결했고, 그 단계를 이어 붙여 지금의 형태가 되었습니다.

발견기 — Playwright MCP

Token 폭증이 남긴 첫 번째 교훈

Playwright MCP의 tool schema는 매우 커서 매 대화 턴마다 system prompt에 주입됩니다. 그 턴에 브라우저를 사용하지 않아도 token은 그대로 소모됩니다. Playwright CLI로 교체한 뒤 token 사용량이 98% 줄었습니다.

깨달음:CLI로 처리할 수 있다면 MCP를 쓸 필요가 없습니다.

확장기 — MCP 프로세스 폭증

여러 session을 열 때의 곱셈식 재앙

MCP server가 23개로 늘어난 뒤에는 Claude Code session을 하나 더 열 때마다 모든 프로세스가 비례해서 복제됐습니다. 3개 session = 69개 상주 프로세스였습니다. 해결책은 mcpproxy로 통합하고 읽기 작업을 CLI로 옮기는 것이었습니다.

깨달음:MCP server / tool 수를 줄여야 합니다.

검증기 — Cloudflare Code Mode

업계에서 가장 극단적인 tool 압축

Cloudflare의 Code Mode는 MCP에 2개의 tool,:search() 와 execute()만 노출합니다. 나머지 모든 작업은 sandbox에서 즉석으로 작성합니다. 이를 통해 tool 수와 기능이 반비례함을 보여줬습니다.

깨달음:우리는 그 정도로 극단적으로 가지 않지만 원칙은 같습니다——tool은 적을수록 좋습니다.

성숙기 — 실전 검증

새 모듈에 다섯 계층을 모두 적용

Backend → SDK → CLI → MCP → Skill에서 한 계층이라도 빠지면 하위 통합이 끊어집니다. BaseClient DRY 패턴을 도입한 뒤 새 모듈을 추가하는 한계 비용은 줄었지만, 계층마다 얻는 조합 가능성은 오래 지속되는 이익입니다.

깨달음:다섯 계층은 부담이 아니라 복리입니다.

Sandbox Pattern

일회성 Tools — sandbox로 보완

모든 작업에 영구적인 tool이 필요한 것은 아닙니다. Cloudflare Code Mode에서 영감을 받아 대량 작업은 sandbox에서 즉석으로 작성하며 MCP tool slot을 차지하지 않습니다.

영구 Tool(다섯 계층 적용)

자주 사용하고 안정적이며 discoverability가 필요한 작업

  • search — 매일 자주 사용
  • create — typed schema 검증이 필요
  • render — 복잡한 매개변수 조합

✓ 유지 관리 비용을 들일 가치가 있음 ✓ --help 제공 ✓ 테스트 가능

일회성 Tool(Sandbox)

사용 빈도가 낮고 일회성이거나 탐색적인 대량 작업

  • 대량 스캔 + 집계(3+ API 호출)
  • 일회성 데이터 변환
  • 탐색용 스크립트(사용 후 폐기)

✓ schema overhead 0 ✓ tool slot 미사용 ✓ 즉시 작성해 사용

// Cloudflare의 극단적인 해법 vs 실용적인 해법

Cloudflare: 2 permanent tools + sandbox에서 모든 작업을 즉석 작성
실용적 접근:  ≤10 permanent tools/server + sandbox로 사용 빈도가 낮은 작업 보완

// 공통 원칙: 영구 tool은 희소한 자원이며, 자리를 차지할 가치가 없으면 sandbox를 사용합니다

판단 기준:어떤 작업이 영구 tool이 될 가치가 있을까요?
→ 주 3회 이상 사용 + 복잡한 매개변수 조합 + discoverability 필요 → 다섯 계층 적용
→ 그 외에는 → sandbox에서 즉석 작성하고 사용 후 폐기

비교

다섯 계층을 쓰지 않는다면?

대안 문제 결과
Service만 사용 HTTP 호출만 가능 AI agent, cron, CLI 사용자가 모두 HTTP client를 직접 작성해야 합니다
Service + MCP Token overhead + 프로세스 폭증 23 servers × 3 sessions = 69개 프로세스, schema가 매 턴 token을 소비합니다
Service + CLI 쓰기 작업에 typed schema가 없음 LLM이 잘못된 매개변수를 전달하며 input validation이 없습니다
모두 MCP 사용 CLI 사용자가 배제됨 Codex CLI, Gemini CLI, cron이 모두 접근할 수 없습니다
각 계층에서 HTTP를 독립적으로 구현 통합 SDK가 없음 한 곳을 고치고 다른 곳을 놓쳐 Ghost Parameter 안티패턴이 만연합니다
구현 예시

Agent SDK로 Tool 주입 직접 제어하기

Agent SDK로 client를 직접 만든다면애플리케이션 계층에서어떤 tool schema가 LLM의 context에 들어갈지 완전히 제어할 수 있습니다——플랫폼이 지원하기를 기다릴 필요가 없습니다.Speakeasy의 동적 도구 집합 솔루션은같은 방식으로 tool을 선별해 token을 96% 줄였습니다.

# 의사 코드 예시

all_tools = mcp_server.tools_list()    # 199개를 받음(protocol 계층)
relevant = bm25_filter(all_tools, query) # 직접 5개로 필터링
response = client.messages.create(
    tools=relevant,                # LLM에는 5개만 전송
)

필터링하지 않음(기본 동작)

199개 tool schema가 모두 들어가 tools[]

~40K tokens/턴

BM25로 필터링한 뒤

매번 가장 관련성 높은 tool 5-10개만 전송

~2K tokens/턴

핵심 구분:MCP protocol 계층의 tools/list 는 모든 도구를 반환합니다——이는 바꿀 수 없습니다.
하지만 client가 API의 tools[]에 무엇을 넣을지 결정합니다——이는전적으로 직접 제어할 수 있습니다.
Claude Code 같은 기성 client를 쓰나요? 모든 도구를 넣어 줍니다. 직접 만든 client를 쓰나요? 직접 선별하면 됩니다.

비용 분석

구현 비용은 사실 아주 낮습니다

SDK

상속 BaseClient, 각 메서드는 한 줄로 감쌉니다. 오류 처리, 인증, 기본 경로를 모두 DRY하게 관리합니다.

CLI

SDK를 import하는 명령 래퍼입니다. 시그니처를 통일하고 페이지네이션에는 공통 파서를 사용합니다.

MCP

SDK 래퍼 + 도구 정의입니다. 쓰기 작업과 구조화된 반환값만 감싸며 읽기 작업에는 필요하지 않습니다.

“한계 비용은 줄고 조합 가능성은 장기적인 이익이 됩니다——하지만 유지 관리 비용도 오래 지속됩니다.”

⚠ 5계층 아키텍처의 대가

세 가지 래퍼를 더 유지 관리해야 합니다

SDK, CLI, MCP 세 계층 모두 같은 로직을 감싸고 있습니다. API가 바뀌면 세 계층도 함께 바꿔야 합니다. 팀이 작을 때는 감당할 수 있지만 사람이 늘어나면 자동화 테스트로 뒷받침해야 합니다.

디버깅 경로가 길어집니다

bug가 생기면 먼저 어느 계층의 문제인지 판단해야 합니다. Service 로직이 잘못됐는지, SDK가 매개변수를 빠뜨렸는지, CLI 파싱에 오류가 있는지, 아니면 MCP schema가 업데이트되지 않았는지 확인해야 합니다. 계층이 많을수록 조사도 느려집니다.

모든 모듈에 적용할 가치가 있는 것은 아닙니다

내부에서만 쓰는 작은 도구에는 다섯 계층이 필요하지 않습니다. 여러 종류의 소비자가 사용하는 핵심 모듈에만 투자할 가치가 있습니다. 무리하게 적용하면 오히려 부담이 됩니다.

외부 검증

OpenCLI 커뮤니티의 흐름 변화

오픈 소스 커뮤니티에서도 CLI를 기본 인터페이스로 삼고 있습니다. 우리만 주장하는 방향이 아닙니다.

OpenCLI는 웹사이트와 데스크톱 애플리케이션을 표준화된 CLI로 바꿉니다.CLI-Anything은 Agent가 CLI를 통해 모든 소프트웨어를 조작할 수 있게 하려 합니다. 점점 더 많은 개발자가 “API가 있나요?”보다 “CLI가 있나요?”라고 묻습니다.

이유는 간단합니다. The New Stack의 2025년 보도에서도업계 전체가 Agentic CLI 시대로 접어들고 있다고 썼습니다. AI coding tool이 모두 shell을 실행할 수 있다면CLI는 자연스럽게 도구 간 최대 공약수가 됩니다.

이전

주류 방식:Agent + MCP

모든 도구가 MCP를 사용하고 schema가 전부 context에 들어가므로 tool이 많을수록 느려집니다

현재

진화한 방식:Agent + Skill(CLI / MCP 호출)

Skill이 필요에 따라 라우팅합니다——읽기 작업은 오버헤드가 0인 CLI로, 쓰기 작업만 MCP로 보냅니다

CLI의 부활이 아닙니다——AI 시대에 CLI의 가치를 다시 발견한 것입니다.

결론

199개 도구, 하나의 로직

읽기는 CLI로, 쓰기는 MCP로——199개 도구는 이 한 가지 경계를 기준으로 작동하며사람, 스크립트, AI가 각자 필요한 것을 사용합니다.
Token 폭증부터 커뮤니티 흐름을 통한 검증까지 모든 단계는 실제 문제에서 비롯됐고,한 곳을 바꾸면 모두 함께 업데이트됩니다.

// 의사결정의 흐름

문제점 1: Playwright MCP token 폭증
  → CLI token 98% 절감

문제점 2: CC를 여러 개 열면 → 프로세스가 비례해서 증가
  → mcpproxy 통합 + CLI로 읽기 작업 이전

문제점 3: Tool이 너무 많아 LLM이 정확히 고르지 못함
  → ≤10 tools/server + sandbox 로 보완

검증 1: Cloudflare는 단 2 tools로 IDE 전체를 실행
→ 같은 원칙이지만 우리는 더실용적입니다

검증 2: OpenCLI 커뮤니티가 CLI-first로 전환
→ AI 시대에 CLI는도구 간 최대 공약수입니다

// 정리
Service → SDK → CLI → MCP → Skill
199개 도구, 하나의 로직, 세 종류의 소비자
도구

먼저 자신의 schema 비용을 계산해 보세요

위에서 말한 40K tokens는 제 환경의 수치입니다. 자신의 수치를 넣으면 결과는 완전히 달라질 수 있습니다.세 항목을 입력하고 이 글에서 인용한 두 상수(각 tool schema 약 200 tokens, 업계 권장치인 MCP server당 ≤ 10 tools)를 사용해 자신의 매 턴 오버헤드와 상주 프로세스 수를 계산해 보세요. 모든 계산은 브라우저 안에서 이뤄지며 데이터는 어디에도 전송되지 않습니다.

상수의 출처는 모두 이 글에 있습니다. 200 tokens/schema는 “8 tools × 200 tokens/schema = 1,600 tokens/turn”에서, 프로세스 수는 “3 sessions × 23 MCP servers = 69개 상주 프로세스”라는 선형 관계에서 가져왔습니다. 10 tools/server는 이 글에서 인용한 업계 권장치입니다.여기서는 schema의 상주 오버헤드만 계산하고 실제 I/O는 포함하지 않습니다——실제 사용량은 어떻게 호출하느냐에 따라 달라집니다.

이 부분 가져가기

AI Agent에게 복사해 주세요

MCP tool schema는 매 턴 token을 차지하지만 대부분의 tool은 사실 “읽기” 작업이라 schema가 전혀 필요하지 않습니다. 도구가 많아지면 schema만으로 수만 token을 소비하고, 10개를 넘으면 LLM이 잘못 선택할 가능성도 높아집니다. 이 글의 5계층 아키텍처는 “읽기”를 CLI로 옮기고 “쓰기”만 MCP에 남깁니다.

아래 내용을 AI에게 붙여 넣어 현재 MCP 설정부터 실제로 조사하게 한 다음, 이 다섯 계층에 비춰 무엇을 옮길 수 있는지 판단하게 하세요:

저는 “5계층 아키텍처로 MCP token 절약하기”에 관한 글을 읽고 있습니다 (https://blog.joneshong.com/zh/blog/five-layer-architecture). 글쓴이는 AI 도구의 접근 방식을 다섯 계층으로 나누고, 읽기 작업은 CLI로 옮기며 쓰기 작업만 MCP에 남겼습니다. 일반론으로 답하지 말고 먼저 제 프로젝트를 실제로 조사한 뒤, 이 구조를 기준으로 무엇을 옮길 수 있는지 판단해 주세요. 먼저 현재 상태를 확인하세요: 1. 지금 연결된 MCP server와 각 server의 tool 수를 나열하세요 (10개를 넘는 server는 먼저 표시하세요——이 글에서는 10개를 넘으면 LLM의 선택 오류가 늘어난다고 합니다) 2. 각 tool을 하나씩 “읽기 작업”과 “쓰기 작업”으로 분류하세요 3. 이 tool들의 schema가 매 턴 대략 몇 token을 차지하는지 추정하세요 그다음 이 5계층 아키텍처(아래에서 위로)에 따라 어떻게 옮길지 판단하세요: - Service: 비즈니스 로직 본체(API + DB) - SDK: 통합 HTTP 래퍼. 상위 계층은 SDK를 import하고 HTTP를 직접 다루지 않음 - CLI: schema overhead가 0인 범용 인터페이스. 읽기 작업은 이 계층 사용 - MCP: typed schema 검증이 필요한 쓰기 작업에만 사용 - Skill: 의도 라우팅 계층. 읽기는 CLI, 쓰기는 MCP로 자동 판단 다음 내용을 답해 주세요: - 어떤 “읽기” tool을 CLI로 바로 옮길 수 있는지, 각각 얼마나 많은 token을 절약할지 추정 - 제 HTTP 호출 로직이 여기저기 흩어져 있는지, SDK로 추출할 가치가 있는지 - 어떤 tool을 통합하거나 sandbox에서 즉석으로 생성해 상주 tool 수를 줄일 수 있는지 연결된 tool이 한두 개뿐이라 schema 오버헤드가 문제 되지 않는다면 분리할 필요가 없다고 바로 말해 주세요. 아키텍처에 맞추려고 억지로 분리하지 마세요.
참고 자료

더 읽을거리

아래 글은 모두 제가 실제로 읽었고 의사결정에도 영향을 줬습니다. 아무렇게나 모아 놓은 목록이 아닙니다.

글 중요한 이유
Code Mode: Give Agents an Entire API in 1,000 Tokens Cloudflare의 실험에서는 단 2개의 tool로 IDE 전체를 실행해 token 오버헤드를 81% 줄였습니다. “tool은 적을수록 좋다”는 원칙을 검증했습니다
Your MCP Server Is Eating Your Context Window Apideck은 MCP schema가 context를 어떻게 차지하는지 분석하고 CLI를 대안으로 제시합니다——80 tokens prompt vs 수만 tokens schema
Advanced Tool Use — Anthropic Engineering Anthropic은 tool schema가 context를 차지하는 문제를 공식적으로 인정하고, context 사용량을 85% 줄이는 Tool Search 메커니즘을 내놓았습니다
How We Reduced Token Usage by 100x: Dynamic Toolsets Speakeasy의 동적 도구 집합 솔루션은 input token을 96% 줄였습니다
MCPProxy — MCP Gateway BM25 인덱스로 도구를 동적으로 발견하는 오픈 소스 MCP 통합 게이트웨이로, 수백 개의 server와 수천 개의 tool을 지원합니다
Welcome to the Agentic CLI Era The New Stack은 AI coding tool 전반이 CLI로 전환하는 업계 흐름을 보도했습니다
OpenCLI — Universal CLI Hub AI Agent를 위해 설계된 범용 CLI 허브로, 웹사이트와 데스크톱 애플리케이션을 표준화된 CLI로 바꿉니다
CLI-Anything — Making ALL Software Agent-Native 홍콩대학교 연구: AI Agent가 CLI를 통해 모든 소프트웨어를 조작할 수 있게 합니다
✦ 프롬프트 복사