tavily-mcp-loadbalancer

yatotm/tavily-mcp-loadbalancer

3.5

If you are the rightful owner of tavily-mcp-loadbalancer and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

Tavily MCP Load Balancer is a high-performance server designed to manage multiple API keys with load balancing and failover capabilities.

Tools
5
Resources
0
Prompts
0

Tavily MCP Load Balancer

Docker Hub Docker Image Size License: MIT

Language / 语言: |

一个支持多API密钥负载均衡的Tavily MCP服务器,同时提供SSE和streamableHTTP接口,可以自动轮询使用多个API密钥,提供高可用性和更高的请求限制。

📋 更新日志

v2.2.0 (2025-08-15)

  • 🧬 多架构镜像:发布 linux/amd64 与 linux/arm64 双平台镜像;latest 已指向 2.2.0

v2.1.0 (2025-08-14)

  • 🌐 streamableHTTP支持: 新增HTTP POST /mcp端点,支持直接MCP请求-响应模式
  • 🔄 多协议兼容: 同时支持SSE和streamableHTTP,满足不同客户端需求
  • 📝 文档更新: 添加streamableHTTP接口使用说明和示例

v2.0.0 (2025-08-12)

  • 🔄 架构重构: 从supergateway依赖改为原生SSE实现
  • 🛠️ 工具更新: 同步最新Tavily MCP工具集,新增tavily-crawl和tavily-map
  • 📊 监控增强: 添加详细的API密钥使用日志和轮询状态
  • 🔒 安全改进: 增强响应数据清理和字符编码处理
  • 📝 文档重写: 完全重写README,优化项目结构

v1.0.0 (2025-08-05)

  • 🚀 初始版本: 基于supergateway的Tavily MCP负载均衡器
  • 🔄 负载均衡: 实现多API密钥轮询机制
  • 🛡️ 故障转移: 自动禁用失效密钥功能

✨ 功能特性

  • 🔄 智能负载均衡: 自动轮询多个API密钥,提升并发能力
  • 🛡️ 自动故障转移: 智能检测并禁用失效密钥
  • 🌐 多协议支持: 同时支持SSE和streamableHTTP接口
  • 🧬 多架构镜像: 同一镜像同时支持 linux/amd64 与 linux/arm64
  • 🛠️ 完整工具集: 支持搜索、提取、爬虫、地图等全套Tavily工具
  • 📊 实时监控: 详细的密钥使用日志和性能统计
  • 🔒 数据安全: 自动清理和验证响应数据
  • 高性能: 基于TypeScript和现代Node.js架构

🚀 快速开始

Docker 部署(推荐)

# 使用 Docker Hub 镜像快速启动(自动匹配本机架构,支持 amd64/arm64)
docker run -d \
  --name tavily-mcp-lb \
  -p 60002:60002 \
  -e TAVILY_API_KEYS="your-key1,your-key2,your-key3" \
  yatotm1994/tavily-mcp-loadbalancer:latest

本地开发

# 1. 克隆并安装
git clone https://github.com/yatotm/tavily-mcp-loadbalancer.git
cd tavily-mcp-loadbalancer
npm install

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,添加你的 API 密钥

# 3. 启动服务
npm run build-and-start

服务启动后访问:

  • SSE接口: http://localhost:60002/sse
  • streamableHTTP接口: http://localhost:60002/mcp
  • 健康检查: http://localhost:60002/health
📦 更多部署方式
Docker Compose 部署
# 1. 克隆项目
git clone https://github.com/yatotm/tavily-mcp-loadbalancer.git
cd tavily-mcp-loadbalancer

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件

# 3. 启动服务
docker-compose up -d

# 4. 查看日志
docker-compose logs -f
自定义 Docker 构建
# 构建镜像
docker build -t tavily-mcp-loadbalancer .

# 运行容器
docker run -d \
  --name tavily-mcp-lb \
  -p 60002:60002 \
  -e TAVILY_API_KEYS="your-key1,your-key2,your-key3" \
  tavily-mcp-loadbalancer
开发模式
# 开发模式运行(热重载)
npm run dev

# 分步执行
npm run build
npm run start-gateway

# 使用脚本启动
./start.sh

🛠️ 可用工具

本服务器提供5个Tavily工具,支持搜索、内容提取、网站爬虫等功能:

工具名称功能描述主要参数
search / tavily-search网络搜索query, max_results, search_depth
tavily-extract网页内容提取urls, extract_depth, format
tavily-crawl网站爬虫url, max_depth, limit
tavily-map网站地图生成url, max_depth, max_breadth
📖 详细工具文档

接口说明

SSE接口: http://localhost:60002/sse 消息接口: http://localhost:60002/message streamableHTTP接口: http://localhost:60002/mcp 健康检查: http://localhost:60002/health

streamableHTTP使用示例
# 初始化连接
curl -X POST http://localhost:60002/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {},
      "clientInfo": {"name": "test-client", "version": "1.0.0"}
    }
  }'

# 获取工具列表
curl -X POST http://localhost:60002/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc": "2.0", "id": 2, "method": "tools/list"}'

# 调用搜索工具
curl -X POST http://localhost:60002/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "search",
      "arguments": {
        "query": "OpenAI GPT-4",
        "max_results": 3
      }
    }
  }'

工具参数详解

1. search / tavily-search - 网络搜索
{
  "name": "search",
  "arguments": {
    "query": "OpenAI GPT-4",
    "search_depth": "basic",
    "topic": "general",
    "max_results": 10,
    "start_date": "2024-01-01",
    "end_date": "2024-12-31",
    "country": "US",
    "include_favicon": false
  }
}
2. tavily-extract - 网页内容提取
{
  "name": "tavily-extract",
  "arguments": {
    "urls": ["https://example.com/article"],
    "extract_depth": "basic",
    "format": "markdown",
    "include_favicon": false
  }
}
3. tavily-crawl - 网站爬虫
{
  "name": "tavily-crawl",
  "arguments": {
    "url": "https://example.com",
    "max_depth": 2,
    "max_breadth": 20,
    "limit": 50,
    "instructions": "Focus on technical content",
    "select_paths": ["/docs", "/api"],
    "select_domains": ["example.com"],
    "allow_external": false,
    "categories": ["technology"],
    "extract_depth": "basic",
    "format": "markdown",
    "include_favicon": false
  }
}
4. tavily-map - 网站地图生成
{
  "name": "tavily-map",
  "arguments": {
    "url": "https://example.com",
    "max_depth": 1,
    "max_breadth": 20,
    "limit": 50,
    "instructions": "Map the main structure",
    "select_paths": ["/"],
    "select_domains": ["example.com"],
    "allow_external": false,
    "categories": ["general"]
  }
}

直接MCP使用

# 直接使用MCP协议(stdio)
node dist/index.js

📊 监控和测试

快速测试

# 测试服务器状态
./manage.sh stats

# 测试所有工具
./manage.sh test

# 批量测试API密钥
./manage.sh weather
🔧 详细测试和监控

管理脚本

# 测试服务器连接状态
./manage.sh stats

# 测试所有工具功能
./manage.sh test

# 批量测试天气搜索(测试所有API密钥)
./manage.sh weather

# 显示帮助信息
./manage.sh help

Node.js 测试脚本

# 测试服务器连接
node check_stats_direct.cjs

# 运行工具测试
node test_tools_direct.cjs

# 批量天气搜索测试
node test_weather_search.cjs

# 测试SSE连接和数据安全性
node test_sse_validation.cjs

监控输出示例

服务器状态检查
✅ 连接成功
📊 Tavily MCP 负载均衡器状态:
✅ 搜索功能正常
搜索结果长度: 2847 字符
API密钥轮询日志
[INFO] Using API key: tvly-dev-T... (Key 1/10)
[INFO] API key tvly-dev-T... request successful
[INFO] Using API key: tvly-dev-Y... (Key 2/10)
[INFO] API key tvly-dev-Y... request successful

⚙️ 配置

环境变量

变量名描述默认值
TAVILY_API_KEYSAPI密钥列表(逗号分隔)必填
TAVILY_API_KEY单个API密钥可选
SUPERGATEWAY_PORT服务端口60002

配置示例

# .env 文件
TAVILY_API_KEYS=tvly-dev-key1,tvly-dev-key2,tvly-dev-key3
SUPERGATEWAY_PORT=60002
🔧 高级配置

Docker 环境变量

# Docker 运行时设置
docker run -e "TAVILY_API_KEYS=key1,key2,key3" \
           -e "SUPERGATEWAY_PORT=60002" \
           yatotm1994/tavily-mcp-loadbalancer:latest

开发环境配置

# 开发环境变量
export TAVILY_API_KEYS="tvly-dev-key1,tvly-dev-key2"
export SUPERGATEWAY_PORT=60002

# 或使用 .env 文件
cp .env.example .env
# 编辑 .env 文件

SSE连接测试

验证SSE连接和数据安全性:

# 运行SSE连接测试
node test_sse_validation.cjs

测试内容:

  • ✅ SSE连接建立和会话管理
  • ✅ JSON-RPC消息发送和接收
  • ✅ 响应数据安全性验证
  • ✅ 控制字符和特殊字符处理
  • ✅ 大数据响应处理
  • ✅ 错误处理和日志记录

🔧 故障排除

常见问题

问题解决方案
无可用API密钥检查 TAVILY_API_KEYS 环境变量
连接超时检查网络和防火墙设置
端口被占用使用 lsof -i :60002 检查端口
SSE连接失败运行 node test_sse_validation.cjs

快速诊断

# 检查服务状态
curl http://localhost:60002/health

# 测试连接
node check_stats_direct.cjs

# 查看日志
docker logs tavily-mcp-lb
🔍 详细故障排除

本地运行问题

  1. No available API keys

    • 检查环境变量:echo $TAVILY_API_KEYS
    • 确保密钥格式正确(以tvly-开头)
    • 使用 node check_stats_direct.cjs 测试连接
  2. API密钥错误或被禁用

    • 查看服务器日志中的错误信息
    • 使用 ./manage.sh weather 批量测试所有密钥
    • 检查密钥配额是否用完
  3. 连接超时或网络问题

    • 检查网络连接和防火墙设置
    • 确认Tavily API服务是否正常
    • 尝试减少并发请求数量
  4. SSE连接问题

    • 使用 node test_sse_validation.cjs 测试SSE连接
    • 检查端口60002是否被占用:lsof -i :60002
    • 确认服务器已正常启动

Docker 相关问题

问题解决方案
构建失败docker system prune -f 清理缓存
容器启动失败docker logs tavily-mcp-lb 查看日志
环境变量无效检查 .env 文件格式
健康检查失败curl http://localhost:60002/health

Docker 调试命令

# 查看容器日志
docker logs -f tavily-mcp-lb

# 进入容器调试
docker exec -it tavily-mcp-lb sh

# 检查环境变量
docker exec tavily-mcp-lb env | grep TAVILY

📄 许可证

MIT License


⭐ 如果这个项目对你有帮助,请给个Star!