Journey coverage and review
Ownership and limits
Platform owns server response status/categories, safe messages, channel gates and fixed tool results. ChatGPT owns client presentation and WorkOS owns hosted authentication/consent. Client replies, connection labels, buttons and provider forms are illustrative; they do not establish exact vendor behavior, integration or endorsement. The mockup calls no service and signs in no user. All identities and endpoints are fictional; no credentials are stored. Review controls persist only the theme preference. Scenario/state links contain no user data. The connection's example name and URL remain in the current journey's memory and reset on restart or reload; they are not saved as real client configuration.
Coverage
| Scenario | Criteria | Important behavior |
|---|---|---|
| Connect and cancel | AC-1, AC-3, AC-4, AC-6 | Human initiates; WorkOS consent is distinct from per-action approval; cancellation creates no usable new connection. |
| Read greeting | AC-2, AC-4 | Static result, no inventory read. |
| Write demonstration | AC-2, AC-4 | Both permissions required; explicitly no business change. |
| Denied write | AC-2, AC-6 | A stale client-known tool cannot bypass refreshed permissions; normal read-only discovery omits it. |
| Denied entry | AC-2, AC-3, AC-6 | A saved connection cannot replace MCP read permission; administrator recovery. |
| Disabled tenant | AC-3, AC-5, AC-6 | After the accepted access-snapshot delay, protected use is denied while authentication remains reachable. |
| Expired authentication | AC-1, AC-3, AC-5, AC-6 | Renew/sign in or cancel; not an administrator-permission problem. |
| Lookup unavailable | AC-5, AC-6 | No valid snapshot remains; retry without extending expired authority or repeating consent. |
Review questions
Review DataDescriber's proposed permission model, allowed and denied outcomes, server-owned messages, and rules for recovery, withdrawal and dependency failure. The yellow notes identify a functional decision or outcome to assess; they are not application instructions, explanations of vendor screens or requests to design ChatGPT/WorkOS UI. Omit a note where there is no distinct DataDescriber review point. Next step is only for progressing through the example, without previewing another scenario's content.
Verify the selected client/version separately: it may hide, paraphrase or replace HTTP error bodies. Vendor presentation and registration/sign-in compatibility remain integration evidence, not UI behavior controlled by this specification. Mockups cannot prove backend authorization, production accessibility or real WorkOS/ChatGPT compatibility.
Original-flow comparison — 2026-10-21
Compared the migrated package with the newer saved working copy from the MCP
session, docs/changes/2026-10-02-remote-mcp/mockups/mockup.html. All eight scenario
IDs/order, thirty states, twenty-five action/timer transitions, 750ms settling,
criteria references and server-owned response contracts match the original.
This was the baseline before the setup refinement below; all thirty screen texts
also matched. The setup refinement added one explicit saved-configuration state,
bringing it to thirty-one states and twenty-six transitions before the recovery
refinement below. The original setup-to-
authentication edge is refined into Save, then Authenticate. Other original edges
and the remaining scenarios' server outcomes remain unchanged. The duplicate
greeting at the end of scenario 1 is removed as described below.
Browser inspection exercised all thirty original states and the added saved- configuration state through their controls, including:
- Connection consent, cancellation, retry and restart; the read scenario owns the greeting.
- Read/write success, read-only write denial, missing read permission and disabled tenant; each preserved its original message, status and recovery boundary.
- Expired authentication, cancelled reconnect, retry and successful renewal.
- Unavailable access lookup, repeated retry and the completion page.
- Back/Forward, deep-state reload, cancellation of pending work on Guide, and preserving example form edits while zooming or collapsing guidance.
These are prototype/runtime checks, not backend tests, human acceptance or proof of a real WorkOS connection. The Product acceptance results remain pending.
Connection fields and intentional abstraction
The supplied client screenshot shows Name, transport Type, URL, an optional bearer token environment variable, static headers and headers sourced from environment variables. The setup screen now follows those field labels and grouping, with example Name/URL, selected Streamable HTTP transport and a Save action. Token/header fields remain empty for this WorkOS OAuth journey. Explanations about endpoints and authentication belong in the viewer's instructions, outside the vendor-owned UI. No real token or custom authorization header is requested; arbitrary field/row editing and transport switching are not modeled.
OpenAI documents HTTP URL configuration, optional token/header overrides and stored OAuth as distinct settings; configured bearer tokens and authorization headers are tried before OAuth. This prototype selects the OAuth path, rather than introducing a static-token authentication alternative. See OpenAI MCP configuration.
Save leads to the client server list without authenticated access. Its explicit Authenticate action starts the WorkOS consent/cancel path. This is the intentional change to the original flow, keeping configuration distinct from successful authentication. The WorkOS consent/cancel edges and server response contracts are unchanged. Scenario 1 now ends at completed authentication in settings; scenario 2 owns the read-permission tool. A successful provider flow is not itself proof of tool access. The model does not validate arbitrary endpoints, register a server or implement the vendor's configuration UI. Exact save/connect timing and field availability must be verified in the selected client/version. OpenAI's OAuth flow keeps protected-resource discovery, provider sign-in/consent and authenticated tool requests separate; a saved endpoint alone is not proof of usable access.
Provider surface review — 2026-10-21
The former purple WorkOS card was inherited from the source mockup, not verified against the deployed provider. It incorrectly appeared inside the ChatGPT shell. All client-header workspace labels are now removed. Provider states instead show a separate browser surface with an illustrative AuthKit address; they contain no ChatGPT application header. The address is fictional and no browser navigation or real authorization is performed by the mockup.
The connection consent layout is now informed by WorkOS's published OAuth application consent example. AuthKit's hosted UI flow redirects the user to provider-hosted authentication and then returns to the client. The example assumes an existing provider session and initial application consent. Names, account data and permission descriptions are illustrative; actual requested scopes, branding, wording, organization choice and sign-in methods are unverified.
The expired-authentication journey depicts hosted sign-in separately. It assumes
the previous consent remains valid: WorkOS normally skips repeat consent for the
same user/application unless scopes or organization access change. It does not
depict re-consent as a way to repair a missing Platform permission. Both provider
states retain their existing continue/cancel transitions and return to the
client afterward (settings after initial authentication, chat after recovery).
The mockup's historical consent action ID also completes sign-in recovery;
it does not assert a fresh grant in that journey.
This is comparison with documentation, not verification of DataDescriber's actual WorkOS tenant/configuration or a guarantee about browser tab versus window choice. Capture the configured live flow before accepting exact provider UI fidelity.
Client settings examples — 2026-10-22
The supplied client screenshots show a saved MCP server in the Plugins → MCPs list, with an enabled toggle, registration mode Auto and an explicit Authenticate action. Scenario 1 follows that sequence, rather than starting OAuth with a chat greeting. Cancellation returns to the saved server row for another Authenticate attempt; completion returns there without repeating scenario 2's tool result. Enabling a server and authenticating are distinct from authorization to use its tools.
The Auto menu also offers Client ID metadata document (CIMD) and Dynamic client registration (DCR). These are observed client choices, not a verified WorkOS configuration decision. The schematic list now omits registration modes, settings icons, enablement toggles, plugin tabs and Add. It shows only the server name and Authenticate (or authentication status). Names edited during setup remain in the server row until restart/reload.
The third supplied screenshot depicts Cloudflare's browser-hosted authorization page. It confirms the context switch in that example; its scope choices, client identity, local callback and wording are not copied into WorkOS. The actual DataDescriber provider/client compatibility and registration mechanism remain to be verified. The supplied provider example identifies its requesting app as Codex; the existing ChatGPT-labeled mockup remains an illustrative client journey, not a claim that every OpenAI client has the same settings or OAuth behavior.
Recovery through the same server list
Scenario 7 offers MCP settings after the expired-token response, then uses the same server-list Authenticate action as scenario 1. It also shows the observed Reconnect notice as a direct entry to the same sign-in flow. The package has thirty-two states and twenty-eight transitions. Cancel returns to the saved server list with Authenticate available; it does not restore access. Successful hosted sign-in retains the original recovery outcome: the client retries the harmless greeting and displays its fixed result. Exact navigation labels and automatic request retry remain illustrative client behavior. This adds no fresh application consent or Platform permission, and preserves the 401 challenge and the remaining scenarios' server response contracts.
Specification and client presentation alignment — 2026-10-22
Product, Architecture, Program design, Delivery plan and Verification now describe Save, server-list Authenticate, browser-hosted sign-in and the separate read tool consistently. Interactive recovery uses the same saved server and Authenticate action. Cancellation, valid-consent reuse and client-owned request retry are explicit; real-client evidence and Product acceptance remain pending.
The schematic server list retains the same ChatGPT header as setup, including saved, authenticating, authenticated and cancelled states and recovery settings. Save and Authenticate share the same outlined button style and right alignment. The invented “DataDescriber access check” heading and tenant label above the chat are removed from all chat-introduction blocks. Conversation messages, tool results, server response contracts and scenario transitions are preserved. The client logo identifies the illustrative surface; it does not make the mockup an exact vendor UI.
Scenario descriptions explain the starting situation and the purpose of the example. Next step instructions contain only the action for the current screen: use its control, wait while a request runs, or advance/restart after an outcome. They do not repeat the description or ask the reviewer to use Send after its button has disappeared. All eight descriptions and thirty-two state instructions follow this split; the scenario graphs, product screens and results are unchanged.
Technical response reference
Nine focused reviewer notes cover functional outcomes or product decisions; twenty-three notes on setup, waiting or vendor-owned steps are omitted. The protocol contracts are retained here; client wording and layout remain illustrative and require verification in the selected client. The coverage table above retains the acceptance-criterion mapping.
| Outcome | Platform response | Server-owned message |
|---|---|---|
| Read greeting | HTTP 200 | Hello. |
| Write demonstration | HTTP 200 | Your MCP write permission was verified. No data was changed. |
| Missing read permission | HTTP 403 · mcp_read_required |
Your account does not have MCP read access for this tenant. Contact your tenant administrator. |
| Missing write permission | HTTP 403 · mcp_write_required |
Your account does not have MCP write access for this tenant. No data was changed. Contact your tenant administrator. |
| Tenant disabled | HTTP 403 · tenant_mcp_disabled |
MCP is not enabled for this tenant. Contact your tenant administrator. |
| Expired authentication | HTTP 401 · invalid_token |
Sign in to connect to DataDescriber. |
| Access lookup unavailable | HTTP 503 · mcp_access_unavailable |
MCP access could not be checked right now. Try again later. |
Permission and tenant denials do not run the requested handler, emit an OAuth insufficient-scope challenge or trigger repeated consent. Ordinary read-only discovery omits the write tool; the denied-write scenario deliberately invokes it directly. Expired authentication includes the protected-resource metadata challenge; renewal/sign-in belongs to the client. Tenant disabling is shown after the bounded access snapshot expires: authentication remains reachable, previous access may persist until the configured maximum age, and no revision-file propagation is involved. Dependency failure cannot prolong expired authority; Try again repeats the same fixed outage in this prototype.
Runnable HTTP response test
Use the response reference implementation for the single-file HTTP fixture, start commands, test cases, limitations and real-client observation record. This experiment is separate from the interactive mockups.
Client response observations — 2026-10-22
The owner-run HTTP error trials show success and all five HTTP error cases in one conversation. The screenshot summarizes the whole sequence as observed in the client UI. It shows the assistant's replies, not raw tool responses or a guaranteed presentation contract.
The owner subsequently supplied English screenshots using the exact prompt
try probe_response. The reference has since been corrected to expose the
specified hello_read and hello_write tools. The ready composers, sent prompts
and tool labels use try hello_read for read scenarios and try hello_write
for write scenarios. The success, raw-401, denied-read,
denied-write, tenant-disabled and temporary-outage replies reproduce the visible
English text apart from those tool-name corrections, including the recorded
correlation IDs. A later two-tool read-denial capture supplies the current
read-denial screen, including mcp_read_required and its administrator guidance.
The write denial
uses the later two-tool capture, with the no-change statement and administrator
guidance but no visible reason code or correlation ID. The generic
hello_read returned: Authentication required. reply replaces the invented
401 explanation. A separate reconnect notice uses the observed title,
explanation and Reconnect action; MCP settings remains available for the
saved-server Authenticate path.
These are captured replies for the recorded prompt and trial, not a guarantee
of wording in future conversations. The correlation IDs are copied examples
from those individual requests; a running server generates new IDs. The
write-success demonstration was not included in the original error screenshots.
A later two-tool success trial
shows both named tools in the same conversation. The successful read reply now
copies hello_read returned: “Hello.”; the write reply copies
hello_write succeeded: MCP write permission was verified. No data was changed.
In the corrected reference, success
supports both tools in one server run, while http403-write call refuses
hello_write and still permits hello_read.
The server-owned messages and permission rules remain unchanged.
Later 401 captures with both corrected tool names show the same client
Reconnect notice. The hello_read reply is Authentication required.; the
hello_write reply additionally states that no data was changed. Scenario 7
uses the captured read-tool reply. Both captures are retained in the response
reference attachment.
The later missing-read trial
shows mcp_read_required for both hello_read and hello_write. It confirms
the fixture's prerequisite relationship in the client: write use also needs
read access. In that capture, administrator guidance is repeated only in the
read-tool reply, illustrating that the client may omit part of a server message.
The write-only denial trial
shows a successful hello_read followed by a denied hello_write. Scenario 4
includes the successful greeting as conversation history before the write
request. Its denial copies that capture, including “to enable access”; the
client omitted both the reason code and correlation ID in this particular reply.
The two-tool tenant-disabled trial
shows tenant_mcp_disabled for both tools, with administrator guidance and no
visible correlation IDs. Scenario 6 copies the read-tool reply and its separate
explanatory paragraph, replacing the earlier generic-tool capture.
The two-tool temporary-failure trial
shows HTTP 503 and mcp_access_unavailable for both tools, each with a separate
correlation ID. Scenario 8 copies the read-tool reply, including quotation marks
around the explanation and the captured ID. Both observed replies suggest trying
again later, without an authentication prompt.
Reconnect continues into the proposed hosted sign-in journey. The reference
server has no OAuth provider, so successful sign-in, client return navigation and
automatic retry remain illustrative rather than validated by these error trials.
The owner also restored success, dismissed the reconnect notice and successfully
used the tool again in the same chat. That demonstrates retrying the fixture
without Reconnect, not credential renewal; the mockup must not imply that simply
dismissing a notice repairs genuinely expired credentials.
Asset sources
workos.svg: unchanged header wordmark served by WorkOS, retrieved on 2026-10-20.chatgpt.jpg: unchanged app icon from the OpenAI-published ChatGPT app, publisher OpenAI OpCo, LLC, retrieved through Apple's official lookup on 2026-10-20. ChatGPT/OpenAI marks belong to OpenAI; brand guidance. The logo identifies the depicted client.