get-cultureLABSCO SUMMARY
Permissions are the safety model, and they are Umbraco's own.
Nothing about the server decides what the agent may change - the API user does. That is the right place for the decision, because it is the same control your editors already work under, and it means a read-only agent is a read-only API user rather than a configuration flag. Check the repository notice before adopting: the project has moved to an Umbraco-owned home.
What it is
A server over Umbraco's Management API. It authenticates as an Umbraco API user, which means the tools an agent can actually use are decided by ordinary Umbraco permissions rather than by the server. Development has moved to an Umbraco-owned repository.
What you get
- Data types: search, read one, list children, ancestors and roots, check whether one is in use, and read its references
- Create, update, copy, move and delete data types, and organise them into folders
- The same browse-and-manage shape across the other Management API areas the server covers
- Cultures available in the installation, read back for language work
- An exclusion list so you can hide tools by name from the surface, for agents that cope badly with a long list
Requirements
An Umbraco installation - the project states it currently works with version 15 - and an API user created in the back office; the access you grant that user is exactly what the agent can do. Run it with npx and the published alpha package. Three environment variables carry the credentials: client id, client secret and base URL. A local instance with a self-signed certificate additionally needs Node's TLS rejection turned off, and the tool list is long enough that a small context window may need trimming with the exclusion variable.
Setup effort
One command plus credentials — npx @umbraco-mcp/umbraco-mcp-cms@alpha, then supply credentials
USE CASES
Answering a question about the content model
Search the data types and read one in full, rather than clicking through the back office settings tree.
Checking whether something is safe to delete
Read a data type's references and whether it is in use before removing it.
Letting the agent look but not change
Create an API user with read-only permissions - the tool surface is then bounded by Umbraco itself.
Cutting the tool list down to size
Name the tools you do not need in the exclusion variable so they never reach the model's context.
202 tools
Listed in project docs. Your client may show a different list.
get-data-type-searchget-data-typeget-data-type-referencesis-used-data-typeget-data-type-rootget-data-type-childrenget-data-type-ancestorsget-all-data-typesdelete-data-typecreate-data-typeupdate-data-typecopy-data-typemove-data-typecreate-data-type-folderdelete-data-type-folderget-data-type-folderupdate-data-type-folderget-dictionary-searchget-dictionary-by-keycreate-dictionaryupdate-dictionarydelete-dictionaryget-document-by-idget-document-publishget-document-configurationcopy-documentcreate-documentpost-document-public-accessdelete-documentdelete-document-public-accessget-document-urlsget-document-domainsget-document-audit-logget-document-public-accessmove-documentmove-to-recycle-binget-document-notificationspublish-documentpublish-document-with-descendantssort-documentunpublish-documentupdate-documentput-document-domainsput-document-notificationsput-document-public-accessdelete-from-recycle-binempty-recycle-binget-recycle-bin-rootget-recycle-bin-childrensearch-documentvalidate-documentget-document-rootget-document-childrenget-document-ancestorsget-blueprintdelete-blueprintupdate-blueprintcreate-blueprintget-blueprint-ancestorsget-blueprint-childrenget-blueprint-rootget-document-typeget-document-type-configurationget-document-type-blueprintget-document-type-by-id-arrayget-document-type-available-compositionsget-document-type-composition-referencesupdate-document-typecopy-document-typemove-document-typecreate-document-typedelete-document-typecreate-element-typeget-iconsget-document-type-allowed-childrenget-all-document-typescreate-document-type-folderdelete-document-type-folderget-document-type-folderupdate-document-type-folderget-document-type-rootget-document-type-ancestorsget-document-type-childrenget-language-itemsget-default-languagecreate-languageupdate-languagedelete-languageget-language-by-iso-codeget-log-viewer-saved-search-by-nameget-log-viewer-level-countpost-log-viewer-saved-searchdelete-log-viewer-saved-search-by-nameget-log-viewerget-log-viewer-levelget-log-viewer-searchget-log-viewer-validate-logsget-log-viewer-message-templateget-media-by-idget-media-ancestorsget-media-childrenget-media-rootcreate-mediadelete-mediaupdate-mediaget-media-configurationget-media-urlsvalidate-mediasort-mediaget-media-by-id-arraymove-mediaget-media-audit-logget-media-recycle-bin-rootget-media-recycle-bin-childrenrestore-from-recycle-binmove-media-to-recycle-binget-media-type-configurationget-media-type-by-idget-media-type-by-idsget-allowedget-media-type-allowed-at-rootget-media-type-allowed-childrenget-media-type-composition-referencesget-rootget-childrenget-ancestorsget-foldercreate-folderdelete-folderupdate-foldercreate-media-typecopy-media-typeget-media-type-available-compositionsupdate-media-typemove-media-typedelete-media-typeget-membercreate-memberdelete-memberupdate-memberfind-memberget-member-groupget-member-group-by-id-arraycreate-member-groupupdate-member-groupdelete-member-groupget-member-group-rootget-member-type-by-idcreate-member-typeget-member-type-by-id-arraydelete-member-typeupdate-member-typecopy-member-typeget-member-type-available-compositionsget-member-type-composition-referencesget-member-type-configurationget-member-type-rootget-property-typeget-property-type-all-property-type-groupscreate-property-typeupdate-property-typedelete-property-typeget-all-redirectsget-redirect-by-iddelete-redirectget-redirect-statusupdate-redirect-statusget-server-statusget-server-log-filetour-statusupgrade-statusget-template-searchget-templateget-templates-by-id-arraycreate-templateupdate-templatedelete-templateexecute-template-queryget-template-query-settingsget-template-rootget-template-childrenget-template-ancestorscreate-temporary-fileget-temporary-filedelete-temporary-fileget-temporary-file-configurationget-user-groupget-user-group-by-id-arrayget-user-groupsget-filter-user-groupcreate-user-groupupdate-user-groupdelete-user-groupdelete-user-groupsget-webhook-by-idget-webhook-by-id-arraydelete-webhookupdate-webhookget-webhook-eventsget-all-webhook-logscreate-webhookBEFORE YOU INSTALL
What to know first
Tools you get
202 tools named in the project's documentation.
Requires
- npx on PATH
- UMBRACO_CLIENT_ID in your environment
- UMBRACO_CLIENT_SECRET in your environment
- UMBRACO_BASE_URL in your environment
INSTALLATION
Connect your client
Server setup
npx @umbraco-mcp/umbraco-mcp-cms@alphaMCP Clients
Claude Desktop
{
"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"
}
}
}
}Claude Code
claude mcp add umbraco-mcp npx @umbraco-mcp/umbraco-mcp-cms@alphaVS Code
{
"servers": {
"umbraco-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"@umbraco-mcp/umbraco-mcp-cms@alpha"
],
"env": {
"UMBRACO_CLIENT_ID": "<YOUR_UMBRACO_CLIENT_ID>",
"UMBRACO_CLIENT_SECRET": "<YOUR_UMBRACO_CLIENT_SECRET>",
"UMBRACO_BASE_URL": "https://<YOUR_DOMAIN>",
"EXCLUDE_MANAGEMENT_TOOLS": "<YOUR_EXCLUDE_MANAGEMENT_TOOLS>,<YOUR_EXCLUDE_MANAGEMENT_TOOLS>"
}
}
}
}Cursor
{
"mcpServers": {
"umbraco-mcp": {
"command": "npx",
"args": [
"@umbraco-mcp/umbraco-mcp-cms@alpha"
],
"env": {
"UMBRACO_CLIENT_ID": "<YOUR_UMBRACO_CLIENT_ID>",
"UMBRACO_CLIENT_SECRET": "<YOUR_UMBRACO_CLIENT_SECRET>",
"UMBRACO_BASE_URL": "https://<YOUR_DOMAIN>",
"EXCLUDE_MANAGEMENT_TOOLS": "<YOUR_EXCLUDE_MANAGEMENT_TOOLS>,<YOUR_EXCLUDE_MANAGEMENT_TOOLS>"
}
}
}
}