Home

Capabilities

Umbraco 17 + AI Capabilities Tracker

My Source of truth for what I've tested with MCP integration and Umbraco AI. This file should be kept in sync with the Capabilities page in the Umbraco backoffice.

Last Updated: 2026-04-28


Working Capabilities

Content Management via MCP

Capability Status Notes
Article creation with category assignment and date metadata MCP document tools
Multi-author attribution on content blocks (6 element types) Commits 29666c0, d9491f0
Document type property modifications (add/rename fields, swap data types) Commits 29666c0, d9491f0, f2ed323
Custom document type creation via MCP Commit f3705cd — created Documentation doc type
Data type creation via MCP (MNTP, Markdown, Richtext) Commits 5b9306f, d9491f0, f3705cd
Document type schema sync via Deploy .uda files All schema changes tracked in umbraco/Deploy/Revision/
Structured markdown parsing for bulk operations Used during content creation workflows
Adding composition doc types to existing types Commit f3705cd — Documentation uses 5 compositions
Allowing child content types on parent pages Commit f3705cd — Documentation allowed under Home
Document search via MCP Used search-document to find Capabilities page
Content property update via MCP Used update-document-properties to push markdown content
Content publishing via MCP Used publish-document to publish updated Capabilities page
Document tree traversal via Management API Walked tree root → children to locate articles for bulk SEO update
Bulk content operations via MCP Updated SEO fields across all blog articles in a single workflow
Block List editor configuration (add/remove block types) Alert Banner element type registered in Block List data type via MCP
Dynamic category resolution from backoffice (no hardcoding) Commit d30aa50 — categories pulled from category list via Management API
Large-scale schema rollout with .uda drift management Package C design-system rollout introduced 1 new data type, 1 new composition, 12 dictionary keys, and modified ~7 existing doc types across 9 phases. /check-uda used to detect drift before each push; one Live restart (per the documented "import pending schema" canonical fix) cleared a stuck import. Net: zero conflicts merged

AI Content Generation (Copilot)

Capability Status Notes
Custom agent personas with distinct personality and voice Backoffice Settings > AI > Agent config
Context management for brand consistency and topic boundaries Backoffice Settings > AI > Contexts
Page property modifications (metadata, titles, descriptions) Copilot editing via configured permissions
Rich Text block population with maintained voice consistency Requires pre-created block structure
SEO metadata generation from page content Copilot reads current page content and generates metaName, metaDescription, metaKeywords
Text summarization prompt Backoffice Settings > AI > Prompts — summarize selected text in-place
Image alt text generation prompt Backoffice Settings > AI > Prompts — generates descriptive alt text for selected images
SEO content agent Backoffice Settings > AI > Agents — dedicated agent for generating SEO titles, descriptions, and keywords
CMS editor support agent Backoffice Settings > AI > Agents — support agent that helps train editors how to navigate and use Umbraco
AI configuration auto-serializes to .uda for Cloud deploy Commit 2801c20Umbraco.AI.Deploy + Umbraco.AI.Prompt.Deploy packages serialize Connections, Contexts, Guardrails, Chat Profiles, Embedding Profiles, Prompts, and Settings to umbraco-ai-*.uda artifacts on save. Secret references stay as placeholders ($OpenAI:ApiKey etc.); raw keys never enter the artifact stream

MCP + AI Agent Orchestration

Capability Status Notes
Automated content workflow (fetch → generate → update) Claude Code walked document tree via Management API, extracted article content, called AI Agent API to generate SEO fields, then updated each document
AI Agent API invocation from Claude Code POST to /umbraco/ai/management/api/v1/agents/{alias}/run with SSE streaming response
Coordinated bulk AI generation Generated SEO metadata for all blog articles by orchestrating MCP reads, Agent API calls, and Management API writes

Backoffice Extensions

Capability Status Notes
Dashboard extension via Umbraco Skills plugin Commit d5c7cee — HelloWorld extension
Custom Settings dashboard (Image Generator — single/batch generation controls) Commit 55306d4 — Lit dashboard in Settings section with C# API controller. Palette editing moved to standard Umbraco content editor in c30de0b
Property action on media picker (one-click image generation from article edit page) Commit 55306d4 — registered on Umbraco.MediaPicker3 properties
C# API controller backing a backoffice extension (generation + process spawning) src/HelloWorld/ImageGeneratorController.cs

Claude Code Custom Commands

Capability Status Notes
/spec — Feature spec and branch generation from a short idea Outputs _specs/{slug}.md — functional requirements, acceptance criteria, edge cases, auto-generated branch
/plan — Phased, TDD-first implementation plan from a spec Outputs _plans/{slug}.md — step-by-step prompts, each self-contained
/block — TDD block component creation (RED → GREEN) Commit f0fb946 — Alert Banner block created via E2E test-first workflow
/feature — Living BDD feature spec from specs, plans, and tests Outputs _features/{slug}.md — Given/When/Then scenarios grouped by Rule, test coverage table; source of truth for current behavior
/code-review — Orchestrates three subagents in parallel (accessibility, code quality, performance) to review uncommitted changes Commits f330598, a9e5f6b, a60fb21 — three specialized agents run concurrently and report findings
/check-uda — Detailed pre-commit analysis of Umbraco Deploy schema conflicts (fetches remote state, rates severity, gives remediation steps) Commit f5ee9bb — also ships pre-commit/pre-push/post-merge git hooks in .githooks/
/cms-image — Generate flow-field featured images from article metadata and publish to CMS Commit 8bd4457 — CLI + backoffice integration

Development Workflow

End-to-end pipeline from idea to shipped feature. Each stage has a dedicated command that reads the previous stage's artifact and produces the next. Six features have travelled this pipeline so far (see _features/): section-navigation, alert-banner-icons, image-carousel-captions-controls, image-generator, site-header, umbraco-ai-search. Shipped specs and plans are archived under _specs/shipped/ and _plans/shipped/ so the top-level lists reflect only active work.

Stage Command Artifact Notes
1. Idea → spec /spec _specs/{slug}.md Functional requirements, acceptance criteria, edge cases; creates a feature branch
2. Spec → plan /plan _plans/{slug}.md TDD-first implementation steps, each a self-contained prompt
3. Plan → TDD block (RED → GREEN) /block E2E spec + element type + Razor partial E2E test fails first, then element type created via Management API, then partial added until test passes. Registers block in Block List data type via MCP and guards against {alias}.cshtml naming drift.
4. Implementation → living BDD spec /feature _features/{slug}.md Given/When/Then scenarios grouped by Rule, test coverage table; kept in sync as the feature evolves — the regression source of truth
5. Uncommitted changes → review /code-review Three parallel subagents: accessibility, code quality, performance

Site Features

Capability Status Notes
Section navigation sidebar (desktop col-lg-3 + mobile "In this Section" Bootstrap collapse toggle) Commits 1f750a9, 0da9ebesectionNavigationControls composition doc type added to content and documentation types via Management API scripts
Article list grid view display mode (editor-selectable list vs grid, displayMode dropdown on latestArticlesRow block) Commit ede1bcf — Bootstrap grid rendering, 24-test E2E suite
Updated site footer (multi-column layout, branding, link groups, CSS custom properties) Commit 8239aca — new footer.cshtml partial, new document type for footer content, E2E suite
Site-wide design-system overhaul ("v2 chrome" rollout) Phased rollout via parallel master-v2.cshtml layout. Foundation (c5c4ae9), v2 partials (1107aa3), Phase 0 schema + helpers (b9b11ca), then per-template cutover: articleList (0b10638), search (7c203b4), content/documentation + section-nav (a3b87db), article (8d82dce), home (2287375), final retire of legacy chrome and master-v2 → master rename (2443d31). Page-by-page browser verification at desktop and 390px-narrow against locked HTML mocks
Schema additions for v2 chrome New pageHeadPatternControls composition (Page Head Pattern dropdown: none/scatter/stochastic) applied to 6 doc types; new Home fields (manifestoTitle, manifestoBody, manifestoEyebrowLeft/Right, manifestoAudience, pullQuote, pullQuoteAttribution); [Dropdown] Page Head Pattern data type. All distributed via MCP and .uda files
Reading-time helper computed from word count src/UmbracoProject/Helpers/ReadingTime.cs — iterates BlockListModel rows, strips HTML, divides by 225 wpm, floor of 1 minute. Per-request IMemoryCache keyed on article.Id + UpdateDate.Ticks. Wired into _MastheadArticle, _LatestSection, _ArticleCard partials
Editorial dictionary keys for chrome strings 12 new dictionary keys seeded for v2 chrome (Home.HeroEyebrow, Home.LatestTitle, Footer.PublicationHeading, Article.By, Navigation.MenuTitle, etc.) — managed under Translation in the backoffice
E2E selector retargeting alongside template cutover siteHeader.spec.ts, sectionNavigation.spec.ts, linkStyles.spec.ts, updatedFooter.spec.ts retargeted phase-by-phase from legacy markup (header.masthead, #mainNav, .section-nav-desktop) to v2 class vocabulary (.site-head, .site-nav, .section-nav, .foot, .page-head, .art-head)

Procedural Image Generation

Capability Status Notes
Deterministic flow-field PNG generation seeded from article metadata Commit 8bd4457 — TypeScript CLI at scripts/image-generator/
Category-to-color palette mapping with multi-category merging Palettes read from "Site Settings" CMS content (see below); config/palettes.json retained as seed/fallback
Palette configuration stored as CMS content (editable in standard Umbraco content editor, transfers between environments via Umbraco Deploy) Commit c30de0bPaletteService reads from published "Site Settings" document via IPublishedContentQuery, with hex→RGB conversion and default-palette fallback
"Site Settings" document type hidden from navigation via composition Commits a3b3ebc, 1f0bb56 — document type for site-wide config; composition hides it from nav/menus
[BlockList] Category Palettes data type with per-category color blocks Commit 98ee79f — Block List of category→(primary/mid/deep) hex colors using Eye Dropper color picker
Batch image generation + upload to Umbraco media library via Management API CLI --batch flag; backoffice dashboard batch mode
End-to-end pipeline: generate → upload media → assign mainImage property CLI orchestrates metadata fetch, canvas render, media upload, and property assignment

Public-site search at /search runs on the new Umbraco.Cms.Search framework (destined to replace the legacy Examine-backed IPublishedContentQuery.Search() API in Umbraco v18) with Umbraco.AI.Search layered on top for vector/semantic search. Examine stays registered as a hybrid keyword-fallback and as the backoffice search provider.

Capability Status Notes
Hybrid keyword + semantic search at /search Commit e192ffcUmbraco.Cms.Search.Provider.Examine (keyword) + Umbraco.AI.Search (vector) registered side-by-side; OpenAI text-embedding-3-small 512-dim embeddings; documents auto-chunked + embedded on publish
Semantic recall on paraphrased queries Pages surface on conceptually-related queries that don't share keywords (e.g. paraphrased "how do I get started" matches relevant content even without those literal words). Quality on the demo content set was stronger than expected
System pages excluded from results Search page, Error, XMLSitemap, Category/CategoryList pages filtered out at render time
Article results render author + publish date Article-typed results render a "Posted by on " line; non-article results omit it
Vector index rebuild from backoffice Settings → Search → UmbAI_Search row → rebuild icon. ~3–4 vector chunks per published document on the demo site, ~115 chunks total across 33 documents; under 1 minute end-to-end
Replaces legacy IPublishedContentQuery.Search() Public /search route no longer calls Examine directly; the ISearcher/ISearcherResolver façade routes to the AI provider with Examine as keyword fallback

E2E Testing

Capability Status Notes
E2E resilience rules (dynamic UUIDs, stale cleanup, token refresh, regex assertions) Commit 05d5b91 — 7 rules codified in CLAUDE.md and applied to section nav tests
Article list grid view E2E suite (24 tests: rendering, edge cases, responsive breakpoints) Commit ede1bcftests/e2e/articleListGridView.spec.ts
Site footer E2E suite (column layout, links, branding, responsive behavior) Commit 8239acatests/e2e/footer/updatedFooter.spec.ts

Known Limitations

AI Copilot Block Management

Limitation Details
Cannot autonomously create new Rich Text Row blocks Copilot can only edit existing blocks, not add new ones
Cannot populate empty blocks without prior manual setup Block structure must be pre-created before Copilot can fill content
Requires pre-created block structure for content generation Manual block scaffolding needed first
Copilot is scoped to the current page only Cannot navigate the document tree or modify content on other pages. Cross-page operations require MCP + Management API orchestration.

MCP Environment

Limitation Details
/doctor static check may report false warnings MCP environment variables work at runtime despite warnings

AI Schema Deploy & Search Index

Limitation Details
AI agents do not auto-deploy to Cloud Umbraco.AI.Agent.Deploy is intentionally not installed — beta1 throws MissingMethodException on AIAgent.ContextIds, beta2 depends on the unpublished Umbraco.AI.Agent.Core 1.8.1. Agents are recreated manually in each Cloud environment after the chat profiles deploy via .uda
Vector search index does not replicate across environments The UmbAI_Search index is per-environment. After every Cloud deploy that affects content or AI configuration, rebuild the index via Settings → Search on that environment before promoting further

Untested Capabilities

Capability Category Notes
Media upload and management via MCP MCP media tool collection is enabled but not exercised (CLI uses Management API directly)
Multi-language AI translation AI Requires Umbraco variants configuration
Content unpublishing via MCP MCP unpublish-document tool available but not tested
Content validation via MCP MCP validate-document tool available but not tested

Changelog

Date Change Related Commits
2026-02-13 Added author field to 6 block element types via MCP 29666c0
2026-02-16 Upgraded article author to multi-pick, created Authors Multi data type d9491f0
2026-02-16 Added categories display and notes section to articles f2ed323
2026-02-16 Created Documentation document type with markdown editor f3705cd
2026-02-17 Added Documentation template cc53a7a
2026-02-18 Created this tracking file, reconciled with Capabilities page
2026-02-18 Validated document search, content update, and publishing via MCP
2026-02-18 AI Copilot generated SEO fields for current page; confirmed Copilot is single-page scoped
2026-02-18 MCP + AI Agent orchestration: bulk SEO update across all blog articles via tree traversal, Agent API, and Management API
2026-03-01 Created /block custom command for TDD block development; built Alert Banner block (E2E test → element type → Razor partial) f0fb946
2026-03-01 Created /spec custom command for feature spec generation; created Section Navigation spec and branch 0da9ebe
2026-03-02 Implemented section navigation sidebar for content and documentation pages (composition, partial, responsive layout, CSS) 1f750a9
2026-03-03 Updated Capabilities tracker with new workflows and features
2026-03-03 Hardened section navigation E2E tests with 7 resilience rules 05d5b91
2026-03-04 Added grid view display mode to article list block with 24-test E2E suite ede1bcf
2026-03-04 Built metadata image generator CLI (flow-field PNGs from article metadata) 8bd4457, 7b7596f
2026-03-09 Added backoffice image generator dashboard and property action with palette management 55306d4
2026-03-09 Dynamic categories from backoffice; reformatted palettes.json d30aa50, 59443f1
2026-03-10 Updated Capabilities tracker with image generator, grid view, E2E testing entries
2026-03-13 Created /code-review command; built accessibility and code-quality subagents f330598, a9e5f6b
2026-03-16 Added perf-reviewer subagent to /code-review pipeline (three parallel subagents) a60fb21
2026-03-16 Added /check-uda command and git hooks for UDA conflict detection f5ee9bb
2026-03-17 Built updated site footer (multi-column layout, branding, CSS custom properties, E2E suite) 8239aca, f54d3fc
2026-03-31 Configured AI prompts (text summarization, image alt text) and agents (SEO, editor support) in backoffice
2026-03-31 Updated Capabilities tracker with AI prompts/agents, code-review, check-uda, grid view, footer
2026-04-21 Consolidated "TDD Block Development Workflow" and "Feature Planning Workflow" tables into a single "Development Workflow" section; added /plan and /feature to Custom Commands; swapped table headers from "Evidence" to "Notes" and status cells to ✅
2026-04-21 Captured migration of image-generator palette storage from JSON file to CMS content: new "Site Settings" document type, [BlockList] Category Palettes data type, PaletteService reads published content; dashboard palette editor removed in favour of standard Umbraco content editor c30de0b, a3b3ebc, 1f0bb56, 98ee79f
2026-04-21 Drafted plan to replace legacy Examine search with Umbraco.Cms.Search + Umbraco.AI.Search semantic layer 84aeb60
2026-04-21 Installed Umbraco.AI.Deploy + Umbraco.AI.Prompt.Deploy; AI Connections, Contexts, Profiles, Prompts, and Settings now auto-serialize as umbraco-ai-*.uda artifacts for Cloud schema deploy 2801c20
2026-04-22 Migrated /search to hybrid keyword + semantic search using OpenAI text-embedding-3-small embeddings; first feature drafted directly via /feature (no preceding /spec) e192ffc
2026-04-23–04-27 Design-system v2 rollout (Package C) — 9 phases, parallel master-v2.cshtml chrome converted page-by-page (error → contact → authors → articleList → search → content/documentation → article → home), legacy partials retired in Phase 9 with master-v2 → master rename. Added pageHeadPatternControls composition, ReadingTime helper, Home manifesto/pull-quote fields, 12 dictionary keys. /check-uda used to detect drift across phases; one Live restart needed to import a stuck schema bundle c5c4ae9, 1107aa3, b9b11ca, 0b10638, 7c203b4, a3b87db, 8d82dce, 2287375, 2443d31
2026-04-28 Cleanup pass: archived shipped specs/plans into _specs/shipped/ and _plans/shipped/, refreshed CLAUDE.md (consolidated pinned-betas, updated package list and Node path, fixed Cms.Search version), renamed _specs/template.md_specs/_template.md 5d3f636
2026-04-28 Updated Capabilities tracker with site search, AI deploy, design-system v2 rollout, schema-rollout-with-/check-uda, and AI deploy / vector index limitations