클코 6개월 사용... 슬슬 정리해야 할 MCP 레거시 정리한 후기

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 정리하기

지금 당장 확인해볼 것들:

  1. claude mcp list로 현황 파악 — 연결 실패(Failed to connect)나 인증 필요(Needs authentication) 상태인 MCP가 있는지

  2. 중복 제거 — 같은 기능의 MCP가 여러 개 등록되어 있지 않은지

  3. 사용 빈도 점검 — 거의 안 쓰는 MCP는 제거하고, 필요할 때 다시 추가하는 게 낫다

  4. CLI 대안 검토 — MCP 대신 CLI로 쓸 수 있는 도구는 CLI가 토큰 효율적

남긴 것, 배운 것

결국 남긴 MCP는 context7 하나다. 도구 2개짜리 경량 서버로, 라이브러리 문서를 실시간으로 가져올 때 쓴다. 이건 CLI 대안이 마땅치 않고, 토큰 부담도 적다.

MCP는 편리하다. 하지만 편리함에는 비용이 있다. 도구 하나를 등록할 때마다 매 턴의 컨텍스트가 줄어든다. Claude Code의 컨텍스트 윈도우는 유한하고, 그 안에서 코드와 대화와 도구 정의가 경쟁한다.

MCP를 많이 등록할수록 정작 중요한 코드와 대화에 쓸 공간이 줄어든다. compact가 잦아지는 건 그 신호다.

필요한 것만 남기자. 나머지는 CLI로 충분하다.

4
6개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.