Skip to main content
Glama
La0bALanG

tavily_mcp_server_for_all_tools

by La0bALanG

Tavily Web Search MCP Server

Tavily 공식 Python SDK를 기반으로 개발된 웹 검색 MCP 서비스로, 표준 MCP Python SDK를 사용하여 구현되었으며, Streamable HTTP 전송 프로토콜을 채택하고 FastAPI + uvicorn을 통해 외부에 서비스를 제공합니다.

기능

서비스는 Tavily 공식 SDK의 주요 기능을 포괄하는 8개의 MCP 도구를 제공합니다:

도구명

설명

내부 Tavily 인터페이스

web_search

쿼리 키워드에 따라 웹 검색을 실행하고 제목, 링크, 요약, 관련성 점수를 반환하며 선택적으로 요약 답변을 선택적으로 생성합니다

search

web_fetch

지정된 URL 웹페이지를 가져와 본문 텍스트 콘텐츠(markdown / text)를 반환합니다

extract

web_crawl

루트 URL에서 시작하여 그래프 방식으로 전체 웹사이트를 탐색하고 여러 페이지의 본문을 일괄 수집하며, 특정 사이트 콘텐츠를 체계적으로 수집하는 데 적합합니다

crawl

web_map

웹사이트 구조를 탐색하여 본문을 가져오지 않고 페이지 URL만 찾아내므로, 사이트 범위를 먼저 파악하는 데 적합합니다

map

qna_search

특정 질문에 대해 한 문장 형식의 답변을 직접 반환합니다

qna_search

search_context

LLM / RAG 프로세스에 직접 투입하기 적합한 압축된 검색 컨텍스트를 반환합니다(자동으로 token 한도 및 절단 처리)

get_search_context

deep_research_start

심층 연구 작업을 제출합니다(Tavily 자동 다중 검색 + 종합 보고서 생성). 작업은 비동기적으로 실행되며 즉시 request_id를 반환합니다

research

deep_research_result

request_id를 기반으로 심층 연구 작업의 상태와 최종 결과(보고서 본문 + 인용 출처)를 폴링하여 조회합니다

get_research

deep_research_start / deep_research_result에 해당하는 연구 작업은 Tavily 서버 측에서 비동기적으로 실행되며 수 분이 소요될 수 있습니다. 먼저 deep_research_start를 호출하여 request_id를 받은 다음, deep_research_result로 status가 completed(또는 failed)가 될 때까지 폴링하세요.

Related MCP server: tavily-pool-mcp

디렉터리 구조

tavily-mcp-server/
├── app/
│   ├── config.py       # 环境变量配置加载(.env)
│   ├── tavily_tools.py # TavilyToolkit:封装 web_search / web_fetch
│   ├── server.py        # FastMCP 实例与工具注册
│   └── main.py          # FastAPI 应用 + uvicorn 入口,挂载 Streamable HTTP
├── client/
│   └── test_client.py   # 本地测试客户端(连接 MCP 服务并调用工具)
├── deploy/
│   ├── deploy.sh                # 一键同步 + 部署到远程服务器
│   └── tavily-mcp.service       # systemd 服务单元
├── requirements.txt
├── .env.example
└── .gitignore

환경 요구사항

  • Python 3.12(로컬은 conda 환경 llm_factory_envs에서 개발, 원격 서버는 llm_env 사용)

  • Tavily API Key(app.tavily.com에서 신청)

로컬 개발 및 테스트

1. 환경 변수 준비

cp .env.example .env
# 编辑 .env,填入 TAVILY_API_KEY;本地测试保持 MCP_HOST=127.0.0.1

2. 의존성 설치 (conda 환경 llm_factory_envs)

conda activate llm_factory_envs
pip install -r requirements.txt

3. MCP 서비스 시작

python -m app.main
# 服务启动后监听 http://127.0.0.1:20260/mcp
# 健康检查: curl http://127.0.0.1:20260/health

4. 테스트 클라이언트로 검증

새 터미널을 엽니다:

conda activate llm_factory_envs
python -m client.test_client --url http://127.0.0.1:20260/mcp

테스트 클라이언트는 순서대로: 서비스 연결 → 사용 가능한 도구 나열 → web_search / web_fetch / web_crawl / web_map / qna_search / search_context 호출 → 결과 출력을 수행합니다.

심층 연구 작업은 시간이 오래 걸릴 수 있으며(수 분 소요 가능), 기본적으로 테스트되지 않습니다. deep_research_start / deep_research_result도 함께 검증하려면:

python -m client.test_client --url http://127.0.0.1:20260/mcp --deep-research
# 也可自定义研究任务描述:
python -m client.test_client --url http://127.0.0.1:20260/mcp --deep-research "近期国产大模型有哪些重要发布"

이 모드는 작업 제출 후 10초마다 deep_research_result를 폴링하여 상태가 completed / failed가 될 때까지 대기합니다.

원격 서버 배포

원격 서버 정보: 101.47.67.15, SSH(비밀번호 없는 로그인 설정 완료)를 통해 배포하며, 원격 conda 환경 llm_env를 사용하고, 서비스 포트는 20260으로 고정됩니다.

1. 원격 .env 구성

로컬 .env에서 MCP_HOST를 0.0.0.0(공용 네트워크 수신)으로 변경하고 MCP_PORT는 20260으로 유지한 후, 배포 스크립트를 실행하면 자동으로 scp를 통해 .env가 동기화됩니다(원격과 로컬에서 다른 키를 사용해야 하는 경우 원격에서 직접 /opt/tavily-mcp-server/.env를 수동으로 관리할 수 있습니다).

2. 원클릭 배포

bash deploy/deploy.sh

이 스크립트는 다음 작업을 수행합니다:

  1. 프로젝트 파일을 root@101.47.67.15:/opt/tavily-mcp-server에 rsync합니다(.git, __pycache__ 등 제외)

  2. 로컬에 .env가 있으면 동기화합니다

  3. 원격 llm_env 환경에 의존성을 설치합니다

  4. systemd 서비스를 설치/업데이트하고 재시작합니다

3. 서버 방화벽 / 보안 그룹

클라우드 서비스 제공업체 콘솔의 보안 그룹 규칙에서 TCP 20260 포트를 허용했는지 확인하세요(deploy.sh는 클라우드 보안 그룹을 자동으로 수정하지 않으므로 제공업체 콘솔에서 수동으로 열어야 합니다). 서버 자체에서 firewalld/ufw가 활성화된 경우에도 해당 포트를 허용해야 합니다. 예:

# firewalld
ssh root@101.47.67.15 "firewall-cmd --permanent --add-port=20260/tcp && firewall-cmd --reload"

3. 원격 배포 검증

curl http://101.47.67.15:20260/health
python -m client.test_client --url http://101.47.67.15:20260/mcp

일반적인 운영 명령

ssh root@101.47.67.15 "systemctl status tavily-mcp.service --no-pager"
ssh root@101.47.67.15 "journalctl -u tavily-mcp.service -f"
ssh root@101.47.67.15 "systemctl restart tavily-mcp.service"

MCP 클라이언트 구성

배포 완료 후, Streamable HTTP를 지원하는 모든 MCP 클라이언트에서 다음 구성을 통해 이 서비스에 연결할 수 있습니다:

{
  "mcpServers": {
    "tavily-web-search": {
      "type": "streamable_http",
      "url": "http://101.47.67.15:20260/mcp"
    }
  }
}

로컬 연동이 필요하면 URL을 http://127.0.0.1:20260/mcp로 교체하면 됩니다.

환경 변수 설명

변수명

설명

기본값

TAVILY_API_KEY

Tavily 공식 API Key(필수)

없음

MCP_HOST

서비스 수신 주소

127.0.0.1(원격 배포 시 0.0.0.0으로 변경)

MCP_PORT

서비스 포트

20260

MCP_SERVER_NAME

MCP 서버 이름

tavily-mcp-server

MCP_STATELESS

상태 비저장 모드 활성화 여부(SSE 재연결 시 메시지 손실 방지)

false

MCP_HTTP

HTTP 모드 활성화 여부(SSE 대신 HTTP JSON 응답 선호 시 true로 설정)

false

MCP_TRANSPORT

전송 방식 (stdio 또는 sse)

sse

MCP_SSE_PATH

SSE 엔드포인트 경로

/mcp

LOG_LEVEL

로그 레벨

INFO

TAVILY_TOP_K

검색 결과 개수

5

TAVILY_INCLUDE_DOMAINS

검색 포함 도메인(쉼표로 구분, 선택 사항)

없음

TAVILY_EXCLUDE_DOMAINS

검색 제외 도메인(쉼표로 구분, 선택 사항)

없음

보안 안내

  • .env 파일은 .gitignore에 포함되어 있으며 GitHub 저장소에 커밋하지 마십시오.

  • 코드에 키를 하드코딩하지 마십시오. 모든 민감한 정보는 환경 변수를 통해 주입됩니다(python-dotenv로 로드).

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables web search capabilities through the Tavily API and serves as a demonstration platform for building custom MCP tools. Designed for educational purposes to showcase MCP server development and LangGraph integration.
    6
    -
  • A
    license
    B
    quality
    D
    maintenance
    A local MCP server that exposes Tavily search as a tool and rotates across multiple API keys for reliability.
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for web page fetching (converting to Markdown/text with automatic fallback between Tavily and Firecrawl) and web search via Tavily.
    2
    MIT