MCP 서버가 컨텍스트를 얼마나 잡아먹는지 체감하고, Playwright를 MCP에서 CLI로 전환한 경험
Claude Code에서 MCP를 정리하면 컨텍스트가 넓어진다
Claude Code를 쓰다 보면 어느 순간부터 대화가 자 꾸 압축(compact)된다. 분명 얼마 전까지는 긴 대화도 잘 이어갔는데, 요즘은 체감상 compact 주기가 눈에 띄게 짧아졌다. 뭔가 컨텍스트를 갉아먹는 게 있다.
범인은 MCP였다.
MCP가 컨텍스트를 먹는 구조
MCP(Model Context Protocol) 서버를 등록하면, 그 서버가 제공하는 모든 도구의 정의가 시스템 프롬프트에 포함된다. 도구 이름, 설명, 파라미터 JSON Schema까지 전부.
문제는 이게 매 턴마다 반복된다는 점이다. 도구를 한 번도 호출하지 않아도, 등록되어 있다는 이유만으로 매번 컨텍스트를 차지한다.
실제로 내 환경에 등록되어 있던 MCP 서버를 정리해봤다:
MCP 서버
도구 수
상태
Playwright (plugin)
~20개
활성
Playwright (executeautomation)
~25개
활성
figma-dev-mode-mcp-server
~5개
연결 실패
context7
2개
활성
vercel
수 개
인증 필요
Playwright만 두 종류가 겹쳐 있었다. 비슷한 기능의 도구가 약 45개. 거기에 연결도 안 되는 Figma MCP까지. 도구 하나당 수백 토큰씩이니, 이것만으로도 상당한 컨텍스트가 날아간다.
MCP vs CLI — 같은 Playwright, 다른 방식
Playwright를 Claude Code에서 쓰는 방법은 두 가지다.
MCP 방식
MCP 서버로 등록하면 browser_click, browser_snapshot 같은 도구들이 시스템 프롬프트에 올라간다. AI가 직접 도구를 호출하고, 결과(DOM 트리, 접근성 스냅샷 등)가 컨텍스트에 들어온다.
장점은 자연스러운 통합이다. "이 버튼을 클릭해줘"라고 하면 AI가 알아서 적절한 도구를 호출한다.
대가는 크다. 도구 정의 ~45개가 항상 컨텍스트에 상주하고, browser_snapshot 한 번 호출하면 페이지의 접근성 트리 전체가 컨텍스트에 밀려들어온다.
CLI 방식
Microsoft가 공개한 @playwright/cli는 같은 Playwright를 터미널 명령어로 제어한다.
playwright-cli open <https://example.com>
playwright-cli snapshot
playwright-cli click <ref>
playwright-cli screenshot
playwright-cli close
핵심 슬로건이 인상적이다: "Token-efficient. Does not force page data into LLM."
도구 스키마가 시스템 프롬프트에 올라가지 않는다. Bash로 필요할 때만 호출하고, 결과도 stdout이나 파일로 받는다. 컨텍스트에 올라가는 건 명령어와 그 출력뿐이다.
다양한 유형의 콘텐츠 위젯을 보여주는 다이어그램
MCP
CLI
도구 등록
시스템 프롬프트에 스키마 상주
없음
호출 방식
AI가 도구 직접 호출
Bash 명령어 실행
결과 전달
컨텍스트에 직접 삽입
stdout / 파일
상시 토큰 비용
높음 (항상 로딩)
0 (호출할 때만)
정리한 것들
1. Playwright MCP 두 개 제거
claude mcp remove playwright
claude plugin remove playwright
공식 plugin 버전과 커뮤니티 MCP 버전이 공존하고 있었다. 둘 다 제거했다.
2. 연결 안 되는 MCP 제거
figma-dev-mode-mcp-server는 Figma Desktop이 켜져 있어야 로컬 서버가 뜨는 구조다. 대부분의 시간에 연결 실패 상태였지만, 도구 정의는 그대로 컨텍스트를 차지하고 있었다.
여러 프로젝트에 걸쳐 등록되어 있어서, jq로 일괄 제거했다:
jq 'walk(
if type == "object" and has("mcpServers")
and (.mcpServers | has("figma-dev-mode-mcp-server"))
then .mcpServers |= del(.["figma-dev-mode-mcp-server"])
else . end
)' ~/.claude.json > /tmp/.claude.json.tmp \\\\
&& mv /tmp/.claude.json.tmp ~/.claude.json
3. Playwright CLI 설치
npm install -g @playwright/cli@latest
이제 브라우저 자동화가 필요하면 playwright-cli 명령어로 처리한다.
체크리스트: 내 MCP 정리하기
지금 당장 확인해볼 것들:
claude mcp list로 현황 파악 — 연결 실패(Failed to connect)나 인증 필요(Needs authentication) 상태인 MCP가 있는지
중복 제거 — 같은 기능의 MCP가 여러 개 등록되어 있지 않은지
사용 빈도 점검 — 거의 안 쓰는 MCP는 제거하고, 필요할 때 다시 추가하는 게 낫다
CLI 대안 검토 — MCP 대신 CLI로 쓸 수 있는 도구는 CLI가 토큰 효율적
남긴 것, 배운 것
결국 남긴 MCP는 context7 하나다. 도구 2개짜리 경량 서버로, 라이브러리 문서를 실시간으로 가져올 때 쓴다. 이건 CLI 대안이 마땅치 않고, 토큰 부담도 적다.
MCP는 편리하다. 하지만 편리함에는 비용이 있다. 도구 하나를 등록할 때마다 매 턴의 컨텍스트가 줄어든다. Claude Code의 컨텍스트 윈도우는 유한하고, 그 안에서 코드와 대화와 도구 정의가 경쟁한다.
MCP를 많이 등록할수록 정작 중요한 코드와 대화에 쓸 공간이 줄어든다. compact가 잦아지는 건 그 신호다.
필요한 것만 남기자. 나머지는 CLI로 충분하다.