Skip to main content
Glama

AIsa Web Search & Research

Extract Data

post_tavily_extract
Destructive

Fetch clean, parsed content for URLs you already have — from a search result, a sitemap, or a user. urls is required and takes several at once. Returns results[] with url, title, raw_content and images, plus a failed_results[] array — read that one, because a page that could not be fetched is reported there rather than raising an error. Choose format (markdown or text) and extract_depth. Measured at about 1 second for one page. Use this instead of post_tavily_search whenever you can already name the pages; searching for pages you can name costs more and may not return them. For a long list that can wait, post_firecrawl_batch_scrape runs it as a background job. To discover the URLs of a whole site first, use post_tavily_map.

Usage-based billing; Default request estimate: $0.024 USD (not a fixed price). Declared unit rate: $0.008 USD per tavily_credit. Account-specific pricing and final settlement may differ.

Input Schema

NameRequiredDescriptionDefault
bodyYes

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / body
      Added value: +{
      +  "properties": {
      +    "chunks_per_source": {
      +      "default": 3,
      +      "description": "Maximum number of relevant chunks returned per source. Available only when query is provided.",
      +      "maximum": 5,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "extract_depth": {
      +      "default": "basic",
      +      "description": "Depth of the extraction process.",
      +      "enum": [
      +        "basic",
      +        "advanced"
      +      ],
      +      "type": "string"
      +    },
      +    "format": {
      +      "default": "markdown",
      +      "description": "Format of the extracted web page content.",
      +      "enum": [
      +        "markdown",
      +        "text"
      +      ],
      +      "type": "string"
      +    },
      +    "include_favicon": {
      +      "default": false,
      +      "description": "Include the favicon URL for each result.",
      +      "type": "boolean"
      +    },
      +    "include_images": {
      +      "default": false,
      +      "description": "Include a list of images extracted from the URLs.",
      +      "type": "boolean"
      +    },
      +    "include_usage": {
      +      "default": false,
      +      "description": "Include credit usage information in the response.",
      +      "type": "boolean"
      +    },
      +    "query": {
      +      "description": "User intent for reranking extracted content chunks.",
      +      "type": "string"
      +    },
      +    "timeout": {
      +      "description": "Maximum time in seconds to wait for URL extraction. If omitted, default timeouts depend on extract_depth: 10 seconds for basic and 30 seconds for advanced.",
      +      "format": "float",
      +      "maximum": 60,
      +      "minimum": 1,
      +      "type": "number"
      +    },
      +    "urls": {
      +      "description": "The URL or URLs to extract content from. A single URL string and an array of URL strings are both accepted.",
      +      "example": [
      +        "https://en.wikipedia.org/wiki/Artificial_intelligence"
      +      ],
      +      "oneOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "urls"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / properties / chunks_per_source
      Removed value: -{
      -  "default": 3,
      -  "description": "Maximum number of relevant chunks returned per source. Available only when query is provided.",
      -  "maximum": 5,
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • removedInput schema / properties / extract_depth
      Removed value: -{
      -  "default": "basic",
      -  "description": "Depth of the extraction process.",
      -  "enum": [
      -    "basic",
      -    "advanced"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / format
      Removed value: -{
      -  "default": "markdown",
      -  "description": "Format of the extracted web page content.",
      -  "enum": [
      -    "markdown",
      -    "text"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / include_favicon
      Removed value: -{
      -  "default": false,
      -  "description": "Include the favicon URL for each result.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / include_images
      Removed value: -{
      -  "default": false,
      -  "description": "Include a list of images extracted from the URLs.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / include_usage
      Removed value: -{
      -  "default": false,
      -  "description": "Include credit usage information in the response.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / query
      Removed value: -{
      -  "description": "User intent for reranking extracted content chunks.",
      -  "type": "string"
      -}
    • removedInput schema / properties / timeout
      Removed value: -{
      -  "description": "Maximum time in seconds to wait for URL extraction. If omitted, default timeouts depend on extract_depth: 10 seconds for basic and 30 seconds for advanced.",
      -  "format": "float",
      -  "maximum": 60,
      -  "minimum": 1,
      -  "type": "number"
      -}
    • removedInput schema / properties / urls
      Removed value: -{
      -  "description": "The URL or URLs to extract content from. A single URL string and an array of URL strings are both accepted.",
      -  "example": [
      -    "https://en.wikipedia.org/wiki/Artificial_intelligence"
      -  ],
      -  "oneOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    }
      -  ]
      -}
    • changedInput schema / required
      Previous value: -[
      -  "urls"
      -]New value: +[
      +  "body"
      +]
  2. Changed2 schema fields changed
    • removedInput schema / properties / urls / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  }
      -]
    • addedInput schema / properties / urls / oneOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  }
      +]
  3. First observed

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond annotations by disclosing that unfetchable pages land in failed_results[] rather than raising an error, that one page takes about 1 second, and the cost basis of the call. The verb 'Fetch' reads as read-only while annotations declare destructiveHint=true/readOnlyHint=false, but the description never asserts a safety profile, so this is a mismatch rather than a stated contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core verb and resource, then proceeds through input, output, tuning, latency, and alternatives in a logical order. Dense but nearly every sentence carries decision-relevant information; the appended pricing block is boilerplate that adds length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is optional, yet the description still surfaces the one operational hazard an agent must know: failures are reported in failed_results[] instead of surfacing as errors. With usage routing, latency, and billing all covered, nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is reported as 0% at the wrapping level, so the description must carry parameter meaning; it covers urls (required, multi-valued), format, and extract_depth. It says nothing about query, timeout, chunks_per_source, include_images, include_favicon, or include_usage, so it only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — fetch clean, parsed content for URLs you already have — and immediately scopes the input source (a search result, sitemap, or user). It is clearly distinguishable from post_tavily_search and post_tavily_map, which are named as different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('whenever you can already name the pages'), why the alternative is worse ('searching for pages you can name costs more and may not return them'), and routes two other cases to named siblings: post_firecrawl_batch_scrape for long async lists and post_tavily_map for URL discovery.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources