[BUG] Cowork: WebFetch blocked by AllTrails edge protection (403) while Claude.ai web_fetch succeeds on same URLs
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
WebFetch returns HTTP 403 on every alltrails.com URL I try in Cowork. The same URLs fetch cleanly in Claude.ai chat via web_fetch. Tested this session:
- https://www.alltrails.com/us/maryland/pasadena
- https://www.alltrails.com/trail/us/maryland/kinder-farm-park-trail
- https://www.alltrails.com/trail/us/virginia/old-rag-mountain-loop-trail
- https://www.alltrails.com/trail/us/maryland/billy-goat-trail-section-a--2
My network egress is set to allow all domains, so the block is upstream — AllTrails/Cloudflare is refusing the request based on user-agent or IP fingerprint, not the Anthropic proxy. This blocks a hiking-book skill that relies on AllTrails as source of truth for trail data.
What Should Happen?
WebFetch should succeed on alltrails.com URLs in Cowork and return the page contents as markdown, matching Claude.ai chat's web_fetch behavior. Same URLs, same response. The fix likely requires updating the fetch fingerprint (user-agent, TLS profile, or IP range) to whatever Claude.ai uses so Cloudflare stops blocking it.
Error Messages/Logs
Error responses from this session:
AllTrails (all four URLs above):
"Request failed with status code 403"
For comparison — attempting WebFetch on google.com returned a
different error, confirming the AllTrails block is NOT at the
Anthropic proxy:
{
"error_type": "EGRESS_BLOCKED",
"domain": "www.google.com",
"message": "Access to www.google.com is blocked by the network egress proxy."
}
Distinction matters:
EGRESS_BLOCKED = Anthropic's proxy refused the request
HTTP 403 = the request reached AllTrails; AllTrails refused it
So WebFetch is being allowed out by Anthropic's proxy for
alltrails.com, but AllTrails's edge (Cloudflare) is returning 403.
Fix is in the outbound fingerprint, not the allowlist.
Steps to Reproduce
Steps to reproduce:
- Start any Cowork session.
- Ask Claude to run WebFetch on an AllTrails URL, e.g.:
https://www.alltrails.com/trail/us/maryland/kinder-farm-park-trail
Prompt can be anything — I used "Extract trail name, length,
elevation gain, difficulty, rating, review count."
- Observe: "Request failed with status code 403".
- Repeat for any other alltrails.com URL — same 403 every time.
- In a separate Claude.ai chat session, ask Claude to fetch the
same URL with web_fetch.
- Observe: succeeds. Returns the full page as markdown, including
the stat block (miles, elevation, difficulty, rating, review count).
Repro rate: 100% in Cowork, 0% in Claude.ai chat, on identical URLs.
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.111
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
Other
Additional Information
Cowork (Claude desktop app on Windows 11)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗