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

  1. Run the brief inside a host that implements both sides of the bridge (Open Design's bundled MCP server does).
  2. If you maintain the host, declare the 'message' capability and handle ui/message requests, or expose window.openai.sendFollowUpMessage.
  3. 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.
  4. 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

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


AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12). Data as JSON: /api/errors/060b7c9aa558770d. Report an issue: GitHub.