Skip to main content
Use titan_crawl when you need site-level coverage: an inventory of what exists, or content from many pages you cannot enumerate up front. For a handful of known URLs, titan_fetch is faster and cheaper. Crawl is asynchronous by default. It returns a run_id immediately and you poll with titan_get_run. Required scope: mcp:crawl

Two modes

The efficient pattern is usually map first, fetch second: map the site to see what exists, pick the URLs that matter, then fetch only those. Mapping charges per URL discovered but extracts no content, so you avoid paying extraction cost on pages you were never going to read.

Parameters

string
required
Seed URL to start from. The crawl stays on this host.
string
default:"map"
map for URL discovery, crawl for discovery plus content extraction.
integer
default:"25"
Maximum pages to visit. Hard cap 100; exceeding it returns limit_exceeded.
integer
default:"1"
Link depth from the seed. Hard cap 3. Depth 1 means the seed page and pages it links to directly.
string[]
Regular expressions. Only URLs matching at least one are visited. Invalid patterns are rejected before the run starts.
string[]
Regular expressions. Matching URLs are skipped.
boolean
In map mode, attach content to discovered URLs. In crawl mode content is always included.
integer
default:"8000"
Character cap per page in crawl mode.
boolean
default:"true"
Honor the site’s robots.txt directives.
boolean
default:"false"
Crawl is async by default. Set true only for small, shallow runs that will finish inside the 30-second window.
integer
default:"30"
Seconds to wait when wait_for_completion is true. Capped at 30.
string
Deduplicate repeated calls for 24 hours. See Idempotency and retries.

Boundaries

Two limits are not negotiable:
  • Same origin. Every returned URL is on the seed host. Cross-origin URLs are dropped and reported with a cross_origin_dropped warning.
  • Hard caps. max_pages cannot exceed 100 and max_depth cannot exceed 3. These are rejected at validation, before any work starts.

Example: map a documentation section

Response: map mode

Response: crawl mode

In crawl mode, pages[] replaces discovered_urls[]. Each page carries the same fields as a titan_fetch page, plus crawl lineage:

Polling an async crawl

The default call returns immediately:
Poll that run_id with titan_get_run until it reaches a terminal status.

Credits

Cross-origin records dropped at the edge are not billed, so a crawl whose results were all filtered out costs nothing. limit_hit: true in usage means the crawl stopped because it reached max_pages, not because it exhausted the site—raise the limit or narrow include_patterns if you need fuller coverage.

Warnings you may see

Keeping crawls tight

Next steps