Umbraco MCP 
An MCP (Model Context Protocol) server for Umbraco CMS it provides access to key parts of the Management API enabling you to do back office tasks with your agent.
Intro
The MCP server uses an Umbraco API user to access your Umbraco Management API, mean the tools avavile to the AI can be controlled using normal Umbraco user permissions.
Getting Started
Umbraco
In order for the MCP to talk to the Management API you will need to create a API user if you are unsure how to do this follow Umbraco's documentation.
The level of access you provider this user will determine what your agent is able to do.
Installation
First, install the Umbraco MCP server with your client. A typical configuration looks like this:
{
"servers": {
"umbraco-mcp": {
"command": "npx",
"args": ["@umbraco-mcp/umbraco-mcp-cms@alpha"],
"env": {
"UMBRACO_CLIENT_ID": "<API user name>",
"UMBRACO_CLIENT_SECRET": "<API client secert>",
"UMBRACO_BASE_URL": "https://<domain>",
"EXCLUDE_MANAGEMENT_TOOLS": "<toolname>,<toolname>"
}
}
}
}
Configuration
UMBRACO_CLIENT_ID
Umbraco API User name
UMBRACO_CLIENT_SECRET
Umbraco API User client secert
UMBRACO_BASE_URL
Url of the site you want to connect to, it only needs to be the scheme and domain e.g https://example.com
EXCLUDE_MANAGEMENT_TOOLS
The allows you to specify tools by name if you wish to exclude them for the usable tools list. This is helpful as some Agents, cant handle so many tools. This is a commma seperated list of tools which can be found below.
Using the Umbraco MCP With Claude
To get started with using the Umbraco MCP with Claude, first download and install the Claude.ai desktop app.
Start up your Umbraco instance (currently working with version 15.latest) and create new API user credentials. You can see instructions on how to do that on the Umbraco docs.
Once you have this information head back into Claude desktop app and head to Settings > Developer > Edit Config. Open the json file in a text editor of your choice and add the below, replacing the UMBRACO_CLIENT_ID
, UMBRACO_CLIENT_SECRET
and UMBRACO_BASE_URL
with your local connection information. The addition of the NODE_TLS_REJECT_UNAUTHORIZED
env flag is to allow Claude to connect to the MCP using a self-signed cert.
{
"mcpServers": {
"umbraco-mcp": {
"command": "npx",
"args": ["@umbraco-mcp/umbraco-mcp-cms@alpha"],
"env": {
"NODE_TLS_REJECT_UNAUTHORIZED": "0",
"UMBRACO_CLIENT_ID": "umbraco-back-office-mcp",
"UMBRACO_CLIENT_SECRET": "1234567890",
"UMBRACO_BASE_URL": "https://localhost:44391"
}
}
}
}
Restart Claude and try it out with a simple prompt such as Tell me the GUID of the home page document type
. You'll need to allow each one of the tools as the Umbraco MCP starts to work its way through. If you receive a connection error with the Umbraco MCP click the button to open the logs and review the file mcp-server-umbraco-mcp.log
for extra information on how to fix the issue.
[!NOTE] You may need to update to a paid version of Claude.ai in order to have a large enough context window to run your prompts.
Umbraco Management API Tools
get-culture
- gets all cultures avaliable to Umbraco
get-data-type-search
- Search for data typesget-data-type
- Get a specific data type by IDget-data-type-references
- Get references to a data typeis-used-data-type
- Check if a data type is in useget-data-type-root
- Get root level data typesget-data-type-children
- Get child data typesget-data-type-ancestors
- Get ancestor data typesget-all-data-types
- Get all data typesdelete-data-type
- Delete a data typecreate-data-type
- Create a new data typeupdate-data-type
- Update an existing data typecopy-data-type
- Copy a data typemove-data-type
- Move a data type to a different locationcreate-data-type-folder
- Create a folder for organizing data typesdelete-data-type-folder
- Delete a data type folderget-data-type-folder
- Get information about a data type folderupdate-data-type-folder
- Update a data type folder details
get-dictionary-search
- Search for dictionary itemsget-dictionary-by-key
- Get a dictionary item by keycreate-dictionary
- Create a new dictionary itemupdate-dictionary
- Update a dictionary itemdelete-dictionary
- Delete a dictionary item
get-document-by-id
- Get a document by IDget-document-publish
- Get document publish statusget-document-configuration
- Get document configurationcopy-document
- Copy a documentcreate-document
- Create a new documentpost-document-public-access
- Set document public accessdelete-document
- Delete a documentdelete-document-public-access
- Remove public access from a documentget-document-urls
- Get document URLsget-document-domains
- Get document domainsget-document-audit-log
- Get document audit logget-document-public-access
- Get document public access settingsmove-document
- Move a documentmove-to-recycle-bin
- Move document to recycle binget-document-notifications
- Get document notificationspublish-document
- Publish a documentpublish-document-with-descendants
- Publish a document and its descendantssort-document
- Sort document orderunpublish-document
- Unpublish a documentupdate-document
- Update a documentput-document-domains
- Update document domainsput-document-notifications
- Update document notificationsput-document-public-access
- Update document public accessdelete-from-recycle-bin
- Delete document from recycle binempty-recycle-bin
- Empty the recycle binget-recycle-bin-root
- Get root items in recycle binget-recycle-bin-children
- Get child items in recycle binsearch-document
- Search for documentsvalidate-document
- Validate a documentget-document-root
- Get root documentsget-document-children
- Get child documentsget-document-ancestors
- Get document ancestors
get-blueprint
- Get a document blueprintdelete-blueprint
- Delete a document blueprintupdate-blueprint
- Update a document blueprintcreate-blueprint
- Create a new document blueprintget-blueprint-ancestors
- Get blueprint ancestorsget-blueprint-children
- Get blueprint childrenget-blueprint-root
- Get root blueprints
get-document-type
- Get a document typeget-document-type-configuration
- Get document type configurationget-document-type-blueprint
- Get document type blueprintget-document-type-by-id-array
- Get document types by IDsget-document-type-available-compositions
- Get available compositionsget-document-type-composition-references
- Get composition referencesupdate-document-type
- Update a document typecopy-document-type
- Copy a document typemove-document-type
- Move a document typecreate-document-type
- Create a new document typedelete-document-type
- Delete a document typecreate-element-type
- Create an element typeget-icons
- Get available iconsget-document-type-allowed-children
- Get allowed child typesget-all-document-types
- Get all document typescreate-document-type-folder
- Create a folderdelete-document-type-folder
- Delete a folderget-document-type-folder
- Get folder infoupdate-document-type-folder
- Update folder detailsget-document-type-root
- Get root document typesget-document-type-ancestors
- Get document type ancestorsget-document-type-children
- Get document type children
get-language-items
- Get all languagesget-default-language
- Get default languagecreate-language
- Create a new languageupdate-language
- Update a languagedelete-language
- Delete a languageget-language-by-iso-code
- Get language by ISO code
get-log-viewer-saved-search-by-name
- Get saved search by nameget-log-viewer-level-count
- Get log level countspost-log-viewer-saved-search
- Save a log searchdelete-log-viewer-saved-search-by-name
- Delete saved searchget-log-viewer
- Get logsget-log-viewer-level
- Get log levelsget-log-viewer-search
- Search logsget-log-viewer-validate-logs
- Validate logsget-log-viewer-message-template
- Get message template
get-media-by-id
- Get media by IDget-media-ancestors
- Get media ancestorsget-media-children
- Get media childrenget-media-root
- Get root media itemscreate-media
- Create new mediadelete-media
- Delete mediaupdate-media
- Update mediaget-media-configuration
- Get media configurationget-media-urls
- Get media URLsvalidate-media
- Validate mediasort-media
- Sort media itemsget-media-by-id-array
- Get media by IDsmove-media
- Move mediaget-media-audit-log
- Get media audit logget-media-recycle-bin-root
- Get recycle bin rootget-media-recycle-bin-children
- Get recycle bin childrenempty-recycle-bin
- Empty recycle binrestore-from-recycle-bin
- Restore from recycle binmove-media-to-recycle-bin
- Move to recycle bindelete-from-recycle-bin
- Delete from recycle bin
get-media-type-configuration
- Get media type configurationget-media-type-by-id
- Get media type by IDget-media-type-by-ids
- Get media types by IDsget-allowed
- Get allowed media typesget-media-type-allowed-at-root
- Get types allowed at rootget-media-type-allowed-children
- Get allowed child typesget-media-type-composition-references
- Get composition referencesget-root
- Get root media typesget-children
- Get child media typesget-ancestors
- Get ancestor media typesget-folder
- Get folder informationcreate-folder
- Create a new folderdelete-folder
- Delete a folderupdate-folder
- Update folder detailscreate-media-type
- Create a new media typecopy-media-type
- Copy a media typeget-media-type-available-compositions
- Get available compositionsupdate-media-type
- Update a media typemove-media-type
- Move a media typedelete-media-type
- Delete a media type
get-member
- Get member by IDcreate-member
- Create a new memberdelete-member
- Delete a memberupdate-member
- Update a memberfind-member
- Find members
get-member-group
- Get member groupget-member-group-by-id-array
- Get member groups by IDscreate-member-group
- Create a new member groupupdate-member-group
- Update a member groupdelete-member-group
- Delete a member groupget-member-group-root
- Get root member groups
get-member-type-by-id
- Get member type by IDcreate-member-type
- Create a new member typeget-member-type-by-id-array
- Get member types by IDsdelete-member-type
- Delete a member typeupdate-member-type
- Update a member typecopy-member-type
- Copy a member typeget-member-type-available-compositions
- Get available compositionsget-member-type-composition-references
- Get composition referencesget-member-type-configuration
- Get member type configurationget-member-type-root
- Get root member types
get-property-type
- Get property type by IDget-property-type-all-property-type-groups
- Get all property type groupscreate-property-type
- Create a new property typeupdate-property-type
- Update a property typedelete-property-type
- Delete a property type
get-all-redirects
- Get all redirectsget-redirect-by-id
- Get redirect by IDdelete-redirect
- Delete a redirectget-redirect-status
- Get redirect statusupdate-redirect-status
- Update redirect status
get-server-status
- Get server statusget-server-log-file
- Get server log filetour-status
- Get tour statusupgrade-status
- Get upgrade status
create-temporary-file
- Create a temporary fileget-temporary-file
- Get a temporary filedelete-temporary-file
- Delete a temporary fileget-temporary-file-configuration
- Get temporary file configuration
get-user-group
- Get user groupget-user-group-by-id-array
- Get user groups by IDsget-user-groups
- Get all user groupsget-filter-user-group
- Filter user groupscreate-user-group
- Create a new user groupupdate-user-group
- Update a user groupdelete-user-group
- Delete a user groupdelete-user-groups
- Delete multiple user groups
get-webhook-by-id
- Get webhook by IDget-webhook-by-id-array
- Get webhooks by IDsdelete-webhook
- Delete a webhookupdate-webhook
- Update a webhookget-webhook-events
- Get webhook eventsget-all-webhook-logs
- Get all webhook logscreate-webhook
- Create a new webhook
Umbraco Workflow API Tools
If you have workflow installed, the AI will use this tool instead of directly publishing content
initiate-workflow-action
- Initiates a workflow approval process for content changes