|
1 | 1 | { |
2 | 2 | "pluginName": "mcp-apps", |
3 | | - "reviewDate": "2026-05-22", |
| 3 | + "reviewDate": "2026-05-28", |
4 | 4 | "reviewer": "GitHub Copilot", |
5 | 5 | "publicationStatus": "defer", |
6 | 6 | "ownership": { |
7 | | - "owner": "not assigned", |
8 | | - "supportChannel": "not assigned", |
| 7 | + "owner": "@equinor/dcs-power-platform-team", |
| 8 | + "supportChannel": "#powerplatform (Slack)", |
9 | 9 | "upstreamSource": "microsoft/power-platform-skills/plugins/mcp-apps", |
10 | 10 | "upstreamVersion": "1.0.0" |
11 | 11 | }, |
12 | 12 | "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.", |
14 | 14 | "createsOrModifiesAssets": true, |
15 | 15 | "deploysAssets": false, |
16 | 16 | "deletesAssets": false, |
17 | 17 | "productionInteractionDefault": false |
18 | 18 | }, |
19 | 19 | "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, |
24 | 24 | "bundledScripts": [], |
25 | 25 | "secretsEmbedded": false, |
26 | 26 | "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)" |
29 | 30 | ] |
30 | 31 | }, |
31 | 32 | "mcp": { |
32 | 33 | "required": false, |
33 | 34 | "servers": [], |
34 | 35 | "versionsPinned": true, |
35 | | - "approvedAccessRequired": true, |
36 | | - "productionInteractionBlocked": false |
| 36 | + "approvedAccessRequired": false, |
| 37 | + "productionInteractionBlocked": true |
37 | 38 | }, |
38 | 39 | "powerPlatformGovernance": { |
39 | 40 | "assumedZone": "red", |
40 | 41 | "intendedUsers": [ |
41 | 42 | "professional-it-developer" |
42 | 43 | ], |
43 | | - "dataClassificationCeiling": "not-assessed", |
| 44 | + "dataClassificationCeiling": "equinor-internal", |
44 | 45 | "confidentialDataSupported": false, |
45 | 46 | "dependencies": [ |
46 | 47 | { |
47 | | - "name": "MCP host with tool calling support", |
| 48 | + "name": "MCP host with MCP Apps protocol support", |
48 | 49 | "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).", |
50 | 51 | "blocking": false |
51 | 52 | }, |
52 | 53 | { |
53 | 54 | "name": "CDN access for widget libraries", |
54 | 55 | "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 |
57 | 58 | } |
58 | 59 | ], |
59 | 60 | "architectureContractRequired": false, |
|
65 | 66 | "name": "Model Context Protocol", |
66 | 67 | "radarState": "Adopt", |
67 | 68 | "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)" |
69 | 70 | }, |
70 | 71 | { |
71 | 72 | "name": "Fluent UI Web Components", |
72 | 73 | "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)" |
75 | 82 | } |
76 | 83 | ], |
77 | 84 | "hasHoldTechnology": false, |
|
83 | 90 | "edsRequired": true, |
84 | 91 | "edsPackages": [], |
85 | 92 | "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." |
87 | 94 | ] |
88 | 95 | }, |
89 | 96 | "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, |
92 | 99 | "claudeManifest": true, |
93 | 100 | "versionsSynchronized": false, |
94 | 101 | "variaCatalogRequired": true, |
|
98 | 105 | "rollbackDocumented": false |
99 | 106 | }, |
100 | 107 | "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." |
107 | 112 | ], |
108 | 113 | "evidence": [ |
109 | 114 | { |
110 | 115 | "type": "file", |
111 | 116 | "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." |
113 | 128 | }, |
114 | 129 | { |
115 | 130 | "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." |
118 | 158 | } |
119 | 159 | ], |
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." |
121 | 161 | } |
0 commit comments