지금 가장 과소평가된 AI 개발 스택... MCP + ADK가 게임 체인저입니다 (전체 가이드)

채널 아이콘
AI Oriented Dev 구독자 2,140명

요약

이 영상에서는 Google의 Agent Development Kit(ADK)와 Model Context Protocol(MCP)을 결합해 Reddit 게시물을 검색, 요약, 음성 변환까지 자동으로 처리하는 멀티 에이전트 시스템을 단계별로 구현합니다. 각 서브에이전트가 독립적으로 MCP 서버에 접속해 도구를 호출하고, 최종적으로 조정 에이전트가 이들을 연결해 사용자 요청에 맞춰 작업을 순차적으로 수행합니다. 파이썬 가상환경 설정부터 비동기(async/await) MCP 도구 호출, LiteLLM을 활용한 모델 선택, ElevenLabs를 통한 TTS까지 실전 예시와 함께 설명합니다. 마지막으로 MidJourney와 KlingAI를 활용해 AI 아바타 비디오를 생성하는 보너스 팁도 제공합니다.

주요 키워드

MCP ADK 멀티 에이전트 비동기(async) LiteLLM ElevenLabs TTS 코디네이터 에이전트 PRAW

하이라이트

  • 🔑 MCP를 활용하면 API 세부 사항을 몰라도 도구를 텍스트 프롬프트로 바로 호출할 수 있습니다.
  • 🚀 ADK의 멀티 에이전트 패턴을 통해 Reddit 스카우트, 뉴스 요약, TTS까지 자동으로 연결할 수 있습니다.
  • ⚡️ 비동기(async/await)로 MCP 서버에서 도구를 가져오면 코드 보일러플레이트를 최소화할 수 있습니다.
  • 📌 LiteLLM을 통해 Gemini, OpenAI, Anthropic 모델 등 원하는 모델을 자유롭게 교체할 수 있습니다.
  • 🌟 ElevenLabs MCP 서버를 이용해 글을 음성으로 변환하는 TTS 에이전트를 손쉽게 구축합니다.
  • 🔄 코디네이터 에이전트를 추가해 각 서브에이전트를 한 곳에서 제어하고, 수동 전환 없이 일괄 처리할 수 있습니다.
  • 📂 파이썬 가상환경 설정과 종속성 설치부터 ADK 웹 인터페이스 사용법까지 초보자도 따라 할 수 있도록 안내합니다.
  • 🎬 MidJourney와 KlingAI를 활용해 생성한 뉴스 캐스터 아바타 비디오까지 완성하는 확장 팁을 제공합니다.

용어 설명

Agent Development Kit (ADK)

구글에서 제공하는 AI 에이전트 개발 도구로, 멀티 에이전트를 쉽게 구성하고 관리할 수 있습니다.

Model Context Protocol (MCP)

다양한 외부 도구(API)를 텍스트 기반 호출로 추상화해 에이전트가 손쉽게 사용할 수 있도록 도와주는 프로토콜입니다.

비동기(async/await)

코드 실행 중 외부 서버 응답을 기다리는 동안 다른 작업을 멈추지 않고 처리할 수 있는 파이썬 함수 선언 방식입니다.

LiteLLM

ADK 내에서 다양한 LLM(대형 언어 모델)을 자유롭게 선택하고 교체할 수 있게 해 주는 추상화 라이브러리입니다.

PRAW

Reddit API를 파이썬에서 쉽게 사용할 수 있는 라이브러리로, 예제에서 MCP 도구 호출 전 비교 대상으로 사용됩니다.

Text-to-Speech (TTS)

텍스트를 음성 파일로 변환해 주는 기술로, 여기서는 ElevenLabs MCP 서버를 활용해 구현합니다.

[00:00:00] 인트로: ADK와 MCP 결합 개요

ADK와 MCP를 활용해 멀티 에이전트 시스템을 만들고 Reddit 게시물 자동 처리 과정을 소개합니다.

에이전트 개발 키트(ADK)에 대한 소개와 MCP(Model Context Protocol) 통합의 중요성을 설명합니다. 멀티 에이전트 시스템을 구축하여 여러 MCP 서버들과 연동하는 방법을 보여줄 것임을 예고합니다.
[00:00:35] 데모: 서브에이전트 연동 흐름

Reddit 스카우트→뉴스 요약→TTS 변환 서브에이전트가 순차적으로 동작하는 과정을 시연합니다.

시스템 데모를 시작하며, Reddit Scout 에이전트가 레딧의 인기 게시물을 검색하고 분석하는 과정을 보여줍니다. ADK의 웹 인터페이스를 통해 각 단계별 진행 상황을 확인할 수 있습니다.
뉴스캐스터 스타일의 요약 에이전트가 수집된 정보를 정리하고, ElevenLabs MCP를 활용하여 텍스트를 자연스러운 음성으로 변환하는 과정을 시연합니다.
실제 변환된 음성을 통해 cursor와 windsurf 서브레딧의 주요 소식을 전달하며, 시스템의 효과적인 정보 전달 능력을 입증합니다.
AI 시스템의 기능을 시연한 후, MCP 통합 멀티 에이전트 AI 시스템을 구축하는 방법을 단계별로 설명할 것임을 소개합니다.
[00:03:07] 첫 환경 설정 및 종속성 설치

가상환경 생성, 활성화, requirements.txt 설치로 ADK 개발에 필요한 기본 환경을 준비합니다.

개발 환경 설정을 시작하며, 가독성을 위해 폰트 크기를 조정하고 저장소에서 lesson one을 체크아웃하는 방법을 설명합니다.
가상 환경 설정과 의존성 패키지 설치 등 기본적인 프로젝트 설정 과정을 설명합니다.
이전에 만들었던 Reddit 뉴스 에이전트의 기능을 시연하고, API를 통해 최신 뉴스를 가져오는 방법을 보여줍니다.
[00:04:40] 기존 API 코드 대신 MCP 사용하기

PRAW 기반 코드를 MCP 서버 호출로 대체해 API 상세 문서 없이 도구를 활용하는 방법을 설명합니다.

MCP의 장점을 설명하며, 기존 API 통합 방식 대신 MCP 서버를 사용하는 것의 이점을 강조합니다.
[00:05:06] Async Reddit Scout 에이전트 작성

비동기 방식으로 MCP 서버에서 Reddit 도구를 가져와 핫 게시물 검색 기능 에이전트를 만듭니다.

async_reddit_scout라는 새로운 비동기 에이전트를 만들기 시작하며, MCP 서버와의 비동기 통신 방식을 설명합니다.
에이전트 생성을 위한 기본 파일 구조를 설정하고, async create_agent() 함수를 정의하여 MCP 서버에서 도구를 가져오는 기능을 구현합니다.
Async Reddit Scout Agent를 설정하고 Gemini 1.5 Flash를 사용하여 서브레딧의 인기 게시물을 검색하는 기능을 구현합니다.
ADK 컨벤션에 따라 root_agent를 설정하고, get_tools_async() 함수를 위한 보일러플레이트 코드를 구현합니다.
웹 인터페이스에서 Async Reddit Scout를 테스트하여 Cursor와 Windsurf 서브레딧의 인기 게시물을 검색합니다.
MCP 서버의 장점을 설명: API 세부사항이나 도구 사용법을 몰라도 되며, 서버가 자동으로 필요한 도구들을 노출시켜 줍니다.
MCP 서버의 장점은 텍스트 프롬프트만으로 도구를 사용할 수 있다는 것입니다. 서버가 사용 가능한 도구들을 알고 있어 적절한 도구를 자동으로 선택하며, 복잡한 코드 대신 간단한 보일러플레이트로 대체할 수 있습니다.
[00:08:41] TTS 스피커 에이전트 구현

ElevenLabs MCP 서버를 호출해 텍스트를 음성으로 변환하는 TTS 에이전트를 구축합니다.

ElevenLabs 텍스트 음성 변환 기능 구현을 위해 새로운 speaker 폴더를 생성하고 필요한 파일들을 설정합니다. 이는 Reddit MCP 서버 에이전트와 유사한 구조를 가집니다.
MCP의 핵심 장점은 템플릿만 있으면 외부 API나 문서를 찾아볼 필요 없이 동일한 방식으로 모든 기능을 구현할 수 있다는 것입니다.
async create_agent 함수를 생성하여 UVX를 통해 ElevenLabs MCP 서버에 연결하고, 디버깅을 위한 로그를 추가합니다.
MCP 도구 세트를 인라인으로 가져오고, GitHub 저장소 없이도 ElevenLabs MCP를 사용할 수 있습니다. API 키만 필요하며, 무료 크레딧으로 충분히 테스트할 수 있습니다.
ADK의 강력한 특징은 LiteLLM을 통해 Gemini뿐만 아니라 OpenAI, Anthropic Claude 등 다양한 모델을 선택적으로 사용할 수 있다는 점입니다.
ADK는 구글 제품이지만 오픈소스로, 다양한 AI 모델을 지원합니다. 현재는 Gemini 1.5를 사용하기로 선택했으며, 무료로 제공되는 구글 API 키가 필요합니다.
TTS Speaker라는 에이전트 인스턴스를 생성합니다. 이 에이전트는 ElevenLabs의 텍스트 음성 변환 MCP를 사용하여 텍스트를 음성으로 변환하는 기능을 합니다.
MCP 도구 세트의 간단한 패턴만으로도 MCP 서버와의 통합이 가능함을 설명합니다. GitHub 저장소나 공개 패키지를 통해 쉽게 통합할 수 있습니다.
LiteLLM 의존성을 추가하고 requirements.txt를 업데이트하는 과정을 설명합니다. 이를 통해 다양한 모델 전환 기능을 사용할 수 있게 됩니다.
ADK 웹 UI에서 텍스트 음성 변환 기능을 실제로 테스트합니다. 에이전트의 기능을 확인하고 샘플 텍스트를 음성으로 변환하는 과정을 보여줍니다.
앞서 만든 음성 변환 결과를 확인하고, 유튜브 채널 구독과 알림 설정을 요청합니다.
MCP 서버에 연결된 에이전트를 통해 다양한 기능들(음성 복제, 오디오 분리, 지식 베이스 추가 등)을 복잡한 API 호출 없이 쉽게 사용할 수 있음을 설명합니다.
[00:14:29] 요약 및 코디네이터 에이전트 추가

뉴스 앵커 스타일 요약 에이전트와 전체 워크플로우를 관리하는 코디네이터 에이전트를 작성합니다.

새로운 두 에이전트(요약 에이전트와 코디네이터 에이전트) 개발 계획을 소개하고, 요약 에이전트는 뉴스 앵커 스타일로 레딧 헤드라인을 요약하는 역할을 담당합니다.
마지막으로 코디네이터 에이전트 개발을 시작하며, 이는 Reddit scout, summarizer, speaker 에이전트들을 통합하고 조율하는 역할을 수행합니다.
코디네이터 에이전트의 역할과 구성 방법에 대해 설명합니다. Reddit 게시물 찾기, 제목 요약, 텍스트 음성 변환 기능을 통합 조정하는 방법을 소개합니다.
ADK web을 실행하고 코디네이터 에이전트를 테스트합니다. Reddit 게시물을 가져와서 뉴스캐스터 스타일로 요약하고 음성으로 변환하는 과정을 시연합니다.
[00:17:02] 최종 테스트: 멀티 에이전트 실행

ADK 웹 UI에서 코디네이터 에이전트를 실행해 한 번에 모든 서브에이전트를 순차 호출해 봅니다.

보너스 섹션으로 Midjourney와 KlingAI를 활용한 뉴스캐스터 아바타 생성과 립싱크 영상 제작 과정을 소개합니다.
[00:19:15] 보너스: AI 아바타 비디오 생성

MidJourney로 아바타 생성, KlingAI로 음성 영상 합성해 뉴스 캐스터 비디오를 만드는 팁을 공유합니다.

타임라인 정보가 없습니다.

여러분, 에이전트 개발 키트에 대한 또 다른 영상에 오신 것을 환영합니다.
지난 영상에서 보셨듯이, 에이전트 개발 키트를 사용하면 에이전트를 매우 쉽게 만들 수 있습니다.
이번 영상에서는 MCP(Model Context Protocol)와
통합하여 에이전트 개발을 한층 더 강화하는 방법을 보여드리겠습니다.
MCP라고도 알려진 이 프로토콜을 통해서 말이죠.
많은 분들의 요청에 따라, 멀티 에이전트 시스템을 만드는 방법을 보여드리겠습니다.
서로 다른 에이전트들이 각각의 MCP 서버에 연결되어
다양한 기능을 수행하고, 하나의 조정 에이전트가
이러한 모든 서브 에이전트들에 접근할 수 있어서
각각을 수동으로 전환할 필요가 없습니다.
말은 이정도로 하고,
오늘 무엇을 만들지 보여드리겠습니다.
안녕하세요?
어떤 작업을 수행할 수 있나요?
보시다시피 인기 있는 레딧 게시물을 검색하고, 요약한 뒤
음성으로 변환할 수 있다고 합니다.
/r/cursor와 windsurf에서 인기 게시물을 찾아보세요.
ADK의 웹 인터페이스가 정말 마음에 드는 이유는, 이 명령어를
에이전트에 전달한 후, 내부에서 정확히 어떤 일이
일어나는지 단계별로 볼 수 있기 때문입니다.
이 명령어를 받아서 Reddit Scout라는 두 번째 서브 에이전트에
전달하고 있습니다.
이것은 레딧 MCP 서버를 사용하여 서브레딧을 스캔하고
인기 주제들을 식별합니다.
cursor와 windsurf에 대해 이 작업을 수행하고, 그 다음
MCP 서버가 서브 에이전트에 반환한 인기 게시물들을
우리의 AI 시스템으로 다시 전달합니다.
꽤 많은 일을 하고 있죠.
이것이 우리의 두 번째 서브 에이전트가 할 수 있는 일입니다.
자, 시작해볼까요.
위의 내용을 요약해보겠습니다. 이제 두 번째 에이전트 전환은
뉴스캐스터 요약 에이전트에 전달되어 위의 모든
정보를 요약합니다. 마치 뉴스캐스터처럼 시작하죠.
오늘의 cursor와 windsurf 서브레딧의 주요 소식입니다.
이제 실제로 요약된 것을 볼 수 있습니다.
위에서 확인된 모든 주제들이
제가 이것을 직접 읽지 않을 것입니다. 대신
이것을 음성으로 변환할 수 있는 또 다른 에이전트에 전달할 것입니다. 이 에이전트는
ElevenLabs MCP를 사용하여 이 작업을 수행합니다.
어떻게 하는지 보여드리죠.
위의 내용을 음성으로 변환합니다.
보시다시피 TTS(Text to Speech)로 전달되고 있습니다.
그리고 텍스트 음성 변환 MCP 서버로부터
응답을 받을 것입니다. 파일 위치를 보여주면 내 데스크톱에 저장되어 있습니다.
오늘의 cursor와 windsurf 서브레딧의 주요 소식입니다.
cursor 사용자들은 무제한 할당량 그룹에
새로운 모델이 필요하다고 논의하며, 현재 옵션에 대한 불만을 표출하고 있습니다.
인기 게시물에서는 cursor를 주니어 개발자처럼 대하라고 조언하며,
최적의 성능을 위한 단계별 가이드를 제공합니다.
무료 티어 이용 가능성도 주요 화제이며, 일부 사용자들은
접근에 어려움을 겪고 있다고 보고합니다.
AI가 텍스트를 음성으로 변환해주기 때문에
직접 읽을 필요가 없습니다.
실제로 각각의 서브레딧을 방문해보시면
주제들이 매우 잘 요약되어 있음을 알 수 있습니다.
지금까지 이 AI 시스템이 무엇을 할 수 있는지 보여드렸습니다.
이제 이와 같은 MCP 통합 멀티 에이전트 AI 시스템을 단계별로 구축하는 방법을 알려드리겠습니다.
이런 시스템을 직접 만드는 방법을 배우게 될 것입니다.
시스템 구축의 개념을 이해하고, 원하는 MCP 서버와 통합하여
Reddit 게시물 요약 외에도 다양한 작업이 가능한
멀티 에이전트 시스템을 만들 수 있게 됩니다.
시작할 준비가 되셨나요?
시작해보겠습니다.
먼저 가독성을 위해 폰트 크기를 키우도록 하겠습니다.
보다 명확하게 보이도록 하기 위해서입니다.
저장소를 복제했다면, lesson one을 체크아웃하시면 됩니다.
향후 이 저장소가 업데이트되더라도
지난주 lesson one의 끝 부분으로 언제든 돌아갈 수 있습니다.
이전 튜토리얼을 보지 않으셨다면, 처음에 제가 했던 것을 살펴보시면 좋을 것 같습니다.
가상 환경 설정과 의존성 패키지 설치로
에이전트 구축에 필요한 모든 것을 준비했었죠.
지금 빠르게 진행해보겠습니다.
첫 번째로 가상 환경을 만들어야 합니다.
그 다음 'source bin activate'를 실행하고
which python으로 실행 중인 파이썬을 확인한 후, pip install -r
requirements.txt를 실행하여 필요한 모든 의존성 패키지를 설치합니다.
이것으로 오늘 에이전트 구축에 필요한 모든 것이 준비됩니다.
지난주에 어디까지 했는지 기억하시나요? 우리는
Reddit에서 최신 뉴스를 가져올 수 있는 간단한 에이전트를 만들었습니다.
지금 바로 시연해보도록 하겠습니다.
adk run agents/reddit_scout를 실행하고 작동하는 것을 확인해보겠습니다.
hello라고 입력해보겠습니다.
작동하는지 확인하기 위해서입니다.
에이전트가 '오늘 어떻게 도와드릴까요?'라고 응답합니다.
'게임 개발 관련 오늘의 인기 게시물을 보여줘'라고 요청하면
Reddit API를 통해 가져와서 오늘의 뉴스를 보여줄 것입니다. 이는 PRAW라는 파이썬 라이브러리를 사용합니다.
그리고 이 코드는 여러 서브레딧에서 뉴스를 가져옵니다.
이 전체 코드를 MCP 서버로 대체할 수 있습니다.
그냥 'Reddit MCP, 오늘의 인기 뉴스를 보여줘'라고 하면 됩니다.
'Reddit MCP, 오늘의 인기 뉴스 좀 보여줄래?'
API와 통합하기 위해 이 모든 코드를
작성할 필요가 없어지는 것이죠.
이것이 바로 MCP의 힘입니다.
사람들은 'MCP가 왜 필요한지 모르겠다'고 합니다.
'그냥 API를 사용하면 되지 않나?'라고요.
네, 가능하지만 그러려면 API 사용법을 이해해야 합니다.
AI를 사용하더라도 API의 컨텍스트를 제공해야 하고
이 모든 코드를 생성해야 합니다.
그래서 우리는 이것을 교체할 것입니다.
API 기반 Reddit 스카우트를 MCP를 사용하는 새로운 Reddit 스카우트로 교체하겠습니다.
어떻게 할까요?
자, 어떻게 하는지 보여드리겠습니다.
여기서 나가도록 하겠습니다.
새로운 에이전트를 만들어보겠습니다. async_reddit_scout라고 부르겠습니다.
MCP 서버와 작업할 때는 대부분
비동기 호출을 사용합니다.
외부 MCP 서버를 사용하여 명령을 보내고
응답이 돌아올 때까지 기다리기 때문입니다.
다음으로 넘어가기 전에요.
__init__.py와 agent.py를 생성하겠습니다. 자, 이제 오늘의 에이전트를 작성할 준비가 되었네요.
이제 에이전트를 작성해 보겠습니다.
def create_agent() 앞에 async 키워드를 추가할 겁니다.
async를 앞에 붙여주세요.
여기에 주석을 추가하겠습니다. MCP 서버에서
도구들을 가져온 후 에이전트 인스턴스를 생성한다는 내용입니다.
await get_tools_async()를 실행합니다.
사용 가능한 도구들을 찾기 위해서죠.
도구를 가져오지 못할 경우를 대비해
기본 도구를 사용하도록 안전장치를 넣고, 여기서
agent 인스턴스를 생성합니다.
제공해야 할 것들이 여기 있습니다.
Async Reddit Scout Agent라고 이름 붙이겠습니다.
외부 MCP Reddit 도구를 사용해 특정 서브레딧의 인기 게시물을 검색합니다.
Gemini 1.5 Flash를 사용할 건데, 이것으로 충분하고 수행할 작업에 대한 지시사항을 제공할 겁니다.
해야 할 일에 대한 지시사항을 제공합니다.
이건 지난주에 했던 것과 매우 비슷합니다.
마지막으로 할 일은 위에서 가져온 도구들을
실제로 전달하는 것입니다.
에이전트 인스턴스와 exit stack을 반환합니다.
이것으로 create_agent() 함수는 거의 완성되었고
ADK에서 사용되는 관례에 따라 root_agent를 create_agent로 설정합니다.
그리고 ADK가 이것을 인식할 수 있도록 'from agent import root_agent'를 추가해야 합니다.
ADK가 이를 인식할 수 있도록 말이죠.
아직 get_tools_async()를 정의하지 않았네요.
코드를 제공해드리겠습니다.
이 코드는 거의 보일러플레이트입니다.
여기서 mcp-reddit 서버를 사용하는 것을 볼 수 있는데,
이 보일러플레이트는 실제로 다른 어떤 MCP 서버에도 사용할 수 있습니다.
여기 이 부분만 교체하면 되고, 이 보일러플레이트는 자동으로
해당 MCP 서버에서 도구들을 가져올 것입니다. 나중에 ElevenLabs MCP 서버를 사용할 때
제가 정확히 이렇게 하는 것을 보게 될 겁니다.
자, 이제 마지막으로 해야 할 일은 모든 환경 변수를
가져올 수 있도록 모든 임포트를 추가하는 것입니다.
이제 MCP 서버를 사용하는 것이 API를 사용하는 것보다
훨씬 더 강력한 이유를 보여드리겠습니다.
agents로 가서 ADK web을 실행합니다.
웹 뷰에서 Async Reddit Scout를 선택하고
테스트해보겠습니다.
'hello'라고 입력하면 'Reddit 뉴스를 가져올 준비가 되었습니다.'라고 응답합니다.
어떤 서브레딧에 관심이 있으신가요?
Cursor와 Windsurf의 인기 토픽을 가져와달라고 해보겠습니다.
보시다시피 'Fetch Reddit Hot Threats'라는 MCP 도구를 사용해
정보를 가져오고 있습니다.
지금은 Cursor에서 정보를 가져오는 중이네요.
이제 windsurf 차례입니다.
MCP 서버에서 비슷한 도구 호출을 수행하는 것을 볼 수 있습니다.
이번에는 Windsurf에서 정보를 가져올 거예요.
앞서 MCP 사용이 더 강력하다고 말씀드렸죠.
왜일까요?
실제로 알 필요가 없었기 때문입니다.
API의 세부사항이나 도구들의 세부사항을 알 필요가 없었습니다.
이 모든 도구들은 MCP 서버가 에이전트에 노출시켜 준 것이기 때문입니다.
API 문서를 찾아보고 사용법을 파악한 다음
파라미터를 올바른 형식으로 전달하는지 확인할 필요가 없었습니다.
MCP 서버를 사용하면 텍스트 프롬프트만 사용하면 됩니다.
서버가 이미 사용 가능한 도구들을 알고 있기 때문이죠.
작업에 가장 적합하다고 판단되는 도구를 선택할 수 있으며
전체 코드 덩어리를 제거하고
모든 MCP 에이전트에 사용할 수 있는 간단한 보일러플레이트로 대체할 수 있습니다.
ElevenLabs의 텍스트 음성 변환으로 이것이 어떻게 작동하는지 보여드리겠습니다.
MCP 서버로요.
좋습니다, IDE로 돌아왔네요.
speaker라는 새 폴더를 만들어보겠습니다. 이전과 동일하게
__init__.py 파일과 agent.py 파일을 생성합니다.
Reddit MCP 서버 에이전트와 거의 동일한 것을 보실 수 있을 겁니다.
이것이 제가 앞서 강조했던 점인데,
MCP 서버 작업을 위한 템플릿이 있으면 외부 서드파티 API를
사용할 필요가 없습니다.
문서를 찾아볼 필요도 없죠. 왜냐하면
모두 같은 방식으로 작동하기 때문입니다.
이것이 바로 MCP의 힘입니다.
자,
에이전트를 만들어보겠습니다.
async definition create_agent, 이것은 텍스트 음성 변환
스피커 에이전트를 UVX를 통해 ElevenLabs MCP 서버에 연결하여 생성합니다.
디버깅을 위해 프린트 로그를 추가하고 있습니다만
원하지 않으시면 생략하셔도 됩니다.
이전과 동일하게 tools exit stack을 사용할 겁니다.
그리고 사실 제가 가장 먼저 할 일은
파일 상단에 모든 임포트를 추가하는 것입니다.
자동 완성이 작동하도록 말이죠.
서버에서 MCP 도구 세트를 인라인으로 가져올 건데,
Reddit에서처럼 별도의 get_tools를 만들지 않고,
Reddit 에이전트에서도 동일한 방식을 사용한 것을 보실 수 있습니다.
MCP_toolset_from_server를 await하고 UVX from 명령을 전달합니다.
하지만 이 경우에는 ElevenLabs MCP 서버가 이미
UVX에 게시되어 있기 때문에 GitHub 저장소를 제공할 필요가 없습니다.
ElevenLabs MCP만 전달하면 어디서 가져올지 알 수 있습니다.
이제 필요한 것은 ElevenLabs API 키뿐입니다.
이것은 ElevenLabs 웹사이트에 가서
계정을 만들어 얻을 수 있습니다.
그들은 무료 크레딧을 꽤 넉넉하게 제공합니다.
이 튜토리얼을 위해서는 충분할 것입니다.
로그인하고 API 키를 받으신 다음에는
ENV 파일로 가셔서
지금은 예제 파일을 열어두었습니다.
새로운 ElevenLabs API 키를 추가합니다.
실제 ENV 파일에 실제 ElevenLabs
API 키를 넣으시면 됩니다.
여기서는 ElevenLabs MCP 서버에 연결되었다고 표시하겠습니다.
그리고 디버깅을 위해 사용 가능한 모든 도구를 나열하겠습니다.
여기서는 Reddit MCP와는 조금 다르게 할 건데
Reddit에서는 단순히 모델을 Gemini 1.5 flash latest로
지정했다는 것을 보실 수 있죠.
하지만 ADK의 좋은 점은
원하는 모델을 사용할 수 있다는 것입니다.
LiteLLM 덕분에 OpenAI 모델이나 Anthropic의
Claude같은 모델을 사용할 수 있어요. Gemini 모델에만 국한되지 않죠.
ADK가 구글 제품이지만, 오픈소스이고 개방형 표준을 지원하기 때문에
작업에 활용할 수 있는 다양한 지원 모델 목록을
실제로 확인할 수 있습니다.
하지만 이번에는 제가 잘 사용하고 있는 Gemini 1.5 flash latest를
사용하도록 하겠습니다.
이전 튜토리얼에서 다뤘듯이 무료로 받을 수 있는
구글 API 키가 필요하고, 여기서
OpenAI의 GPT-4나 다른 모델들을 지정할 수 있습니다.
Claude 3.5를 사용하거나 다른 모델로 교체할 수 있지만
지금은 Gemini를 계속 사용하겠습니다.
마지막으로 해야 할 일은 다시 한 번 에이전트 인스턴스를 생성하는 것입니다.
이번에는 전체를 복사해서 붙여넣기만 하면 됩니다.
에이전트 인스턴스의 이름은 TTS Speaker입니다.
에이전트는 ElevenLabs의 텍스트 음성 변환 MCP를 사용하여 제공된 텍스트를 음성으로 변환합니다.
사용자가 제공한 텍스트를 받아서
오디오로 변환하고, 사용하고 싶은 음성 이름과 같은
다른 매개변수를 설정하고 결과를 반환하는 방식을 지정할 수 있습니다.
마지막에 Agent instance와 exit stack을 반환하는 것을 잊지 마세요.
Reddit MCP와 매우 비슷하지만
실제로는 더 짧습니다.
마지막에 root_agent = create_agent()를 해야 한다는 것을 잊지 마세요.
__init__.py에서 'from agent import root_agent'를 해주세요.
이제 테스트해 보겠습니다.
여기서 핵심은 MCP 도구 세트를 서버에서 사용하는 이 패턴이
MCP 서버와 통합하는 데 필요한 전부라는 것을 보여주는 것입니다.
공개된 패키지라면 여기에 바로 지정할 수 있고
GitHub 저장소에서 가져오고 싶다면
from을 사용하고 여기에 GitHub 저장소를 입력하면 됩니다.
잊기 전에 requirements.txt에
LiteLLM 의존성을 추가해야 합니다.
이를 통해 모델을 전환할 수 있는 기능이 확보되고
그 다음에는 항상 pip install -r requirements.txt를 실행해야 합니다
보시다시피 대부분의 요구사항이 이미
충족되었고 새로 추가된 것은 LiteLLM뿐입니다.
이제 agents 폴더로 돌아가서 ADK web을 입력하면
좋습니다.
이제 브라우저 뷰로 전환할 수 있습니다.
ADK 웹 UI로 돌아오면 이제
스피커를 선택하고 테스트해 볼 수 있습니다.
안녕하세요?
무엇을 할 수 있나요?
작업을 시작하기 전에 어떤 기능이 있는지
항상 확인하는 것이 유용합니다.
텍스트 음성 변환 에이전트라고 합니다.
ElevenLabs 텍스트 음성 변환 MCP를 사용해서 텍스트를 음성으로 변환할 수 있습니다.
우리가 지정한 대로 'will' 음성을 사용할 거라고 하네요.
자, 이제 해보겠습니다.
다음 텍스트를 음성으로 변환해주세요: '이 튜토리얼 영상이 마음에 드신다면'
제 채널 구독과 좋아요 부탁드립니다.
AI oriented 채널이고, 알림 설정도 켜주세요.
이제 실행해 보겠습니다.
MCP 서버의 텍스트 음성 변환 도구를 사용할 거예요.
변환이 완료되었고 오디오가 저장되었다고 하네요.
보통 여기서 '파일 경로를 보여주세요'라고 요청할 수 있습니다.
기본적으로 데스크톱에 저장되는 것 같네요.
네, 그렇네요. 지금 바로 들려드리겠습니다.
이 튜토리얼 영상이 도움이 되셨다면, AI Oriented 유튜브 채널의
좋아요와 구독 버튼 눌러주시는 것 잊지 마세요.
알림 설정도 꼭 해주시구요.
좋습니다.
이제 MCP 서버에 연결하여 텍스트를 음성으로
변환할 수 있는 에이전트가 생겼습니다.
여기 다른 도구들도 보이시죠?
목소리 복제, 오디오 분리,
에이전트에 지식 베이스 추가도 가능하고,
미리보기로 음성 생성도 할 수 있습니다.
정말 많은 기능들이 있는데, 가장 좋은 점은 각 도구에
전달해야 할 매개변수나 어떤 API를 호출해야 하는지 살펴볼 필요가 없다는 거죠.
이 모든 것이 MCP 덕분에 자동으로 제공됩니다.
이제 ADK의 에이전트들을 MCP와 결합하는 것의 힘을 보셨을 겁니다.
우리는 레딧에서 뉴스를 스캔할 수 있는 에이전트를 만들었고,
이제 텍스트를 음성으로 변환할 수 있는
또 다른 에이전트도 있습니다.
자, 오늘 우리는 MCP 서버에 연결되는 두 개의 새로운 에이전트를 만들었습니다.
이제 만들 마지막 두 에이전트는 매우 간단한데,
레딧 에이전트의 출력을 받아서 처리할 에이전트가 필요합니다.
레딧에서 많은 정보를 제공하기 때문에,
뉴스 앵커 스타일로 요약해주는 에이전트가 필요합니다.
그리고 마지막 에이전트는 이 모든 개별 에이전트들을
순차적으로 호출하는 코디네이터가 될 거예요.
자, 이제 빠르게 진행해보겠습니다.
패턴은 동일합니다.
폴더를 생성하고
summarizer라고 이름 붙이겠습니다.
다시 한 번 __init__.py와 agent.py를 만들어야 하는데, 이제 익숙하시죠.
ADK는 정말 단순하고 저는 이게 너무 마음에 듭니다.
요약 에이전트의 경우,
이번에는 복잡한 것을 할 필요가 없습니다.
Gemini를 다시 사용할 건데, LiteLLM을 활용하고,
레딧 헤드라인을 요약하는 뉴스 앵커 역할만 하면 됩니다.
게시물 제목 목록을 뉴스캐스터 스타일로 명확하고 흥미롭게 요약해줍니다.
주요 테마나 흥미로운 포인트를 강조하고, 앵커 인트로로 시작하게 됩니다.
이게 요약 에이전트입니다.
매우 단순한 에이전트라 테스트할 필요는 없지만,
agent에서 root agent를 임포트하는 것은 잊지 말아야 합니다.
좋습니다.
그리고 마지막으로 만들 것은 코디네이터 에이전트입니다.
__init__.py를 만들고,
Agent.py도 만듭니다.
코디네이터 에이전트도 비슷한 구조입니다.
여러 임포트문을 추가할 건데, 핵심은
Reddit scout 에이전트, summarizer 에이전트, speaker 에이전트를 임포트하는 겁니다.
async def create_coordinator_agent()를 만들고 exit stack을 생성합니다.
이건 표준적인 방식이라
너무 걱정하지 않으셔도 됩니다.
Reddit 에이전트, summarizer 에이전트, speaker 에이전트를 생성합니다.
summarizer 에이전트는 동기식이라 스택이 필요 없습니다.
LLM을 생성할 건데,
다시 Gemini를 사용하겠습니다.
말씀드렸듯이, LiteLLM을 사용하면
원하는 다른 모델로 교체할 수 있습니다.
그리고 여기에 코디네이터 에이전트를 만듭니다.
아주 간단하죠.
이것은 Reddit 게시물을 찾고 제목을 요약하며
텍스트를 음성으로 변환하는 것을 조정합니다.
그리고 에이전트가 사용할 수 있는 세 가지 다른 에이전트가
있다는 것을 알 수 있도록 지침에 명시합니다.
그리고 사용자의 프롬프트를 처리하는 방법에 대한 구체적인 지침도 있습니다.
하위 에이전트인 Reddit 에이전트를 넣는 것을 잊지 마세요.
요약 에이전트와 음성 에이전트를 추가하면
조정에 필요한 모든 것이 준비됩니다.
이제 개별 하위 에이전트에 접근할 필요가 없습니다.
하나의 AI 에이전트를 사용하여 세 개의 하위 에이전트에 모두 접근할 수 있습니다.
root_agent를 coordinator_agent로 생성하는 것을 잊지 마시고
여기서 'from agent import root_agent'를 해주세요.
이제 최종 테스트를 할 준비가 되었습니다.
콘솔을 정리하고 agents 폴더에 있는지 확인하세요.
ADK web을 실행하세요.
그리고 다시 한 번 브라우저를 실행하겠습니다.
이번에는 코디네이터를 선택하고 무엇인지 물어봅니다.
그러면 '나는 인기 있는 Reddit 게시물을 찾고, 제목을 요약하고 텍스트를 음성으로 변환하는 조정 에이전트입니다'라고 답합니다.
이번에는 하나의 서브레딧에만 집중하겠습니다.
'Cursor에서 인기 게시물을 가져와'라고 하면, 에이전트로 전달되고
Fetch Reddit Hot Threats 도구를 호출한 다음
여기 에이전트로 응답을 다시 보냅니다.
혹시 놓치셨다면, 이 화살표들은 데이터가
나가고 들어오는 것을 나타냅니다.
여기 보시면 그 안에 매우 긴 게시물들이 있는 것을 볼 수 있습니다.
이제 '뉴스캐스터처럼 요약해주세요'라고 말할 수 있습니다.
그러면 두 번째 에이전트인
여기 있는 뉴스캐스터 에이전트로 전달됩니다.
그러면 요약을 시작할 것입니다.
여기서 Cursor 서브레딧의 오늘의 주요 소식이라고 하면서
GPT 4.1과 O4 mini에 대해 이야기하고 있습니다.
그리고 마지막으로 할 에이전트는
텍스트를 음성으로 변환해달라고 할 것입니다.
이제 텍스트 음성 변환 에이전트로 가야 합니다.
전송하고 텍스트 음성 변환 도구를 호출하면
생성된 오디오 URL이 여기 있고, 한번 들어보겠습니다.
"Cursor 서브레딧의 오늘의 주요 뉴스입니다.
GPT-4.1과 O4-mini가 내일부터 프리미엄으로 전환됩니다.
사용자들 사이에서 비용 우려가 제기되고 있습니다.
한 사용자는 '무제한 티어에 새로운 모델을 추가할 때가 되지 않았나요?'라고 질문했습니다.
한편, 다른 레딧 사용자는 Cursor를 효과적으로 사용하는 방법에 대해 조언하며
주니어 개발자처럼 대하고 단계별로 안내하라고 제안했습니다.
또한 주간 프로젝트 쇼케이스 스레드가 인기를 끌고 있으며,
사용자들의 Cursor 작품을 공유하고 있습니다.
마지막으로, 일부 사용자들이 무료 버전 접속에 어려움을 겪고 있다고 보고했습니다."
자, 이렇게 됐습니다.
MCP가 통합된 멀티 에이전트 AI 시스템이 작동하고 있습니다.
대부분의 에이전트는 기본 코드였습니다.
사실, MCP 부분은 서로 다른 에이전트에서 거의 동일했죠.
이 튜토리얼이 ADK와 MCP의 강력함을
잘 보여줬기를 바랍니다.
자, 마지막 보너스로
제가 Midjourney에 가서 뉴스룸에서 뉴스를 전달하는
덕스러운 뉴스캐스터의 3D 아바타를 생성해달라고 요청했습니다.
KlingAI로 가서
이미지를 넣고 뉴스캐스터가 말하는 영상을 생성해달라고 요청했습니다.
여기서 립싱크를 할 수 있는데
방금 받은 파일을 업로드하고
이것을 사용해서 실제로 뉴스캐스터가 말하는 영상을 생성할 겁니다.
좋습니다.
트리밍을 확인하겠습니다.
이제 생성을 클릭하면 12분 정도 걸리는데,
완료되면 최종 결과를 볼 수 있습니다.
"Cursor 서브레딧의 오늘의 주요 뉴스입니다. GPT-4.1과
O4 mini가 내일부터 프리미엄으로 전환됩니다.
사용자들 사이에서 비용 우려가 제기되고 있습니다."
사실 이미지 생성을 하는 MCP 서버들이 있다는 것을 알고 있고,
아마도 비디오 생성을 하는 것도 있을 것입니다.
아직 살펴볼 시간이 없었는데, 만약 이미지 생성을 하는
MCP 서버를 찾으면, 새 에이전트를 만들어서 코디네이터에게
이미지 생성을 요청할 수 있습니다.
이미지를 비디오로 변환하는 다른 MCP 서버를 찾으면
그것을 전달하여 더빙까지 할 수 있습니다.
이것이 바로 ADK를 통해 에이전트와 MCP를 결합하는 것이
그토록 흥미진진한 이유입니다.
이 튜토리얼이 여러분께 도움이 되었기를 바랍니다.
모든 코드가 제공되어 있으며, 이 튜토리얼이 유용했다면
좋아요를 누르고 이런 콘텐츠를 더 보시려면
구독과 알림 설정을 해서 새로운 영상이
업로드될 때 가장 먼저 보실 수 있습니다.
다음에 또 만나요.
안녕히 계세요.