Tavily MCP Server

Tavily's web search, page extraction, site crawling and research API, offered as MCP tools

Official · Tavily AI TypeScript Remote (hosted) · Streamable HTTPLocal · stdio Web searchBrowser automation

92 popularity score ★ 2.5k ↓ 22k/wk

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude Codeterminal, then run claude, type /mcp and sign in to the Tavily server
claude mcp add --transport http tavily https://mcp.tavily.com/mcp
Cursormcp.json
{
  "mcpServers": {
    "tavily-remote-mcp": {
      "command": "npx mcp-remote https://mcp.tavily.com/mcp",
      "env": {}
    }
  }
}
Claude (desktop and web)Settings → Connectors → Add custom connector
https://mcp.tavily.com/mcp
ChatGPTSettings → Apps → Advanced → Developer mode, then Create app
https://mcp.tavily.com/mcp
Codex~/.codex/config.toml
[mcp_servers.tavily]
url = "https://mcp.tavily.com/mcp"
VS Code.vscode/mcp.json
{
  "servers": {
    "tavily": {
      "type": "http",
      "url": "https://mcp.tavily.com/mcp"
    }
  }
}
Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add tavily -- npx -y tavily-mcp@latest
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "tavily": {
      "command": "npx",
      "args": [
        "-y",
        "tavily-mcp@latest"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "tavily": {
      "command": "npx",
      "args": [
        "-y",
        "tavily-mcp@latest"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "tavily": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "tavily-mcp@latest"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.tavily]
command = "npx"
args = ["-y", "tavily-mcp@latest"]
Gemini CLITerminal
gemini mcp add --scope user tavily npx -- -y tavily-mcp@latest

Settings 3

TAVILY_API_KEY secret Optional: Your Tavily API key. Without it the server runs keyless and only search and extract work.
DEFAULT_PARAMETERS Optional: JSON object of tavily_search settings, such as {"include_images": true}. These replace the values the assistant sends. For tavily_search.
TAVILY_HUMAN_ID Optional: An ID for the end user, sent to Tavily as the X-Human-Id header on each call. Use an opaque ID, not an email.

What it does

This is Tavily's own MCP server for its search API. An assistant gets five tools: a web search that returns snippets with source URLs, extraction of given URLs as markdown or text, a crawl that follows links from a starting URL within depth, breadth and page limits, a map that lists the URLs a site links to, and a research tool that sends a question to Tavily's research endpoint and waits for the written answer.

You can connect to Tavily's hosted server at https://mcp.tavily.com/mcp or run the npm package locally over stdio. The hosted server takes an API key in the URL or an Authorization header, or an OAuth sign-in. With OAuth, Tavily asks on each connect whether to use your personal account or one of your organizations, and it uses that account's mcp_auth_default key, creating the key if it is missing. If that key is deleted or you lose access to the account, calls fail until you reconnect.

The local package reads TAVILY_API_KEY. The README does not mention that the 0.2.22 build also starts without a key: it then runs in a keyless mode where search and extract still work, while crawl, map and research reply that a key is needed. DEFAULT_PARAMETERS takes a JSON object of search settings, and the code lets those values replace whatever the assistant passes for the same field, so they act as fixed settings more than fallbacks. Research polls for its result for up to 15 minutes with the pro model and 5 minutes with mini.

What it needs

To run it yourselfNode.js 20+
Runs onmacOS, Windows, Linux
TavilyFree tierFree sign-up at app.tavily.com gives an API key. Crawl, map and research need a key; search and extract also run keyless in the local package.

Get an API key from app.tavily.com and set it as TAVILY_API_KEY for the local package, or put it in the hosted URL (?tavilyApiKey=) or an Authorization: Bearer header. For OAuth on the hosted server, Claude Code finishes sign-in after adding it: run claude, type /mcp and pick the Tavily server. Clients without remote support can go through npx mcp-remote, which keeps its OAuth tokens in ~/.mcp-auth.

Limits

  • Limit Without TAVILY_API_KEY the local package runs keyless: tavily_search and tavily_extract work, the other tools return a message that a key is required.
  • Size cap tavily_search returns 5 results by default, between 5 and 20 with max_results.
  • Limit Values in DEFAULT_PARAMETERS override the same fields the assistant sends to tavily_search, and apply to that tool only.
  • Size cap tavily_crawl and tavily_map default to depth 1, 20 links per page and 50 pages in total.
  • Limit tavily_research gives up waiting after 15 minutes on the pro model and 5 minutes on mini.
  • Cost Every call uses credits on the Tavily account whose key or OAuth sign-in is used.
  • Limit With OAuth, a deleted mcp_auth_default key or lost account access makes calls fail until you reconnect. Tavily does not switch accounts by itself.
  • Not covered The tavily_feedback tool that newer code on the main branch carries is not in the published 0.2.22 package.

Who it suits

A good fit if you want an assistant to pull current pages from the web and already use Tavily, or are fine with a Tavily account and its credits. The hosted endpoint needs no local install and signs in with OAuth, which suits teams that share an organization account, since you pick the account on each connect. Run the npm package when your client only speaks stdio or you want to pin search defaults with DEFAULT_PARAMETERS. Everything it fetches goes through Tavily's servers, so it does not fit work that must stay off a third-party service, and it cannot click or fill in pages the way a browser driver does.

Tools 5

5 only read. A ? marks an optional parameter.

tavily_search
Searches the web through Tavily and returns result snippets with their source URLs.query: stringsearch_depth?: enumtopic?: enumtime_range?: enumstart_date?: stringend_date?: stringmax_results?: numberinclude_images?: booleaninclude_image_descriptions?: booleaninclude_raw_content?: booleaninclude_domains?: arrayexclude_domains?: arraycountry?: stringinclude_favicon?: booleanexact_match?: boolean
tavily_extract
Fetches the given URLs and returns their content as markdown or plain text.urls: arrayextract_depth?: enuminclude_images?: booleanformat?: enuminclude_favicon?: booleanquery?: string
tavily_crawl
Follows links from a starting URL and returns the content of the pages it reaches.url: stringmax_depth?: integermax_breadth?: integerlimit?: integerinstructions?: stringselect_paths?: arrayselect_domains?: arrayallow_external?: booleanextract_depth?: enumformat?: enuminclude_favicon?: boolean
tavily_map
Lists the URLs a site links to from a starting URL, without page content.url: stringmax_depth?: integermax_breadth?: integerlimit?: integerinstructions?: stringselect_paths?: arrayselect_domains?: arrayallow_external?: boolean
tavily_research
Hands a question to Tavily's research endpoint and waits for its sourced written answer.input: stringmodel?: enum

Similar servers