MCP 서버를 여러 개 연결하다 보면 도구 수가 순식간에 폭발해요. Atlassian MCP 하나만 연결해도 72개 도구가 딸려오거든요. 여기에 Perplexity, Slack, Plane 같은 MCP를 추가하면 금세 100개를 넘겨버리죠. Antigravity처럼 100개 tool 제한이 걸린 환경에서는 Atlassian 하나 켜면 다른 MCP를 붙일 수조차 없어요.
이 문제를 해결하는 방법은 크게 세 가지예요. 하나씩 살펴볼게요.
Claude Code 빌트인: MCP Tool Search
Claude Code에는 이미 MCP Tool Search라는 기능이 내장되어 있어요. MCP 도구 설명이 context window의 일정 비율을 넘으면 자동으로 활성화되는데, 모든 도구를 미리 로드하지 않고 필요할 때만 검색해서 불러오는 방식이에요.
# 기본값: context window의 10% 초과 시 자동 활성화ENABLE_TOOL_SEARCH=auto claude
# 더 공격적으로: 5% 초과 시 활성화ENABLE_TOOL_SEARCH=auto:5 claude
# 항상 켜기ENABLE_TOOL_SEARCH=true claudecontext token 절약 측면에서는 효과적이에요. 하지만 여기서 중요한 점이 있어요. Tool Search는 context에 로드되는 도구 설명을 줄여줄 뿐, 도구 수 자체를 줄이지는 않아요. Antigravity의 100개 제한 같은 하드 리밋에는 소용이 없다는 뜻이죠.
Claude Code 빌트인: settings.json deny
특정 도구 몇 개만 차단하고 싶다면 settings.json의 deny 권한이 가장 간단해요.
{ "permissions": { "deny": [ "mcp__perplexity__perplexity_ask", "mcp__atlassian__unused_tool_name" ] }}예를 들어 Perplexity MCP에서 perplexity_ask는 크레딧이 많이 나가니까 차단하고 perplexity_search만 허용하고 싶다면, 위처럼 한 줄 추가하면 끝이에요. 도구가 2-3개뿐인 MCP에서 하나만 빼는 용도로는 이게 최선이에요.
tool-filter-mcp: 대량 필터링이 필요할 때
Atlassian처럼 72개 도구 중 대부분을 걸러내야 하는 경우, respawn-app/tool-filter-mcp가 효과적이에요. upstream MCP 서버 앞에 proxy를 두고 regex 기반 deny list로 도구를 필터링하는 방식이거든요.
사용 가능한 도구 먼저 확인하기
npx @respawn-app/tool-filter-mcp \ --upstream http://localhost:3000/sse \ --list-tools --format names--format table로 하면 설명까지 볼 수 있고, --format names는 콤마 구분 목록으로 뽑아줘서 deny 패턴을 만들기 편해요.
HTTP/SSE upstream 설정
.mcp.json에 이렇게 추가하면 돼요.
{ "mcpServers": { "atlassian-filtered": { "command": "npx", "args": [ "@respawn-app/tool-filter-mcp", "--upstream", "http://localhost:3000/sse", "--deny", "pattern1,pattern2,.*_file$" ], "type": "stdio" } }}stdio upstream 설정
upstream MCP가 npx 기반 stdio 서버라면 --upstream-stdio를 쓰면 돼요.
{ "mcpServers": { "atlassian-filtered": { "command": "npx", "args": [ "@respawn-app/tool-filter-mcp", "--upstream-stdio", "--deny", "unused_tool_pattern", "--", "npx", "@anthropic/atlassian-mcp" ], "type": "stdio" } }}-- 뒤에 원래 MCP 서버의 실행 명령어를 그대로 넣으면 돼요.
어떤 방법을 언제 쓸까요?
감이 오시나요? 정리하면 이래요.
| 상황 | 추천 방법 |
|---|---|
| 특정 도구 몇 개만 차단 | settings.json deny |
| context token 절약 | MCP Tool Search |
| 도구 수 자체를 대량으로 줄여야 함 | tool-filter-mcp |
| 100개 같은 하드 리밋 회피 | tool-filter-mcp |
여기서 잠깐, 한 가지 더 중요한 포인트가 있어요.
Claude Code가 아닌 다른 클라이언트에서는?
settings.json deny와 MCP Tool Search는 Claude Code 전용 기능이에요. OpenAI Codex, Cursor, Windsurf, Claude Desktop 같은 다른 MCP 클라이언트에는 이런 빌트인 필터링이 없거든요.
| 클라이언트 | 빌트인 도구 필터링 | tool-filter-mcp 필요 여부 |
|---|---|---|
| Claude Code | settings.json deny, Tool Search | 대량 필터링 아니면 불필요 |
| OpenAI Codex | 없음 | 필요 |
| Cursor | 없음 | 필요 |
| Windsurf | 없음 | 필요 |
| Claude Desktop | 없음 | 필요 |
MCP 프로토콜 자체가 “서버가 제공하는 도구를 클라이언트가 전부 받는” 구조예요. 클라이언트 쪽에서 필터링을 지원하지 않으면, 서버 앞에 proxy를 두는 것이 유일한 방법이에요.
여러 MCP 클라이언트를 동시에 사용한다면 오히려 tool-filter-mcp로 통일하는 게 관리가 편해요. 클라이언트마다 각각의 설정 방식을 외울 필요 없이, MCP 서버 설정 한 곳에서 필터링을 관리할 수 있으니까요.
[Atlassian MCP] → [tool-filter-mcp] → Claude Code → Codex → Cursor필터링된 MCP 서버를 각 클라이언트에 동일하게 연결하면 돼요. 설정 한 번으로 모든 클라이언트에서 동일한 도구 세트를 사용할 수 있죠.
MCP 생태계가 커질수록 도구 수 관리는 점점 중요해질 거예요. 지금은 Claude Code의 빌트인 기능과 tool-filter-mcp를 상황에 맞게 조합하는 것이 가장 현실적인 접근이에요.