Problem Statement
When developing a local MCP server for Claude.ai, the typical workflow is to expose it using a tunneling solution such as ngrok or cloudflared. If local-network-access is not allowed in the iframe (as discussed in #25), then all UI assets must be served through the tunnel.
With ngrok (free plan), HTTP requests hit an interstitial browser warning page unless they include the header: ngrok-skip-browser-warning: true
Since iframe-originated asset requests from Claude.ai do not include this header, they receive the interstitial HTML page instead of the expected JS/CSS assets. This breaks widget UI rendering and makes local development difficult.
Proposed Solution
If enabling local-network-access in the iframe is not an option, you could add the following header to outgoing iframe-originated HTTP requests: ngrok-skip-browser-warning: true
This would:
- Preserve existing security boundaries
- Avoid allowing direct localhost access
- Make ngrok free tunnels usable for local MCP development
- Prevent the interstitial page from breaking asset loading
Alternatives Considered
Cloudflared tunnels in free plan avoids this issue but generates a new random URL each run, which forces to create a new connector each time the tunnel is killed (which is painful).
Area
Developer Experience
Priority
Medium - Would be helpful
Additional Context
https://ngrok.com/docs/pricing-limits/free-plan-limits#removing-the-interstitial-page
Problem Statement
When developing a local MCP server for Claude.ai, the typical workflow is to expose it using a tunneling solution such as ngrok or cloudflared. If local-network-access is not allowed in the iframe (as discussed in #25), then all UI assets must be served through the tunnel.
With ngrok (free plan), HTTP requests hit an interstitial browser warning page unless they include the header:
ngrok-skip-browser-warning: trueSince iframe-originated asset requests from Claude.ai do not include this header, they receive the interstitial HTML page instead of the expected JS/CSS assets. This breaks widget UI rendering and makes local development difficult.
Proposed Solution
If enabling local-network-access in the iframe is not an option, you could add the following header to outgoing iframe-originated HTTP requests:
ngrok-skip-browser-warning: trueThis would:
Alternatives Considered
Cloudflared tunnels in free plan avoids this issue but generates a new random URL each run, which forces to create a new connector each time the tunnel is killed (which is painful).
Area
Developer Experience
Priority
Medium - Would be helpful
Additional Context
https://ngrok.com/docs/pricing-limits/free-plan-limits#removing-the-interstitial-page