Skip to main content
Glama

tavily-map

Generate structured website maps to analyze site architecture, navigation paths, and content organization. Ideal for site audits, content discovery, and understanding web structure with customizable depth and breadth settings.

Instructions

A powerful web mapping tool that creates a structured map of website URLs, allowing you to discover and analyze site structure, content organization, and navigation paths. Perfect for site audits, content discovery, and understanding website architecture.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
allow_externalNoWhether to allow following links that go to external domains
categoriesNoFilter URLs using predefined categories like documentation, blog, api, etc
instructionsYesNatural language instructions for the crawler
limitNoTotal number of links the crawler will process before stopping
max_breadthNoMax number of links to follow per level of the tree (i.e., per page)
max_depthNoMax depth of the mapping. Defines how far from the base URL the crawler can explore
select_domainsNoRegex patterns to select crawling to specific domains or subdomains (e.g., ^docs\.example\.com$)
select_pathsNoRegex patterns to select only URLs with specific path patterns (e.g., /docs/.*, /api/v1.*)
urlYesRoot URL to begin the mapping

Implementation Reference

  • The core handler function for the 'tavily-map' tool, decorated with @mcp_server.tool(name='tavily-map'). It constructs parameters from inputs, sends a POST request to Tavily's map API endpoint, handles authentication/rate limit errors, and validates/returns the response using TavilyMapResponse schema.
    @mcp_server.tool(name='tavily-map') async def map( url: Annotated[str, Field( description="""Root URL to begin the mapping""" )], instructions: Annotated[str, Field( description="""Natural language instructions for the crawler""" )], max_depth: Annotated[int, Field( default=1, ge=1, description="""Max depth of the mapping. Defines how far from the base URL the crawler can explore""" )], max_breadth: Annotated[int, Field( default=20, ge=1, description="""Max number of links to follow per level of the tree (i.e., per page)""" )], limit: Annotated[int, Field( default=50, ge=1, description="""Total number of links the crawler will process before stopping""" )], select_paths: Annotated[list[str], Field( default_factory=list, description="""Regex patterns to select only URLs with specific path patterns (e.g., /docs/.*, /api/v1.*)""" )], select_domains: Annotated[list[str], Field( default_factory=list, description="""Regex patterns to select crawling to specific domains or subdomains (e.g., ^docs\\.example\\.com$)""" )], allow_external: Annotated[bool, Field( default=False, description="""Whether to allow following links that go to external domains""" )], categories: Annotated[list[CrawlCategoriesLiteral], Field( default_factory=list, description="""Filter URLs using predefined categories like documentation, blog, api, etc""" )], ) -> dict[str, Any]: """A powerful web mapping tool that creates a structured map of website URLs, allowing you to discover and analyze site structure, content organization, and navigation paths. Perfect for site audits, content discovery, and understanding website architecture.""" endpoint = base_urls['map'] search_params = { "url": url, "instructions": instructions, "max_depth": max_depth, "max_breadth": max_breadth, "limit": limit, "select_paths": select_paths, "select_domains": select_domains, "allow_external": allow_external, "categories": categories, "api_key": TAVILY_API_KEY, } try: async with httpx.AsyncClient(headers=headers) as client: response = await client.post(endpoint, json=search_params) if not response.is_success: if response.status_code == 401: raise ValueError("Invalid API Key") elif response.status_code == 429: raise ValueError("Usage limit exceeded") _ = response.raise_for_status() except BaseException as e: raise e response_dict: dict[str, Any] = response.json() return TavilyMapResponse.model_validate(response_dict).model_dump()
  • Pydantic model (TavilyMapResponse) defining the expected response structure from the Tavily map API, used for validation in the tool handler.
    class TavilyMapResponse(BaseModel): base_url: str results: list[str] response_time: float
  • The @mcp_server.tool decorator registers the 'map' function as the 'tavily-map' tool with the MCP server.
    @mcp_server.tool(name='tavily-map')

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tsmndev/tavily-mcp-python'

If you have feedback or need assistance with the MCP directory API, please join our Discord server