nexu-io/open-design · error · Error
The host cannot publish the confirmed brief.
Error message
The host cannot publish the confirmed brief.
What it means
Browser-side error from publishConfirmation() in the MCP Apps brief UI. After the brief is confirmed, the UI tries to push the result back into the host conversation so the model can continue. It first tries `window.openai.sendFollowUpMessage`, then the standard bridge (requires standardBridgeReady AND host capability 'message'). If neither is available, it throws because there is no channel to deliver the confirmed brief to the model.
Source
Thrown at apps/daemon/src/mcp-apps/brief-resource.ts:416
// text instead of a context-only turn rendered as "(No content)".
if (window.openai && typeof window.openai.sendFollowUpMessage === "function") {
await window.openai.sendFollowUpMessage({ prompt, scrollToBottom: true });
return clearModelContext();
}
if (standardBridgeReady && hostSupports("message")) {
if (hostSupports("updateModelContext")) {
await request("ui/update-model-context", {
content: [{ type: "text", text: payload.summary }],
structuredContent: payload,
});
}
await request("ui/message", {
role: "user",
content: [{ type: "text", text: prompt }],
});
return clearModelContext();
}
throw new Error(copy().publishUnavailable);
}
async function clearModelContext() {
if (!standardBridgeReady) {
const initialized = standardBridgeInitialization
? await standardBridgeInitialization
: false;
if (!initialized) return false;
}
if (!hostSupports("updateModelContext")) {
return true;
}
try {
await request("ui/update-model-context", {});
return true;
} catch {
return false;
}View on GitHub (pinned to 5be4028344)
Solutions
- Run the brief inside a host that implements both sides of the bridge (Open Design's bundled MCP server does).
- If you maintain the host, declare the 'message' capability and handle ui/message requests, or expose window.openai.sendFollowUpMessage.
- As a fallback, the UI already exposes a 'Continue' button on the confirmed_publish_failed phase — instruct the user to copy the summary into the chat manually.
- Upgrade the host runtime to a version that supports the full brief publish contract.
Defensive patterns
Strategy: fallback
Validate before calling
function canPublishBrief(): boolean {
return (typeof window !== 'undefined' && !!window.openai && typeof window.openai.sendFollowUpMessage === 'function')
|| (standardBridgeReady && hostSupports('message'));
}
if (!canPublishBrief()) {
// Pre-warn the user that publishing will not be available after confirm.
} Try / catch
// In-source: publishConfirmation() throws; the submit handler catches and moves to 'confirmed_publish_failed',
// exposing a Continue button so the user can deliver the summary manually.
try {
await publishConfirmation(confirmedPayload);
} catch {
applyPhase('confirmed_publish_failed');
} Prevention
- Use a host that implements both confirm and publish (the Open Design bundled host does).
- If you maintain a host, declare the 'message' capability or expose window.openai.sendFollowUpMessage.
- Surface the post-failure Continue button to users so they can recover manually.
When it happens
Trigger: Host supports confirm_brief (so confirmation succeeded) but does not expose either the openai follow-up bridge or the 'message' capability. The UI can confirm but cannot publish — an asymmetric host configuration.
Common situations: A host implements serverTools (confirm works) but not ui/message or sendFollowUpMessage; partial MCP Apps implementation; host version mismatch where confirm was added but publish was not.
Related errors
- The MCP Apps bridge is unavailable.
- The host returned an invalid confirmation.
- design system backing project publish failed
- pluginWorkflowId requires a validated externalPluginContext
- The Open Design brief has expired or is unknown. Call collec
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/060b7c9aa558770d.
Report an issue: GitHub.