AI 에이전트 개발이 점점 더 대중화되고 있는 요즘, 특히 주목받고 있는 기술이 바로 **MCP(Model Context Protocol)**입니다. MCP는 AI 도구들을 표준화된 방식으로 쉽게 개발하고 공유할 수 있게 해주는 프로토콜인데요. 이번 포스팅에서는 파이썬과 MCP를 활용해 실용적인 AI 에이전트를 직접 구현해보는 방법을 단계별로 알아보겠습니다.
특히 유튜브 콘텐츠를 검색하고, 영상을 요약하고, 채널을 분석해주는 유용한 '유튜브 비서' 에이전트를 만들어보며 MCP의 핵심 개념과 활용법을 배워보겠습니다.
📚 MCP란 무엇인가?
**MCP(Model Context Protocol)**는 AI 도구와 애플리케이션 간의 상호작용을 표준화하는 프로토콜입니다. 기존에는 GPTs, LangChain, Claude 등 각 플랫폼마다 도구를 새로 개발해야 했지만, MCP를 사용하면 한 번 개발한 도구를 여러 플랫폼에서 재사용할 수 있습니다.
MCP의 핵심 구성 요소:
- MCP 서버: 특정 기능을 수행하는 도구 모음 (Tool Box)입니다. 이 도구들은 함수 형태로 정의됩니다.
- MCP 클라이언트: 이 도구들을 활용해 사용자와 상호작용하는 인터페이스입니다. OpenAI, Claude, Cursor 등이 MCP 클라이언트 역할을 할 수 있습니다.
MCP의 가장 큰 장점은 도구의 재사용성입니다. 예를 들어, 파일 시스템 접근, 웹 검색 등 자주 사용되는 도구들을 MCP 서버로 한 번 정의해두면 OpenAI, Claude, 사용자 정의 클라이언트 등 다양한 환경에서 동일하게 활용할 수 있습니다.
🛠️ 유튜브 AI 에이전트 구현 준비하기
우리가 만들 유튜브 AI 에이전트는 다음과 같은 기능을 수행합니다:
- 유튜브 영상 검색: 사용자 키워드에 맞는 유튜브 영상을 찾아줍니다.
- 영상 자막 추출 및 요약: 선택한 영상의 자막을 가져와 내용을 요약해줍니다.
- 채널 분석: 채널의 구독자 수, 영상 수, 최근 업로드 등 채널 정보를 분석해줍니다.
준비물:
- 파이썬 환경: 가상환경 설정 권장
- 필요한 API 키:
- OpenAI API 키
- YouTube Data API 키
- 필수 패키지:
- mcp: MCP 서버 및 클라이언트 구현을 위한 패키지
- openai: OpenAI API 연동
- youtube-transcript-api: 유튜브 자막 추출
- 기타 필요한 유틸리티 패키지
환경 설정:
# 가상환경 생성 및 활성화
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 필요 패키지 설치
pip install mcp openai youtube-transcript-api
📋 MCP 서버 구현하기: 유튜브 기능 도구 만들기
MCP 서버 구현의 핵심은 기능별 도구(함수)를 명확하게 정의하는 것입니다. 우리의 유튜브 에이전트를 위해 세 가지 주요 함수를 개발해보겠습니다.
1. 유튜브 자막 추출 함수
from youtube_transcript_api import YouTubeTranscriptApi
from mcp import MCPTool
@MCPTool
def get_youtube_transcript(url: str) -> str:
"""유튜브 영상에 대한 자막을 가져와 줍니다."""
video_id = url.split("v=")[1].split("&")[0]
transcript = YouTubeTranscriptApi.get_transcript(video_id)
result = ""
for line in transcript:
result += line["text"] + " "
return result
2. 유튜브 영상 검색 함수
import googleapiclient.discovery
import os
@MCPTool
def search_youtube_videos(query: str) -> list:
"""유튜브에서 영상을 검색해 줍니다."""
api_key = os.getenv("YOUTUBE_API_KEY")
youtube = googleapiclient.discovery.build("youtube", "v3", developerKey=api_key)
request = youtube.search().list(
part="snippet",
q=query,
type="video",
maxResults=20
)
response = request.execute()
videos = []
for item in response["items"]:
video = {
"title": item["snippet"]["title"],
"url": f"https://www.youtube.com/watch?v={item['id']['videoId']}",
"channel": item["snippet"]["channelTitle"],
"thumbnail": item["snippet"]["thumbnails"]["high"]["url"],
"published_at": item["snippet"]["publishedAt"]
}
videos.append(video)
return videos
3. 채널 정보 분석 함수
@MCPTool
def get_channel_info(url: str) -> dict:
"""유튜브 영상이 포함된 채널에 대한 정보를 가져옵니다."""
video_id = url.split("v=")[1].split("&")[0]
api_key = os.getenv("YOUTUBE_API_KEY")
youtube = googleapiclient.discovery.build("youtube", "v3", developerKey=api_key)
# 영상의 채널 ID 가져오기
video_request = youtube.videos().list(
part="snippet",
id=video_id
)
video_response = video_request.execute()
channel_id = video_response["items"][0]["snippet"]["channelId"]
# 채널 정보 가져오기
channel_request = youtube.channels().list(
part="snippet,statistics,contentDetails",
id=channel_id
)
channel_response = channel_request.execute()
# 최근 영상 5개 가져오기
videos_request = youtube.search().list(
part="snippet",
channelId=channel_id,
order="date",
type="video",
maxResults=5
)
videos_response = videos_request.execute()
recent_videos = []
for item in videos_response["items"]:
video = {
"title": item["snippet"]["title"],
"url": f"https://www.youtube.com/watch?v={item['id']['videoId']}",
"published_at": item["snippet"]["publishedAt"]
}
recent_videos.append(video)
channel_info = {
"title": channel_response["items"][0]["snippet"]["title"],
"description": channel_response["items"][0]["snippet"]["description"],
"subscriber_count": channel_response["items"][0]["statistics"]["subscriberCount"],
"video_count": channel_response["items"][0]["statistics"]["videoCount"],
"view_count": channel_response["items"][0]["statistics"]["viewCount"],
"recent_videos": recent_videos
}
return channel_info
MCP 서버 실행하기
이제 위에서 정의한 세 가지 함수를 포함하는 MCP 서버를 실행해보겠습니다:
from mcp import MCPServer, MCPRun
# MCP 서버 생성
server = MCPServer()
# 위에서 정의한 함수들 사용
# @MCPTool 데코레이터를 통해 이미 MCP 도구로 등록됨
# 서버 실행
if __name__ == "__main__":
MCPRun()
이렇게 하면 MCP 서버가 실행되고, 세 가지 기능(영상 검색, 자막 추출, 채널 분석)을 제공하는 도구 상자가 생성됩니다.
🖥️ MCP 클라이언트 구현하기: OpenAI Agents SDK 활용
이제 우리가 만든 MCP 서버를 활용하는 클라이언트를 구현해보겠습니다. OpenAI에서 제공하는 Agents SDK를 활용하면 쉽게 구현할 수 있습니다.
OpenAI Agents SDK 설치
pip install openai-agents
MCP 클라이언트 코드 구현
import asyncio
import os
from openai import OpenAI
from openai.types.beta.threads import Run
from openai_agents import Agent, ChatCompletionCreateParams
import json
# MCP 서버 설정 정보 로드
with open("mcp.json", "r") as f:
mcp_config = json.load(f)
# OpenAI API 키 설정
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# 에이전트 명령어 설정
INSTRUCTIONS = """
당신은 유튜브 콘텐츠 분석 전문가입니다. 사용자가 유튜브 영상을 검색하거나 특정 영상의 내용을 요약하거나
채널 정보를 분석하는 것을 도와줍니다.
다음 기능을 제공합니다:
1. 유튜브 영상 검색: 키워드를 통해 영상을 검색해줍니다.
2. 영상 요약: 특정 영상의 자막을 추출하여 주요 내용을 요약해줍니다.
3. 채널 분석: 특정 채널의 구독자, 영상 수, 최근 업로드 등 정보를 분석해줍니다.
항상 친절하고 전문적인 말투로 대화하며, 유튜브 콘텐츠에 관한 질문에 최대한 유용한 정보를 제공합니다.
"""
# 에이전트 생성
async def setup_agent():
agent = Agent(
client=client,
model="gpt-4-turbo",
instructions=INSTRUCTIONS,
mcp_servers=[mcp_config],
completion_params=ChatCompletionCreateParams(
temperature=0.7,
stream=True
)
)
return agent
# 메시지 처리 및 응답 생성 함수
async def process_user_message(agent, chat_history, user_message):
chat_history.append({"role": "user", "content": user_message})
# 스트리밍 응답 생성
run = await agent.create_run(messages=chat_history)
response = ""
# 실시간 응답 스트리밍
async for chunk in agent.stream_run(run):
if chunk.choices and chunk.choices[0].delta.content:
content = chunk.choices[0].delta.content
response += content
print(content, end="", flush=True)
print() # 줄바꿈
# 채팅 기록에 응답 추가
chat_history.append({"role": "assistant", "content": response})
return response
# 메인 함수
async def main():
agent = await setup_agent()
chat_history = []
print("🤖 유튜브 AI 비서입니다. 무엇을 도와드릴까요? (종료하려면 'exit' 입력)")
while True:
user_input = input("\n💬 사용자: ")
if user_input.lower() == "exit":
break
await process_user_message(agent, chat_history, user_input)
# 실행
if __name__ == "__main__":
asyncio.run(main())
🚀 완성된 유튜브 AI 에이전트 활용 예시
이렇게 만든 유튜브 AI 에이전트는 다음과 같이 활용할 수 있습니다:
1. 영상 검색 요청
💬 사용자: AI 에이전트에 관한 유튜브 영상을 검색해줘
에이전트는 search_youtube_videos 도구를 호출하여 AI 에이전트 관련 영상 목록을 보여줍니다:
🤖 AI 에이전트: AI 에이전트에 관한 유튜브 영상을 검색했습니다. 다음은 검색 결과입니다:
1. "AI 에이전트란 무엇인가? | 초보자를 위한 완벽 가이드" - 테크인사이트
URL: https://www.youtube.com/watch?v=abc123
2. "파이썬으로 AI 에이전트 만들기 실전 튜토리얼" - 코딩마스터
URL: https://www.youtube.com/watch?v=def456
3. "GPT-4 기반 AI 에이전트 개발하기" - OpenAI 한국
URL: https://www.youtube.com/watch?v=ghi789
[...]
어떤 영상에 관심이 있으신가요? 특정 영상을 요약해 드릴까요?
2. 영상 요약 요청
💬 사용자: 두 번째 영상을 요약해줘
에이전트는 get_youtube_transcript 도구를 호출하여 자막을 추출하고 내용을 요약합니다:
🤖 AI 에이전트: "파이썬으로 AI 에이전트 만들기 실전 튜토리얼" 영상의 내용을 요약해드리겠습니다.
📌 영상 주요 내용:
- 이 튜토리얼에서는 파이썬과 MCP(Model Context Protocol)를 활용해 AI 에이전트를 개발하는 방법을 단계별로 설명합니다.
- MCP는 AI 도구들을 표준화된 방식으로 개발하고 공유할 수 있게 해주는 프로토콜입니다.
- 주요 개발 단계:
1. MCP 서버 구축: 기능별 도구(함수) 정의
2. 도구에 @MCPTool 데코레이터 적용
3. OpenAI Agents SDK를 활용한 클라이언트 구현
- 튜토리얼에서는 유튜브 영상 검색, 자막 추출, 채널 분석 기능을 갖춘 에이전트를 구현합니다.
- 한 번 개발한 MCP 도구는 OpenAI, Claude, Cursor 등 다양한 클라이언트에서 재사용 가능합니다.
이 영상은 초보자도 따라할 수 있는 실용적인 예제를 통해 AI 에이전트 개발 방법을 설명하고 있습니다.
채널 정보도 분석해드릴까요?
3. 채널 분석 요청
💬 사용자: 이 채널에 대해 분석해줘
에이전트는 get_channel_info 도구를 호출하여 채널 정보를 분석합니다:
🤖 AI 에이전트: "코딩마스터" 채널에 대한 분석 결과입니다:
📊 채널 기본 정보:
- 구독자 수: 245,000명
- 총 영상 수: 387개
- 총 조회수: 28,456,789회
- 채널 개설일: 2018년 5월 15일
📈 콘텐츠 방향:
이 채널은 주로 파이썬 프로그래밍, AI 개발, 머신러닝 튜토리얼에 초점을 맞추고 있습니다. 실용적인 코딩 튜토리얼과 최신 AI 기술 트렌드를 쉽게 설명하는 콘텐츠가 많습니다.
🆕 최근 업로드된 영상:
1. "파이썬으로 AI 에이전트 만들기 실전 튜토리얼" (3일 전)
2. "LangChain vs MCP: 어떤 것을 선택해야 할까?" (1주일 전)
3. "OpenAI Agents SDK 완벽 가이드" (2주일 전)
4. "초보자를 위한 머신러닝 기초 10강" (3주일 전)
5. "파이썬 자동화 프로젝트: 실전 사례 5가지" (1개월 전)
💡 특징적인 점:
이 채널은 복잡한 기술 개념을 쉽게 설명하는 능력이 돋보이며, 코드 예제와 실습을 통한 학습을 강조합니다. 최신 AI 트렌드를 빠르게 반영하는 콘텐츠를 제공하고 있습니다.
더 필요한 정보가 있으신가요?
⚙️ MCP 서버를 다른 클라이언트와 연동하기
우리가 만든 MCP 서버는 자체 클라이언트뿐만 아니라 다른 MCP 클라이언트와도 쉽게 연동할 수 있습니다.
Cursor 코드 에디터와 연동
Cursor는 AI 기반 코드 에디터로, MCP 서버를 쉽게 연동할 수 있습니다:
- Cursor 설정 메뉴에서 MCP 섹션으로 이동
- "Add New Global MCP Server" 클릭
- 우리의 mcp.json 파일 내용을 붙여넣기
- 저장 후 Cursor 재시작
이제 Cursor에서 코딩 중에 "파이썬 타입 힌팅이 뭐야?"와 같은 질문을 하면, 우리의 MCP 서버가 유튜브에서 관련 영상을 검색하고 요약하여 답변을 제공합니다.
Claude, OpenAI Playground와 연동
Claude나 OpenAI Playground에서도 MCP 서버를 연동할 수 있습니다. 각 플랫폼의 MCP 설정 섹션에서 우리의 MCP 서버 구성을 추가하기만 하면 됩니다.
🔍 MCP 서버와 클라이언트 개발 시 주요 포인트
MCP 서버 개발 시 고려사항:
- 명확한 함수 설계: 각 도구 함수의 목적, 입력, 출력을 명확히 정의합니다.
- 자세한 문서화: @MCPTool 데코레이터 사용 시 함수에 대한 자세한 설명(docstring)을 제공합니다. 이는 AI가 도구를 이해하는 데 중요합니다.
- 타입 힌팅 활용: 파라미터와 반환값의 타입을 명확히 지정하여 AI가 도구를 올바르게 사용할 수 있게 합니다.
- 에러 처리: 도구 함수에 적절한 예외 처리를 추가하여 안정성을 높입니다.
MCP 클라이언트 개발 시 고려사항:
- 명확한 지시사항: 에이전트에 제공하는 지시사항(instructions)을 명확하게 작성합니다.
- 사용자 경험: 스트리밍 응답, 도구 사용 시 시각적 피드백 등 좋은 사용자 경험을 설계합니다.
- 대화 기록 관리: 효과적인 대화 기록 관리로 에이전트가 맥락을 유지할 수 있게 합니다.
📝 결론 및 확장 가능성
이 포스팅에서는 MCP를 활용하여 유튜브 콘텐츠를 분석하는 AI 에이전트를 만드는 방법을 살펴보았습니다. MCP의 가장 큰 장점은 도구의 재사용성과 표준화된 인터페이스입니다. 한 번 개발한 도구를 다양한 클라이언트에서 활용할 수 있다는 점은 개발 효율성을 크게 높여줍니다.
확장 가능성:
- 추가 기능 구현: 영상 코멘트 분석, 관련 영상 추천, 트렌드 분석 등 기능을 추가할 수 있습니다.
- 다른 도구와 통합: 웹 검색, 이미지 생성 등 다른 MCP 서버와 통합하여 더 강력한 에이전트를 만들 수 있습니다.
- 사용자 인터페이스 개선: 웹 인터페이스나 모바일 앱을 통해 더 직관적인 사용자 경험을 제공할 수 있습니다.
- 다국어 지원: 다양한 언어로 자막을 분석하고 요약하는 기능을 추가할 수 있습니다.
MCP는 아직 발전 중인 기술이지만, AI 도구 개발의 표준화된 방식으로 빠르게 자리잡고 있습니다. 이 기술을 활용하면 개발자들은 더 적은 노력으로 더 강력한 AI 에이전트를 만들 수 있게 될 것입니다.
참고 자료
이 튜토리얼이 여러분의 AI 에이전트 개발에 도움이 되었기를 바랍니다. 질문이나 의견이 있으시면 언제든지 댓글로 남겨주세요!
'IT 개발 및 프로그래밍 > 파이썬(Python)' 카테고리의 다른 글
Python으로 몬테카를로 트리 탐색(MCTS) 구현하기 (0) | 2025.03.17 |
---|---|
취업 준비생을 위한 파이썬 알고리즘 기초 필수 정리 (0) | 2025.03.14 |
취업 준비생 필독! 파이썬 기초 프로그래밍 필수 팁과 실전 예제 완벽 정리 (0) | 2025.03.12 |
🤔 파이썬 데이터 분석, 지금 시작해도 될까요? (0) | 2025.03.09 |
파이썬 문법 오류 BEST 10가지 완벽 해결법 (초보 개발자 필독!) (0) | 2025.03.05 |
댓글