mcptoon: Token-Efficient MCP CLI Client
mcptoon을 통한 MCP 토큰 오버헤드 감소
mcptoon은 Model Context Protocol (MCP)과 관련된 토큰 비용을 최소화하도록 설계된 크로스 플랫폼 CLI 클라이언트입니다. 표준 JSON 응답을 TOON(Token-Optimized Object Notation)이라고 불리는 독자적인 압축 표기법으로 대체함으로써, mcptoon은 도구 탐색(tool discovery) 비용을 최대 97%까지, 도구 결과 오버헤드를 40-60%까지 줄일 수 있다고 주장합니다.
문제점: JSON 구문 팽창
표준 MCP 지원 대화는 실제 데이터보다 구조적 구문에 상당한 양의 토큰을 소비하는 경우가 많습니다. 프로젝트 문서에 따르면, 도구 목록을 나열하기 위해 5개의 MCP 서버에 연결하는 데 약 10,000개의 JSON 토큰이 소모될 수 있습니다. 에이전트가 여러 도구를 호출할 때 결과가 장황한 JSON 구조(예: {"content":[{"type":"text","text":"..."}]})로 래핑되어, AI가 실제 정보를 처리하기 시작하기도 전에 128K 컨텍스트 창의 30-55%를 소비할 수 있습니다.
해결책: TOON (Token-Optimized Object Notation)
mcptoon은 stdio 또는 HTTP를 통해 MCP 서버에 연결하고 JSON 출력을 TOON으로 변환합니다. 이 표기법은 문자 수와 토큰 수를 줄이기 위해 특정 치환을 사용합니다:
| JSON | TOON | 로직 |
|---|---|---|
{"name":"search","count":3} |
`name:search | count:3` |
[1, 2, 3] |
1 2 3 |
공백이 대괄호와 쉼표를 대체 |
true / false |
T / F |
단일 문자 대체 |
null |
∅ |
단일 기호 대체 |
"line1\nline2" |
line1↲line2 |
특수 기호가 이스케이프 시퀀스를 대체 |
{"a":{"b":[1,2]}} |
a:b:1_2 |
재귀적 압축 |
성능 비교
| 작업 | JSON 토큰 | mcptoon 토큰 | 절감률 |
|---|---|---|---|
| 도구 탐색 (96개 도구) | ~2,000 | ~60 | 97% |
| 도구 결과 (구조화된 데이터) | ~800 | ~350 | 56% |
| 도구 결과 (원시 HTML/텍스트) | ~1,000 | ~900 | 10% |
통합 및 호환성
mcptoon은 순수 Python (3.10+)으로 작성되었으며 외부 종속성이 없는 CLI 도구입니다. Claude Code, Cursor, Codex, OpenCode를 포함하여 쉘 명령을 실행할 수 있는 모든 AI 에이전트와 호환됩니다.
배포 예시
- Claude Code: 사용자는
SKILL.md파일에mcptoon명령어를 작성하고MCPTOON_AGENT_TYPE=claude를 설정하여--toon출력 형식을 자동으로 선택할 수 있습니다. - Cursor: 도구를
.cursorrules에 추가할 수 있습니다. - Codex (OpenAI): 도구 목록을 위해
mcptoon manifest --toon을 사용하도록AGENTS.md또는 시스템 프롬프트에 지침을 추가할 수 있습니다.
주요 기능 및 안전성
- 통합 설정: MCP 서버는
~/.mcptoon/config.json에 한 번만 설정하면 여러 에이전트가 동일한 도구 세트를 공유할 수 있습니다. - 안전 차단: 클라이언트는
--destructive플래그가 전달되지 않는 한 위험한 패턴(예:delete,drop,purge)과 일치하는 작업을 차단합니다. - 사용량 추적: 총 호출 횟수, 성공률 및 예상 토큰 절감액에 대한 로컬 추적 데이터가
~/.cache/mcptoon/usage.json에 저장됩니다. - 스키마 캐싱: 탐색 오버헤드를 더욱 줄이기 위해 5분 TTL을 가진 스키마 캐시를 포함합니다.
기술 커뮤니티 비평
이 프로젝트는 토큰 절감을 강조하지만, Hacker News 커뮤니티의 여러 개발자들은 TOON 표기법의 실제 효능에 대해 우려를 제기했습니다:
- 토큰화 vs 문자 수: 비판론자들은 저자가 문자 수와 토큰 수를 혼동하고 있을 수 있다고 주장합니다. 예를 들어, 사용자들은
true/false와null이 현대적인 토크나이저에서 종종 단일 토큰이라는 점을 지적했습니다. 이는T/F또는∅로 대체하는 것이 이득이 없거나, 비 ASCII 유니코드 기호 사용으로 인해 오히려 토큰 수를 증가시킬 수 있음을 의미합니다. - 정보 손실: 일부 사용자는 도구 이름만 반환하는
--compact모드가 중요한 설명과 입력 스키마를 제거하여, 잠재적으로 LLM의 환각(hallucination)이나 잘못된 도구 호출을 유발할 수 있다고 지적했습니다. - 대안적 접근 방식: 일부 개발자들은 인자 환각을 방지하기 위해 도구 이름만 나열하는 것보다 인자와 함께 도구 이름을 반환하는 것(예:
search_web(query))이 더 효과적이라고 제안했습니다.
"제 생각에 이러한 선택 중 일부는... 저자가 토큰화가 어떻게 작동하는지 조사하지 않았음을 보여줍니다. 토큰화는 블랙박스가 아니며, 토크나이저를 실행하여 확인할 수 있습니다."
빠른 시작 가이드
# 설치
pip install mcptoon
# 초기화 및 서버 추가
mcptoon init
mcptoon add fetch --stdio npx -y @modelcontextprotocol/server-fetch
# TOON 형식으로 도구 목록 보기
mcptoon manifest --toon
# 도구 호출
mcptoon call fetch fetch '{"url":"https://example.com"}' --toon
Sources
관련
- 프로젝트
- 프로젝트
- Dispatch
- 프로젝트
- 프로젝트