tavily-search

Web search with LLM-optimized results, content snippets, and relevance scores. Supports four search depths (ultra-fast, fast, basic, advanced) with configurable result counts up to 20, plus domain filtering and time-range constraints Returns structured JSON output with content snippets, relevance scores, and metadata optimized for LLM consumption Includes specialized search modes for news and finance topics, with optional AI-generated answers and full page content extraction Integrates into...

npx skills add https://github.com/tavily-ai/skills --skill tavily-search

Tavily search

Use the tavily_search, tavily_extract, tavily_map and tavily_crawl tools if your tool list has them (some clients add a prefix such as mcp__tavily__). Otherwise run tvly <command> directly; there's no need to check for it first. If neither works, follow setup.

Parameters are named as in the API (max_results). The CLI spells them as flags (--max-results) with comma-separated lists (--include-domains sec.gov,reuters.com). For exact parameters, read the tool schema, run tvly <command> --help, or see the API reference.

You haveYou needUse
A question or topicSources, facts or newsSearch
URLsTheir contentExtract
A site, not the exact pageThe right page's URLMap
A site sectionMany of its pagesCrawl

Search

Use advanced search. Set search_depth to advanced (--depth advanced in the CLI) for every search unless the user needs a fast answer to a simple lookup. It reaches more sources and ranks the passages that match your query.

Write queries for a search engine. Use the names and terms you expect on the page, not the user's whole request. Split a question with several parts into one focused search per part. For a long written report, search each part separately and extract the main sources for each before you write.

Follow your leads. When a result names a likely answer, test it right away: search that name with the other details you know, or extract its page. Keep a lead that fits most details until a source contradicts it; a detail you can't confirm doesn't rule it out. When a search misses, search the details again in their own words before adding names or filters you guessed, and build lists of candidates from results, not memory. When a detail keeps coming back empty, work out what it refers to, such as the role, event or term, and search for that.

tvly search prints each result's title, full URL and the first 600 characters of its matching passages. Add -o .tavily/<name>.json to also save every result whole, so you can go back to it instead of searching again. --max-chars 0 prints the passages whole. Read a promising page in full with tvly extract <url>.

Batch independent searches. Issue the searches for one step together in one turn, one call each: separate tavily_search calls with MCP tools, or separate Bash calls with the CLI, each holding a single tvly command. MCP calls run in parallel; Bash calls run one after another but still use one turn. Avoid &, $(...) and loops, which make the client ask for permission. Put the query in single quotes: tvly search 'Rust 2024 edition release date' --depth advanced --max-results 10 -o .tavily/rust-2024.json.

Work from saved files. Keep results in .tavily/ in the current folder and read them with head, grep or python3. -o creates the folder and keeps it out of git, so don't create it yourself. For example, to find a name or number in a long page:

tvly extract 'https://example.com/report' -o .tavily/report.json
python3 -c 'import json,re; t=json.load(open(".tavily/report.json"))["results"][0]["raw_content"]; [print(t[max(0,m.start()-200):m.end()+200], "\n---") for m in re.finditer("2019", t)]'

Read pages with tvly extract, not curl or wget.

Ask for 10 results. Set max_results to 10 (--max-results 10). Narrow before you widen. Filters help more than raising max_results further. Use time_range or dates for recent events or a stated period. Use include_domains when the answer lives on an official or named site; it is a hard filter, so search again without it if it doesn't find the page.

Keep large results on disk. When a result is long, such as raw page content or a crawl, save it under .tavily/ and read only the parts you need. An MCP result lands straight in your context, so keep those calls small.

Save copies with -o. Saving results to files is a job for tvly: run the call with -o .tavily/<name>.json, even if you searched with MCP tools. A file you write from an MCP result is your retyping of it, not the original. Without tvly, work from the results in your context and don't copy them into files. If the user asked for a saved copy, give them the URLs and queries, say an exact copy needs the CLI, and write a retyped copy only if they ask for one.

Read the results critically. Count independent sources, not results. Treat a generated answer as a summary to check, never as a source.

Extract

Extract returns up to 20 URLs per call as markdown, including pages built with JavaScript.

  • Extract only the few results worth reading. Snippets answer most facts.
  • Extract full pages by default. Pass query (--query) only to isolate one fact on a long page; if the passages come back cut off near what you need, extract again without it.
  • Rerun with extract_depth set to advanced (--extract-depth advanced) when a page is built with JavaScript, the content is in a table, or basic came back empty. Check failed_results every time and say which pages couldn't be read.

When to stop

  • Stop once two independent sources agree on a fact.
  • Before you answer, close any gap your draft would mark unconfirmed or fill from memory: run one targeted search or reread the saved page.
  • For releases, ownership, official figures and decisions by a named body, confirm on the official domain or repository. A secondary site or a generated answer is not enough.

Hand off the job

When the user wants an in-depth report that needs many sources gathered and weighed, such as an analysis, a comparison across several criteria or an in-depth investigation, use tavily-research instead of your own searches. If it isn't installed, run npx skills add tavily-ai/skills --skill tavily-research and read its SKILL.md first. A single fact or answer to find stays here.

More skills from tavily-ai

research
tavily-ai
Comprehensive research on any topic with automatic source gathering, analysis, and citations. Conducts multi-source web research with explicit citations, ideal for comparisons, current events, market analysis, and detailed reports Offers three model options: mini for targeted single-topic research (~30s), pro for comprehensive multi-angle analysis (~60-120s), and auto for API-driven complexity detection Authenticates via OAuth through Tavily MCP server with automatic browser-based login on...
search
tavily-ai
Web search with LLM-optimized results, relevance scoring, and flexible filtering. Supports four search depth modes (ultra-fast, fast, basic, advanced) with configurable latency and relevance tradeoffs Includes domain filtering, time range constraints, date ranges, country boosting, and raw content extraction Returns results with title, URL, content snippet, and relevance score; optional image results and favicons Automatic OAuth authentication via Tavily MCP server or API key configuration;...
tavily-best-practices
tavily-ai
Web search API for LLMs with real-time data access, content extraction, site crawling, and AI-powered research. Five core methods: search() for web results, extract() for URL content, crawl() for site-wide extraction, map() for URL discovery, and research() for end-to-end AI synthesis Supports Python and JavaScript SDKs with async clients for parallel queries and configurable search depth (ultra-fast/fast/basic/advanced) Crawl method accepts semantic instructions to focus extraction on...
tavily-cli
tavily-ai
Web search, content extraction, site crawling, and deep research via Tavily CLI. Five command modes covering search, extraction, URL discovery, bulk crawling, and multi-source research with citations All commands support JSON output and file saving for structured, agentic workflows Escalation pattern guides you from simple search through extraction, mapping, crawling, to comprehensive research based on your needs Requires tavily-cli installation and API key authentication via tvly login
tavily-crawl
tavily-ai
Multi-page website crawler with semantic filtering and markdown export. Crawl entire site sections with depth and breadth control; filter by path regex, domain, or natural language instructions to focus results Save each page as local markdown files via --output-dir , or return structured JSON for agentic processing Use semantic instructions with chunk extraction to prevent context bloat when feeding results to LLMs; use full-page extraction for offline documentation downloads Supports...
tavily-dynamic-search
tavily-ai
Search the web, filter results, and extract content so that raw search data never enters your context window . Only your curated print() output comes back.
tavily-extract
tavily-ai
Extract clean markdown or text from up to 20 URLs, with JavaScript rendering and query-focused chunking support. Handles JavaScript-rendered pages with configurable extraction depth (basic for simple pages, advanced for dynamic SPAs and tables) Supports query-focused extraction to return only relevant content chunks instead of full pages Returns LLM-optimized markdown by default, with options for plain text format and structured JSON output Processes up to 20 URLs in a single call;...
tavily-research
tavily-ai
Comprehensive AI-powered research with multi-source synthesis and citations. Produces structured reports grounded in web sources, taking 30-120 seconds depending on model selection (mini for targeted queries, pro for complex comparisons) Supports multiple output formats: markdown reports, JSON with custom schemas, and configurable citation styles (numbered, MLA, APA, Chicago) Includes async workflow for long-running research via --no-wait , status , and poll commands, plus real-time...