Skip to main content
Glama
Sitecore Community MCP

Sitecore Community MCP

by gherisalim

Sitecore Community MCP

Build MCP spec 2026-07-28 Legacy handshake 2025-11-25 to 2024-10-07 PRs Welcome

This repository contains the source code for the Sitecore Community MCP server — an open-source Model Context Protocol server that gives AI agents direct read/write access to Sitecore, so you stop copy-pasting between your agent and the Content Editor.

  • 121 tools across search, query, create, read, update, delete, media, PowerShell, logging, security and presentation

  • Three guides — guide://compose-page, guide://bulk-update and guide://diagnose-connection — resources an agent can read mid-task: two common, complex workflows that you'd want to use this MCP for, plus a connection issue self diagnosis helper.

  • Covers four Sitecore API surfaces: the Authoring and Management GraphQL API, the Item Service, GraphQL Edge and Sitecore PowerShell Extensions

  • Works with SitecoreAI and Sitecore XM/XP (all versions), from any MCP-compatible client

  • Implements MCP protocol revision 2026-07-28, and answers the older initialize handshake from the same tool registrations — negotiating down to any revision from 2025-11-25 to 2024-10-07, so a client on either era sees the same tools

  • Reported impact: 5× faster Figma-to-Sitecore workflows and ~70% less manual scaffolding (case study)

  • Three ways to run it: npm, Docker, or from source

Getting started with Sitecore Community MCP

To run the Sitecore Community MCP server, you need:

  • Node — the latest long-term support (LTS) release.

  • A Sitecore XM, XP or SitecoreAI instance. Which parts you enable decides which tools work: the authoring.* groups need only the Authoring and Management API (normally already on in the cloud) plus a token, while the Item Service and SPE Remoting are off by default and need a config patch. Preparing your Sitecore instance covers all three and how to verify each.

Adding the server to your MCP client

Add the entry below to your client's server map — mcpServers in Cursor, Claude Code and most other clients, servers in VS Code — and fill in your own endpoints and credentials:

{
  "mcpServers": {
    "sitecore-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["@antonytm/mcp-sitecore-server@latest"],
      "env": {
        "TRANSPORT": "stdio",
        "GRAPHQL_ENDPOINT": "https://xmcloudcm.localhost/sitecore/api/graph/",
        "GRAPHQL_SCHEMAS": "edge",
        "GRAPHQL_API_KEY": "{6D3F291E-66A5-4703-887A-D549AF83D859}",
        "GRAPHQL_HEADERS": "",
        "ITEM_SERVICE_DOMAIN": "sitecore",
        "ITEM_SERVICE_USERNAME": "admin",
        "ITEM_SERVICE_PASSWORD": "b",
        "ITEM_SERVICE_SERVER_URL": "https://xmcloudcm.localhost/",
        "POWERSHELL_DOMAIN": "sitecore",
        "POWERSHELL_USERNAME": "admin",
        "POWERSHELL_PASSWORD": "b",
        "POWERSHELL_SERVER_URL": "https://xmcloudcm.localhost/",
        "AUTHORING_CLIENT_ID": "",
        "AUTHORING_CLIENT_SECRET": "",
        "TOOL_PROFILE": ""
      }
    }
  }
}

TOOL_PROFILE takes a comma-separated list of presets, and unions what each one hides. Every preset names something absent or unwanted rather than a platform. Four name an API surface your instance does not serve — no-spe, no-item-service, no-edge-graphql and no-authoring-api — so an instance missing two of them can say so. no-account-management is the one that is not about a missing surface: it hides the twelve tools that create or edit an account on the CM, for a deployment that would rather an agent could not do that at all (item security, and reading accounts and roles, are untouched):

TOOL_PROFILE=no-spe,no-item-service

no-spe is the big one: without SPE installed and its remoting service enabled, roughly three quarters of this server's tools cannot run, and hiding them is schema an agent no longer pays for on every turn. An unknown name is reported on stderr and ignored, leaving the rest of the list in force.

Every setting is documented in Configuration. Agents have a limit on how many tools they can hold, so before you get far, read Tool selection and trim the surface with TOOL_PROFILE, TOOL_GROUPS and DISABLED_TOOLS.

To run the server in a container or from source instead, see Running the server.

Related MCP server: WordPress MCP Server

How this compares to the Sitecore Marketer MCP

Sitecore's own Marketer MCP is a hosted service aimed at marketers on SitecoreAI. This server is the developer-grade counterpart, and on that ground it is the stronger tool:

Sitecore Community MCP

Sitecore Marketer MCP

Platforms

SitecoreAI and XM/XP, all versions — including your local Docker CM

SitecoreAI only

Hosting

Self-hosted (npm, Docker, source); credentials never leave your infrastructure

Hosted by Sitecore; OAuth through the cloud

Surface

121 tools across the full developer surface: items, templates, presentation, media, security, indexing, logs, publishing, GraphQL, raw PowerShell

Marketer operations: pages, components, briefs, brand kits, personalization, A/B tests

Escape hatch

run-powershell-script, raw Edge GraphQL and raw Authoring GraphQL — if a tool doesn't exist, the capability still does

Closed tool set

Layout safety

add-rendering-to-placeholder refuses components the placeholder settings forbid, naming the allow-list

Writes are not validated against placeholder settings

Tool gating

TOOL_GROUPS / DISABLED_TOOLS / TOOL_PROFILE trim the schema cost per turn

Fixed tool list

They are complementary rather than exclusive: the Marketer MCP carries the cloud marketing features this server has no API for (briefs, brand kits, personalization variants, A/B tests), and nothing stops a client from connecting both. For building, migrating, auditing and operating Sitecore solutions, this server is the one with the depth.

Documentation and community resources

  • Preparing your Sitecore instance — SPE Remoting, the Item Service, GraphQL keys, and the config patch that enables them

  • Running the server — npm, Docker, from source, and the two transports

  • Tool reference — every tool, grouped by API surface

  • Configuration — environment variables, transports, timeouts and TLS

  • Tool selection — TOOL_GROUPS, DISABLED_TOOLS and TOOL_PROFILE

  • Guides — the guide://compose-page, guide://bulk-update and guide://diagnose-connection resources, and when each is offered

  • Docker images — the published Linux and Windows images

  • Changelog — what's new in 2.0 and its breaking changes

Community resources:

Contributions

We are very grateful to the community for contributing bug fixes and improvements. We welcome all efforts to evolve and improve this server; read below to learn how to participate in those efforts.

Contributing Guide

Read our contributing guide to learn about our development process, how to propose bug fixes and improvements, and how to build, debug and test your changes.

License

Sitecore Community MCP is using the Apache 2.0 license.

Support

This is a community project and is not supported by Sitecore.

Available Tools

123 tools
add-rendering-to-placeholderA

Adds a rendering to a placeholder on a page, refusing it when the placeholder's settings do not allow that component (the allow-list is named in the error). This is the tool to compose a page with: presentation-add-rendering writes whatever it is told, and an invalid layout still saves and renders. Assigns a collision-free DynamicPlaceholderId when the rendering's parameters template defines one, and writes the full parameter set the template declares. Returns the placeholder path a child rendering should target, so a nested build is one call per level. Pass force=true to skip validation for migration or repair work. Read the guide://compose-page resource for the order to run the composition tools in, and for the dynamic placeholder, splitter and GridParameters cases that silently produce a broken page when guessed at.

Inputs: placeholder (required), path, force, index, +10 more.

authoring-copy-itemA

Copies a Sitecore item to another parent over the Authoring and Management API. Copies the whole subtree by default; set deepCopy false to copy the item alone. Supply exactly one of id or path for the source, and exactly one of targetParentId or targetParentPath for the destination.

Inputs: id, path, database, deepCopy, +3 more.

authoring-create-itemA

Creates a Sitecore item from a template over the Authoring and Management API and returns the created item. The parent must be given as a GUID (the API takes no parent path here) — use authoring-get-item to resolve a path to its ID first.

Inputs: name (required), parent (required), templateId (required), fields, +2 more.

authoring-create-item-templateB

Creates a Sitecore data template, with its sections and fields, in one call over the Authoring and Management API. The parent must be a GUID — the folder under /sitecore/templates the template belongs in. Field types are Sitecore's own names, e.g. 'Single-Line Text', 'Rich Text', 'Image', 'General Link', 'Droptree'.

Inputs: name (required), parent (required), icon, database, +4 more.

authoring-delete-itemA
Destructive

Deletes a Sitecore item over the Authoring and Management API. By default the item goes to the recycle bin and can be restored; permanently true destroys it outright. Deleting an item deletes its descendants with it. Supply exactly one of id or path.

Inputs: id, path, database, permanently.

authoring-get-itemA
Read-only

Reads a Sitecore item by ID or path over the Authoring and Management API, returning its identity, template and field values. Reads the authoring database, so unpublished content is visible — unlike the Edge query tools. Supply exactly one of id or path.

Inputs: id, path, version, database, +3 more.

authoring-get-item-templateA
Read-only

Reads a Sitecore data template over the Authoring and Management API, returning its sections and field definitions (name, type, source). Call this before authoring-create-item to learn which fields a template accepts, or before authoring-update-item-template to get the section and field IDs an update needs. Sections report their ID as itemTemplateSectionId; an update supplies that same value as templateSectionId. Supply exactly one of templateId or path.

Inputs: path, database, templateId.

authoring-get-jobA
Read-only

Reads one Sitecore background job by name or handle over the Authoring and Management API, returning its state, progress and messages. This is how you find out whether an index rebuild or other queued operation finished. Supply exactly one of jobName or handle.

Inputs: handle, jobName.

authoring-get-media-itemA
Read-only

Reads a media item over the Authoring and Management API, returning its identity, mime type, size and URL. Use it after authoring-upload-media to get the ID an image field value needs, or to check what is already in the media library. Supply exactly one of id or path.

Inputs: id, path, database, language.

authoring-get-siteA
Read-only

Reads one site's configuration by name over the Authoring and Management API — paths, database, language, device and the editing switches. Use authoring-list-sites first if you do not know the site's name.

Inputs: siteName (required).

authoring-graphqlA
Destructive

Executes any query or mutation against the Sitecore Authoring and Management GraphQL API and returns the data as JSON. The document is syntax-checked before it is sent. Unlike the Edge endpoint, this one reads and writes the authoring databases, so unpublished content is visible and mutations take effect immediately. Prefer a typed authoring-* tool when one covers the operation; use this for the rest of the schema, with authoring-introspect-schema for the SDL. The API supports no subscriptions, and rejects GET — everything goes over POST, which this tool does for you.

Inputs: query (required), variables.

authoring-introspect-schemaA
Read-only

Explores the Sitecore Authoring and Management GraphQL schema (items, templates, media, sites, search, publishing, jobs, indexing, workflow, security, identity). With no arguments it returns the operation index: 127 queries and mutations, one line each. Use type: "" for one operation or type in full — for an operation the input types its arguments need are included, so one call is enough to write the document — search: "" to find an operation by what it does, and full: true for the entire SDL (117,188 characters on a live CM). Most of this schema has no typed authoring-* tool, so this is how you find the rest: createUser, createSite, executeWorkflowCommand, addLanguage, archiveItem, cancelPublishing and around a hundred more. Not the Edge schema — that is introspection-graphql-*.

Inputs: full, type, search, includeDescriptions.

authoring-list-jobsA
Read-only

Lists Sitecore background jobs over the Authoring and Management API. jobName accepts wildcards: '' for every job, 'myjob' for names starting with it, '*myjob' for names ending with it, 'myjob' for names containing it. Omit jobName to list them all. Use this to find out what the instance is busy with, or to locate a job whose exact name you do not know.

Inputs: first, jobName.

authoring-list-sitesA
Read-only

Lists the sites configured on the Sitecore instance over the Authoring and Management API, with each site's root path, start path and root item ID. Usually the first call when working on an instance you have not seen: the root item ID is what authoring-search scopes a subtree search by, and the root path is what item paths hang off. System sites (shell, admin, login and the rest) are hidden unless includeSystemSites is set.

Inputs: includeSystemSites.

authoring-move-itemA

Moves a Sitecore item to another parent over the Authoring and Management API, taking its descendants with it. Every link to the item survives the move — prefer this over delete-and-recreate, which breaks them. Supply exactly one of id or path, and exactly one of targetParentId or targetParentPath.

Inputs: id, path, database, sortOrder, +2 more.

authoring-publishing-statusA
Read-only

Reads the status of a publish queued by authoring-publish-item. Returns state (INITIALIZING, QUEUED, RUNNING, ABORTREQUESTED, ABORTED, FINISHED, UNKNOWN), isDone, isFailed and how many items have been processed. Poll this until isDone before treating published content as live.

Inputs: publishingOperationId (required).

authoring-publish-itemA

Queues a publish of one or more items over the Authoring and Management API and returns an operationId. Publishing is asynchronous — the call returns as soon as the job is queued, so poll authoring-publishing-status with the operationId before reporting that content is live. On SitecoreAI the target is 'experienceedge'; on XM/XP it is usually 'web'. Supply exactly one of rootItemIds or rootItemPaths.

Inputs: languages (required), targetDatabases (required), displayName, rootItemIds, +5 more.

authoring-rebuild-indexesA

Starts a rebuild of one or more Sitecore search indexes over the Authoring and Management API and returns the jobs it queued. A full rebuild of sitecore_master_index is expensive and leaves search results incomplete while it runs, so prefer it only when the index is actually stale. Poll the returned job names with authoring-get-job. Use authoring-graphql with 'query { indexes { nodes { name } } }' to list the index names.

Inputs: indexNames (required).

authoring-rename-itemA

Renames a Sitecore item over the Authoring and Management API. The item keeps its ID, so links to it survive, but its path changes and any URL derived from the name changes with it. Supply exactly one of id or path.

Inputs: newName (required), id, path, database.

authoring-update-itemA

Sets field values on an existing Sitecore item over the Authoring and Management API. Only the fields named are touched; set reset true on a field to return it to its template's standard value instead of writing a value. Supply exactly one of id or path.

Inputs: fields (required), id, path, version, +2 more.

authoring-update-item-templateA

Updates a Sitecore data template over the Authoring and Management API. Sections and fields carrying an ID are updated; those without one are created. Matching is by ID only, never by name: to add a field to a section that already exists you must pass that section's templateSectionId (read it as itemTemplateSectionId from authoring-get-item-template), otherwise the call is rejected for creating a second section of the same name. Nothing is removed unless deleteMissingFields is true — and when it is, every section and field absent from this call is deleted, along with the content stored in them, so read the template first.

Inputs: templateId (required), icon, name, database, +5 more.

authoring-upload-mediaA
Destructive

Uploads a file into the Sitecore media library over the Authoring and Management API and returns the created media item. Does both halves of the documented flow: asks uploadMedia for a pre-signed URL, then POSTs the bytes to it. Source is exactly one of sourceUrl (fetched by this server — use this to import from a live site), filePath (local to the machine running this MCP server), or content (base64). Needs no SPE Remoting, unlike media-upload.

Inputs: itemPath (required), alt, content, database, +7 more.

common-add-item-versionB

Creates a version of the item in a new language based on an existing language version.

Inputs: id, full, path, fields, +8 more.

common-convert-from-item-cloneC

Converts an item from a clone to a fully independent item.

Inputs: id, full, path, fields, +3 more.

common-get-archiveC
Read-only

Gets Sitecore database archives.

Inputs: full, name, database.

common-get-archive-itemA
Read-only

Gets a page of the items found in the specified archive, with the archive's total entry count. Returns the 100 most recently archived entries unless first/skip say otherwise.

Inputs: archive (required), database (required), full, skip, +3 more.

common-get-cacheA
Read-only

Gets information about Sitecore caches, with their size and occupancy. Omit name to return every cache. Cache names contain square brackets ('master[items]'); pass one exactly as reported and it is matched literally, or use * / ? for a wildcard.

Inputs: full, name.

common-get-databaseC
Read-only

Gets information about Sitecore databases.

Inputs: full, name.

common-get-item-cloneC
Read-only

Returns all the clones for the specified item.

Inputs: id, full, path, fields, +1 more.

common-get-item-fieldC
Read-only

Gets item fields as either names or fields or template fields.

Inputs: id, name, path, database, +3 more.

common-get-item-referenceB
Read-only

Gets item references for a Sitecore item, showing where it is used throughout the system.

Inputs: id, full, path, fields, +3 more.

common-get-item-referrerC
Read-only

Gets items referring to a Sitecore item, showing which items reference it.

Inputs: id, full, path, fields, +3 more.

common-get-item-templateB
Read-only

Gets template information for a Sitecore item.

Inputs: id, full, path, fields, +1 more.

common-get-item-workflow-eventC
Read-only

Gets entries from the workflow history for the specified item.

Inputs: id, path, database, identity, +1 more.

common-get-sitecore-jobB
Read-only

Gets the current Sitecore jobs with their state and progress. Get-SitecoreJob takes no arguments, so every job is returned; read State and IsDone to find the one you want.

Inputs: full.

common-invoke-workflowC

Executes workflow action for a Sitecore item.

Inputs: commandName (required), id, path, comments, +2 more.

common-new-item-cloneC

Creates a new item clone based on the item provided.

Inputs: name (required), destination (required), id, full, +4 more.

common-new-item-workflow-eventC

Creates a new entry in the workflow history for a Sitecore item.

Inputs: id, path, text, database, +3 more.

common-publish-itemA

Publishes a Sitecore item. On SitecoreAI there is no web database — content publishes to Edge, which lives on Sitecore's cloud servers only, so this works on deployed environments but a local development CM has no publishing target.

Inputs: id, path, asJob, target, +8 more.

common-remove-archive-itemB
Destructive

Removes items permanently from the specified archive.

Inputs: archive (required), database (required), itemId, identity.

common-remove-item-versionC
Destructive

Removes a version of a Sitecore item.

Inputs: language (required), id, path, archive, +4 more.

common-reset-item-fieldC
Destructive

Resets item fields, specified as either names, fields or template fields.

Inputs: id, name, path, database, +1 more.

common-restart-applicationB
Destructive

Restarts the Sitecore Application pool.

Inputs: no named parameters.

common-restore-archive-itemB

Restores items to the original database from the specified archive.

Inputs: archive (required), database (required), itemId, identity.

common-set-base-templateA
Destructive

Adds or removes a base template on a template item. Removing one takes its fields off every item built from the template, along with their values.

Inputs: action (required), template (required), id, path, +1 more.

common-set-item-templateC

Sets the item template.

Inputs: template (required), id, path, database, +1 more.

common-test-base-templateB
Read-only

Checks if the item inherits from the specified template.

Inputs: template (required), id, path, database.

common-update-item-referrerC

Updates all references to the specified item to point to a new provided in the -NewTarget or removes links to the item.

Inputs: id, path, database, language, +2 more.

configA
Read-only

Prints the configuration of the Sitecore MCP server. Secrets (passwords, the GraphQL API key, the authorization header) are redacted.

Inputs: no named parameters.

create-component-datasourceA

Creates the datasource item for a component, using the Datasource Template and Datasource Location declared on the rendering itself. placement='page-local' (default) creates /Data/ and returns the layout reference form 'local:/Data/' that authored pages use; placement='shared' resolves the rendering's pipe-separated Datasource Location candidates in order and creates the item in the first that exists, returning the item ID to reference it by. Fails naming every candidate it tried when none resolves, rather than guessing at a location. Pass the field values in 'fields' and they are set on the new item.

Inputs: name, path, fields, pageId, +5 more.

get-allowed-components-by-placeholderA
Read-only

Lists the renderings a placeholder allows on a given page, read from the placeholder settings items that govern it. Call this before adding a rendering: a placeholder that forbids a component will still accept it silently, and the page will render. Resolves site-level settings first (/Presentation/Placeholder Settings) and falls back to the global tree (/sitecore/layout/Placeholder Settings/Project/...); settingsItemPath in the result says which item answered. Handles dynamic placeholders: a runtime path like /headless-main/page-section-1/container-2 is matched on its leaf segment against wildcard keys such as container-{*}. Allowed control IDs that resolve to no item are reported under 'Unresolved' rather than dropped silently — that is a content defect worth seeing. Found=false means no settings item governs the key, so check the spelling before treating it as unrestricted.

Inputs: placeholderPath (required), path, pageId, project, +2 more.

get-pages-by-siteA
Read-only

Lists the pages of a site. Returns { Matched, Returned, Truncated, Root, SiteName, Pages: [{ ID, Path, Template, TemplateID }] }. An item counts as a page when it has presentation (a layout on the item or on its template's standard values), which is what makes it addressable as a page — not a guess from template naming.

Inputs: path, limit, database, rootPath, +1 more.

get-powershell-documentationA
Read-only

The Sitecore PowerShell Extensions command reference, for writing run-powershell-script scripts. Reveals progressively rather than returning the whole ~510KB corpus: call it with NO arguments first for an index of all 129 commands with one-line summaries, then call it again with 'command' for the full page — syntax, every parameter, and examples — of the one or few you need. 'search' matches names, summaries and page bodies when you know what you want to do but not which cmdlet does it; 'category' lists one group. Do not fetch pages you are not about to use.

Inputs: search, command, category.

get-site-informationA
Read-only

Returns one site's definition plus the paths the composition tools need: the home item, the site-level Placeholder Settings root, the Available Renderings root, the shared Data folder, the site definition item, and the project (tenant) folder used to resolve global placeholder settings. Address the site by name, or by any item path inside it.

Inputs: path, database, siteName.

indexing-find-itemA
Read-only

Finds items through the Sitecore Content Search API over SPE. Prefer authoring-search where it is available: it needs no SPE, scopes to a subtree with a '_path' criterion, and pages with a real total. For published content, a search query through query-graphql- is also cheaper than this. Reach for this tool when neither is configured, or when you need an index this server's other surfaces cannot address by name. Dates are ISO 8601 (e.g. '2023-10-01T00:00:00Z'). Returns Skip, First, Returned, HasMore and Items; HasMore is how you know to page, since Content Search reports no total.

Inputs: criteria (required), skip, first, index.

indexing-get-search-indexA
Read-only

Get information about Sitecore search indexes, addressed by name. SPE's Get-SearchIndex takes no other filter, so filter the returned rows rather than asking the CM to. IndexingState (Started / Stopped) is reliable; the Summary fields (NumberOfDocuments, IsHealthy, IsClean, OutOfDateIndex) come from the search provider and are not dependable everywhere — on an XM Cloud CM, where every index shares one Solr core, NumberOfDocuments reads 0 and IsHealthy false on an index that is serving queries perfectly well. Run an actual query with indexing-find-item before concluding an index is broken.

Inputs: full, name.

indexing-rebuild-search-indexA

Rebuilds Sitecore search indexes. Omit id and path to rebuild whole indexes — and omit name too to rebuild every index, which is expensive and leaves search results incomplete while it runs. Supply id or path to rebuild only that item's subtree, which is what you want after changing a branch of content. Pass asJob to queue it and poll with common-get-sitecore-job rather than waiting.

Inputs: id, name, path, asJob, +2 more.

indexing-set-search-index-stateA

Suspends, stops or resumes Sitecore search indexes. Omit name to act on every index in the matching state. To rebuild an index use indexing-rebuild-search-index; to read the current state use indexing-get-search-index.

Inputs: action (required), name.

introspection-graphql-edgeA
Read-only

Explores the Sitecore GraphQL 'edge' schema. With no arguments it returns the root operations plus the Item interface — the whole contract for querying this endpoint, a couple of KB. Use type: "" for one type in full, search: "" to find one, and full: true only when you genuinely need every definition: a delivery schema's full SDL measured 777,501 characters (~194,000 tokens) on a live CM, two thirds of it repeated descriptions. Prefer the typed item/presentation tools when one already answers the question, and authoring-get-item-template or common-get-item-field to read a template's fields — both are far cheaper than the generated per-template types here.

Inputs: full, type, search, includeDescriptions.

introspection-graphql-masterA
Read-only

Explores the Sitecore GraphQL 'master' schema. With no arguments it returns the root operations plus the Item interface — the whole contract for querying this endpoint, a couple of KB. Use type: "" for one type in full, search: "" to find one, and full: true only when you genuinely need every definition: a delivery schema's full SDL measured 777,501 characters (~194,000 tokens) on a live CM, two thirds of it repeated descriptions. Prefer the typed item/presentation tools when one already answers the question, and authoring-get-item-template or common-get-item-field to read a template's fields — both are far cheaper than the generated per-template types here.

Inputs: full, type, search, includeDescriptions.

item-service-create-itemC

Create a new Sitecore item under parent path with name using template id.

Inputs: itemName (required), parentPath (required), templateId (required), data, +1 more.

item-service-delete-itemC
Destructive

Delete a Sitecore item by its ID.

Inputs: id (required), options.

item-service-edit-itemC

Edit a Sitecore item by its ID.

Inputs: id (required), data (required), options.

item-service-get-itemC
Read-only

Get a Sitecore item by its ID or path.

Inputs: id, path, options.

item-service-get-item-childrenA
Read-only

Get the direct children of a Sitecore item by its ID, with all their fields. Pass options.fields to return only the fields you need — the full form is roughly 1.9KB per child.

Inputs: id (required), options.

item-service-get-item-descendantsA
Read-only

Gets every descendant of a Sitecore item by ID, with all their fields. Walks the tree client-side: one request per node, issued sequentially, so a large subtree costs seconds to minutes and returns an unpaged result. For structure only (paths, names, templates) at any depth, authoring-search with a '_path' criterion is one indexed query instead. Truncates at DESCENDANTS_MAX_ITEMS (5000) and says so. See the guide://tool-selection resource.

Inputs: id (required), options.

item-service-get-languagesB
Read-only

Get Sitecore languages.

Inputs: no named parameters.

item-service-search-itemsB
Read-only

Search Sitecore items using the ItemService RESTful API. The endpoint's facet breakdown is omitted unless includeFacets is set — it accounted for 96% of the response on a live CM and is rarely what the caller is after.

Inputs: term (required), page, facet, fields, +4 more.

list-insert-optionsA
Read-only

Lists the insert options configured for an item — the templates and branches that may be created under it — read from its __Masters field (which inherits from the template's standard values). Each row reports Kind: 'Branch' items copy a whole subtree, 'Template' items create a single item. Note that insert rules are not evaluated (the uiGetMasters pipeline the Content Editor runs is not available on an SitecoreAI CM), so a project that uses them may see more options in the editor than are listed here. IDs that resolve to no item are reported under Unresolved.

Inputs: path, itemId, database, language.

list-site-componentsA
Read-only

Lists the renderings a site makes available, grouped by its Available Renderings groups (Page Content, Page Structure, FEaaS, Forms, Global on a Stride site). This is the site's component inventory, NOT an allow-list: the groups do not determine where a rendering may be placed. Use get-allowed-components-by-placeholder for that. IDs that resolve to no item are reported under Unresolved per group.

Inputs: path, database, siteName.

list-sitesA
Read-only

Lists the content sites registered on this CM: name, root path, start (home) path, database, hostname and the root item's ID and template. Sitecore's own infrastructure sites (shell, login, service, ...) are filtered out; pass includeSystemSites to see everything Sitecore has registered. Note that 'website' is reported — on XM/XP it is the content site, and on a SitecoreAI CM it shows up rooted at /sitecore/content alongside the real content sites.

Inputs: includeSystemSites.

logging-get-logsA
Read-only

Retrieves Sitecore logs from the CM's data folder over SPE. On a local Docker CM the same files are on a mounted volume, so reading them from disk is cheaper and shows the whole file; use this when you have no filesystem access to the CM. On a deployed SitecoreAI environment the platform collects logs and the data folder may hold little or nothing.

Inputs: date, name, tail, level.

media-downloadA

Downloads a media item's blob from the Sitecore media library via the SPE mediaDownload service. Pass saveTo to write it to a file local to the machine running this MCP server (always do this for anything over ~0.5MB); without saveTo the blob is returned inline as base64, capped at maxBytes. Requires in the CM's SPE services config.

Inputs: path (required), saveTo, database, maxBytes.

media-uploadA
Destructive

Uploads a file into the Sitecore media library via the SPE mediaUpload service and returns the created media item (ID, path, size, mime type). Overwrites an existing item at the destination unless skipExisting is set. Source is exactly one of sourceUrl (fetched by this server — use this to import from a live site), filePath (local to the machine running this MCP server), or content (base64). Requires in the CM's SPE services config.

Inputs: destination (required), alt, content, database, +4 more.

presentation-add-placeholder-settingC

Adds a placeholder setting to an item.

Inputs: key (required), id, path, database, +4 more.

presentation-add-renderingA

Adds a rendering to presentation of an item. Writes whatever it is told: use get-allowed-components-by-placeholder first, or add-rendering-to-placeholder, if the layout has to stay valid.

Inputs: placeHolder (required), id, path, index, +6 more.

presentation-get-layoutA
Read-only

Gets the layout definition item assigned to an item -- the Sitecore layout item itself (e.g. 'Headless Layout'), not the renderings placed on the page. Use presentation-list-renderings to see a page's components.

Inputs: id, full, path, fields, +2 more.

presentation-get-layout-deviceA
Read-only

Gets a layout device by name, or the default device when name is omitted. On a headless site there is usually only the Default device.

Inputs: full, name, fields.

presentation-get-placeholder-settingC
Read-only

Gets placeholder setting assigned on an item.

Inputs: id, key, path, database, +3 more.

presentation-get-renderingC
Read-only

Gets rendering definition on an item.

Inputs: id, path, database, language, +4 more.

presentation-get-rendering-parameterC
Read-only

Gets rendering parameter for a rendering placed on an item.

Inputs: renderingUniqueId (required), id, name, path, +3 more.

presentation-list-renderingsA
Read-only

Lists the renderings placed on an item — the components that make up the page. This is the tool to use to see a page's composition; presentation-get-layout returns the assigned layout definition item instead. Returns one row per rendering: Index (position in the device's rendering list, which is what presentation-add-rendering and presentation-set-rendering address), Placeholder (the full placeholder path), RenderingName, RenderingID, Datasource and UniqueId. Set includeParameters to add each rendering's Parameters.

Inputs: id, path, database, language, +3 more.

presentation-merge-layoutC

Merges final and shared layouts of an item.

Inputs: id, path, database, language.

presentation-remove-placeholder-settingC
Destructive

Removes placeholder setting from an item.

Inputs: id, key, path, database, +3 more.

presentation-remove-renderingC
Destructive

Removes renderings from an item.

Inputs: uniqueId (required), id, path, database, +4 more.

presentation-remove-rendering-parameterC
Destructive

Removes the specified rendering parameter from the rendering placed on an item.

Inputs: renderingUniqueId (required), id, name, path, +3 more.

presentation-reset-layoutC
Destructive

Resets the layout of an item.

Inputs: id, path, language, finalLayout.

presentation-set-layoutC

Sets layout for an item.

Inputs: id, path, database, language, +3 more.

presentation-set-renderingC

Updates a rendering placed on an item with new values.

Inputs: uniqueId (required), id, path, index, +6 more.

presentation-set-rendering-parameterC

Adds and updates the specified rendering parameter from the rendering placed on an item.

Inputs: parameter (required), renderingUniqueId (required), id, path, +3 more.

presentation-switch-renderingA

Switches an existing rendering on an item with an alternate one. The switched instance gets a NEW uniqueId (SPE regenerates it); the tool returns one row per switched instance with the new UniqueId, RenderingID, Placeholder and Datasource — use that UniqueId for any follow-up call, the old one no longer exists.

Inputs: id, path, database, language, +6 more.

provider-get-itemB
Read-only

Gets a Sitecore item by path, ID, Sitecore query or URI.

Inputs: id, uri, full, path, +5 more.

query-graphql-edgeA
Destructive

Executes a GraphQL query against the Sitecore 'edge' endpoint and returns the data as JSON. The query is syntax-checked before it is sent. Note what the endpoint can see: 'edge' serves published content only (unpublished master changes are invisible to it), while 'master' / preview schemas read the authoring database. Use introspection-graphql-edge for the schema SDL.

Inputs: query (required), variables.

query-graphql-masterA
Destructive

Executes a GraphQL query against the Sitecore 'master' endpoint and returns the data as JSON. The query is syntax-checked before it is sent. Note what the endpoint can see: 'edge' serves published content only (unpublished master changes are invisible to it), while 'master' / preview schemas read the authoring database. Use introspection-graphql-master for the schema SDL.

Inputs: query (required), variables.

run-powershell-scriptA
Destructive

Runs a PowerShell script and returns the output. Before writing a script that changes many items, read the guide://bulk-update resource: it carries the pattern a mass write needs (every ID resolved from the instance, a named subtree as the root, a dry run the user approves, BeginEdit/EndEdit with a per-item try/catch).

Inputs: script (required).

search-site-pagesA
Read-only

Searches a site's pages by name or title, case-insensitively, on a substring match against Name, display name, Title and NavigationTitle. Returns { Matched, Returned, Truncated, Root, SiteName, Pages: [{ ID, Path, Template, TemplateID }] }. An item counts as a page when it has presentation (a layout on the item or on its template's standard values), which is what makes it addressable as a page — not a guess from template naming.

Inputs: query (required), path, limit, database, +2 more.

security-add-role-memberC

Adds a member to a Sitecore role.

Inputs: members (required), identity (required).

security-disable-userC
Destructive

Disables the Sitecore user account.

Inputs: identity (required).

security-enable-userC

Enables the Sitecore user account.

Inputs: identity (required).

security-export-accountA

Exports (serializes) a Sitecore user or role to the CM's own filesystem and returns the file path. Requires SPE 8.0 or later — earlier versions fail with a NullReferenceException (SPE issues #1369, #1370). On SitecoreAI prefer Sitecore CLI serialization.

Inputs: identity (required), accountType (required), path, root.

security-get-current-userC
Read-only

Get the current Sitecore user.

Inputs: full.

security-get-domainB
Read-only

Get Sitecore domains. Omit name to return every domain.

Inputs: full, name.

security-get-item-aclB
Read-only

Gets the access control list (ACL) of a Sitecore item — the rules set on the item itself. Narrow it with identity or filter to one account.

Inputs: id, full, path, filter, +2 more.

security-get-roleA
Read-only

Get Sitecore roles, by exact identity or by wildcard filter. Supply exactly one of identity or filter.

Inputs: full, filter, identity.

security-get-role-memberC
Read-only

Get members of a Sitecore role.

Inputs: identity (required), full, recurse, roleOnly, +1 more.

security-get-userA
Read-only

Get Sitecore users, by exact identity or by wildcard filter. Supply exactly one of identity or filter.

Inputs: full, filter, identity.

security-import-accountA
Destructive

Imports (deserializes) a Sitecore user or role from the CM's filesystem, overwriting the account's current state with the serialized one. The .user / .role file must exist — export it first with security-export-account. On SitecoreAI prefer Sitecore CLI serialization.

Inputs: identity (required), accountType (required), path, root.

security-new-domainC

Creates a new Sitecore domain.

Inputs: name (required), full.

security-new-roleC

Creates a new Sitecore role.

Inputs: identity (required), full.

security-new-userC

Creates a new Sitecore user.

Inputs: identity (required), full, email, comment, +5 more.

security-remove-domainB
Destructive

Removes a Sitecore domain.

Inputs: name (required).

security-remove-roleC
Destructive

Removes a Sitecore role.

Inputs: identity (required).

security-remove-role-memberC
Destructive

Removes members from a Sitecore role.

Inputs: members (required), identity (required).

security-remove-userC
Destructive

Removes the Sitecore user.

Inputs: identity (required).

security-set-item-aclA
Destructive

Changes the access rules on a Sitecore item. action 'add' appends one rule and leaves the others; 'replace' discards every existing rule on the item and leaves only this one; 'clear' removes all rules and adds nothing. Read the current rules with security-get-item-acl and check effective rights with security-test-item-acl.

Inputs: action (required), id, full, path, +7 more.

security-set-item-lockA
Destructive

Locks or unlocks a Sitecore item for editing. Independent of delete protection — use security-set-item-protection for that.

Inputs: action (required), id, full, path, +4 more.

security-set-item-protectionA
Destructive

Protects or unprotects a Sitecore item against deletion and renaming. Independent of the editing lock — use security-set-item-lock for that.

Inputs: action (required), id, full, path, +3 more.

security-set-userC

Updates properties of a Sitecore user account.

Inputs: identity (required), email, comment, enabled, +7 more.

security-set-user-passwordA

Sets a new password for a Sitecore user. Supply either 'oldPassword' (validated before the change) or 'resetPassword: true' (an administrative reset that does not need the current password) — SPE offers no third way to change a password.

Inputs: identity (required), newPassword (required), oldPassword, resetPassword.

security-test-accountC
Read-only

Tests if a Sitecore user exists and has specific properties.

Inputs: identity (required), accountType.

security-test-item-aclB
Read-only

Tests whether a user or role has specific access rights to a Sitecore item.

Inputs: identity (required), accessRight (required), id, path, +2 more.

security-unlock-userA

Unlocks a Sitecore user account that has been locked out due to failed login attempts.

Inputs: identity (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

    TDQS

    B3.1/5.0

    Scored across 123 tools

    Disambiguation3/5

    Many tools overlap across different backends (authoring vs item-service vs common vs provider for item CRUD; multiple search, publish, index rebuild, and media upload tools). The descriptions often explicitly guide selection, so boundaries are not indistinguishable, but the sheer volume and parallel surfaces create real misselection risk.

    Naming Consistency4/5

    Names are consistently kebab-case and mostly follow a category-verb-noun pattern (security-get-user, authoring-create-item, presentation-list-renderings). Minor deviations exist: some tools lack a category prefix (config, list-sites, run-powershell-script) and verbs vary (new vs create, get vs list).

    Tool Count1/5

    123 tools is an extreme mismatch for a single MCP server; even a broad CMS domain does not justify this surface, and the dimension calibrates 50+ tools as 1. Many operations could be consolidated or exposed through fewer generic entry points.

    Completeness5/5

    Coverage spans items, templates, media, presentation, security, publishing, indexing, workflow, archives, jobs, logs, and raw GraphQL, with generic GraphQL fallbacks for untyped operations. No obvious dead ends for the Sitecore administration domain.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers