요약
AI 에이전트 개발에서 MCP(Model Context Protocol) 프로토콜이 수백 개의 서버와 수천 개의 도구를 동시에 사용하게 되면서 컨텍스트 창 관리와 토큰 효율성 문제가 심각해졌습니다. Docker가 동적 모델(Dynamic Model)과 Code Model이라는 혁신적인 솔루션을 제시하여 불필요한 도구 정의를 제거하고, 샌드박스 환경에서 안전하게 커스텀 도구를 생성함으로써 토큰을 대폭 절약하고 에이전트 성능을 극대화하는 방법을 구현했습니다.
주요 내용
1. MCP 프로토콜의 핵심 문제점
초기 vs 현재 상황
- 초기: 사용자들이 로컬에서 2-3개의 MCP 서버만 실행
- 현재: 수백 개의 MCP 서버와 수천 개의 도구를 동시 사용
- 결과: 컨텍스트 창 관리와 성능 문제가 심각하게 대두
세 가지 핵심 과제
- 신뢰성: 실제로 신뢰할 수 있는 MCP 서버는 무엇인가?
- 효율성: 사용하지 않을 수도 있는 도구 정의로 컨텍스트를 채우는 것을 어떻게 피할 수 있는가?
- 1,000개의 도구가 있어도 한 번의 채팅에서는 2-3개만 사용
- 불필요한 도구 정의가 컨텍스트 창을 차지하는 문제
- 자율성: 에이전트가 도구들을 어떻게 효율적이고 자율적으로 발견, 구성, 사용하는가?
문제 인식의 역사
- Claude Artifacts: 이 문제를 가장 먼저 인지
- Anthropic: 연구 논문을 발표하며 문제점 강조
- Docker: 실제 해결책을 구현한 최초의 회사
2. Docker의 해결책: MCP 카탈로그와 게이트웨이
Docker MCP 카탈로그
- 목적: 검증되고 신뢰할 수 있는 MCP 서버들을 목록화
- 특징:
- Docker에서 바로 연결 가능 (예: Notion 연결)
- 중앙 집중식 관리로 신뢰성 문제 해결
- 클라이언트는 Docker MCP에만 연결하면 모든 MCP 서버 관리 가능
MCP 게이트웨이 (MCP Gateway)
- 작동 원리:
- 단 하나의 MCP만 연결하면 카탈로그의 모든 도구에 접근 가능
- 어떤 도구 정의를 컨텍스트 창으로 가져와야 할지 자동 판단
- 컨텍스트 창이 불필요하게 커지는 것을 방지
새로운 도구들
- MCP find: 이름이나 설명으로 카탈로그에서 MCP 서버 검색
- MCP remove: MCP 서버 제거
- 동적 도구 선택: 필요한 도구만 컨텍스트에 로드
3. 토큰 효율성 문제와 해결 방안
컨텍스트 창을 채우는 두 가지 요소
- 도구 정의 (Tool Definitions)
- 문제: 사용하지 않을 도구들의 정의까지 컨텍스트에 포함
- 예: 1,000개 도구 중 2-3개만 사용해도 모든 정의가 전송됨
- 중간 도구 결과 (Intermediate Tool Results)
- 문제: MCP 도구 호출의 원시 결과가 모두 컨텍스트로 반환
- 예: GitHub 저장소 검색 시 이름, 설명, 링크, 별점, 날짜 등 모든 세부 정보가 반환
- 결과: 단 5번의 도구 호출만으로도 전체 컨텍스트 창이 가득 참
Docker의 개선 사항
- 선택적 도구 제공: 실제로 유용한 도구만 제공
- 예시: GitHub MCP의 40개 도구 중 “search repo” 도구만 필요할 때 해당 도구만 제공
- 효과: 불필요한 도구 정의로 인한 토큰 낭비 방지
4. Code Model: 혁신적인 솔루션
Code Model이란?
- 정의: 다른 MCP 도구를 호출할 수 있는 JavaScript 기반 도구를 생성하는 기능
- 작동 방식:
- 에이전트가 MCP 도구를 사용해 직접 코딩
- 필요한 도구들을 가져와 코드로 구현
- 하나의 커스텀 도구로 여러 도구의 기능을 통합
세 가지 주요 이점
1. 완전한 보안 (Security)
- 에이전트가 작성한 코드는 테스트되지 않았고 안전하지 않음
- Docker 컨테이너를 이용한 샌드박스 환경에서 실행
- 시스템에 실질적인 손상을 주지 않음
2. 토큰 및 도구 효율성
- Code Model 없이:
- 세 가지 도구만 반복 실행해도 나머지 모든 도구의 컨텍스트도 함께 전송
- 예: 40개 도구 정의가 매번 컨텍스트에 포함
- Code Model 사용:
- 에이전트가 실제 사용할 도구만으로 맞춤형 도구 작성
- 매번 하나의 Code Model 도구만 참조
- 불필요한 도구들을 보내지 않아 컨텍스트 절약
3. 상태 지속성 (State Persistence)
- 볼륨(Volume) 활용: 도구 호출 간 데이터 저장 방식 관리
- 데이터 흐름: 데이터가 실제로 모델에 전송되지 않음
- 예시: 데이터 처리 파이프라인
- 데이터셋 다운로드 → 볼륨에 저장, 모델은 “성공” 메시지만 받음
- 처음 10,000개 행 처리 → 볼륨에서 읽어 요약본만 모델에 반환
- 최종 결과, 요약, 오류 메시지 등 필요한 데이터만 모델로 전송
- 효과: 컨텍스트 창이 깨끗하게 유지되고 5MB 데이터로 넘쳐나지 않음
5. 실제 사용 사례: GitHub 저장소 검색 자동화
작업 목표
영상 제작을 위한 새로운 오픈소스 도구 발견
기존 방식의 문제
- “Find GitHub repo” 도구를 여러 번 호출
- 각 호출마다 다른 키워드 입력
- 반복적인 수동 작업 필요
Code Model을 활용한 개선
1단계: 멀티 키워드 검색 도구 생성
- 사용자 요청: “여러 키워드로 저장소 검색하는 단일 도구 만들기”
- 에이전트가 “multi-query-repos” 도구 생성
- 여러 쿼리를 하나의 도구로 통합
실행 결과:
- 6개의 다른 키워드로 검색
- 29개의 고유한 저장소 발견
- 문제: 모든 결과가 응답과 터미널에 직접 반환 (컨텍스트 창에 모두 포함)
2단계: 파일 기반 저장으로 개선
- 사용자 요청: “모든 것을 파일에 작성하고 설명만 받도록”
- 에이전트가 도구 수정
- 모든 결과를 텍스트 파일에 작성
- 모델은 저장소 설명만 받음 (별점, 날짜 등 불필요한 정보 제외)
효과:
- 컨텍스트 창 절약
- 나중에 특정 저장소 정보가 필요할 때 텍스트 파일 참조 가능
3단계: Notion 통합
- “Notion MCP 검색” 요청
- “GitHub 검색 결과를 텍스트 파일 대신 Notion으로 출력하는 도구” 요청
- 에이전트가 “repo-to-notion” 도구 생성
- 결과를 Notion 데이터베이스에 직접 입력
최종 결과:
- Notion 데이터베이스에 구조화된 데이터 저장
- 필드: 저장소 이름, 설명, 링크, 별점, 날짜 등
- 날짜 포함으로 필터링과 검색 용이
- 모델은 한 번에 이름과 설명만 받음, 나머지는 Notion에 저장
현재 한계점
- 생성된 도구를 저장하고 재사용하는 기능 미구현
- 현재는 수동으로 파일로 저장하는 것이 유일한 옵션
핵심 인사이트
1. 패러다임 전환: 하드코딩된 환경에서 동적 환경으로
Docker는 “에이전트 환경을 하드코딩하는 것을 멈춰야 한다”고 강조합니다. Code Model을 통해 에이전트가 실행 중에 필요한 도구를 동적으로 생성하고 조합할 수 있게 함으로써, 더 유연하고 효율적인 AI 에이전트 개발이 가능해졌습니다.
2. 토큰 효율성이 성능의 핵심
MCP 프로토콜의 가장 큰 문제는 불필요한 정보로 컨텍스트 창을 채우는 것이었습니다. Docker의 솔루션은 세 가지 방식으로 이를 해결합니다:
- 도구 정의 최소화: 필요한 도구만 컨텍스트에 로드
- 중간 결과 필터링: 필요한 정보만 모델에 전달
- 상태 지속성: 데이터를 볼륨에 저장하고 요약만 전달
3. 보안과 효율성의 균형
Code Model은 에이전트가 임의의 코드를 작성할 수 있게 하지만, Docker 컨테이너의 샌드박스 환경에서 실행됨으로써 보안을 보장합니다. 이는 혁신적인 기능과 안전성을 동시에 달성한 사례입니다.
4. 선제적 인프라 구축의 중요성
Docker는 문제가 부상하기 훨씬 전부터 MCP 카탈로그와 관련 인프라를 구축해 두었습니다. 이러한 준비 덕분에 문제 발생 시 신속하게 해결책을 제시할 수 있었습니다.
5. 복합 도구 활용의 가능성
GitHub 저장소 검색 자동화 사례는 여러 MCP 서버(GitHub, Notion)를 결합하여 강력한 워크플로우를 만들 수 있음을 보여줍니다. Docker MCP 카탈로그를 탐색하는 것만으로도 무한한 조합 가능성을 발견할 수 있습니다.
6. AI 에이전트 개발의 미래 방향
- 자율성 증가: 에이전트가 필요한 도구를 스스로 발견하고 조합
- 효율성 우선: 토큰 사용량 최적화가 성능의 핵심 지표
- 통합 생태계: 검증된 MCP 서버 카탈로그를 중심으로 한 생태계 구축
관련 자료
시작하기
- Docker 버전을 최신으로 업데이트 필요
- 베타 기능에서 “Docker MCP Toolkit” 활성화 확인
- Docker MCP 카탈로그 탐색하여 사용 가능한 MCP 서버 확인
핵심 개념
- MCP (Model Context Protocol): AI 에이전트가 외부 도구와 상호작용하기 위한 프로토콜
- Dynamic Model: 필요한 도구만 동적으로 로드하는 방식
- Code Model: 에이전트가 JavaScript 기반 커스텀 도구를 생성하는 기능
- Sandbox Environment: Docker 컨테이너를 이용한 안전한 코드 실행 환경
- State Persistence: 볼륨을 통한 데이터 저장 및 관리