← all systems

Design system

Microsoft Fluent UI

Invested

Fluent UI’s AI story is lopsided. The React monorepo has one of the most sophisticated builder-side agent setups of any major design system: a root AGENTS.md with numbered “never violate” rules, CLAUDE.md symlinked to it, .agents/skills/ + .claude/skills/ with nine executable slash-command skills (scaffolding, token lookup, lint auto-fix loops, Storybook+Playwright visual verification, PR review with confidence scoring, issue triage, Dependabot rollup), a .github/instructions/copilot.instructions.md with applyTo: '*', and a copilot-setup-steps.yml workflow that pre-provisions the GitHub Copilot coding agent’s container. By contrast, consumer-side affordances for React are essentially absent: no llms.txt, no llms-full.txt, no AI docs page on fluent2.microsoft.design, and no published MCP server. A Fluent UI maintainer stated publicly in June 2026 that Microsoft has an MCP “being used internally across Microsoft products” with no public release timeline, leaving the field to community npm servers. The one official consumer MCP is for the Blazor* flavor (Microsoft.FluentUI.AspNetCore.McpServer, 5.0.0-rc), shipped from microsoft/fluentui-blazor. Net: the team has industrialized AI for maintaining the system, and has not yet shipped anything for people building with it.


Org
Microsoft
License
MIT (repo license metadata reports NOASSERTION due to bundled third-party notices)
Last release
@fluentui/react-components 9.74.4 (2026-07-15); nightly 0.0.0-nightly-20260727-0407.1; GitHub release tags batched 2026-05-26
Activity
Very active: repo pushed 2026-07-27, ~40 commits in the trailing 30 days, 20.2k stars. v9 (@fluentui/react-components, packages/react-components/) is active development; v8 (@fluentui/react, packages/react/) is explicitly maintenance-only per AGENTS.md; web-components and charts active. Nightly + experimental + rc dist-tags all publishing.

For consumers — building with it

Thin, and notably thinner than Fluent UI’s stature would suggest. No llms.txt or llms-full.txt on fluent2.microsoft.design (every path returns the same Astro SPA shell; this study confirmed /llms.txt, /llms-full.txt, /ai, /docs/mcp and a deliberately fake path all return byte-identical HTML, so those 200s are a catch-all, not content). No llms.txt on react.fluentui.dev (genuine 404). No AI/MCP/Copilot mention anywhere on fluent2.microsoft.design/get-started/develop. No official React MCP server, no @fluentui/mcp on npm, no ‘Add to Cursor’ buttons, no distributed .cursorrules template for consumers, no published component registry for agents, no consumer-facing Claude skill. The one official artifact is the Blazor MCP server (Microsoft.FluentUI.AspNetCore.McpServer, rc, dotnet tool fluentui-mcp, 142+ components, 5 tools), a different platform from the flagship React library. React consumers are served by community MCP servers (blendsdk/fluentui-mcp on npm, aminvishvam/fluentui-mcp-server) whose existence a maintainer implicitly acknowledged as filling a real gap while noting Microsoft runs an equivalent internally. There is a packages/cra-template and starter-templates/ for scaffolding, but neither is AI-aware.

For builders — maintaining it

Deep and unusually operational, among the strongest builder-side setups in this study. Four layers. (1) Instruction files: AGENTS.md at root with ‘source of truth over existing code’ framing, five numbered never-violate rules, a canonical v9 component template, an anti-pattern blocklist, and a package-map for the 74+ package tree; CLAUDE.md is a one-line redirect to it; .github/instructions/copilot.instructions.md with applyTo: '**' plus a scoped dependabot-security-fixes instruction file. (2) Executable skills: nine SKILL.md files mirrored into .agents/skills/ and .claude/skills/, covering scaffolding (v9-component), token remediation (token-lookup), lint auto-fix loops (lint-check), visual verification via Storybook+Playwright (visual-test), change-file generation (change), package introspection (package-info), PR review with confidence scoring (review-pr), issue triage (triage-issues), and Dependabot batching (dependabot-rollup). (3) Agent infrastructure: copilot-setup-steps.yml pre-provisions the Copilot coding agent’s container with Node 22 + immutable yarn install; .github/triage-bot.config.json and issues.yml/pr-housekeeping.yml workflows automate queue hygiene. (4) Curated deep-dive docs written for agents to follow the links: docs/architecture/{component-patterns,design-tokens,layers}.md, docs/workflows/{contributing,testing}.md, docs/team-routing.md, docs/quality-grades.md, docs/tech-debt-tracker.md. The .agents/ + .claude/ duplication signals deliberate multi-vendor portability rather than betting on one assistant.

Affordances · 8

Concrete AI-facing artifacts this system ships. Expand for snippets and links.

  • AGENTS.mdAGENTS.md (repo root)officialbuilders

    Root agent instruction file for the fluentui monorepo. Opens with an Nx-managed auto-updated block, then declares itself the source of truth over existing code, lists 5 numbered ‘Critical Rules (never violate)’, a canonical v9 component template, a ‘Legacy Anti-Patterns (never copy these)’ list, exploration guidance for the 74+ package tree, and an index of deep-dive docs plus the nine skills. CLAUDE.md at repo root contains exactly the single line AGENTS.md (a pointer/symlink-style redirect).

    markdown microsoft/fluentui (opens in new tab)
    # Fluent UI — Agent Instructions
    
    **Instructions in this file are the source of truth, not existing code.** This repo contains
    legacy patterns (especially in v8 packages) that predate current standards. Never copy patterns
    from existing code without verifying they match these instructions.
    
    ## Critical Rules (never violate)
    
    1. **Never hardcode colors, spacing, or typography values.** Always use design tokens from `@fluentui/react-theme`. See [docs/architecture/design-tokens.md](docs/architecture/design-tokens.md).
    2. **Never use `React.FC`.** Always use `ForwardRefComponent` with `React.forwardRef`.
    3. **Never access `window`, `document`, or `navigator` directly.** In v9 components, use `useFluent_unstable()` to get `targetDocument` and `targetDocument.defaultView` instead of `document`/`window`. For non-component code, use `canUseDOM()` from `@fluentui/react-utilities`.
    4. **Never add dependencies between component packages.** `react-button` must not depend on `react-menu`. Shared logic goes in `react-utilities` or `react-shared-contexts`. See [docs/architecture/layers.md](docs/architecture/layers.md).
    5. **Never skip beachball change files** for published package changes. Run `yarn beachball change`.

    CLAUDE.md is a one-line redirect to AGENTS.md, so Claude Code and generic agents get identical rules.

  • Agent skill.agents/skills/ and .claude/skills/ — nine executable skillsofficialbuilders

    Nine skill directories, duplicated under both .agents/skills/ (portable) and .claude/skills/ (Claude Code): change, dependabot-rollup (.agents only), lint-check, package-info, review-pr, token-lookup, triage-issues, v9-component, visual-test. Each SKILL.md has YAML frontmatter with name, description, argument-hint, allowed-tools, and several set disable-model-invocation: true so they only run when a human explicitly types the slash command. AGENTS.md advertises them in a table as slash commands (/v9-component Name, /token-lookup val, /lint-check [pkg], /visual-test Name, /review-pr #123, /triage-issues, /dependabot-rollup).

    markdown microsoft/fluentui (opens in new tab)
    ---
    name: v9-component
    description: Scaffold a new v9 component with all required files following Fluent UI patterns (hook, styles, render, types, tests, stories, conformance)
    disable-model-invocation: true
    argument-hint: <ComponentName>
    allowed-tools: Read Write Bash Glob Grep
    ---
    
    # Scaffold a V9 Component
    
    Create a new v9 component named **$ARGUMENTS** using the repo's Nx generators.
    
    ## Steps
    
    ### Adding a component to an existing package
    
    Use the `react-component` generator:
    
    ```bash
    yarn nx g @fluentui/workspace-plugin:react-component --name $ARGUMENTS --project <project-name>
    ```

    Note the deliberate refusal to let the model free-hand a component: the skill forces the Nx generator (@fluentui/workspace-plugin:react-component) rather than describing files to write.

  • Copilot instructions.github/instructions/copilot.instructions.mdofficialbuilders

    Path-scoped Copilot instruction file with frontmatter applyTo: '**'. Establishes repo topology (Nx, Yarn 4.x, Node ^22, TypeScript strict), then ranks the four product lines with explicit routing verdicts (v9 ‘PRIORITIZE FOR NEW WORK’, v8 ‘MAINTENANCE ONLY’) and enumerates the exact Nx commands agents must use instead of raw tooling. A second file, dependabot-security-fixes.instructions.md, scopes dependency-security work.

    markdown microsoft/fluentui (opens in new tab)
    ---
    applyTo: '**'
    ---
    
    # Fluent UI Copilot Instructions
    
    You are working in the Microsoft Fluent UI monorepo, a comprehensive design system and UI component library for web applications.
    
    ## Project Structure
    
    1. **Fluent UI v9** (`@fluentui/react-components`) - **PRIORITIZE FOR NEW WORK**
    
       - Location: `packages/react-components/`
       - Nx Project Tags: `vNext`
    
    2. **Fluent UI v8** (`@fluentui/react`) - **MAINTENANCE ONLY**
    
       - Location: `packages/react/`
       - Nx Project Tags: `v8`
       - Status: Maintenance mode
  • Othercopilot-setup-steps.yml — Copilot coding agent environment provisioningofficialbuilders

    A GitHub Actions workflow whose job is named copilot-setup-steps specifically so the GitHub Copilot coding agent picks it up and pre-installs the toolchain (checkout with full history, Node 22 with yarn cache, yarn install --immutable) before the agent starts work. This is infrastructure investment in autonomous agent PRs, not just prompt text.

    name: 'Copilot Setup Steps'
    
    on: workflow_dispatch
    
    jobs:
      # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.
      copilot-setup-steps:
        runs-on: ubuntu-latest
    
        permissions:
          contents: read
    
        steps:
          - name: Checkout code
            uses: actions/checkout@v6
            with:
              fetch-depth: 0
    
          - name: Set up Node.js
            uses: actions/setup-node@v6
            with:
              cache: 'yarn'
              node-version: '22'
    
          - run: yarn install --immutable
  • MCP serverMicrosoft.FluentUI.AspNetCore.McpServer (Fluent UI Blazor)officialconsumers

    The only OFFICIAL Microsoft MCP server for any Fluent UI flavor. Lives at src/Tools/McpServer on the dev-v5 branch of microsoft/fluentui-blazor and ships to NuGet as a global dotnet tool (dotnet tool install -g Microsoft.FluentUI.AspNetCore.McpServer, binary fluentui-mcp, 5.0.0-rc.1, MIT). Serves docs for 142+ Blazor components. Tools: ListComponents, SearchComponents, GetComponentDetails, GetEnumValues, GetComponentEnums. The source tree also contains a Prompts/ and Resources/ directory, i.e. it exposes MCP prompts, not only tools. Does NOT cover Fluent UI React.

    # Fluent UI Blazor MCP Server
    
    A Model Context Protocol (MCP) server that provides documentation for the [Fluent UI Blazor](https://github.com/microsoft/fluentui-blazor) component library.
    
    ## Overview
    
    This MCP server enables AI assistants to access comprehensive documentation about Fluent UI Blazor components, including:
    
    - **Component listing** - Browse all 142+ available components with descriptions
    - **Component details** - Get complete documentation including parameters, events, and methods
    - **Search** - Find components by name or description
    - **Enum information** - Explore enum types and their values
    
    ## Installation
    
    ### Option 1: Install as dotnet tool based on NuGet.org (Recommended)
    
    ```bash
    dotnet tool install -g Microsoft.FluentUI.AspNetCore.McpServer
    ```
    
    **For Visual Studio Code** (`.vscode/mcp.json`):
    
    ```json
    {
        "servers": {
            "fluent-ui-blazor": {
                "command": "fluentui-mcp"
            }
        }
    }
    ```

    Release-candidate status as of 5.0.0-rc.1 (Feb 2026). Not present on the main/dev branches; v5 line only.

  • MCP serverInternal Microsoft Fluent UI React MCP (unreleased)officialconsumers

    In GitHub Discussion #35732 (June 2026), Fluent UI maintainer @mainframev responded to a community MCP server announcement by disclosing that Microsoft already operates an MCP for Fluent UI React ‘being used internally across Microsoft products,’ built on current documentation plus additional sources. No public release timeline was given. Recorded here because it is the reason the public React surface has no official MCP. This is a deliberate internal-first posture, not an absence of work.

    UNRELEASED / not publicly installable. Verify before citing as available.

  • MCP serverfluentui-mcp (community, blendsdk)communityconsumers

    Community npm MCP server for Fluent UI React, announced in microsoft/fluentui Discussion #35732. Scans Fluent UI source to extract docs, type information, examples and patterns for AI consumption; built explicitly to stop models producing ‘inconsistent, incomplete, or just plain wrong’ Fluent UI code. npm fluentui-mcp 1.2.1, last published 2026-06-03.

  • MCP serverOther community Fluent UI MCP serverscommunityconsumers

    A fragmented long tail: aminvishvam/fluentui-mcp-server (12 tools across 4 categories: custom hooks, style generation, TypeScript interfaces, accessibility compliance checking) and npm mcp-fluent-ui 1.0.2 (last published 2025-09-05, likely abandoned). Listed on aggregators such as LobeHub and mcpmarket. None are endorsed by Microsoft.

    Quality unverified; mcp-fluent-ui is ~11 months stale.

Coercion techniques · 8

How this system keeps models on-system instead of inventing components.

  • Prohibition“Source of truth, not existing code” — overriding the repo itself

    The single most transferable trick in the file. Fluent UI’s monorepo is 74+ v9 packages sitting next to a large v8 legacy tree, so RAG-over-the-repo and pattern-matching from neighbours actively produce wrong output. AGENTS.md pre-empts that by ranking the instruction file ABOVE the codebase, then names the contaminated directories explicitly so the agent can’t rationalize its way back in.

    markdown microsoft/fluentui (opens in new tab)
    **Instructions in this file are the source of truth, not existing code.** This repo contains
    legacy patterns (especially in v8 packages) that predate current standards. Never copy patterns
    from existing code without verifying they match these instructions.
    
    ## Legacy Anti-Patterns (never copy these)
    
    - **DO NOT copy patterns from `packages/react/` (v8).** That's maintenance-only legacy code using runtime styling, class components, and different APIs.
    - **DO NOT use `@fluentui/react` imports for new v9 work.** Use `@fluentui/react-components`.
    - **DO NOT use `mergeStyles` or `mergeStyleSets`.** Use Griffel `makeStyles` with design tokens.
    - **DO NOT use `IStyle` or `IStyleFunctionOrObject`.** Use Griffel's `GriffelStyle` type.
    - **DO NOT use `initializeIcons()`.** V9 uses `@fluentui/react-icons` with tree-shaking.
  • Token enforcementNumbered “Critical Rules (never violate)” with token enforcement at #1

    Five hard prohibitions, each phrased as ‘Never X. Always Y.’ plus a link to the deep-dive doc. Rule 1 is the classic design-system coercion: no hardcoded colors, spacing or typography, always tokens from @fluentui/react-theme. Rule 4 encodes the package-layering invariant (‘react-button must not depend on react-menu’) that agents routinely violate. Rule 5 forces a release-process side effect (yarn beachball change) the model would otherwise skip.

    markdown microsoft/fluentui (opens in new tab)
    1. **Never hardcode colors, spacing, or typography values.** Always use design tokens from `@fluentui/react-theme`.
    2. **Never use `React.FC`.** Always use `ForwardRefComponent` with `React.forwardRef`.
    3. **Never access `window`, `document`, or `navigator` directly.** In v9 components, use `useFluent_unstable()` to get `targetDocument` and `targetDocument.defaultView` instead of `document`/`window`.
    4. **Never add dependencies between component packages.** `react-button` must not depend on `react-menu`.
    5. **Never skip beachball change files** for published package changes. Run `yarn beachball change`.
  • Validation loopLint-rule → fix-recipe table, with re-run verification per file

    The /lint-check skill turns the repo’s custom @fluentui/* ESLint rules into a machine-readable remediation table (rule name → what it catches → how to fix), then mandates a per-file verify step: apply the fix, re-run lint on that file, repeat. This is the enforcement arm behind AGENTS.md’s prohibitions: the prose bans React.FC, and @fluentui/no-global-react makes it fail CI, and the skill teaches the agent how to close the loop.

    markdown microsoft/fluentui (opens in new tab)
    2. **Parse the output** and categorize errors by the custom Fluent UI ESLint rules:
    
       | Rule                                    | What it catches                             | How to fix                                            |
       | `@fluentui/ban-context-export`          | Context exported from wrong layer           | Move to `react-shared-contexts` package               |
       | `@fluentui/ban-instanceof-html-element` | `instanceof HTMLElement` (breaks iframes)   | Use element.tagName or feature detection              |
       | `@fluentui/no-global-react`             | `React.FC`, `React.useState` etc.           | Use named imports: `import { useState } from 'react'` |
       | `@fluentui/no-restricted-imports`       | Banned import paths                         | Use the allowed import path from the error message    |
       | `@fluentui/no-context-default-value`    | Context created without `undefined` default | Use `createContext(undefined)` and add a guard hook   |
    
    3. **Auto-fix** any issues found by editing the source files directly. For each fix:
    
       - Read the file
       - Apply the fix
       - Verify the fix by re-running lint on that specific file
  • ScaffoldingForcing the generator instead of free-hand scaffolding

    /v9-component never tells the model which files to create. It routes every path through the repo’s own Nx generators (yarn nx g @fluentui/workspace-plugin:react-component, yarn create-package) and then hands the agent a post-generation checklist (fill in logic per component-patterns.md, add token-based styles, regenerate API docs via yarn nx run <project>:generate-api). The generator is the spec; the agent is only allowed to fill the holes.

    markdown microsoft/fluentui (opens in new tab)
    Use the `react-component` generator:
    
    ```bash
    yarn nx g @fluentui/workspace-plugin:react-component --name $ARGUMENTS --project <project-name>
    ```
    
    Where `<project-name>` is the Nx project (e.g., `react-button`). This generates all required files: component, types, hook, styles, render, index barrel, and conformance test.
    
    ### After scaffolding
    
    1. **Review generated files** against [docs/architecture/component-patterns.md]...
    2. **Add styles** in `use${ARGUMENTS}Styles.styles.ts` using design tokens
    4. **Update API docs** after adding exports:
       ```bash
       yarn nx run <project>:generate-api
       ```
    
    ## Critical Rules
    
    - Always use `ForwardRefComponent` with `React.forwardRef` — never `React.FC`
  • Curated contextToken lookup as a search procedure + few-shot mapping table

    /token-lookup <css-value> gives the model a value-category decision tree (hex → color tokens, px → spacing/font-size/radius, ms → duration), points it at the exact theme source path to grep (packages/react-components/react-theme/library/src/), constrains it to allowed-tools: Read Grep Glob (read-only, so it cannot ‘fix’ anything, only advise), and seeds a few-shot table of common hardcoded→token mappings. Crucially it also handles the failure mode: if no exact match, suggest the closest semantic token AND explain the difference.

    markdown microsoft/fluentui (opens in new tab)
    ---
    name: token-lookup
    description: Find the matching Fluent UI design token for a hardcoded CSS value (color, spacing, font size, border radius, shadow)
    argument-hint: <css-value>
    allowed-tools: Read Grep Glob
    ---
    
    2. **Search the theme source** for matching values:
    
       ```
       packages/react-components/react-theme/library/src/
       ```
    
    4. **If no exact match exists**, suggest the closest semantic token and explain the difference.
    
    ## Common Mappings
    
    | Hardcoded           | Token                                                    |
    | `#0078d4`           | `tokens.colorBrandBackground`                            |
    | `#323130`           | `tokens.colorNeutralForeground1`                         |
    | `#ffffff`           | `tokens.colorNeutralBackground1`                         |
  • Validation loopVisual verification loop: per-component Storybook + Playwright screenshot

    /visual-test closes the see-what-you-built loop. It pins an exact tool version (npx -y @playwright/cli@0.1.1) so nothing is installed globally, and hard-constrains the agent to boot only the per-component stories package via the nx storybook target, because the full Storybook would drag in 74 packages. It even encodes a temporal caveat about workspace snapshots older than April 2026, and an explicit stop-and-ask branch when the stories package doesn’t exist.

    markdown microsoft/fluentui (opens in new tab)
    ## Critical: use the per-component Storybook only
    
    Always boot the **per-component stories package** (`react-<component>-stories`) via nx `storybook` target, which only imports its own component's stories and dependencies.
    
    1. **Find the component's stories package.**
    
       ```bash
       yarn nx show project react-<lowercase-component-name>-stories --json
       ```
    
       If nx returns nothing with output of `Could not find project react-<component>-stories`, the component doesn't have its own stories package — check for a preview package (`react-<component>-preview-stories`) or ask before proceeding.
    
    2. **Start the component's Storybook dev server.** Use the `storybook` target on the stories project directly — it's the most portable, since library aliases like `react-<component>:start` were only added in April 2026 and may not exist in older workspace snapshots
  • Tool-gatingRecommend-then-apply gating on mutating skills

    Every skill that can change shared state is gated twice: YAML disable-model-invocation: true (a human must type the slash command; the model cannot autonomously decide to run it) plus an in-prose approval checkpoint. /triage-issues names the mode outright and justifies it with an asymmetric-cost argument; /dependabot-rollup enumerates the exact forbidden mutations and refuses to guess at invalid arguments, hard-caps the batch at 11, and requires a temporary git worktree so unrelated local changes survive.

    markdown microsoft/fluentui (opens in new tab)
    This skill operates in **recommend-then-apply** mode: never mutate issues until the user has approved the batch. A wrong label is cheap to add and annoying to remove, so lean on the approval step.
    
    --- and, from dependabot-rollup/SKILL.md ---
    
    The default operation is read-only: discover candidates, classify them, and present a plan. Never create a branch, merge commits, push, close pull requests, or open a rollup PR until the user explicitly approves the proposed candidates.
    
    Reject an invalid repository name, a `--max` value that is not an integer from 1 through 11, an unknown Git remote, or unknown arguments instead of guessing. The value 11 is an absolute ceiling, not only the default.
    
    Do not require a clean current working tree. Approved rollups must use a temporary Git worktree so unrelated local changes remain untouched.
  • Registry metadataPR-type classification table that scopes which rules apply

    /review-pr refuses to run a uniform checklist. It first classifies the PR from changed-file globs and branch prefixes into six types, each with an explicit check scope, then suppresses rule families by directory: v9 pattern checks are skipped for packages/react/ (v8 maintenance) and React checks skipped for packages/web-components/. This prevents the review agent from generating the false positives that would otherwise train maintainers to ignore it. Output is a merge-readiness confidence score.

    markdown microsoft/fluentui (opens in new tab)
    ## Phase 2: Classify PR Type
    
    | Type             | Detection                                                            | Check scope                                    |
    | **docs-only**    | All files are `*.md`, `docs/**`, `**/stories/**`, `**/.storybook/**` | Change file only                               |
    | **test-only**    | All files are `*.test.*`, `*.spec.*`, `**/testing/**`                | Change file + test quality                     |
    | **bug-fix**      | Branch starts with `fix/` or title contains "fix"                    | All checks, extra weight on tests              |
    | **feature**      | Branch starts with `feat/` or adds new exports                       | All checks, extra weight on API + patterns     |
    | **refactor**     | No new exports, restructures existing code                           | All checks, extra weight on no behavior change |
    | **config/infra** | Changes to CI, configs, scripts only                                 | Change file + no regressions                   |
    
    For **v8 packages** (`packages/react/`): skip V9 pattern checks — those are maintenance-only with different patterns.
    For **web-components** (`packages/web-components/`): skip React-specific checks.

Platform integrations

Figma

Official Fluent 2 UI kits published on Figma Community (Microsoft Fluent 2 Web, Fluent 2 iOS, Fluent Android, Fluent system iconography). The Web kit was refactored so components use Figma variables aligned to code tokens, and Microsoft has described an internal Figma plug-in that replaces the native properties panel so designers assign tokens rather than raw colors/stroke-widths. this study found NO evidence of Figma Code Connect (*.figma.tsx files) in microsoft/fluentui, and no Dev Mode MCP guidance in the docs; treat Code Connect as unconfirmed or absent.

Storybook

Storybook is the primary dev/docs surface: per-component stories packages (react-<component>-stories) each with their own nx storybook target, a root .storybook/, plus StoryWright-driven visual regression testing wired into pr-vrt.yml / vrt-baseline.yml workflows. The /visual-test agent skill drives these per-component Storybooks with Playwright to give agents a screenshot feedback loop.

Other

Nx workspace with custom plugins (tools/workspace-plugin/) providing the react-component and react-library generators; API Extractor generates api.md files as machine-readable API surface; Beachball manages change files and releases. The root AGENTS.md carries an Nx-managed auto-updated block instructing agents to use nx_workspace, nx_project_details and nx_docs MCP tools, so Fluent UI inherits the Nx MCP server as a builder-side affordance.

Gaps & open questions

Not confirmed, or not found: (1) No llms.txt or llms-full.txt anywhere. fluent2.microsoft.design returns HTTP 200 with an identical Astro SPA shell for /llms.txt, /llms-full.txt, /ai, /docs/mcp, /mcp AND for a nonsense control path: a catch-all router, not real files. react.fluentui.dev/llms.txt is a hard 404. Anyone scanning by status code will produce a false positive here. (2) No official Fluent UI React MCP server exists publicly; the maintainer statement about an internal one (Discussion #35732, June 2026) is a claim in a GitHub comment, with no artifact, no timeline, and no way to verify scope. (3) No Figma Code Connect found: GitHub code search for *.figma.tsx in the repo returned 404/not-found for my token’s search scope, so it was not possible to exhaustively prove absence; no positive evidence in the repo tree or docs either. Treat as ‘no evidence of’, not ‘definitively absent’. (4) this study did not read every one of the nine SKILL.md files end-to-end (change, package-info, and the tails of review-pr/triage-issues/dependabot-rollup were sampled from their heads only), so additional coercion language likely exists beyond what is quoted here. (5) No AI-assisted codemod evidence: packages/codemods exists but this study did not confirm any AI/LLM involvement. It appears to be conventional jscodeshift-style tooling, and the v8→v9 migration guidance is documentation, not an agent. (6) .github/instructions/dependabot-security-fixes.instructions.md was confirmed to exist but not read. (7) The Blazor MCP server is 5.0.0-rc.1 on a non-default branch (dev-v5); it is official but pre-release, and its tool list came partly from a maintainer’s blog post rather than the source. (8) GitHub release tags are batched oddly (latest tags dated 2026-05-26 while npm latest for @fluentui/react-components is 9.74.4 published 2026-07-15). npm is the reliable freshness signal, not GitHub Releases. (9) Community MCP server quality is entirely unassessed; mcp-fluent-ui on npm is ~11 months stale and may be abandoned.

Sources