Tendril runs on a residential Mac, in WebKit — Safari's real engine — behind a real IP. Extraction is deterministic and testable: the same page always yields the same markdown. No cloud fingerprint, no LLM lottery.
WebKit on macOS ARM behind a residential IP — not a headless Chromium signature. Sites that block others often don't block Tendril.
JSON-LD, OpenGraph, Readability + density fallback, hand-written Turndown rules. Versioned, golden-file testable output.
Merge sitemaps, robots directives, homepage links and /llms.txt into one deduplicated URL list in seconds.
A single-file Model Context Protocol server exposing tendril_scrape, tendril_map and tendril_status. Works in Claude Desktop, Claude Code and any MCP client. Needs only Node ≥ 20.
{
"mcpServers": {
"tendril": {
"command": "node",
"args": ["/absolute/path/to/tendril-mcp.mjs"],
"env": { "TENDRIL_BASE_URL": "https://www.ten-dril.com" }
}
}
}claude mcp add tendril -- node /absolute/path/to/tendril-mcp.mjsA Claude Agent Skill that teaches an agent when and how to use Tendril over plain HTTP — endpoints, options, workflow (map → scrape), and error codes. No MCP client required; works with any agent that reads skills or can curl.
unzip tendril-skill.zip -d ~/.claude/skills/
# → ~/.claude/skills/tendril/SKILL.mdERR_INVALID_URL | 400 | Malformed or unsupported scheme |
ERR_SSRF_BLOCKED | 400 | Resolved to a private/forbidden address |
ERR_ROBOTS_DENIED | 403 | robots.txt disallows the path |
ERR_TARGET_BLOCKED | 502 | Tier 0 insufficient; higher tiers unavailable |
ERR_UNSUPPORTED_TYPE | 415 | Content type not handled |
ERR_TIER_TIMEOUT | 504 | Render exceeded timeout |