Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use this skill for web search, extraction, mapping, crawling, and research via Tavily’s REST API when web searches are needed and no built-in tool is available, or when Tavily’s LLM-friendly format is beneficial.
.claude/skills/mkurman-tavily/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 603% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 966% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 58% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 103% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 43% | 0% |
Provide a curl-based interface to Tavily’s REST API for web search, extraction, mapping, crawling, and optional research. Return structured results suitable for LLM workflows and multi-step investigations.
TAVILY_API_KEY in the environment.TAVILY_API_KEY is missing, prompt the user to provide the API key before proceeding.https://api.tavily.comAuthorization: Bearer $TAVILY_API_KEYContent-Type: application/jsonX-Project-ID: <project-id> if project attribution is needed.Use for web search with optional answer and content extraction.
Recommended minimal request:
bashcurl -sS -X POST "https://api.tavily.com/search" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TAVILY_API_KEY" \ -d '{ "query": "<query>", "search_depth": "basic", "max_results": 5, "include_answer": true, "include_raw_content": false, "include_images": false }'
Key parameters (all optional unless noted):
query (required): search textsearch_depth: basic | advanced | fast | ultra-fastchunks_per_source: 1–3 (advanced only)max_results: 0–20topic: general | news | financetime_range: day|week|month|year|d|w|m|ystart_date, end_date: YYYY-MM-DDinclude_answer: false | true | basic | advancedinclude_raw_content: false | true | markdown | textinclude_images: booleaninclude_image_descriptions: booleaninclude_favicon: booleaninclude_domains, exclude_domains: string arrayscountry: country name (general topic only)auto_parameters: booleaninclude_usage: booleanExpected response fields:
answer (if requested), results[] with title, url, content, score, raw_content (optional), favicon (optional)response_time, usage, request_idUse for extracting content from specific URLs.
bashcurl -sS -X POST "https://api.tavily.com/extract" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TAVILY_API_KEY" \ -d '{ "urls": ["https://example.com/article"], "query": "<optional intent for reranking>", "chunks_per_source": 3, "extract_depth": "basic", "format": "markdown", "include_images": false, "include_favicon": false }'
Key parameters:
urls (required): array of URLsquery: rerank chunks by intentchunks_per_source: 1–5 (only when query provided)extract_depth: basic | advancedformat: markdown | texttimeout: 1–60 secondsinclude_usage: booleanExpected response fields:
results[] with url, raw_content, images, faviconfailed_results[], response_time, usage, request_idUse for generating a site map (URL discovery only).
bashcurl -sS -X POST "https://api.tavily.com/map" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TAVILY_API_KEY" \ -d '{ "url": "https://docs.tavily.com", "max_depth": 1, "max_breadth": 20, "limit": 50, "allow_external": true }'
Key parameters:
url (required)instructions: natural language guidance (raises cost)max_depth: 1–5max_breadth: 1+limit: 1+select_paths, select_domains, exclude_paths, exclude_domains: arrays of regex stringsallow_external: booleantimeout: 10–150 secondsinclude_usage: booleanExpected response fields:
base_url, results[] (list of URLs), response_time, usage, request_idUse for site traversal with built-in extraction.
bashcurl -sS -X POST "https://api.tavily.com/crawl" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TAVILY_API_KEY" \ -d '{ "url": "https://docs.tavily.com", "instructions": "Find all pages about the Python SDK", "max_depth": 1, "max_breadth": 20, "limit": 50, "extract_depth": "basic", "format": "markdown", "include_images": false }'
Key parameters:
url (required)instructions: optional; raises cost and enables chunks_per_sourcechunks_per_source: 1–5 (only with instructions)max_depth, max_breadth, limit: same as mapextract_depth: basic | advancedformat: markdown | textinclude_images, include_favicon, allow_externaltimeout: 10–150 secondsinclude_usage: booleanExpected response fields:
base_url, results[] with url, raw_content, faviconresponse_time, usage, request_idUse when a query needs multi-step analysis and citations.
bashcurl -sS -X POST "https://api.tavily.com/research" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TAVILY_API_KEY" \ -d '{ "input": "<research question>", "model": "auto", "stream": false, "citation_format": "numbered" }'
Expected response fields:
request_id, created_at, status (pending), input, model, response_timebashcurl -sS -X GET "https://api.tavily.com/research/<request_id>" \ -H "Authorization: Bearer $TAVILY_API_KEY"
Expected response fields:
status: completedcontent: report text or structured objectsources[]: { title, url, favicon }Set "stream": true in the POST body and use curl with -N to stream events:
bashcurl -N -X POST "https://api.tavily.com/research" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TAVILY_API_KEY" \ -d '{"input":"<question>","stream":true,"model":"pro"}'
Handle SSE events (tool calls, tool responses, content chunks, sources, done).
search, extract, map, and crawl as the primary endpoints for discovery and content retrieval.search_depth: basic, max_results: 5) unless deeper recall is needed.TAVILY_API_KEY.max_depth/limit or use search_depth: basic.max_results or chunks_per_source.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 7,765 | 11,973 | +54% | 1 | 1 | 0% | 609 | 4,280 | +603% | 0 | 0 | — |
case-02 | fail→pass | 5,633 | 5,217 | -7% | 1 | 1 | 0% | 307 | 3,272 | +966% | 0 | 0 | — |
case-03 | fail→fail | 2,410 | 10,268 | +326% | 1 | 1 | 0% | 354 | 2,690 | +660% | 0 | 0 | — |
case-04 | pass→pass | 9,530 | 7,775 | -18% | 1 | 1 | 0% | 1,670 | 3,584 | +115% | 0 | 0 | — |
case-05 | pass→pass | 11,714 | 7,476 | -36% | 1 | 1 | 0% | 2,233 | 3,706 | +66% | 0 | 0 | — |
case-06 | pass→pass | 4,196 | 4,345 | +4% | 1 | 1 | 0% | 731 | 3,011 | +312% | 0 | 0 | — |
case-07 | pass→pass | 3,340 | 3,041 | -9% | 1 | 1 | 0% | 573 | 2,710 | +373% | 0 | 0 | — |
case-08 | fail→pass | 12,387 | 4,219 | -66% | 1 | 1 | 0% | 1,860 | 2,933 | +58% | 0 | 0 | — |
case-09 | fail→pass | 8,969 | 4,381 | -51% | 1 | 1 | 0% | 1,492 | 3,033 | +103% | 0 | 0 | — |
case-10 | pass→pass | 8,824 | 4,040 | -54% | 1 | 1 | 0% | 1,540 | 2,947 | +91% | 0 | 0 | — |
case-11 | pass→pass | 6,333 | 4,101 | -35% | 1 | 1 | 0% | 1,187 | 3,029 | +155% | 0 | 0 | — |
case-12 | fail→pass | 10,832 | 5,033 | -54% | 1 | 1 | 0% | 2,223 | 3,178 | +43% | 0 | 0 | — |
case-13 | pass→pass | 4,484 | 3,452 | -23% | 1 | 1 | 0% | 780 | 2,836 | +264% | 0 | 0 | — |
case-14 | pass→pass | 17,839 | 2,994 | -83% | 1 | 1 | 0% | 3,246 | 2,824 | -13% | 0 | 0 | — |
case-15 | fail→pass | 7,948 | 4,168 | -48% | 1 | 1 | 0% | 1,371 | 2,973 | +117% | 0 | 0 | — |
case-16 | pass→pass | 8,143 | 2,970 | -64% | 1 | 1 | 0% | 1,427 | 2,782 | +95% | 0 | 0 | — |
case-17 | fail→pass | 7,732 | 2,475 | -68% | 1 | 1 | 0% | 1,484 | 2,660 | +79% | 0 | 0 | — |
case-18 | fail→pass | 4,606 | 2,038 | -56% | 1 | 1 | 0% | 777 | 2,528 | +225% | 0 | 0 | — |
case-19 | fail→pass | 8,416 | 3,292 | -61% | 1 | 1 | 0% | 1,519 | 2,818 | +86% | 0 | 0 | — |
case-20 | fail→pass | 10,793 | 2,136 | -80% | 1 | 1 | 0% | 1,949 | 2,602 | +34% | 0 | 0 | — |
case-21 | pass→pass | 7,497 | 3,973 | -47% | 1 | 1 | 0% | 1,187 | 2,865 | +141% | 0 | 0 | — |
case-22 | fail→pass | 12,617 | 8,682 | -31% | 1 | 1 | 0% | 2,029 | 3,844 | +89% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +50 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.