Atlas / MCP servers / umbraco / Umbraco

UmbracoBLOCK

mcp/umbraco/umbraco-1

A developer focused model context protocol (MCP) server for Umbraco CMS

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
200 268r · 94w · 39d
Transport
stdio · streamable-http
License
MIT
Stars
39
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Umbraco MCP

An MCP (Model Context Protocol) server for Umbraco CMS that unlocks AI-powered content management. It provides comprehensive access to the Umbraco Management API, enabling your AI agent to perform back office tasks through natural conversation - freeing you from the UI and making complex, repetitive workflows that would be tedious or impossible manually become effortless.

Intro

The MCP server authenticates using an Umbraco API user, ensuring secure, permission-based access to the Umbraco Management API. This means you maintain complete control over what your AI agent can do through Umbraco's standard user permission system - no special security model required.

Quick Start

1. Create an Umbraco API User

First, create an Umbraco API user with appropriate permissions. You can find instructions in Umbraco's documentation.

2. Install in Claude Desktop

Download and install the Claude Desktop app, then add the MCP server to your configuration:

  1. Open Claude Desktop Settings > Developer > Edit Config
  2. Add this configuration to your claude_desktop_config.json:
{
"mcpServers": {
"umbraco-mcp": {
"command": "npx",
"args": ["@umbraco-cms/mcp-dev@17"],
"env": {
"NODE_TLS_REJECT_UNAUTHORIZED": "0",
"UMBRACO_CLIENT_ID": "your-api-user-id",
"UMBRACO_CLIENT_SECRET": "your-api-secret",
"UMBRACO_BASE_URL": "https://localhost:{port}",
"UMBRACO_INCLUDE_TOOL_COLLECTIONS": "document,media,document-type,data-type"
}
}
}
}
  1. Fully restart Claude Desktop (including in the system tray on Windows)

Documentation

For complete installation instructions, c

Read from source at commit a449a900e43bOBSERVED · 2026-10-08
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add mcp-dev --env UMBRACO_CLIENT_ID=${UMBRACO_CLIENT_ID} --env UMBRACO_CLIENT_SECRET=${UMBRACO_CLIENT_SECRET} -- npx -y @umbraco-cms/[email protected]
03

Exposed tools (200)

268 read · 94 write · 39 destructive. Blast radius: 39 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
copy-data-typereadCopy a data type by Id. Returns the new data type
copy-documentreadCopy a document to a new location. Returns the new document
copy-document-typereadCopy a document type to a new location. Returns the new document type
copy-elementreadCopy an element to a new location. Returns the new element
copy-media-typereadCopy a media type to a new location
copy-member-typereadCopy a member type to a new location
create-data-type-folderwriteCreates a new data type folder
create-dictionarywriteCreates a new dictionary item.
create-document-blueprintwriteCreates a new document blueprint.
create-document-blueprint-folderwriteCreates a new document blueprint folder
create-document-type-folderwriteCreates a new document type folder
create-document-version-rollbackwriteRollback document to a specific version
create-element-folderwriteCreates a new element folder
create-languagewriteCreates a new language
create-mediawriteUpload any media file to Umbraco (images, documents, audio, video, SVG, or custom types). Pick the sourceType that matches where the file lives: - If the file is attached to this chat or you just generated it → sourceType=
create-media-folderwriteCreates a new folder in the media library. Use this to organize media items into folders. For uploading actual media files (images, documents, etc.), use the create-media tool instead.
create-media-multiplewriteBatch upload multiple media files to Umbraco (maximum ${MAX_BATCH_SIZE} files per batch). Use this — not several separate create-media calls — when the user attached or generated multiple files in this chat (sourceType=
create-media-typewriteCreates a new media type
create-media-type-folderwriteCreates a new media type folder
create-memberwriteCreates a member in Umbraco. Use this endpoint to create new members with the specified properties and groups.
create-member-groupwriteCreates a new member group
create-member-typewriteCreates a new member type
create-partial-viewwriteCreates a new partial view
create-partial-view-folderwriteCreates a new partial view folder
create-scriptwriteCreates a new script
create-script-folderwriteCreates a new script folder
create-stylesheetwriteCreates a new stylesheet.
create-stylesheet-folderwriteCreates a new stylesheet folder
create-templatewriteCreates a new template
create-user-datawriteCreates a new user data record
create-user-groupwriteCreates a new user group
create-webhookwriteCreates a new webhook Must contain at least one event from the events listed at /umbraco/management/api/v1/webhook/events endpoint. Cannot mix different event types in the same webhook.
delete-data-typedestructiveDeletes a data type by Id
delete-data-type-folderdestructiveDeletes a data type folder by Id
delete-dictionary-itemdestructiveDeletes a dictionary item by Id
delete-documentdestructiveDeletes a document by Id
delete-document-blueprintdestructiveDeletes a document blueprint by Id
delete-document-blueprint-folderdestructiveDeletes a document blueprint folder by Id
delete-document-public-accessdestructiveRemoves public access settings from a document by Id.
delete-document-recycle-bin-itemdestructivePermanently deletes a document from the recycle bin by its id
delete-document-typedestructiveDeletes a document type by Id
delete-document-type-folderdestructiveDeletes a document type folder by Id
delete-elementdestructiveDeletes an element by Id
delete-element-folderdestructiveDeletes an element folder by Id
delete-element-folder-from-recycle-bindestructivePermanently deletes an element folder from the recycle bin by Id
delete-element-from-recycle-bindestructivePermanently deletes an element from the recycle bin by its id
delete-from-recycle-bindestructiveDeletes a document from the recycle bin by Id.
delete-languagedestructiveDeletes a language by ISO code
delete-log-viewer-saved-search-by-namedestructiveDeletes a saved search by name
delete-mediadestructiveDeletes a media item by Id. Works for all media types including folders, images, files, videos, etc.
delete-media-from-recycle-bindestructiveDeletes a media item from the recycle bin by Id.
delete-media-recycle-bin-itemdestructivePermanently deletes a media item from the recycle bin by its id
delete-media-typedestructiveDeletes a media type by Id
delete-media-type-folderdestructiveDeletes a media type folder by Id
delete-memberdestructiveDeletes a member by Id
delete-member-groupdestructiveDeletes a member group by Id
delete-member-typedestructiveDeletes a member type by id
delete-partial-viewdestructiveDeletes a partial view by its path
delete-partial-view-folderdestructiveDeletes a partial view folder by its path
delete-redirectdestructiveDeletes a specific redirect by its ID. Parameters: - id: The unique identifier of the redirect to delete (string)
delete-scriptdestructiveDeletes a script by path
delete-script-folderdestructiveDeletes a script folder by path
delete-stylesheetdestructiveDeletes a stylesheet by its path
delete-stylesheet-folderdestructiveDeletes a stylesheet folder by its path
delete-templatedestructiveDeletes a template by Id
delete-temporary-filedestructiveDeletes a temporary file by Id
delete-user-avatar-by-iddestructiveDeletes an avatar for a specific user by ID (admin only or self-service)
delete-user-datadestructiveDeletes user data by its id
delete-user-groupdestructiveDeletes a user group by Id
delete-user-groupsdestructiveDeletes all user groups
delete-webhookdestructiveDeletes a webhook by id
empty-element-recycle-binreadEmpties the element recycle bin.
empty-media-recycle-binreadEmpties the media recycle bin.
empty-recycle-binreadEmpties the document recycle bin.
execute-health-check-actionwriteExecutes remedial actions for health issues. WARNING: This performs system remedial actions that may modify system configuration, files, or database content. Use with caution.
execute-template-querywriteExecutes template queries and returns generated LINQ code with sample results and execution time. IMPORTANT: Always follow the example format exactly. Example: {
find-data-typereadFinds a data type by Id or Name
find-dictionaryreadFinds a dictionary by Id or name
find-memberreadFinds members by various filter criteria
find-userreadFinds users by filtering with name, email, or other criteria
get-all-data-typesreadGets all data types by recursively fetching from root and all children. This is the preferred approach when you need to understand the full folder structure. For large sites, this may take a while to complete. For smaller sites its more efficient than fetching all data types by folder.
get-all-document-typesreadGets all document types by recursively fetching from root and all children. This is the preferred approach when you need to understand the full folder structure. For large sites, this may take a while to complete. For smaller sites its more efficient than fetching all documents by folder.
get-all-member-groupsreadGets all member groups with optional pagination
get-all-redirectsreadGets all redirects from the Umbraco server. Returns a list of redirects with their details.
get-all-webhook-logsreadGets logs for all webhooks
get-allowed-media-typereadGets allowed file extensions for media types
get-collection-document-by-idreadGet a collection of document items Use this to retrieve a filtered and paginated collection of document items based on various criteria like data type, ordering, and filtering.
get-collection-mediareadGet a collection of media items Use this to retrieve a filtered and paginated collection of media items based on various criteria like data type, ordering, and filtering.
get-culturereadRetrieves a paginated list of cultures that Umbraco can be configured to use
get-data-typereadGets a data type by Id
get-data-type-ancestorsreadGets the ancestors of a data type by Id
get-data-type-ancestors-batchreadGets the ancestor chain (breadcrumb) for multiple data type Ids in one call. Returns one entry per requested Id, each containing that Id
get-data-type-batchreadGets full data types for multiple Ids in one call. Returns each data type
get-data-type-childrenreadGets the children data types or data type folders by the parent id
get-data-type-configurationreadGets global data type configuration settings including change permissions and default list view IDs
get-data-type-folderreadGets a data type folder by Id
get-data-type-rootreadGets the root level of the data type and data type folders in the tree.
get-data-type-schemasreadGets JSON Schemas for multiple data types in a single batch request. Returns JSON Schemas describing the value structure for each specified data type. This is more efficient than calling get-data-type-schema multiple times when you need schemas for several data types.
get-data-type-searchreadSearches the data type tree for a data type by name. It does NOT allow for searching for data type folders.
get-data-type-siblingsreadGets sibling data types or data type folders for a given descendant id
get-data-type-tree-searchreadSearches data types in tree-node shape (with hasChildren and parent for tree navigation). Use this when paginating through tree results; for a flat search of items use get-data-type-search. Optional itemKind filter accepts
get-data-types-by-id-arrayreadGets data types by IDs (or empty array if no IDs are provided)
get-default-languagereadGets the default language
get-dictionaryreadGets a dictionary by Id
get-dictionary-ancestorsreadGets the ancestors of a dictionary item by Id
get-dictionary-by-id-arrayreadGets dictionary items by IDs (or empty array if no IDs are provided)
get-dictionary-childrenreadGets the children of a dictionary item by Id
get-dictionary-rootreadGets the root level of the dictionary tree
get-document-ancestorsreadGets ancestor items for a document.
get-document-ancestors-batchreadGets the ancestor chain (breadcrumb) for multiple document Ids in one call. Returns one entry per requested Id, each containing that Id
get-document-are-referencedreadCheck if document items are referenced Use this to verify if specific document items are being referenced by other content before deletion or modification.
get-document-audit-logreadFetches the audit log for a document by Id.
get-document-blueprintreadGets a document blueprint by Id
get-document-blueprint-ancestorsreadGets the ancestors of a document blueprint by Id
get-document-blueprint-by-id-arrayreadGets document blueprints by IDs (or empty array if no IDs are provided)
get-document-blueprint-childrenreadGets the children of a document blueprint by Id
get-document-blueprint-folderreadGets a document blueprint folder by Id
get-document-blueprint-rootreadGets the root level of the document blueprint tree
get-document-blueprint-scaffoldreadGet scaffold information for a document blueprint Use this to retrieve the scaffold structure and default values for a document blueprint, typically used when creating new documents from blueprints.
get-document-blueprint-siblingsreadGets sibling document blueprints for a given descendant id
get-document-by-idreadGets a document by id Use this to retrieve existing documents. When creating new documents, first get an existing document of similar type, then use the Copy document endpoint.
get-document-by-id-referenced-byreadGet items that reference a specific document item Use this to find all content, documents, or other items that are currently referencing a specific document item.
get-document-childrenreadGets child items for a document.
get-document-configurationreadGets the document configuration for the Umbraco instance.
get-document-domainsreadGets the domains assigned to a document by Id.
get-document-notificationsreadGets the notifications for a document by Id.
get-document-public-accesswriteGets the public access settings for a document by Id. Set includeAncestors=true to also resolve protection inherited from an ancestor (the response
get-document-publishwriteGets the published state of a document by Id.
get-document-recycle-bin-siblingsreadGets sibling documents in the recycle bin for a given descendant id
get-document-rootreadGets root items for documents.
get-document-siblingsreadGets sibling documents for a given descendant id
get-document-type-allowed-at-rootreadGet document types that are allowed at root level
get-document-type-allowed-childrenreadGets the document types that are allowed as children of a document type
get-document-type-allowed-parentsreadGets the document type Ids that may be a parent of the given document type. Counterpart of get-document-type-allowed-children — useful when validating where a content node of this type can be placed.
get-document-type-ancestorsreadGets the ancestors of a document type
get-document-type-ancestors-batchreadGets the ancestor chain (breadcrumb) for multiple document type Ids in one call. Returns one entry per requested Id, each containing that Id
get-document-type-available-compositionsreadGets the available compositions for a document type
get-document-type-batchreadGets full document types for multiple Ids in one call. Returns each document type
get-document-type-blueprintreadGets the blueprints for a document type
get-document-type-by-idreadGets a document type by id
get-document-type-childrenreadGets the children of a document type. Use get-all-document-types instead unless you specifically need only child level items for a specific folder.
get-document-type-composition-referencesreadGets the composition references for a document type
get-document-type-configurationreadGets the global configuration for document types
get-document-type-folderreadGets a document type folder by Id
get-document-type-rootreadGets the root level of the document type tree. Use get-all-document-types instead unless you specifically need only root level items.
get-document-type-siblingsreadGets sibling document types or document type folders for a given descendant id
get-document-type-tree-searchreadSearches document types in tree-node shape (with hasChildren and parent for tree navigation). Optional itemKind filter accepts
get-document-types-by-id-arrayreadGets document types by IDs (or empty array if no IDs are provided)
get-document-urlsreadGets the URLs for a document.
get-document-versionreadList document versions with pagination
get-document-version-by-idreadGet specific document version by ID
get-element-ancestorsreadGets ancestor items for an element.
get-element-are-referencedreadCheck if element items are referenced Use this to verify if specific element items are being referenced by other content before deletion or modification.
get-element-audit-logreadFetches the audit log for an element by Id.
get-element-by-idreadGets an element by id
get-element-by-id-referenced-byreadGet items that reference a specific element item Use this to find all content, documents, or other items that are currently referencing a specific element item.
get-element-childrenreadGets child items for an element.
get-element-configurationreadGets the element configuration for the Umbraco instance.
get-element-folderreadGets an element folder by Id
get-element-item-ancestorsreadGets the ancestor chain (breadcrumb) for multiple element Ids in one call. Returns one entry per requested Id, each containing that Id
get-element-publishedreadGets the published version of an element by id. Unlike get-element-by-id, which returns the draft/current version, this returns only the data from the last published version of the element.
get-element-rootreadGets root items for elements.
get-element-siblingsreadGets sibling elements for a given descendant id.
get-element-versionreadList element versions with pagination
get-element-version-by-idreadGet a specific element version by ID
get-filter-user-groupreadGets filtered user groups
get-health-check-group-by-namereadGets specific health check group details by name for system monitoring
get-health-check-groupsreadGets a paged list of health check groups for system monitoring
get-iconsreadReturns a list of all available Umbraco icons that can be used in document types and element types
get-indexerreadLists all indexes with pagination support. Returns an object containing: - total: Total number of indexes (number) - items: Array of index objects with name, searcherName, and other properties
get-indexer-by-index-namereadGets a specific index by its name. Returns detailed information about the index including its configuration and status.
get-item-documentreadGets document items by their ids
get-item-elementreadGets element items by their ids
get-item-element-folderreadGets element folder items by their ids
get-item-media-typereadGets media type items by their ids
get-item-member-searchreadSearches for member items
get-item-userreadGets user items for selection lists and pickers
get-languagereadGets all languages with optional pagination
get-language-by-iso-codereadGets a language by ISO code
get-language-itemsreadGets language items (optionally filtered by isoCode)
get-log-viewer-levelreadGet log viewer levels
get-log-viewer-level-countreadGet log viewer level counts
get-log-viewer-logreadGet log viewer logs
get-log-viewer-message-templatereadGet log viewer message templates
get-log-viewer-saved-searchreadGet log viewer saved searches
get-log-viewer-saved-search-by-namereadGets a saved search by name
get-log-viewer-validate-logs-sizewriteValidates the size of the logs, for the given start and end date, or the lase day if not provided
get-manifest-manifestreadGets all manifests (both public and private) from the Umbraco installation. Each manifest contains an extensions property showing what the package exposes to Umbraco. Use to see which packages are installed, troubleshoot package issues, or list available extensions.
get-manifest-manifest-privatereadGets private manifests from the Umbraco installation. Private manifests require authentication and contain administrative/sensitive extensions.
get-manifest-manifest-publicreadGets public manifests from the Umbraco installation. Public manifests can be accessed without authentication and contain public-facing extensions.
get-media-ancestorsreadGets ancestor items for a media.
get-media-ancestors-batchreadGets the ancestor chain (breadcrumb) for multiple media Ids in one call. Returns one entry per requested Id, each containing that Id
get-media-are-referencedreadCheck if media items are referenced Use this to verify if specific media items are being referenced by other content before deletion or modification.
get-media-audit-logreadFetches the audit log for a media item by Id.
get-media-by-idreadGets a media item by id Use this to retrieve existing media items.
get-media-by-id-arrayreadGets media items by an array of IDs
get-media-by-id-referenced-byreadGet items that reference a specific media item Use this to find all content, documents, or other items that are currently referencing a specific media item.
get-media-childrenreadGets child items for a media.
get-media-configurationreadGets the media configuration for the Umbraco instance.
get-media-recycle-bin-siblingsreadGets sibling media items in the recycle bin for a given descendant id
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryFAIL
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (10 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (18)

HIGHHard-coded secrets · inv.env_committed · CWE-798, CWE-321
.env
.env
Why it matters. a real .env in the package
Fix. ship .env.example with placeholders only
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
jest.config.ts:4
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
Why it matters. certificate verification is disabled
Fix. leave verification on
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
demo-site-template/McpOAuthComposer.cs:51
new Uri("http://127.0.0.1:8787/callback"),
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
demo-site-template/McpOAuthComposer.cs:56
new Uri("http://127.0.0.1:8787/logout-callback"),
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/worktree-create.sh:131
.profiles["Umbraco.Web.UI"].applicationUrl = "https://127.0.0.1:0;http://127.0.0.1:0" |
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/worktree-create.sh:133
.iisSettings.iisExpress.applicationUrl = "http://127.0.0.1:0"
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete-data-type, delete-data-type-folder, delete-dictionary-item, delete-document, delete-document-blueprint, delete-document-blueprint-folder, delete-document-public-access, delete-document-recycle-
Why it matters. 39 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.dev.vars.example
.dev.vars.example
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env
.env
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.worktreeinclude
.worktreeinclude
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/umbraco-api/tools/__tests__/guid-not-uuid.test.ts:19
"../../api/umbracoManagementAPI.zod.ts"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/umbraco-api/tools/data-type/__tests__/get-references-data-type.test.ts:4
import { DocumentTypeBuilder } from "../../document-type/__tests__/helpers/document-type-builder.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/umbraco-api/tools/data-type/__tests__/get-references-data-type.test.ts:5
import { DocumentTypeTestHelper } from "../../document-type/__tests__/helpers/document-type-test-helper.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/umbraco-api/tools/data-type/__tests__/is-used-data-type.test.ts:4
import { DocumentTypeBuilder } from "../../document-type/__tests__/helpers/document-type-builder.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/umbraco-api/tools/data-type/__tests__/is-used-data-type.test.ts:5
import { DocumentTypeTestHelper } from "../../document-type/__tests__/helpers/document-type-test-helper.js";
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, @types/uuid, @types/yargs, @umbraco-cms/mcp-hosted, @umbraco-cms/mcp-server-sdk, dotenv, form-data, mime-types
Why it matters. 33 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
src/umbraco-api/tools/user-group/USER_GROUP_SECURITY_ANALYSIS.md:36
- **System Compromise**: Malicious actors could grant themselves or others elevated permissions
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/proto-docs/MEDIA_FILE_PATH_SECURITY.md:12
- Access sensitive files (`.env`, SSH keys, source code, credentials)
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha a449a900e43bfull audit observations/trust-audit/mcp-server/umbraco__umbraco-1.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-08a449a900e43bBLOCKD69first audit
06

Questions

What is the Umbraco MCP server?

A developer focused model context protocol (MCP) server for Umbraco CMS

What tools does Umbraco expose?

200 in total: 268 read-only, 94 that write, and 39 that can delete or overwrite (delete-data-type, delete-data-type-folder, delete-dictionary-item, delete-document, delete-document-blueprint). Every one is listed on this page with its risk.

Is Umbraco safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 39 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does Umbraco need?

It reads NODE_TLS_REJECT_UNAUTHORIZED, UMBRACO_CLIENT_ID and UMBRACO_CLIENT_SECRET from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Umbraco run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @umbraco-cms/mcp-dev at 18.1.7.

How current is this page?

The grade is for one exact copy of the source (a449a900e43b), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement