tavily_mcp_server_for_all_tools
MCP server exposing 8 Tavily tools (web search, fetch, crawl, map, QnA, context, and deep research) via Streamable HTTP for AI assistants to perform live web retrieval and research.
README
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或其他包含密钥的文件。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。