AI 에이전트가 MCP 도구를 하나씩 호출하지 않고, 여러 도구를 부르는 짧은 코드를 써서 샌드박스에서 한 번에 실행하는 방식이다. 연결된 도구가 많거나 큰 데이터가 도구 사이를 오갈 때 토큰을 크게 줄이려고 쓴다.
| 구분 | 일반 MCP 도구 호출 | 코드 모드 |
|---|---|---|
| 모델이 보는 것 | 모든 도구의 정의 | 몇 개의 메타 도구나 타입 선언 |
| 호출 방식 | 도구 하나 호출 → 결과 확인 → 다시 호출 | 여러 도구를 묶은 프로그램을 한 번 실행 |
| 중간 데이터 | 매번 모델의 컨텍스트를 지나감 | 샌드박스 안에만 머묾 |
| 모델에게 돌아오는 것 | 호출마다 나온 원본 결과 | 최종 결과만 |
이름은 Cloudflare가 2025년 9월에 처음 붙였고, Anthropic은 같은 방식을 'Code Execution with MCP'라는 이름으로 정리했다.
일반 방식에서는 도구 정의가 컨텍스트를 차지하고, 회의록 같은 큰 데이터도 도구에서 도구로 넘어갈 때마다 모델을 한 번씩 거친다. 코드 모드에서는 모델이 필요한 도구만 찾아 읽은 뒤 반복이나 필터링을 코드로 처리하기 때문에, 중간 데이터는 모델에 들어가지 않는다.
| 사례 | 기존 | 코드 모드 |
|---|---|---|
| 엔드포인트 2,500개짜리 API | 약 117만 토큰 | 약 1,000 토큰 |
| MCP 서버 2개를 잇는 파이프라인 | 15만 토큰 | 2,000 토큰 |
위 사례는 Cloudflare, 아래 사례는 Anthropic이 직접 발표한 수치다.
반대로 도구가 10개도 안 되고 서로 이어서 호출할 일이 거의 없다면 오히려 손해다. 이럴 때는 일반 도구 호출을 그대로 쓰는 편이 낫다.
Cloudflare 문서는 두 가지 구성을 소개한다. API가 작아서 타입 선언이 도구 설명 안에 다 들어간다면 code 도구 하나만 열어 두면 된다. API가 크다면 search로 필요한 부분을 먼저 찾고 execute로 실행하는 두 단계 구성이 맞다.
모델이 쓴 코드는 격리된 환경에서 돌아가고, 외부 네트워크 접근은 기본적으로 막혀 있다. 그래도 권한 확인과 승인은 도구 핸들러나 호스트 쪽에서 따로 해야 하고, 인증 정보가 코드나 결과에 드러나서도 안 된다. 셸로 이미 코드를 실행하는 에이전트에 코드 모드 서버를 또 붙이면 코드 안에서 또 코드를 돌리는 구조가 된다. 그러면 JSON 이스케이프가 두 번 일어나서 작은 모델일수록 헷갈리기 쉽다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| FastMCP 서버 | pip install "fastmcp[code-mode]"로 설치한 뒤 기존 서버에 CodeMode 변환을 추가한다. 도구 함수는 고치지 않아도 된다 |
| goose | 확장을 많이 켜 두었을 때 내장 Code Mode 확장을 켜면 JavaScript로 도구를 호출한다 |
| Claude Desktop 같은 MCP 전용 클라이언트 | npx @utcp/code-mode-mcp 서버를 설정에 추가한다 |
| Cloudflare Workers | 자기 API를 search·execute 구성의 MCP 서버로 공개한다 |