Skip to content

Commit 65cbc29

Browse files
committed
refactor: update mcp-apps review details, enhance safety checks, and clarify dependencies
1 parent 41f04e4 commit 65cbc29

1 file changed

Lines changed: 73 additions & 33 deletions

File tree

Lines changed: 73 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,60 @@
11
{
22
"pluginName": "mcp-apps",
3-
"reviewDate": "2026-05-22",
3+
"reviewDate": "2026-05-28",
44
"reviewer": "GitHub Copilot",
55
"publicationStatus": "defer",
66
"ownership": {
7-
"owner": "not assigned",
8-
"supportChannel": "not assigned",
7+
"owner": "@equinor/dcs-power-platform-team",
8+
"supportChannel": "#powerplatform (Slack)",
99
"upstreamSource": "microsoft/power-platform-skills/plugins/mcp-apps",
1010
"upstreamVersion": "1.0.0"
1111
},
1212
"scope": {
13-
"summary": "Generates self-contained HTML widgets for MCP Apps protocol hosts, using pasted JSON tool output and optional interactive callServerTool patterns.",
13+
"summary": "Generates self-contained HTML widgets for MCP Apps protocol hosts, using pasted JSON tool output and optional interactive callServerTool patterns. Widgets are single HTML files that load Fluent UI Web Components and @modelcontextprotocol/ext-apps from CDN. The plugin does not itself require or run an MCP server.",
1414
"createsOrModifiesAssets": true,
1515
"deploysAssets": false,
1616
"deletesAssets": false,
1717
"productionInteractionDefault": false
1818
},
1919
"skillAndScriptSafety": {
20-
"skillsReviewed": false,
21-
"agentsReviewed": false,
22-
"hooksReviewed": false,
23-
"scriptsReviewed": false,
20+
"skillsReviewed": true,
21+
"agentsReviewed": true,
22+
"hooksReviewed": true,
23+
"scriptsReviewed": true,
2424
"bundledScripts": [],
2525
"secretsEmbedded": false,
2626
"externalNetworkCalls": [
27-
"Generated widgets load libraries from CDN",
28-
"Generated interactive widgets may call MCP host tools"
27+
"Generated widgets load @fluentui/web-components from unpkg.com CDN",
28+
"Generated widgets load @modelcontextprotocol/ext-apps and @fluentui/tokens from cdn.jsdelivr.net",
29+
"Generated interactive widgets may call MCP host tools via callServerTool (scoped to the host session)"
2930
]
3031
},
3132
"mcp": {
3233
"required": false,
3334
"servers": [],
3435
"versionsPinned": true,
35-
"approvedAccessRequired": true,
36-
"productionInteractionBlocked": false
36+
"approvedAccessRequired": false,
37+
"productionInteractionBlocked": true
3738
},
3839
"powerPlatformGovernance": {
3940
"assumedZone": "red",
4041
"intendedUsers": [
4142
"professional-it-developer"
4243
],
43-
"dataClassificationCeiling": "not-assessed",
44+
"dataClassificationCeiling": "equinor-internal",
4445
"confidentialDataSupported": false,
4546
"dependencies": [
4647
{
47-
"name": "MCP host with tool calling support",
48+
"name": "MCP host with MCP Apps protocol support",
4849
"category": "platform-feature",
49-
"description": "Generated interactive widgets call MCP host tools. Requires a host that supports the MCP Apps protocol.",
50+
"description": "Generated interactive widgets call MCP host tools via callServerTool. Requires a host that supports the MCP Apps protocol (Claude, ChatGPT, VS Code, Microsoft 365 Copilot).",
5051
"blocking": false
5152
},
5253
{
5354
"name": "CDN access for widget libraries",
5455
"category": "environment-setting",
55-
"description": "Generated widgets load Fluent UI Web Components from CDN. Network policies must allow CDN access.",
56-
"blocking": false
56+
"description": "Generated widgets load Fluent UI Web Components from unpkg.com and ext-apps/tokens from cdn.jsdelivr.net. CSP rules may need to be updated per environment for all referenced CDNs. If EDS replaces Fluent UI Web Components, CDN dependencies may change.",
57+
"blocking": true
5758
}
5859
],
5960
"architectureContractRequired": false,
@@ -65,13 +66,19 @@
6566
"name": "Model Context Protocol",
6667
"radarState": "Adopt",
6768
"usedFor": "MCP Apps protocol widgets and interactive tool calls.",
68-
"source": "equinor/techradar"
69+
"source": "equinor/techradar blips/model_context_protocol.yaml (changeDate 2026-05-06)"
6970
},
7071
{
7172
"name": "Fluent UI Web Components",
7273
"radarState": "unknown",
73-
"usedFor": "Generated widget UI components loaded from CDN.",
74-
"source": "not checked"
74+
"usedFor": "Generated widget UI components loaded from CDN (v3 beta via unpkg.com).",
75+
"source": "equinor/techradar checked 2026-05-28 — no blip exists (missing from radar)"
76+
},
77+
{
78+
"name": "Equinor Design System (EDS)",
79+
"radarState": "Adopt",
80+
"usedFor": "Not currently used. EDS is the preferred frontend design system per Equinor standards but widgets use Fluent UI Web Components instead.",
81+
"source": "equinor/techradar blips/eds.yaml (state: Adopt)"
7582
}
7683
],
7784
"hasHoldTechnology": false,
@@ -83,12 +90,12 @@
8390
"edsRequired": true,
8491
"edsPackages": [],
8592
"exceptions": [
86-
"Current generated widgets use Fluent UI Web Components and custom design guidelines. EDS alignment is not implemented."
93+
"Generated widgets currently use Fluent UI Web Components v3 (beta) and custom design-guidelines.md tokens. EDS is preferred per owner decision. Assessment needed: determine whether EDS provides sufficient components or equivalent alternatives to replace Fluent UI Web Components for MCP App widgets."
8794
]
8895
},
8996
"publication": {
90-
"targetRepository": "equinor/powerplatform recommended only if kept in Power Platform scope, not confirmed",
91-
"copilotManifest": false,
97+
"targetRepository": "equinor/powerplatform (recommended if Power Platform scope retained)",
98+
"copilotManifest": true,
9299
"claudeManifest": true,
93100
"versionsSynchronized": false,
94101
"variaCatalogRequired": true,
@@ -98,24 +105,57 @@
98105
"rollbackDocumented": false
99106
},
100107
"blockers": [
101-
"Internal owner and support channel are not assigned.",
102-
"Skill instructions and generated widget patterns are not reviewed against Equinor MCP guidance.",
103-
"Generated widgets can load CDN resources and may call MCP host tools, which needs data handling review.",
104-
"EDS guidance is not integrated into generated widget workflows.",
105-
"Technology Radar status is unknown for Fluent UI Web Components.",
106-
"GitHub Copilot marketplace manifest is missing."
108+
"EDS component equivalence assessment needed: determine whether EDS provides sufficient components to replace Fluent UI Web Components for generated widgets.",
109+
"Fluent UI Web Components is missing from the Equinor Technology Radar — requires architecture discussion path (may become moot if EDS replaces it).",
110+
"CDN dependency (unpkg.com, cdn.jsdelivr.net) requires CSP rule updates per environment. Dependency scope may change after EDS assessment.",
111+
"Install and rollback not tested."
107112
],
108113
"evidence": [
109114
{
110115
"type": "file",
111116
"reference": "plugins/mcp-apps/README.md",
112-
"summary": "Documents MCP Apps widget generation, CDN-loaded output, Fluent UI components, and callServerTool-capable samples."
117+
"summary": "Documents MCP Apps widget generation, CDN-loaded output, Fluent UI components, callServerTool-capable samples, and 53 eval test cases."
118+
},
119+
{
120+
"type": "file",
121+
"reference": "plugins/mcp-apps/skills/generate-mcp-app-ui/SKILL.md",
122+
"summary": "Main skill reviewed. Requires user-provided JSON before generating, uses escapeHtml for XSS prevention, type-safe data handling, correct CDN imports, and accessibility guidance."
123+
},
124+
{
125+
"type": "file",
126+
"reference": "plugins/mcp-apps/skills/report-issue/SKILL.md",
127+
"summary": "Thin wrapper referencing shared report-issue workflow. No security concerns."
113128
},
114129
{
115130
"type": "file",
116-
"reference": "plugins/mcp-apps/references/",
117-
"summary": "Contains MCP Apps API and design guidance that require EDS and Equinor MCP review."
131+
"reference": "plugins/mcp-apps/references/mcp-apps-reference.md",
132+
"summary": "Technical reference covering App API, Fluent UI components, CDN loading with UMD collision avoidance, HTML escaping, accessibility, and data type safety patterns."
133+
},
134+
{
135+
"type": "file",
136+
"reference": "plugins/mcp-apps/references/design-guidelines.md",
137+
"summary": "Visual design defaults using Fluent theme tokens. Covers loading/data/error states, typography, spacing, color tokens, contrast rules, and prefers-reduced-motion."
138+
},
139+
{
140+
"type": "file",
141+
"reference": "plugins/mcp-apps/samples/flight-status-widget.html",
142+
"summary": "Read-only sample widget. Uses escapeHtml, theme support, Fluent components. No secrets or external calls beyond CDN."
143+
},
144+
{
145+
"type": "file",
146+
"reference": "plugins/mcp-apps/samples/weather-refresh-widget.html",
147+
"summary": "Interactive sample with callServerTool for refresh. Demonstrates tool calling pattern. No secrets or production endpoints."
148+
},
149+
{
150+
"type": "external-source",
151+
"reference": "equinor/techradar",
152+
"summary": "MCP: Adopt (2026-05-06). EDS: Adopt. Fluent UI Web Components: missing-from-radar (checked 2026-05-28)."
153+
},
154+
{
155+
"type": "manual-review",
156+
"reference": "2026-05-28 owner answers",
157+
"summary": "Owner confirmed: @equinor/dcs-power-platform-team owns the plugin; support via #powerplatform Slack. EDS should be preferred — needs assessment whether EDS provides sufficient/equivalent components to replace Fluent UI Web Components. CDN dependency is contingent on EDS outcome; CSP rules need per-environment updates for all referenced CDNs. Copilot CLI and Claude CLI use the same manifest mechanism."
118158
}
119159
],
120-
"notes": "Initial review record only. This record intentionally defers publication until detailed review evidence exists."
160+
"notes": "Full review completed 2026-05-28. Skills, samples, and references are reviewed and contain no secrets, no production interaction, and include XSS/accessibility protections. Owner assigned 2026-05-28 (@equinor/dcs-power-platform-team, #powerplatform). EDS preferred — assessment needed for component equivalence vs Fluent UI Web Components. CDN dependency requires per-environment CSP updates. Copilot CLI and Claude CLI use the same manifest (copilotManifest set true). Remaining blockers: EDS assessment, Fluent UI radar status (may become moot), CDN/CSP planning, install test. Plugin eligible for controlled-pilot once EDS assessment is completed and install is tested."
121161
}

0 commit comments

Comments
 (0)