AI Sparkup

복잡한 AI 세상을 읽는 힘 ⚡

MCP 도구를 코드로 바꾸니 토큰이 98% 줄었다: Anthropic의 새 접근법

AI 에이전트에 도구를 연결하면 할수록 더 느려지고 비용이 늘어난다면? MCP(Model Context Protocol)가 직면한 이 역설적 문제에 Anthropic이 해법을 제시했습니다.

출처: Anthropic Engineering Blog

Anthropic이 MCP를 코드 실행 환경과 결합하는 새로운 접근법을 발표했습니다. 핵심은 MCP 도구를 직접 호출하는 대신 파일시스템의 코드 API로 변환하여, 에이전트가 필요한 도구만 불러오고 데이터를 코드로 처리하게 만드는 것입니다. 이 방식으로 150,000 토큰을 2,000 토큰으로 줄이는 98.7% 절감 효과를 얻었다고 합니다.

출처: Code execution with MCP: building more efficient AI agents – Anthropic Engineering Blog

MCP의 두 가지 병목

MCP는 2024년 11월 출시 이후 AI 에이전트를 외부 시스템에 연결하는 업계 표준으로 자리잡았습니다. 커뮤니티에서 수천 개의 MCP 서버를 만들었고, 모든 주요 프로그래밍 언어용 SDK가 나왔죠. 하지만 연결된 도구가 늘어날수록 두 가지 문제가 불거졌습니다.

첫째, 도구 정의가 컨텍스트 윈도우를 잡아먹습니다. 대부분의 MCP 클라이언트는 모든 도구 설명을 처음부터 컨텍스트에 로드합니다. 구글 드라이브 문서 가져오기, Salesforce 레코드 업데이트 같은 각 도구마다 상세한 설명과 파라미터 정보가 포함되죠. 수천 개 도구에 연결된 에이전트는 사용자 요청을 읽기도 전에 수십만 토큰을 처리해야 합니다.

둘째, 중간 결과가 모델을 계속 왕복합니다. “구글 드라이브에서 회의록 다운로드해서 Salesforce 리드에 첨부해줘”라는 요청을 생각해보세요. 기존 MCP 방식에서는 이렇게 작동합니다:

  1. 에이전트가 드라이브에서 문서를 가져옴 → 회의록 전체(50,000 토큰)가 모델 컨텍스트에 들어옴
  2. 모델이 이 내용을 보고 다음 작업 판단
  3. Salesforce 업데이트 도구를 호출하면서 회의록 내용을 파라미터에 다시 작성 → 또 50,000 토큰

같은 텍스트가 두 번 컨텍스트를 통과하면서 총 100,000 토큰을 소비하는 거죠. 큰 문서는 컨텍스트 윈도우 한계를 넘길 수도 있고, 모델이 긴 텍스트를 복사하면서 내용을 빠뜨리거나 잘못 쓸 위험도 있습니다.

파일시스템으로 옮긴 도구들

Anthropic이 제안한 해법은 의외로 단순합니다. MCP 도구를 파일시스템의 코드 파일로 변환하는 겁니다. 예를 들어 TypeScript 환경이라면 이런 구조가 됩니다:

servers/
├── google-drive/
│   ├── getDocument.ts
│   └── index.ts
├── salesforce/
│   ├── updateRecord.ts
│   └── index.ts

각 도구는 간단한 함수 파일이 되고, 에이전트는 필요할 때만 해당 파일을 읽습니다. 아까 예시는 이렇게 바뀝니다:

const transcript = (await gdrive.getDocument({ documentId: 'abc123' })).content;
await salesforce.updateRecord({
  objectType: 'SalesMeeting',
  recordId: '00Q5f000001abcXYZ',
  data: { Notes: transcript }
});

회의록 내용이 코드 실행 환경 안에서만 흐르고 모델의 컨텍스트를 거치지 않습니다. 회의록은 transcript 변수에 저장되고, 그 값이 바로 Salesforce 호출로 넘어가죠. 모델은 이 코드만 작성하면 되고, 실제 50,000 토큰짜리 회의록 내용은 모델이 볼 필요가 없습니다. 에이전트는 파일시스템을 탐색해 필요한 도구만 찾아 쓰면 되죠. 전체 도구 정의를 미리 로드할 필요가 없으니 토큰이 극적으로 줄어듭니다.

코드로 얻는 추가 혜택

도구 정의를 파일로 옮기면 토큰 절감 외에도 여러 이점이 생깁니다.

대용량 데이터를 다룰 때 코드로 필터링하고 변환한 뒤 결과만 모델에 보낼 수 있습니다. 10,000행 스프레드시트를 가져온다면, 코드에서 필요한 행만 골라내고 처음 5개만 로깅해서 확인하는 식이죠. 모델은 1만 행이 아니라 5행만 보면 됩니다.

반복문이나 조건문도 익숙한 코드 패턴으로 처리할 수 있습니다. Slack에서 배포 완료 알림을 기다린다면, while 루프로 5초마다 메시지를 확인하는 코드를 작성하면 그만입니다. 매번 모델을 거쳐 도구를 호출하는 것보다 훨씬 효율적이고 빠릅니다.

프라이버시 측면에서도 흥미로운 점이 있습니다. 중간 데이터는 실행 환경에 머물고, 명시적으로 출력한 것만 모델이 봅니다. 더 나아가 MCP 클라이언트가 민감한 정보를 자동으로 토큰화할 수도 있죠. 스프레드시트의 이메일과 전화번호를 Salesforce로 옮길 때, 실제 데이터는 모델을 우회해서 흐르고 모델은 [EMAIL_1], [PHONE_1] 같은 토큰만 보게 만드는 겁니다.

상태 저장도 가능해집니다. 에이전트가 작업 중간 결과를 파일로 저장했다가 나중에 이어서 쓸 수 있고, 자주 쓰는 작업을 함수로 만들어 재사용 라이브러리를 구축할 수도 있습니다. 이는 Anthropic의 Skills 개념과도 자연스럽게 연결됩니다. 에이전트가 스스로 진화하는 도구 상자를 만들어가는 거죠.

소프트웨어 공학을 AI에 적용하기

Anthropic은 이 접근법을 “AI 에이전트의 새로운 문제처럼 보이지만 사실 소프트웨어 엔지니어링에 이미 있던 해법”이라고 설명합니다. 컨텍스트 관리, 도구 조합, 상태 관리는 익숙한 프로그래밍 패턴으로 풀 수 있다는 거죠. Cloudflare도 “Code Mode”라는 이름으로 비슷한 발견을 발표했습니다.

물론 코드 실행은 자체적인 복잡성을 가져옵니다. 안전한 샌드박스 환경, 리소스 제한, 모니터링이 필요하고, 이런 인프라는 운영 오버헤드와 보안 고려사항을 추가하죠. 토큰 비용 절감과 지연시간 개선이 구현 비용보다 큰지 따져봐야 합니다.

흥미롭게도 Anthropic은 상세한 제안만 내놓았을 뿐 실제 구현 코드는 제공하지 않았습니다. AI 도구 전문가 Simon Willison은 “이 제안은 매우 합리적이고 MCP의 주요 단점들을 해결한다. 하지만 독자가 직접 구현해야 한다”고 평가했습니다. Anthropic은 커뮤니티가 이를 구현하고 결과를 공유하기를 권장하고 있습니다.

참고자료:


AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다