Claude Code context 소비를 98% 줄이는 MCP 서버, Context Mode
MCP server that reduces Claude Code context consumption by 98%
TL;DR Highlight
MCP 도구 호출 시 raw 출력이 context window를 잡아먹는 문제를 해결하는 오픈소스 MCP 서버로, 315KB 출력을 5.4KB로 압축해 세션 지속 시간을 6배 늘린다.
Who Should Read
Claude Code에서 MCP 도구를 여러 개 연결해 쓰면서 context window가 금방 차서 세션이 끊기는 경험을 한 개발자. Playwright, GitHub CLI, 로그 분석 등 출력이 큰 도구를 자주 쓰는 사람.
Core Mechanics
- MCP 도구를 많이 쓰면 도구 정의(input)와 도구 출력(output) 양쪽에서 context window가 소모된다. 도구 81개 활성화 시 첫 메시지 전에 이미 143K 토큰(72%)이 사라지고, Playwright 스냅샷 한 번에 56KB, GitHub 이슈 20개 조회에 59KB가 추가로 날아간다.
- Context Mode는 도구 출력을 격리된 subprocess(sandbox)에서 실행하고, stdout만 대화 context에 넣는 방식으로 작동한다. raw 데이터(로그, API 응답, 스냅샷)는 sandbox 안에 남고 요약된 결과만 나온다. LLM 호출 없이 순수 알고리즘 기반이다.
- Knowledge Base 기능은 마크다운을 헤딩 기준으로 청킹하고 SQLite FTS5 테이블에 저장한다. BM25 랭킹과 Porter stemming을 적용해서 'running', 'runs', 'ran' 같은 변형도 같은 단어로 매칭한다. URL을 fetch해서 HTML→마크다운 변환 후 인덱싱하는 것도 가능하다.
- 실측 결과: Playwright 스냅샷 56KB→299B, GitHub 이슈 20개 59KB→1.1KB, 접근 로그 500건 45KB→155B, CSV 500행 85KB→222B. 전체 세션 기준 315KB가 5.4KB로 줄어들고, 세션 지속 시간이 ~30분에서 ~3시간으로 늘어났다.
- 설치는 Plugin Marketplace(`/plugin marketplace add mksglu/claude-context-mode`) 또는 MCP 직접 추가(`claude mcp add context-mode -- npx -y context-mode`) 두 가지 방식이 있다.
- PreToolUse hook으로 도구 출력을 자동 라우팅하기 때문에 사용자가 작업 방식을 바꿀 필요가 없다. Bash subagent를 general-purpose로 자동 업그레이드해서 batch_execute를 쓸 수 있게 한 것이 실사용에서 큰 차이를 만들었다고 한다.
- Cloudflare의 Code Mode가 도구 정의(input)를 99.9% 압축한 것에 영감받아, 반대 방향인 도구 출력(output) 압축을 구현한 프로젝트다. MIT 라이선스 오픈소스.
- JavaScript, TypeScript, Python, Shell, Ruby, Go, Rust, PHP, Perl, R 총 10개 런타임을 지원하며, Bun이 감지되면 JS/TS 실행이 3~5배 빨라진다. gh, aws, gcloud, kubectl 같은 인증된 CLI도 credential passthrough로 사용 가능하다.
Evidence
- 한 댓글에서 BM25만으로는 JSON, 테이블 같은 구조화된 데이터에서 키워드 매칭이 약하다는 지적이 나왔다. 본인이 15,800개 파일의 Obsidian vault를 검색하기 위해 Model2Vec 임베딩 + sqlite-vec 벡터검색 + FTS5 BM25를 Reciprocal Rank Fusion(RRF)으로 합친 하이브리드 검색을 만들었다고 소개했다. 49,746개 청크를 83MB DB에 담고, 증분 인덱싱은 10초 이내로 가능하다고 한다.
- hook이 너무 공격적이라는 비판이 있었다. curl로 200바이트짜리 health check 응답을 받는 것까지 sandbox로 우회하는 건 과하고, git log 153개 커밋을 107바이트로 압축하면 모델이 완벽한 추출 스크립트를 미리 작성해야 하는데 실제로는 그렇지 못할 때가 많다는 지적이다.
- 정보 손실과 hallucination 위험에 대한 우려도 있었다. 모델이 좋은 추출 스크립트와 검색 쿼리를 작성할 수 있다고 가정하지만, 불완전한 데이터로 인해 오히려 hallucination이 늘 수 있다는 의견이다.
- prompt caching과의 상호작용을 걱정하는 댓글이 있었다. 캐시된 full query가 정보도 많고 비용도 싼데, 이 도구가 캐시를 깨트리면 오히려 손해라는 지적이다. 다만 하이브리드 검색을 만든 댓글러는 압축된 출력이 결정적(deterministic)이라 오히려 캐싱에 도움이 된다고 반론했다.
- louie.ai에서는 비슷한 문제를 DB 쿼리 결과를 in-memory parquet 데이터프레임으로 만들고 토큰 최적화된 요약 뷰('... + 1M rows' 같은 힌트 포함)를 LLM에 넘기는 방식으로 해결한다는 경험 공유가 있었다. MCP 프로토콜이 바이너리 콘텐츠 타입을 지원하니 Apache Arrow 같은 포맷으로 전환하면 더 좋겠다는 아이디어도 나왔다.
How to Apply
- Claude Code에서 Playwright, GitHub CLI, 로그 파일 등 출력이 큰 MCP 도구를 3개 이상 사용 중이라면 `claude mcp add context-mode -- npx -y context-mode`로 설치해서 세션 지속 시간을 체감해본다. 특히 30분 내로 context가 차는 경험이 있다면 효과가 크다.
- Context Mode 적용 전후 토큰 소비량을 측정하고 싶으면 댓글에서 소개된 claude-trace(`https://github.com/vexorkai/claude-trace`)를 함께 설치해서 세션별, 도구별 토큰 사용량과 비용을 추적한다.
- MCP 도구 대신 CLI 도구(gh, git 등)를 직접 쓰는 것만으로도 토큰 절약 효과가 있다. 출력이 작은 단순 조회는 CLI로, 출력이 큰 복잡한 작업만 Context Mode sandbox를 타게 hook을 조정하면 정보 손실 없이 최적화할 수 있다.
- Knowledge Base 기능으로 프로젝트 문서나 외부 API 문서를 미리 인덱싱해두면, 매번 fetch하지 않고 FTS5 검색으로 필요한 부분만 context에 넣을 수 있다. `fetch_and_index`로 URL을 바로 인덱싱 가능하다.
Code Example
snippet
# MCP-only 설치 (도구만 사용)
claude mcp add context-mode -- npx -y context-mode
# Plugin Marketplace 설치 (auto-routing hook + slash command 포함)
/plugin marketplace add mksglu/claude-context-mode
/plugin install context-mode@claude-context-modeTerminology
FTS5SQLite에 내장된 전문 검색(Full-Text Search) 엔진. 텍스트를 토큰화해서 저장하고 키워드로 빠르게 검색할 수 있게 해주는 가상 테이블이다.
BM25검색 결과의 관련도를 점수로 매기는 알고리즘. 단어가 문서에 많이 나올수록, 전체 문서에서 드문 단어일수록 높은 점수를 준다. 구글 검색의 초기 랭킹 방식과 비슷하다.
Porter Stemming단어의 어미를 잘라서 원형으로 만드는 기법. 'running', 'runs', 'ran'을 모두 'run'으로 통일해서 검색 누락을 줄인다.
Reciprocal Rank Fusion (RRF)여러 검색 방식의 결과 순위를 하나로 합치는 방법. 키워드 검색 1등과 벡터 검색 1등을 가중합해서 최종 순위를 정한다. 점수 스케일이 달라도 순위만으로 합치기 때문에 보정이 필요 없다.
Context WindowLLM이 한 번에 읽을 수 있는 텍스트 용량 제한. 책상 크기라고 생각하면 되는데, 자료를 너무 많이 올리면 새 자료를 놓을 공간이 없어진다.