Python MCP 서버에 웹 검색 툴 추가하기 — Tavily

Melon Coder·2026년 4월 5일

Python

목록 보기
7/7

저번 포스팅에서 MCP 서버를 구축하고 Stable Diffusion 이미지 생성을 연동했다.
이번엔 MCP 서버에 웹 검색 툴을 추가했다.

web_search 툴

기존 서버엔 generate_image 툴만 있었다. 여기에 "웹 검색" 기능을 툴로 추가하면,
MCP 클라이언트(Claude 등)가 필요할 때 웹 검색을 직접 호출할 수 있다.

flow

클라이언트: "QUIC P2P 최신 동향 알려줘"
      ↓
web_search 툴 호출
      ↓
Tavily API → 웹 검색
      ↓
결과 반환

Tavily

웹 검색 API다.
Brave Search API가 원래 무료 플랜이 있었는데 2026년 2월에 없어졌다.
Tavily는 월 1,000건 무료에 카드 등록도 필요 없어서 선택했다.

pip install tavily-python python-dotenv

.env 에 API 키 추가:

TAVILY_API_KEY=발급받은_키

mcp_server.py 수정

기존 코드에 web_search 툴을 추가했다.

@mcp.tool()
def web_search(query: str) -> str:
    """웹에서 최신 정보를 검색합니다"""
    print(f"웹 검색 중: {query}")

    client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))
    response = client.search(query, max_results=5)

    results = response.get("results", [])

    if not results:
        return "검색 결과가 없습니다."

    output = []
    for i, r in enumerate(results, 1):
        output.append(f"{i}. {r['title']}\n   {r['url']}\n   {r.get('content', '')[:200]}")

    return "\n\n".join(output)

저번 글에서 만든 generate_image랑 구조가 똑같다. @mcp.tool() 데코레이터만 붙이면 툴로 등록된다.

실행 결과

트러블슈팅

1. HuggingFace 캐시가 C 드라이브를 꽉 채움

SD 모델 하나가 5GB 가까이 된다.
C 드라이브가 꽉 차서 모델 로딩 중에 서버가 죽었다.

.env에 캐시 경로를 D 드라이브로 변경했다.

HF_HOME=D:\huggingface_cache

HF_HOME 설정은 반드시 diffusers import 전에 해야 한다.
import 시점에 캐시 경로를 읽기 때문

from dotenv import load_dotenv
load_dotenv()

import os
os.environ["HF_HOME"] = os.getenv("HF_HOME", "D:\\huggingface_cache")

# 이 아래에 diffusers import
from diffusers import StableDiffusionPipeline
profile
About me: https://resume-seven-beige.vercel.app/

0개의 댓글