Bug
When using a Skybridge MCP server with Claude Desktop, the widget fails to load with a ui.domain mismatch error.
Claude computes the expected domain hash from the connector URL (e.g. https://my-app.alpic.live), but Skybridge computes it from the URL with
the pathname appended (e.g. https://my-app.alpic.live/mcp), resulting in different hashes.
Root cause
In dist/server/server.js around line 252:
const pathname = extra?.requestInfo?.url?.pathname ?? "";
const url = `${serverUrl}${pathname}`;
pathname resolves to /mcp, so the hash is computed on https://my-app.alpic.live/mcp instead of https://my-app.alpic.live.
Expected fix
const url = serverUrl;
Error message
ui.domain mismatch: expected "2cb1365d...claudemcpcontent.com" for connector
"https://my-app.alpic.live", but got "7a38f52b...claudemcpcontent.com"
Steps to reproduce
1. Deploy a Skybridge MCP server on Alpic
2. Connect it to Claude Desktop using the Alpic URL
3. Call a widget tool → ui.domain mismatch
Works fine on ChatGPT since it doesn't use this domain check.
Bug
When using a Skybridge MCP server with Claude Desktop, the widget fails to load with a
ui.domain mismatcherror.Claude computes the expected domain hash from the connector URL (e.g.
https://my-app.alpic.live), but Skybridge computes it from the URL withthe pathname appended (e.g.
https://my-app.alpic.live/mcp), resulting in different hashes.Root cause
In
dist/server/server.jsaround line 252: