项目简介

Tavily MCP API 服务是一个基于Model Context Protocol (MCP) 构建的后端应用。它通过标准化的JSON-RPC协议,将Tavily AI提供的强大网络搜索、内容提取、网站爬取和地图构建功能,以可调用的工具形式提供给LLM客户端。为了确保高可用性和性能,该服务内部实现了API密钥池管理、故障转移和请求排队机制,有效处理Tavily API的并发请求和配额限制。

主要功能点

  • Tavily AI 工具集成:提供'tavily-search' (或 'search')、'tavily-extract'、'tavily-crawl' 和 'tavily-map' 等工具,让LLM能够执行实时网络搜索、从指定URL提取内容、对网站进行结构化爬取以及生成网站地图。
  • API 密钥池管理:维护一个Tavily API密钥池,自动轮换使用密钥,并追踪每个密钥的错误率和配额,实现智能的负载分配和故障转移,确保API服务的稳定性。
  • 请求排队与去重:通过内部请求队列和缓存机制,优化对Tavily API的调用,避免并发请求过多导致的问题,并减少重复请求,提高效率。
  • 多种传输协议支持
    • Stdio (标准输入输出):适用于本地开发环境或作为命令行工具与LLM客户端集成。
    • SSE (Server-Sent Events):提供HTTP接口,支持流式通信,适用于需要持久连接和实时更新的Web应用或分布式环境。
  • 可观测性:提供详细的日志输出,帮助用户监控API密钥使用情况、请求延迟和错误信息。

安装步骤

  1. 环境准备

    • 确保您的系统已安装 'Node.js' (版本 18 或更高) 和 'npm' (或 'yarn')。
    • 获取一个或多个 Tavily AI API Key
  2. 克隆仓库

    git clone https://github.com/balazhaa/tavily-mcp-loadbalancer.git
    cd tavily-mcp-loadbalancer
  3. 安装依赖

    npm install
    # 或 yarn install
  4. 构建项目

    npm run build
    # 或 yarn build

服务器配置(MCP客户端连接信息)

该MCP服务器可以通过两种方式运行:Stdio(标准输入输出)或 SSE(Server-Sent Events)。MCP客户端通常通过启动外部进程来连接Stdio服务器。

通过 Stdio 启动 (推荐用于MCP客户端)

MCP客户端需要以下配置信息来启动并连接此MCP服务器。在启动服务器之前,您需要设置环境变量 'TAVILY_API_KEYS',它包含您的Tavily API密钥,多个密钥之间用逗号分隔。

例如,在Linux/macOS上:

export TAVILY_API_KEYS="your_tavily_api_key_1,your_tavily_api_key_2"

在Windows PowerShell上:

$env:TAVILY_API_KEYS="your_tavily_api_key_1,your_tavily_api_key_2"

这是一个MCP客户端配置示例(JSON格式):

{
  "name": "Tavily MCP API 服务",
  "command": "node",
  "args": ["dist/index.js"],
  "env": {
    "TAVILY_API_KEYS": "your_tavily_api_key_1,your_tavily_api_key_2"
  },
  "description": "通过MCP协议提供Tavily AI搜索、提取、爬取和地图工具,支持API密钥管理。",
  "tags": ["AI工具", "网络搜索", "Tavily"]
}

注意: 上述 'env' 字段中的 'TAVILY_API_KEYS' 仅为示例,您需要在实际使用时将其替换为您的真实API密钥,或者确保在启动MCP客户端的环境中已经设置了该环境变量。

通过 SSE/HTTP 启动 (适用于独立部署或Web应用)

如果您选择通过HTTP (SSE) 方式运行,服务将在指定端口监听。同样,您需要设置 'TAVILY_API_KEYS' 环境变量,并且可以设置 'SUPERGATEWAY_PORT' 环境变量来指定监听端口(默认为 60002)。

# 设置环境变量,然后运行
export TAVILY_API_KEYS="your_tavily_api_key_1,your_tavily_api_key_2"
export SUPERGATEWAY_PORT="60002"
node dist/start.js

服务启动后,您可以通过 'http://localhost:60002/sse' 获取SSE连接端点,并通过 'http://localhost:60002/message' 发送MCP消息。

基本使用方法

当MCP服务器启动并与MCP客户端(如LLM代理或框架)成功连接后,LLM可以通过标准的MCP 'tools/call' 请求调用Tavily提供的工具。

例如,LLM客户端可能会发送一个请求来调用 'tavily-search' 工具: (此部分为概念性描述,实际调用由LLM客户端框架完成,无需手动执行)

  1. LLM请求列出可用工具: 客户端发送 'tools/list' 请求,服务器将返回包括 'tavily-search'、'tavily-extract'、'tavily-crawl' 和 'tavily-map' 在内的工具列表及其'inputSchema'。

  2. LLM调用搜索工具: LLM根据用户需求,选择 'tavily-search' 工具,并构造一个 'tools/call' 请求,包含 'query' 参数:

    {
      "jsonrpc": "2.0",
      "id": 123,
      "method": "tools/call",
      "params": {
        "name": "tavily-search",
        "arguments": {
          "query": "最新的AI技术发展趋势",
          "max_results": 5
        }
      }
    }
  3. 服务器执行搜索并返回结果: MCP服务器接收请求,通过API密钥池调用Tavily API执行搜索,并将格式化后的搜索结果作为响应返回给LLM客户端。LLM可以使用这些结果来回答用户的问题。

监控与维护

  • 查看日志:服务器的所有日志(包括API密钥使用、错误和请求信息)都输出到 'stderr'。请检查运行服务器的终端或日志管理系统以获取详细信息。
  • 健康检查 (仅SSE/HTTP模式):访问 'http://localhost:60002/health' 端点可以检查服务器的健康状态。

信息

分类

AI与计算