Claude Code MCP 서버 정리 — 불필요한 도구 제거로 토큰 35% 절약하기
MCP 서버, 많을수록 좋은 줄 알았습니다
Claude Code를 본격적으로 사용하면서 MCP(Model Context Protocol) 서버를 하나둘 추가했습니다. Grafana 모니터링, 브라우저 자동화, UI 컴포넌트 생성, 배포 관리까지 — 유용해 보이는 건 일단 설치하자는 생각이었습니다.
어느새 글로벌 설정에 10개, 프로젝트 설정에 2개, 총 12개의 MCP 서버가 돌아가고 있었습니다. 그런데 어느 날 Claude Code를 시작할 때 이런 경고가 눈에 들어왔습니다.
⚠ Large MCP tools context (~71,430 tokens > 25,000)
└ MCP servers:
└ notion: 22 tools (~21,076 tokens)
└ grafana: 62 tools (~14,872 tokens)
└ google-analytics: 6 tools (~9,328 tokens)
└ blog: 17 tools (~8,434 tokens)
└ coolify: 35 tools (~4,899 tokens)
└ (8 more servers)
71,430 토큰. 200K 컨텍스트 윈도우의 약 36%가 MCP 도구 정의에 쓰이고 있었습니다.
MCP 도구가 토큰을 먹는 구조
처음에는 MCP 도구가 "호출할 때만" 토큰을 소비할 거라고 생각했습니다. 하지만 실제로는 달랐습니다.
MCP 서버에 등록된 도구들은 매 메시지마다 시스템 프롬프트에 전체 스키마가 로드됩니다. 도구 이름, 설명, 파라미터 정의, 타입 정보가 모두 포함됩니다. 한 번도 호출하지 않는 도구라도 대화가 이어지는 한 계속 토큰을 소비합니다.
10턴짜리 대화를 한다면, MCP 도구 정의만으로 714,300 토큰이 input에 들어갑니다. 실제 코드를 읽고 수정하는 데 쓰여야 할 토큰이 도구 정의에 잠식당하는 셈입니다.
제거 대상 선정 — 4개 서버
12개 서버를 하나씩 검토하면서, 제거 기준을 세 가지로 정했습니다.
- 내장 도구와 중복되는가?
- 다른 MCP 서버와 기능이 겹치는가?
- 현재 시점에서 존재 의미가 있는가?
1. mcp-fetch — WebFetch와 100% 중복
Claude Code에는 WebFetch라는 내장 도구가 이미 있습니다. URL을 받아서 콘텐츠를 가져오고 분석하는 기능인데, mcp-fetch가 하는 일과 완전히 동일했습니다. 굳이 외부 MCP 서버를 거칠 이유가 없었습니다.
2. puppeteer — playwright와 기능 중복
브라우저 자동화 MCP가 두 개 설치되어 있었습니다. puppeteer와 playwright 모두 페이지 이동, 클릭, 스크린샷, 폼 입력 등 동일한 기능을 제공합니다. 프로젝트의 E2E 테스트가 이미 Playwright 기반이었으므로, puppeteer 쪽을 제거하고 playwright로 통일했습니다.
3. morphllm-fast-apply — Edit/Write로 충분
코드 변경을 빠르게 적용하는 도구인데, Claude Code 자체의 Edit과 Write 도구로 충분합니다. 오히려 외부 LLM을 경유하는 과정에서 불안정해질 수 있다는 점이 리스크였습니다.
4. sequential-thinking — 이미 내장된 기능
이 서버가 가장 판단이 어려웠습니다. 대화 로그를 분석해보니 약 405회나 호출된 이력이 있었고, SaaS 아키텍처 설계나 성능 분석 같은 복잡한 작업에서 실제로 활용되고 있었습니다.
하지만 결정적인 변화가 있었습니다. Claude Code v2.0부터 extended thinking이 기본으로 활성화되면서, 별도의 thinking 도구가 필요 없어졌습니다. 이전에 --ultrathink 플래그와 함께 쓰던 sequential-thinking은 이제 내장 기능으로 완전히 대체되었습니다.
Ultrathink no longer does anything. Thinking budget is now max by default.
현재 모델별 thinking 제어 방식은 다음과 같습니다.
- Opus 4.6:
CLAUDE_CODE_EFFORT_LEVEL환경변수로 제어 (low / medium / high). 기본값이 high이므로 별도 설정 없이 최대 수준으로 동작합니다. - Sonnet 4.5, Haiku 등:
MAX_THINKING_TOKENS환경변수로 토큰 수를 직접 지정합니다. 기본값은 31,999 토큰입니다.
어느 쪽이든 기본값이 이미 최대이므로, sequential-thinking MCP 서버가 끼어들 자리는 없어졌습니다.
제거 결과
제거한 4개 서버의 도구를 합산하면 약 10~11개입니다.
제거된 서버 도구 수 추정 토큰
─────────────────────────────────────
puppeteer 7개 ~3,000-5,000
sequential-thinking 1개 ~500-1,000
mcp-fetch 1-2개 ~500-1,000
morphllm-fast-apply 1개 ~500-1,000
─────────────────────────────────────
합계 ~11개 ~5,000-8,000 / 메시지
매 메시지당 약 5K-8K 토큰이 절약됩니다. 10턴 대화 기준으로 50K-80K 토큰 절감이니, 하루에 여러 세션을 돌리면 체감되는 수준입니다.
토큰 절약 외에도 세 가지 부수적인 효과가 있었습니다.
- 세션 시작 속도 향상 — npx로 4개 서버를 띄우지 않아도 됩니다
- 도구 선택 정확도 개선 — puppeteer와 playwright 중 고민할 필요가 없어졌습니다
- 백그라운드 프로세스 감소 — 메모리와 CPU 사용량이 줄었습니다
정리 후 최종 구성
현재 남아 있는 MCP 서버는 다음과 같습니다.
글로벌 (6개)
├── grafana — 모니터링/대시보드
├── magic — UI 컴포넌트 생성
├── playwright — E2E 테스트/브라우저 자동화
├── obsidian — 노트 관리
├── coolify — 배포 관리
└── google-analytics — GA4 데이터 분석
프로젝트 (2개)
├── blog — 블로그 글 작성/관리
└── notion — Notion 연동
각 서버가 명확한 역할을 갖고 있고, 서로 기능이 겹치지 않습니다.
앞으로의 방향
이번 정리를 하면서 한 가지 깨달은 것이 있습니다. MCP 서버를 "항상 모두 켜둘" 필요는 없다는 것입니다.
71K 토큰이라는 숫자가 보여주듯, MCP 도구는 존재만으로 비용을 발생시킵니다. 앞으로는 작업 성격에 따라 필요한 서버만 선택적으로 활성화하는 방식을 고민해봐야겠다는 생각이 들었습니다.
개발 도구는 많다고 좋은 것이 아니라, 적절한 것만 남기는 것이 중요합니다. 결국 도구의 가치는 "있느냐"가 아니라 "쓰느냐"에 달려 있다는, 당연하지만 간과하기 쉬운 사실을 다시 한번 확인한 시간이었습니다.
관련 글
Claude Code에 설치한 SuperClaude, 정말 필요했을까?
Claude Code에 SuperClaude 프레임워크를 설치했지만, 15개 에이전트 중 14개가 내장 기능과 중복이었고 22개 커맨드는 의존성 미충족으로 작동하지 않았다. 안 쓰는 기능이 매 대화마다 컨텍스트 윈도우를 소비하고 있었다는 사실을 깨닫고 정리한 과정.
Claude Code에서 SuperClaude 프레임워크를 걷어낸 이유 — 71KB를 5KB로
SuperClaude 프레임워크를 분석해보니, 17개 파일 71KB 중 대부분이 불필요했다. 모델이 이미 아는 원칙, 내장 규칙과의 중복, 설치되지 않은 도구 문서까지. 92% 감소시킨 정리 과정과 교훈을 정리했다.
Claude Code에서 블로그 글 작성하기: MCP를 직접 만들어 활용한 경험
Claude Code로 개발하면서 얻은 지식을 블로그에 정리하고 싶었습니다. 하지만 AI에게 블로그 관리자 권한을 모두 주기엔 불안했고, 필요한 API만 분기 처리하기엔 번거로웠습니다. MCP(Model Context Protocol)를 직접 만들어서 권한을 명확히 분리하고, Few-shot 예시와 SEO 가이드라인을 1회 호출로 제공하도록 개선한 경험을 공유합니다.