Mirror the Skybridge widget shape so Claude renders the MCP Apps - #174
Merged
Conversation
The Skybridge-built companion connectors (ai-pricing-hub,
ai-roi-calculator) render their widgets in Claude as plain custom
connectors; this server, spec-conformant with a valid ui.domain, stayed
text-only. Three observable deltas in what Skybridge emits, mirrored
here: a ui.csp block ({resourceDomains, connectDomains}) in the widget
resource meta, an apps-sdk variant of each widget resource (mime
text/html+skybridge, openai/widgetDomain + openai/widgetCSP meta), and
the tool meta's openai/outputTemplate pointing at that variant while
ui.resourceUri keeps the SEP-1865 resource. Same self-contained HTML
behind both URIs.
Needs an Alpic redeploy plus a Desktop render test to validate - the
tests pin the shape, not the rendering.
OptimNow
added a commit
that referenced
this pull request
Aug 20, 2026
OptimNow
added a commit
that referenced
this pull request
Aug 20, 2026
…s) (#172) * Add the coverage heat map to the README scripts/render-coverage-heatmap.py renders the waste-playbook coverage (category x provider) as assets/playbook-coverage.svg - OptimNow-accent intensity ramp, dashed cells for the known gaps, footer pointing at the public backlog in docs/ROADMAP.md. Embedded in README.md so users see the coverage shape, gaps included, before installing: publishing the holes deliberately is cheaper than users discovering them by empty query. Same CI discipline as the markdown matrix (--check fails on drift); the new-playbook checklist item now regenerates both. * Add the FCP capability heat map and reframe coverage as three surfaces scripts/render-fcp-heatmap.py renders the 22 FinOps Framework capabilities from the committed fcp-coverage.md (primary / secondary-only / deferred gap) as assets/fcp-coverage.svg, CI-gated like the playbook map. The README coverage section now presents both maps and names the third, behavioural surface (the maintainer-side probe battery), because a field test showed the playbook map alone reads as the skill's whole coverage - it is only the runbook catalogue. The playbook SVG title and footer now say so too. CLAUDE.md: record the 2026-08-20 Desktop render test - valid ui.domain, tool called, no validation error, still no widget - closing the question left open on 2026-08-19: ui.domain is necessary but not sufficient, the Connectors Directory review remains the gate. * Fix invalid XML in the FCP heat map and correct the MCP Apps conclusion The FCP domain names contain '&' (Understand Usage & Cost) and the SVG text nodes were not XML-escaped, so the committed fcp-coverage.svg failed to parse in any renderer. Escape domain, capability and note strings. CLAUDE.md: same-day evidence overturned the earlier conclusion - the Skybridge-built companion connectors render their widgets in Claude as plain custom connectors, so the gate is implementation shape, not the Connectors Directory. Record the three Skybridge deltas to mirror. * Bring the MCP Apps lesson up to date with PRs #174/#175
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context. The widgets never rendered in Claude despite spec-conformant HTML and a valid
ui.domain(validation passes, no error logged, tool called, MCP Apps runtime engages, frame never shows). Meanwhile the two Skybridge-built companion connectors (ai-pricing-hub-mcp, ai-roi-calculator-mcp) DO render their widgets in Claude as plain custom connectors - user-confirmed with a screenshot on 2026-08-20. So the gate is implementation shape, not the Connectors Directory.What Skybridge emits that we did not, mirrored in this PR:
ui.cspblock ({resourceDomains, connectDomains}= the canonical connector origin) in the SEP-1865 widget resource meta.ui://cloud-finops/apps-sdk/<name>, mimetext/html+skybridge, metaopenai/widgetDomain+openai/widgetCSP.openai/outputTemplatenow points at the apps-sdk variant;ui.resourceUri/ui/resourceUrikeep the SEP-1865 resource.Same self-contained HTML behind both URIs - the bridge negotiates at runtime.
Validation: 102 tests pass (wiring tests pin the dual-resource shape). Actual rendering needs the release train: merge, redeploy Alpic, then a Desktop render test with the connector. If it renders, the remaining Skybridge delta (per-request dynamic
ui.domain) can stay unimplemented; if not, that is the next experiment.