Dashboard: implement AI + MCP settings design updates#109317
Dashboard: implement AI + MCP settings design updates#109317
Conversation
Jetpack Cloud Live (direct link)
Automattic for Agencies Live (direct link)
Dashboard Live (dotcom) (direct link)
|
Jetpack Cloud Live (direct link)
Automattic for Agencies Live (direct link)
Dashboard Live (dotcom) (direct link)
|
|
This PR modifies the release build for the following Calypso Apps: For info about this notification, see here: PCYsg-OT6-p2
To test WordPress.com changes, run |
51442a3 to
8aaae34
Compare
- Add "AI and MCP" preference card to Dashboard Preferences page (links to /me/mcp, shows Enabled/Disabled badge, sparkles icon); gated by `mcp-settings` feature flag - Fold Privacy and Blocked Sites into Preferences page as navigation cards; remove them from the top-level MeMenu - Replace FormTokenField in Dashboard MCP settings with PreferencesLoginSiteDropdown (visual site picker with site icon/name/URL); add Enabled/Disabled sites lists with Manage + Remove actions - Add MCP access section to site-level AI tools settings page with toggle and "Manage at account level" link; gated by `mcp-settings` flag - Add getEnabledSiteIds() utility to client/me/mcp/utils.js - Update "Jetpack AI assistant" string to "AI assistant" in stats module Made-with: Cursor
- Remove MCP from top nav (now accessed via Preferences) - Rewrite /me/mcp with 3-card layout: AI assistant, External AI agent access (MCP), and Connect external AI assistant - Add /me/mcp/read sub-page with per-category Enable all toggles - Add /me/mcp/write sub-page for write-type tools - Add /me/mcp/ai-sites sub-page for per-site AI assistant enablement - Add /me/mcp/mcp-sites sub-page for per-site MCP exceptions - Classify tools as read/write via isWriteTool() using tool ID keywords - Register all new routes in router/me.tsx Made-with: Cursor
Made-with: Cursor
- isWriteTool now uses ability.readonly === false instead of type field or keyword matching on tool IDs - Filter out tools with visible === false from all MCP settings pages - Add readonly and visible fields to McpAbility interface Made-with: Cursor
- Add ai_assistant field to UserSettings type and saveableKeys - Wire account-level AI assistant toggle to userSettings.ai_assistant - Use pluginsQuery (big-sky slug) to derive per-site AI enabled list - Wire Remove button and site picker to bigSkyPluginMutation in ai-sites - Fix isAiEnabled to read from userSettings instead of hardcoded false - Switch site list rows to ActionList.ActionItem for consistent layout Made-with: Cursor
- Request big_sky_enabled in SITE_FIELDS for /me/sites payloads - Add big_sky_enabled to Site type (api-core) - ai-sites: derive enabled list from site.big_sky_enabled; invalidate sites query on Big Sky toggle; fix upsell Back button (tertiary, compact) - AI and MCP: replace pluginsQuery count with sites list + big_sky_enabled; use _n for 1 site vs N sites badge text Made-with: Cursor
a5c6b7e to
e20b4d7
Compare
|
This PR doesn't update the site level AI settings yet. Those designs require a mechanism to enable/disable tools per site - this doesn't exist but we can add this in follow up and update this page. https://linear.app/a8c/issue/AIINT-294/add-support-for-gating-mcp-tools-per-site Design for AI Setting per site
Current page for AI Setting per site
|
|
Nice work on this @eoigal. I'm going to share my feedback in separate comments so it'll be easier for you to track. Let's start with the sparkly AI icon. We should be using this AI icon that's already being used on the site settings:
Here are all the places where the sparkly one shows up:
|
|
Continuing with icons, it looks like you're using grid icons:
We need to use the WordPress design system icons:
More specifically:
|
| account_tools_enabled?: boolean; | ||
| abilities?: Record< string, unknown >; | ||
| // Inline sparkles icon to avoid restricted @automattic/components/src imports | ||
| const sparklesIcon = ( |
There was a problem hiding this comment.
Could we share the sparkles between mcp/index.tsx and preferences-ai-mcp/index.tsx? Are they the same?
There was a problem hiding this comment.
I left a comment about the sparkles. We're using the wrong ones.
| import PageLayout from '../../../components/page-layout'; | ||
| import { CATEGORY_ORDER, getDisplayCategory, isWriteTool } from '../categories'; | ||
|
|
||
| interface McpAbility { |
There was a problem hiding this comment.
This is duplicated across a few files. Not sure if worth sharing.












































Part of https://linear.app/a8c/issue/AIINT-280/implement-ai-mcp-settings-redesign-i1i2
Proposed Changes
/me/mcp, shows Enabled/Disabled status badge usinghasEnabledAccountTools, and uses a sparkles icon. Gated bymcp-settingsfeature flag.PreferencesPrivacy,PreferencesBlockedSites); remove them from the top-levelMeMenunavigation.FormTokenFieldin Dashboard MCP settings withPreferencesLoginSiteDropdown(visual site picker with site icon, name, and URL). Adds "Enabled sites" list (when account MCP is off) and "Disabled sites" list (when account MCP is on), each with Manage and Remove actions per site.getEnabledSiteIds()utility toclient/me/mcp/utils.jsfor retrieving sites with explicitly enabled MCP access.mcp-settingsfeature flag.Examples
Screen.Recording.2026-03-19.at.23.49.06.mov
Why are these changes being made?
Implements the i2 design updates for AI + MCP settings: improves discoverability by surfacing AI and MCP settings in Preferences, cleans up account navigation, replaces the token-based site selector with a more visual site picker, adds per-site MCP management in site-level AI tools settings, and simplifies AI assistant language.
Testing Instructions
mcp-settingsfeature flag locally - this is enabled in test/dev environments automatically./me/preferences-- verify the "AI and MCP" card appears with correct icon, description, and Enabled/Disabled badge./me/mcp-- verify theFormTokenFieldis replaced by thePreferencesLoginSiteDropdown.Pre-merge Checklist