{"name":"io.github.umbraco/Umbraco-CMS-MCP-Dev","slug":"umbraco-umbraco-cms-mcp-dev","title":null,"description":"A developer focused model context protocol (MCP) server for Umbraco CMS","url":"https://mcp.market/server/umbraco-umbraco-cms-mcp-dev","rating":null,"grade":"B","score":77,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":45,"stars":39,"forks":5,"downloads_week":921,"last_push_at":"2026-09-22T14:27:23.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/umbraco/Umbraco-CMS-MCP-Dev","website":null,"version":"18.0.1","remotes":[],"packages":[{"registryType":"npm","identifier":"@umbraco-cms/mcp-dev","version":"18.0.1","transport":{"type":"stdio"},"environmentVariables":[{"description":"Umbraco API user client ID","isRequired":true,"format":"string","isSecret":true,"name":"UMBRACO_CLIENT_ID"},{"description":"Umbraco API user client secret","isRequired":true,"format":"string","isSecret":true,"name":"UMBRACO_CLIENT_SECRET"},{"description":"Base URL of your Umbraco instance","isRequired":true,"format":"string","name":"UMBRACO_BASE_URL"},{"description":"Comma-separated list of tool collections to include (e.g., document,media,document-type)","format":"string","name":"UMBRACO_INCLUDE_TOOL_COLLECTIONS"},{"description":"Enable readonly mode to disable all write operations (create, update, delete). Only read and query tools remain available.","format":"boolean","name":"UMBRACO_READONLY"}]}],"tools":[{"name":"copy-data-type","description":"Copy a data type by Id. Returns the new data type's ID on success.","write_action":false,"price_micros":0,"input_schema":null},{"name":"copy-document","description":"Copy a document to a new location. Returns the new document's ID on success. This is also the recommended way to create new documents. Copy an existing document to preserve the complex JSON structure, then modify specific fields as needed. WORKFLOW NOTES: - The copy is created as a draft with the naming pattern \"Original Name (N)\" where N is a number - Use the returned ID for subsequent update and","write_action":false,"price_micros":0,"input_schema":null},{"name":"create-data-type","description":"Creates a new data type *** CRITICAL WORKFLOW REQUIREMENT *** BEFORE creating any new data type, you MUST perform the following steps: 1. First use the find-data-type function to search for existing data types with similar names and/or property editors 2. Verify if an existing data type can satisfy the requirements 3. Only proceed with creating a new data type if no suitable option exists 4. If a ","write_action":true,"price_micros":0,"input_schema":null},{"name":"create-data-type-folder","description":"Creates a new data type folder","write_action":true,"price_micros":0,"input_schema":null},{"name":"create-dictionary","description":"Creates a new dictionary item.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create-document-blueprint","description":"Creates a new document blueprint.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create-document-blueprint-folder","description":"Creates a new document blueprint folder","write_action":true,"price_micros":0,"input_schema":null},{"name":"create-document-blueprint-from-document","description":"Create a new document blueprint from an existing document Use this to create a blueprint template based on an existing document, preserving its structure and content for reuse. Note: Blueprints created from documents are always created at the root level. Use the move-document-blueprint tool to relocate them to folders after creation if needed.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete-data-type","description":"Deletes a data type by Id","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete-data-type-folder","description":"Deletes a data type folder by Id","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete-dictionary-item","description":"Deletes a dictionary item by Id","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete-document","description":"Deletes a document by Id","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete-document-blueprint","description":"Deletes a document blueprint by Id","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete-document-blueprint-folder","description":"Deletes a document blueprint folder by Id","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete-document-public-access","description":"Removes public access settings from a document by Id.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete-document-recycle-bin-item","description":"Permanently deletes a document from the recycle bin by its id","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete-from-recycle-bin","description":"Deletes a document from the recycle bin by Id.","write_action":true,"price_micros":0,"input_schema":null},{"name":"empty-recycle-bin","description":"Empties the document recycle bin.","write_action":false,"price_micros":0,"input_schema":null},{"name":"find-data-type","description":"Finds a data type by Id or Name","write_action":false,"price_micros":0,"input_schema":null},{"name":"find-dictionary","description":"Finds a dictionary by Id or name","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-all-data-types","description":"Gets 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-collection-document-by-id","description":"Get 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-culture","description":"Retrieves a paginated list of cultures that Umbraco can be configured to use","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type","description":"Gets a data type by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-ancestors","description":"Gets the ancestors of a data type by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-ancestors-batch","description":"Gets the ancestor chain (breadcrumb) for multiple data type Ids in one call. Returns one entry per requested Id, each containing that Id's chain of ancestors. Differs from get-data-type-ancestors which returns the tree-style ancestors of a single Id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-batch","description":"Gets full data types for multiple Ids in one call. Returns each data type's editor configuration values (e.g. dropdown options, numeric min/max), not just the lightweight item shape returned by get-data-types-by-id-array. Use when you need the same payload as get-data-type but for many Ids at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-children","description":"Gets the children data types or data type folders by the parent id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-configuration","description":"Gets global data type configuration settings including change permissions and default list view IDs","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-folder","description":"Gets a data type folder by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-root","description":"Gets the root level of the data type and data type folders in the tree.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-schema","description":"Gets the JSON Schema for a data type by Id. Returns a JSON Schema describing the value structure for the specified data type, including its configured property editor settings. IMPORTANT: Use this tool BEFORE creating data types to understand the expected configuration structure for a specific property editor.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-schemas","description":"Gets 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-search","description":"Searches the data type tree for a data type by name. It does NOT allow for searching for data type folders.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-siblings","description":"Gets sibling data types or data type folders for a given descendant id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-type-tree-search","description":"Searches 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 'Item', 'Folder' or 'All'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-data-types-by-id-array","description":"Gets data types by IDs (or empty array if no IDs are provided)","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-dictionary","description":"Gets a dictionary by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-dictionary-ancestors","description":"Gets the ancestors of a dictionary item by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-dictionary-by-id-array","description":"Gets dictionary items by IDs (or empty array if no IDs are provided)","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-dictionary-children","description":"Gets the children of a dictionary item by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-dictionary-root","description":"Gets the root level of the dictionary tree","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-ancestors","description":"Gets ancestor items for a document.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-ancestors-batch","description":"Gets the ancestor chain (breadcrumb) for multiple document Ids in one call. Returns one entry per requested Id, each containing that Id's chain of ancestors. Differs from get-document-ancestors which returns the tree-style ancestors of a single Id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-are-referenced","description":"Check if document items are referenced Use this to verify if specific document items are being referenced by other content before deletion or modification.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-audit-log","description":"Fetches the audit log for a document by Id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-available-segment-options","description":"Gets available segment options for a document by its id Use this to retrieve the available segment options (content variations) for a document. Useful for: \\u2022 Understanding what content variations are available for a document \\u2022 Determining which segments can be used when creating or editing document content \\u2022 Viewing segment names, aliases, and associated cultures","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-blueprint","description":"Gets a document blueprint by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-blueprint-ancestors","description":"Gets the ancestors of a document blueprint by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-blueprint-by-id-array","description":"Gets document blueprints by IDs (or empty array if no IDs are provided)","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-blueprint-children","description":"Gets the children of a document blueprint by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-blueprint-folder","description":"Gets a document blueprint folder by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-blueprint-root","description":"Gets the root level of the document blueprint tree","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-blueprint-scaffold","description":"Get 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-blueprint-siblings","description":"Gets sibling document blueprints for a given descendant id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-by-id","description":"Gets 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-by-id-referenced-by","description":"Get 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-by-id-referenced-descendants","description":"Get descendant references for a document item Use this to find all descendant references (child items) that are being referenced for a specific document item. Useful for: \\u2022 Impact analysis: Before deleting a document folder, see what content would be affected \\u2022 Dependency tracking: Find all content using documents from a specific folder hierarchy \\u2022 Content auditing: Identify which d","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-children","description":"Gets child items for a document.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-configuration","description":"Gets the document configuration for the Umbraco instance.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-domains","description":"Gets the domains assigned to a document by Id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-notifications","description":"Gets the notifications for a document by Id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-public-access","description":"Gets the public access settings for a document by Id. Set includeAncestors=true to also resolve protection inherited from an ancestor (the response's isProtectedByAncestor field reflects this).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-publish","description":"Gets the published state of a document by Id.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get-document-recycle-bin-siblings","description":"Gets sibling documents in the recycle bin for a given descendant id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-root","description":"Gets root items for documents.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-siblings","description":"Gets sibling documents for a given descendant id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-type-schema","description":"Gets the JSON Schema for a document type by Id. Returns a complete JSON Schema describing the structure for creating documents of that type, including all property definitions and their value formats. IMPORTANT: Use this tool BEFORE creating documents to understand the expected property structure for a specific document type.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-document-urls","description":"Gets the URLs for a document.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-item-document","description":"Gets document items by their ids","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-recycle-bin-document-children","description":"Gets child items for a document in the recycle bin.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-recycle-bin-document-original-parent","description":"Get the original parent location of a document item in the recycle bin Returns information about where the document item was located before deletion.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-recycle-bin-document-referenced-by","description":"Get references to deleted document items in the recycle bin Use this to find content that still references deleted document items before permanently deleting them.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-recycle-bin-document-root","description":"Gets root items for the document recycle bin.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-references-data-type","description":"Gets the document types and properties that use a specific data type. This is the recommended method to find all document types that reference a particular data type. Usage examples: - Find all document types using the RichText editor data type - Identify properties that reference a specific data type before modifying or deleting it - Perform bulk updates to all properties using a specific data ty","write_action":false,"price_micros":0,"input_schema":null},{"name":"is-used-data-type","description":"Checks if a data type is used within Umbraco","write_action":false,"price_micros":0,"input_schema":null},{"name":"move-data-type","description":"Move a data type by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"move-dictionary-item","description":"Moves a dictionary item by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"move-document","description":"Move a document to a new location","write_action":false,"price_micros":0,"input_schema":null},{"name":"move-document-blueprint","description":"Moves a document blueprint by Id","write_action":false,"price_micros":0,"input_schema":null},{"name":"move-document-to-recycle-bin","description":"Move a document to the recycle bin","write_action":false,"price_micros":0,"input_schema":null},{"name":"post-document-public-access","description":"Adds public access settings to a document by Id.","write_action":true,"price_micros":0,"input_schema":null},{"name":"publish-document","description":"Publishes a document by Id. IMPORTANT: If workflow approval is required, use the initiate-workflow-action function instead. This function bypasses approval workflows and publishes directly to the live site. When the culture is not provided, the default culture is null. When the schedule is not provided, the default schedule is null.","write_action":true,"price_micros":0,"input_schema":null},{"name":"publish-document-with-descendants","description":"Publishes a document and its descendants by Id. This is an asynchronous operation that may take time for large document trees. The tool will poll for completion and return the final result when finished.","write_action":true,"price_micros":0,"input_schema":null},{"name":"put-document-domains","description":"Updates the domains assigned to a document by Id. Default value of the defaultIsoCode is null. Domain isoCode in the domains array should be in the format of 'en-US' amd be a valid domain name from the Umbraco instance.","write_action":true,"price_micros":0,"input_schema":null},{"name":"put-document-notifications","description":"Updates the notifications for a document by Id.","write_action":true,"price_micros":0,"input_schema":null},{"name":"put-document-public-access","description":"Updates public access settings for a document by Id.","write_action":true,"price_micros":0,"input_schema":null},{"name":"restore-document-from-recycle-bin","description":"Restores a document from the recycle bin.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search-document","description":"Searches for documents by query, skip, and take.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sort-document","description":"Sorts the order of documents under a parent.","write_action":false,"price_micros":0,"input_schema":null},{"name":"unpublish-document","description":"Unpublishes a document by Id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update-block-property","description":"Updates or adds property values within BlockList, BlockGrid, or RichText block content. This tool enables targeted updates to individual block properties without sending the entire JSON payload. You can update existing properties, add new properties, or do both in a single call. It automatically handles deep traversal of nested block structures (e.g., RichText blocks containing nested blocks). Key","write_action":true,"price_micros":0,"input_schema":null},{"name":"update-data-type","description":"Updates a data type by Id","write_action":true,"price_micros":0,"input_schema":null},{"name":"update-data-type-folder","description":"Updates a data type folder by Id","write_action":true,"price_micros":0,"input_schema":null},{"name":"update-dictionary-item","description":"Updates a dictionary item by Id","write_action":true,"price_micros":0,"input_schema":null},{"name":"update-document","description":"Updates a document by Id. USE AS LAST RESORT ONLY. IMPORTANT: Prefer these specialized tools instead: - update-document-properties: For updating individual property values (simpler, safer) - update-block-property: For updating properties within BlockList/BlockGrid/RichText blocks Only use this tool when you need to update document-level metadata (template, variants) or when the specialized tools c","write_action":true,"price_micros":0,"input_schema":null},{"name":"update-document-blueprint","description":"Updates a document blueprint by Id","write_action":true,"price_micros":0,"input_schema":null},{"name":"update-document-blueprint-folder","description":"Updates a document blueprint folder","write_action":true,"price_micros":0,"input_schema":null},{"name":"update-document-properties","description":"Updates or adds property values on a document without requiring the full document JSON payload. This tool simplifies property updates by handling the read-modify-write cycle internally. You can update existing properties, add new properties, or do both in a single call. Key features: - Update existing properties or add new ones - Property must exist on the document type (including compositions) - ","write_action":true,"price_micros":0,"input_schema":null},{"name":"validate-document","description":"Validates a create document model, using the Umbraco API.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":77,"grade":"B","scanned_at":"2026-09-26T05:15:52.788Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T05:15:52.852Z","components":{"code":{"score":20,"max":25,"notes":["9 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 4 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/index.cjs: …ode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@umbraco-cms/mcp-dev","version":"18.0.1","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":12,"publishedAt":"2026-07-08T12:17:07.336Z","repositoryUrl":"git+https://github.com/umbraco/Umbraco-CMS-MCP-Dev.git","weeklyDownloads":921}],"repo":{"found":true,"owner":"umbraco","repo":"Umbraco-CMS-MCP-Dev","archived":false,"pushedAt":"2026-09-22T14:27:23Z","stars":39,"forks":5,"openIssues":17,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/1419552?v=4","ownerCreatedAt":"2012-02-08T12:53:58Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/1419552?v=4&s=128","source":"github"},"presence":{"stars":39,"forks":5,"downloadsWeek":921,"license":"MIT","lastPushAt":"2026-09-22T14:27:23.000Z","score":45}}}},"grade_history":[],"reviews":[]}