# Tinyproxy Filter: ONE regex per line, matched against the bare # domain for CONNECT requests (the log shows e.g. filtered domain # "xcmapi.org" -- no scheme, no :port suffix). # # CRITICAL: Tinyproxy compiles these as POSIX BASIC regex, not # extended regex. Extended syntax (+ ? ( ) |) does NOT work here: # an extended-style anchored pattern (^(.+\.)?xcmapi\.org$) was # verified on 2026-10-26 to deny even xcmapi.org itself, while the # basic-syntax equivalent below allows it. In basic regex, groups # are \(...\), repetition of a group is \(...\)*, and + ? ( ) are # literal characters. Do NOT "modernize" these patterns. # # Each entry is anchored (^...$) to the domain and its subdomains # only: a bare substring "github.com" would also match # "evilgithub.com". The \(.*\.\)* prefix matches zero or more # "label." segments, so xcmapi.org and api.xcmapi.org match, while # notxcmapi.org and xcmapi.org.evil.com do not. ^\(.*\.\)*xcmapi\.org$ ^\(.*\.\)*github\.com$ ^\(.*\.\)*githubusercontent\.com$ ^\(.*\.\)*pypi\.org$ ^\(.*\.\)*pythonhosted\.org$ ^\(.*\.\)*npmjs\.org$ # Web search MCP v1 (see docs/web-search-mcp.md). Each line is the # API host's domain, subdomains included, in the same BASIC form. # searx.diante.me is exact-only on purpose: a \(.*\.\)*diante.me$ # line would also let tasks reach api.diante.me (the control plane). ^\(.*\.\)*perplexity\.ai$ ^\(.*\.\)*exa\.ai$ ^\(.*\.\)*tavily\.com$ ^\(.*\.\)*search\.brave\.com$ ^\(.*\.\)*duckduckgo\.com$ ^searx\.diante\.me$ # live-info primary sources (2026-10-30, user-approved): time # APIs + weather primary sources only, so web_fetch can verify # numbers instead of failing 403 Filtered. Deliberately NOT # included: time.is / time.org.cn / time.ms (commercial or # secondary time sites; worldtimeapi + timeapi cover time), # and no general news/social domains -- the whitelist stays # fail-closed, these are the only fetch destinations live-info # needs. Each line is domain + subdomains, same BASIC form. ^\(.*\.\)*worldtimeapi\.org$ ^\(.*\.\)*timeapi\.io$ ^\(.*\.\)*open-meteo\.com$ ^\(.*\.\)*weather\.com\.cn$ ^\(.*\.\)*meteoblue\.com$ ^\(.*\.\)*accuweather\.com$