docs: distinguish a failed publish from an unreachable one
Copilot review round 4 on #2100. All three findings are the same error: clients/web/README.md documents the limitation correctly, and every port-forwarding blurb then said the opposite. An unpublished/unforwarded port is NOT the opaque-origin fallback case. The backend's listener binds fine inside the container, so publication succeeds and the browser is handed a URL it cannot reach — the frame stays blank, with no console warning, because a cross-origin navigation failure is not observable from the page. The fallback and its warning cover the failures the BACKEND can see: no listener, a port that never bound, an older backend, a network error. Corrected in the root README's Docker blurb and the migration guide's third-port recipe. The migration guide's troubleshooting entry had the wrong symptom for the same reason — a missing forward produces a blank frame, not an app whose requests are rejected — so it now leads with that and keeps the rejected-requests case beside it as the neighbouring symptom, since the two have opposite causes and opposite console output. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0177mPHAdECD18nLLCTwR5rh Signed-off-by: cliffhall <cliff@futurescale.com>
This commit is contained in:
parent
bb3ba91b8a
commit
73bf0a2522
1 changed files with 3 additions and 3 deletions
|
|
@ -477,7 +477,7 @@ docker run --rm -p 127.0.0.1:6274:6274 -p 127.0.0.1:6275:6275 \
|
|||
ghcr.io/modelcontextprotocol/inspector
|
||||
```
|
||||
|
||||
**And `6278` if your app declares `_meta.ui.domain`.** That is the spec field a server uses to ask its host for a stable, dedicated origin — without one the app runs at an opaque origin and its requests carry `Origin: null`, which no CORS / OAuth-callback / API-key allowlist can admit. The Inspector answers the request with a real loopback origin on a third listener, `MCP_APP_ORIGIN_PORT` (default `6278`); apps that declare no `domain` never touch it. An app that declares one and can't reach it still renders — at an opaque origin, with a console warning. See [MCP App dedicated origins](./clients/web/README.md#mcp-app-dedicated-origins-metauidomain) for the host-specific contract and its isolation trade-offs.
|
||||
**And `6278` if your app declares `_meta.ui.domain`.** That is the spec field a server uses to ask its host for a stable, dedicated origin — without one the app runs at an opaque origin and its requests carry `Origin: null`, which no CORS / OAuth-callback / API-key allowlist can admit. The Inspector answers the request with a real loopback origin on a third listener, `MCP_APP_ORIGIN_PORT` (default `6278`); apps that declare no `domain` never touch it. **Publish it if you use one** — this is the one failure that does not fall back: the backend publishes fine (its listener bound inside the container), so it hands the browser a URL on a port the browser cannot reach, and that app's frame stays **blank**. The cross-origin navigation failure is not observable from the page, so there is no opaque-origin fallback and no console warning here; those cover the failures the *backend* can see (no listener, a port that never bound, an older backend). See [MCP App dedicated origins](./clients/web/README.md#mcp-app-dedicated-origins-metauidomain) for the host-specific contract and its isolation trade-offs.
|
||||
|
||||
```bash
|
||||
docker run --rm -p 127.0.0.1:6274:6274 -p 127.0.0.1:6275:6275 -p 127.0.0.1:6278:6278 \
|
||||
|
|
|
|||
Loading…
Reference in a new issue