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_droppedwarning. - Hard caps.
max_pagescannot exceed 100 andmax_depthcannot exceed 3. These are rejected at validation, before any work starts.
Example: map a documentation section
Response: map mode
Response: crawl mode
Incrawl 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: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
- titan_get_run — poll and paginate crawl results
- titan_fetch — read the URLs a map discovered
- Site to knowledge base example