Tavily智搜官方全套工具
可用工具 (8 个)
该服务在 MCP 协议中暴露的工具,AI 可按需调用
web_search 8 个参数 需填 1 项
根据查询关键字使用 Tavily 智搜执行联网搜索,返回相关网页标题、链接、摘要与可选的总结答案。
必填参数:query
web_fetch 3 个参数 需填 1 项
抓取指定 URL 对应网页的正文文本内容(支持 markdown / text 格式)。
必填参数:url
web_crawl 12 个参数 需填 1 项
从指定根 URL 出发按图遍历整个网站,批量抓取多个页面的正文内容,适合系统性收集某个网站的内容。
必填参数:url
web_map 10 个参数 需填 1 项
遍历网站结构并只发现页面 URL(不抓取正文),适合先摸清站点范围再决定抓取哪些页面。
必填参数:url
qna_search 6 个参数 需填 1 项
针对一个具体问题直接给出一句话式答案,无需自行从搜索结果列表中提炼信息。
必填参数:query
search_context 7 个参数 需填 1 项
获取适合直接喂给 LLM / RAG 流程的压缩检索上下文,自动完成内容截断与 token 限额控制。
必填参数:query
deep_research_start 3 个参数 需填 1 项
提交一个深度研究任务,Tavily 会在后台自动执行多轮搜索并生成综合研究报告;任务异步执行、可能耗时数分钟,本工具只负责提交并立即返回任务 ID,需配合 deep_research_result 轮询获取最终结果。
必填参数:task
deep_research_result 1 个参数 需填 1 项
根据 deep_research_start 返回的 request_id 查询深度研究任务的当前状态与结果。
必填参数:request_id
服务介绍
Tavily Web Search MCP Server
基于 Tavily 智搜官方 Python SDK 开发的联网搜索 MCP 服务,使用标准 MCP Python SDK 实现,采用 Streamable HTTP 传输协议,通过 FastAPI + uvicorn 对外提供服务。
功能
服务提供 8 个 MCP 工具,覆盖 Tavily 官方 SDK 的主要能力:
| 工具名 | 说明 | 底层 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)。
目录结构
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(如需远程与本地使用不同的 key,可直接在远程手动维护 /opt/tavily-mcp-server/.env)。
2. 一键部署
bash deploy/deploy.sh
该脚本会:
rsync项目文件到root@101.47.67.15:/opt/tavily-mcp-server(排除.git、__pycache__等)- 同步
.env(如本地存在) - 在远程
llm_env环境中安装依赖 - 安装/更新
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"
4. 验证远程部署
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 客户端中通过以下 JSON 配置接入本服务:
{
"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 Server 名称 | tavily-web-search |
MCP_STREAMABLE_PATH |
Streamable HTTP 挂载路径 | /mcp |
MCP_STATELESS_HTTP |
是否无状态 HTTP 模式 | false |
MCP_JSON_RESPONSE |
是否强制 JSON 响应(而非 SSE 流) | false |
TAVILY_REQUEST_TIMEOUT |
调用 Tavily search/extract/qna/context/research 等接口的超时时间(秒) | 30 |
TAVILY_CRAWL_TIMEOUT |
调用 Tavily crawl/map 接口的超时时间(秒),站点遍历通常耗时更久 | 150 |
LOG_LEVEL |
日志级别 | INFO |
安全说明
.env文件已在.gitignore中排除,切勿提交到 GitHub 仓库。- 请勿在代码中硬编码任何密钥,所有敏感信息均通过环境变量注入(
python-dotenv动态加载)。 - 提交代码前请再次确认
git status中不包含.env或其他包含密钥的文件。