NB logo
Umbraco backoffice with an AI chat panel open beside it showing a content creation prompt

Umbraco MCP: How I Stopped Babysitting the Backoffice and Let AI Do the Boring Parts

profile

Nitesh Babu

07 May 2026
11 min read

If you have spent any real time in an Umbraco project, you know the pattern. You open the backoffice to create a new document type, wire up the property groups, add the same four text properties you add to every page type, save, go to the content tree, create a test node, realise you forgot to add an image cropper, go back, add it, re-save. Multiply that by ten document types and a deadline.

It does not feel like development. It feels like data entry.

The backoffice is a great editorial interface. It was never designed to be a developer’s fastest path to a working schema.

The Umbraco MCP server changes that equation. MCP stands for Model Context Protocol, an open standard that lets AI assistants connect directly to external tools and APIs using a structured, typed interface. Umbraco’s MCP server wraps the Umbraco Management API in that protocol, so your AI assistant -pglob whether that’s GitHub Copilot in VS Code, Claude Desktop, or Cursor -pglob can create document types, query content, publish nodes, manage media, and more, entirely through natural language.

This post is the setup guide and practical recipe collection I wish existed when I first tried it.


What MCP Actually Is (The Short Version)

Before going hands-on, it helps to have a mental model.

MCP is a standard developed by Anthropic. The idea is simple: instead of an AI just knowing things, it can also call tools. An MCP server exposes a list of tools over a local HTTP or stdio connection. When you ask your AI assistant a question that requires real-world data, like “list all published blog posts” or “create a document type called Article,” the assistant calls the appropriate MCP tool, gets back a structured response, and incorporates that into its answer.

The transport is local. Nothing leaves your machine unless you explicitly push to a remote Umbraco instance. It is not a cloud service you sign up for; it is a local bridge between your AI editor and your running Umbraco instance.


Setting Up the Umbraco MCP Server

What You Need

  • A running Umbraco 13+ instance (local development works perfectly)
  • An Umbraco Management API key (more on that below)
  • Node.js 18+ for the MCP server runtime
  • An AI tool that supports MCP: VS Code with GitHub Copilot Agent mode, Claude Desktop, or Cursor

Step 1 -pglob Install the MCP Server

The Umbraco MCP server is available as an npm package. Install it globally so you can reference it from any project’s config:

npm install -g @umbraco/mcp-server

Or if you prefer to keep it local to a project:

npm install --save-dev @umbraco/mcp-server

Step 2 -pglob Create a Management API Key

In the Umbraco backoffice, go to Settings → API Keys (under the Security section) and generate a new key. Give it a descriptive name like mcp-local-dev. Copy the key, you will only see it once.

Keep this key out of source control. Use an environment variable or your tool’s secrets store.

If your Umbraco version does not expose the API key UI yet, you can create one through the Management API directly:

POST /umbraco/management/api/v1/security/api-keys
Authorization: Bearer {your-admin-user-token}
Content-Type: application/json

{
  "name": "mcp-local-dev",
  "expirationDate": null
}

Step 3 -pglob Configure Your AI Tool

VS Code (GitHub Copilot Agent mode)

Create or edit .vscode/mcp.json in your workspace root:

{
  "servers": {
    "umbraco": {
      "type": "stdio",
      "command": "npx",
      "args": ["@umbraco/mcp-server"],
      "env": {
        "UMBRACO_BASE_URL": "https://localhost:44399",
        "UMBRACO_API_KEY": "${input:umbracoApiKey}"
      }
    }
  },
  "inputs": [
    {
      "id": "umbracoApiKey",
      "type": "promptString",
      "description": "Umbraco Management API key",
      "password": true
    }
  ]
}

Using ${input:umbracoApiKey} means VS Code will prompt you for the key once per session rather than storing it in the file.

Claude Desktop

Edit your claude_desktop_config.json (find it at %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "umbraco": {
      "command": "npx",
      "args": ["@umbraco/mcp-server"],
      "env": {
        "UMBRACO_BASE_URL": "https://localhost:44399",
        "UMBRACO_API_KEY": "your-api-key-here"
      }
    }
  }
}

Cursor

Go to Settings → MCP → Add Server and fill in the same command, args, and env values. Cursor’s UI writes the JSON for you.

Step 4 -pglob Verify the Connection

Restart your AI tool, open a chat, and type:

List all document types in my Umbraco instance.

If the connection is healthy, the assistant will call the MCP tool and return a list. If it fails, check that your Umbraco site is running, the base URL matches exactly (including the port), and the API key has not expired.


Day-to-Day Tasks You Can Automate

This is the part that actually changes how you work. Below are the tasks I now handle through MCP prompts instead of clicking through the backoffice.

1. Creating Document Types and Property Groups

Before MCP, creating a document type involved: open backoffice, navigate to Document Types, click Add, name it, add tabs, add each property, configure each data type, save. For a type with ten properties that is fifteen minutes minimum.

Now:

Create a document type called "Case Study" with:
- A "Hero" tab containing: Title (text string), Subtitle (text string), Hero Image (image)
- A "Content" tab containing: Summary (textarea), Body (rich text editor), Tags (tags)
- A "Meta" tab containing: SEO Title (text string), Meta Description (textarea)

Mark it as allowing at root and set the icon to icon-document-line.

The assistant calls the MCP server, which hits the Management API, and within seconds the document type exists. You can verify it in the backoffice immediately.

2. Querying and Auditing Content

Umbraco’s backoffice search is fine for editors. As a developer you often need answers like “how many published nodes use the Article document type” or “find all content nodes that have an empty meta description”. MCP makes this conversational.

Find all published content nodes of type "Article" where the metaDescription property is empty or missing.
List the 10 most recently modified content nodes, showing their name, document type, and last modified date.

The response comes back as a structured table you can read immediately, or ask the assistant to format as a CSV, a Markdown list, or a JSON blob depending on what you need.

3. Bulk Content Updates

This one is the time saver I use most often. Say a client renames a service line and fifteen content nodes need their department property updated. Clicking through each node in the backoffice is tedious and error-prone.

On all content nodes of type "TeamMember" where the department property equals "Digital Services",
update department to "Digital Products" and republish each node.

MCP handles this as a loop across the Management API. It will report back on each node it updated, so you have an audit trail in the chat itself.

One rule I follow: for bulk destructive operations, I always ask the assistant to list the affected nodes first and confirm before executing the updates. This is easy to build into the prompt.

First, list all content nodes that would be affected by this change. Wait for my confirmation before updating anything.

4. Creating Content From Structured Data

If you have ever had to manually create fifty location nodes from a spreadsheet, you understand the value here. Paste the data, describe the document type structure, and let MCP handle the creation.

Create content nodes of type "Office Location" under the "Locations" parent node using this data:

London | 1 London Bridge | United Kingdom | +44 20 7234 5678
Manchester | 23 Spinningfields | United Kingdom | +44 161 234 5678
Dublin | 2 Grand Canal Square | Ireland | +353 1 234 5678

Map to: officeName, address, country, phone properties.
Publish each node after creation.

5. Managing the Media Library

Media operations are typically the most time-consuming backoffice tasks, especially on projects that inherit a disorganised media tree.

List all media items in the "Product Images" folder that are larger than 2MB.
Move all media items of type image in the root media folder into a new subfolder called "Unsorted - May 2026".
Find any media items that are not referenced by any content node.

That last query is something that used to require a custom Examine search or a raw SQL query. Through MCP it is a one-line prompt.

6. Dictionary Entries and Translations

If your site is multilingual, dictionary management in the backoffice is painfully repetitive. MCP handles it:

Create dictionary entries for the following keys with their English values:
- nav.home → "Home"
- nav.about → "About Us"
- nav.contact → "Get In Touch"
- footer.copyright → "All rights reserved"

Then follow up:

Add Danish translations to all dictionary entries I just created:
- nav.home → "Hjem"
- nav.about → "Om Os"
- nav.contact → "Kontakt Os"
- footer.copyright → "Alle rettigheder forbeholdes"

7. On-Demand Reporting

Managers and clients ask questions that would otherwise require you to build a custom dashboard or write a search query. Through MCP you can answer them in seconds from your editor.

How many content nodes were published in the last 30 days, broken down by document type?
List all content nodes that have been in draft state for more than 14 days.
Show me all content nodes where the SEO title is longer than 60 characters.

A Real Workflow: New Blog Section in Under Two Minutes

To make the value concrete, here is the actual sequence I ran when adding a new Insights section to a client project. No backoffice clicks.

Prompt 1 -pglob Define the schema:

Create a document type called "Insight" with an icon of icon-article.
Add these properties under a single "Content" tab:
- title: Text String (mandatory)
- publishDate: Date Picker
- author: Content Picker (pick from Author document type)
- category: Dropdown (options: Research, Opinion, Case Study, Industry News)
- heroImage: Image
- body: Rich Text Editor
- relatedInsights: Multi Node Tree Picker (limit 3)
Allow this document type under a container called "Insights" only.

Prompt 2 -pglob Create the container:

Create a content node of type "Container" called "Insights" under the site root. Do not publish it yet.

Prompt 3 -pglob Seed test content:

Create 3 draft Insight nodes under the "Insights" container with placeholder titles:
"The Future of Managed Hosting", "Why AI Pair Programming Works", "CMS Performance in 2026"
Set publishDate to today for all three.

Total time: about ninety seconds. In the backoffice that same setup would have taken at minimum fifteen minutes across multiple screens.


What MCP Cannot Do (Yet)

It is worth being honest about the boundaries.

Template and view editing -pglob MCP operates through the Management API, which does not expose the Razor template layer. You still write your templates in your editor as normal.

Custom section and dashboard UI -pglob Backoffice extension work that involves JavaScript/TypeScript property editors or custom dashboards is still code you write by hand.

Complex Examine queries -pglob MCP can list and filter content, but deep full-text search with custom index fields is not exposed through the current Management API surface.

Large file media uploads -pglob Uploading binary media files through MCP works for small assets, but for large bulk media imports a dedicated script or the backoffice upload is still more reliable.


Tips for Getting Consistent Results

Be explicit about document type aliases, not just names. The Management API uses aliases (camelCase) internally. If you get unexpected results, include the alias explicitly: “the document type with alias caseStudy.”

Ask for a dry run first. For anything bulk-destructive, prefix your prompt with “describe what you would do without doing it yet” before committing.

Keep the MCP server version aligned with your Umbraco version. The Management API surface differs between Umbraco 13 and 14. Check the server’s readme for compatibility notes.

Use it for scaffolding, not for production content. MCP is fastest when you are building and iterating. For ongoing editorial workflows, trained editors with the backoffice are still the right interface.


The Shift This Creates

The thing I did not expect when I started using Umbraco MCP is how much it changes the feedback loop when building a new project. Normally, schema work and content seeding are two separate context switches -pglob you stop writing code, open a browser, click around, switch back. With MCP those tasks stay inside the editor.

The backoffice does not go away. Your editors still need it, and it is still the right tool for ongoing content management. But as a developer, the boring parts of project setup -pglob the repetitive schema work, the placeholder content, the bulk migrations -pglob those now cost minutes instead of hours.

That is a shift worth making.


If you try Umbraco MCP and run into anything interesting, drop it in the comments. I am collecting real-world recipes and would love to expand this post with community examples.

🔗 Share this post

Spread the word wherever you hang out online.

Related Posts

Be part of the thinking behind the craft.

Why real systems behave the way they do. Technical paths that change outcomes.
The web’s native language, decoded.

Monthly. No pandering, no gimmicks, no shallow summaries.