SObject All
SObject Reads
SObject Mutations
SObject Deletes
Archive Connect
Backup and Recover
Content Read-Only
Content Write
Data 360
Data 360 Legacy
Headless 360 (Beta)
Tableau Next
CRM Analytics (Beta)
The platform/content-readonly server provides read-only access to Salesforce CMS through MCP, so agents can search for, access, and read enhanced CMS content, folders, workspaces, and channels.
Use this server to:
When agents need to create or modify Salesforce CMS content, workspaces, folders, or channels, see the Content Write MCP Server.
mcp_api scopeTo use this MCP server, make sure that Digital Experiences is enabled in your org. Users must have access to Salesforce CMS in the org to be able to access CMS through the server. For example, to get details about a CMS workspace or content from a CMS workspace via the MCP server, the user must be a contributor for that workspace. See Contributors and Roles in Salesforce Help for more information.
For setup instructions, see Set Up Your Org.
Use these server URLs to access the production and sandbox versions of the content-readonly server.
https://api.salesforce.com/platform/mcp/v1/platform/content-readonlyhttps://api.salesforce.com/platform/mcp/v1/sandbox/platform/content-readonlyMCP Servers, and then select MCP Servers.The content-readonly server provides the following tools.
Gets the details of a single CMS workspace given its ID, including the workspace name, type, and default language.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/spaces/{contentSpaceId}.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
contentSpaceId | string | Yes | The ID of the CMS workspace |
Outputs: An array of details about the CMS workspace including its name, type, and default language.
Lists all enhanced CMS workspaces in the org that the current user can access. Returns each workspace’s ID, name, and type.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/spaces/.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
nameFragment | string | No | The name fragment to filter spaces that contain the value in the workspace name. |
spaceType | string | No | Type of CMS workspace to filter by. Enum: App_Dev, Content, Enablement, Experience, ExperienceContainer, Fragment_Space, Gen_AI, Library, Marketing, SalesEngagement, Web_App. |
page | integer | No | Number of the page you want returned. Starts at 0. If you don’t specify a value or if you specify 0, the first page is returned. |
pageSize | integer | No | Specifies the number of items per page. Valid values are 1–250. If you don’t specify a value, the default size is 25. |
businessUnitId | string | No | The ID of the Marketing business unit by which to filter workspaces |
businessUnitStatus | string | No | The status of the Marketing business unit by which to filter workspaces |
hasBusinessUnit | boolean | No | Filters workspaces by whether they’re associated with a business unit (true) or not (false) |
Outputs: An array of enhanced CMS workspaces with ID, name, and type.
Lists all the channels that are associated with a specific CMS workspace for the given workspace ID.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/spaces/{contentSpaceId/channels}.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
contentSpaceId | string | Yes | The ID of the CMS workspace |
page | integer | No | Number of the page you want returned. Starts at 0. If you don’t specify a value or if you specify 0, the first page is returned. |
pageSize | integer | No | Specifies the number of items per page. Valid values are from 1-250. If you don’t specify a value, the default size is 25. |
Outputs: An array of channels associated with the CMS workspace, each with ID, name, and type.
Searches for CMS content in enhanced CMS workspaces and folders by keyword, optionally filtered by workspace, folder, content type, or language.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/items/search.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
queryTerm | string | Yes | A list of up to 50 search terms, separated by space |
contentSpaceOrFolderIds | array of strings | Yes | The ID of the CMS workspace or folder in which to search for content |
contentTypeFQN | string | No | The fully qualified name of the content type used to restrict the search |
languages | array of strings | No | A list of up to 10 languages or All to search for all languages. Specify each language as a language only, such as en, or as a language and locale, such as en_US. The search returns only exact matches and only languages that the workspace supports. If unspecified, the workspace’s default language is used. |
page | integer | No | Number of the page you want returned. Starts at 0. If you don’t specify a value or if you specify 0, the first page is returned. |
pageSize | integer | No | Specifies the number of items per page. Valid values are from 1-250. If you don’t specify a value, the default size is 25. |
scope | string | No | The text search scope for items. Possible values include “All” or “TitleOnly.” If unspecified, defaults to All. If you specify a folder ID, you can’t restrict the search scope. |
Outputs: A paginated list of CMS keyword-based search result items.
Gets a single CMS content item by its content key or ID, and returns the content item and any translated variants.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/contents/{contentKeyOrId}.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
contentKeyOrId | string | Yes | The content key or ID of the CMS content item |
contentVersion | string | No | The content version of the CMS content item |
language | string | No | The language locale of the managed content, for example, en_US. If you don’t specify version or if you specify a version corresponding to the latest version, the document is returned in the fallback language, if available, or in the primary language of the workspace. If you specify a version that isn’t the latest version and isn’t available for the language, an error is returned. If you don’t specify a language, the document is returned in the primary language of the workspace. |
variantVersion | string | No | The variant version of the content item |
Outputs: The CMS content item and its variants.
Gets a single CMS content variant by its variant ID. A variant is one language rendition of a content item, for example, a French version, and it contains the content item’s body and field values in that language.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/contents/variants/{variantId}.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
variantId | string | Yes | The ID of the CMS content variant |
Outputs: The content variant, including its language, body, and field values.
Gets the details of a single CMS folder from an enhanced CMS workspace by the folder ID. Returns the folder name, creation date, permissions, and parent folder, if applicable.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/folders/{folderId}.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
folderId | string | Yes | The ID of the CMS folder |
contextContentSpaceId | string | No | The ID of the context workspace. Specify to get folder hierarchy information starting from the root of the context workspace. |
Outputs: The folder name, creation date, permissions, and parent folder.
Gets the sharing and permission settings for a CMS folder, including which users, groups, or roles have access and their permission levels.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/folders/{folderId}/shares.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
folderId | string | Yes | ID of the CMS folder |
Outputs: The sharing and permission settings for the folder, by user, group, or role.
Lists all CMS channels in the org that the current user can access. Returns each channel’s ID, name, and type.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/channels.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | No | Number of the page you want returned. Starts at 0. If you don’t specify a value or if you specify 0, the first page is returned. |
pageSize | integer | No | Specifies the number of items per page. Valid values are from 1 through 250. If you don’t specify a value, the default size is 25. |
showDetails | boolean | No | Specifies whether to show the channels’ detailed information (true) or summary information only (false). If you don’t specify a value, the default is false. |
Outputs: An array of CMS channels with ID, name, and type.
Gets the details of a CMS channel by its ID, including the channel name and type. This tool returns the channel’s authoring and configuration record.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/channels/{channelId}.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
channelId | string | Yes | The ID of the CMS channel |
Outputs: The CMS channel name, type, and authoring configuration details.
Gets the delivery details of a CMS channel by its ID. This tool describes the channel as content consumers see it at run time.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/delivery/channels/{channelId}.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
channelId | string | Yes | ID of the CMS channel |
Outputs: The delivery-side details of the channel.
Searches for and retrieves published, non-media content in Salesforce CMS by using keywords or taxonomy terms. This tool retrieves only non-media content such as news (sfdc_cms__news), from public CMS channels that are accessible to the current user.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
searchKeyword | string | No | A list of up to 10 OR-separated concrete nouns extracted from the user’s natural language query. |
searchLanguage | string | No | The locale of the content to search for, by using underscore format (for example, en_US, es_MX, fr_FR). Default is en_US. |
channelIds | string | No | A list of one or more IDs of CMS channels where the search happens. |
channelType | string | No | The type of channel where the search happens. This parameter limits the action to search for published content only within channels of the specified type. |
contentAccessScope | string | No | This parameter limits the search to channels with the specified content access scope. The only supported value is Public, which restricts the search to publicly accessible channels. |
taxonomyExpression | string | No | A stringified JSON expression derived from the user’s natural language query that filters content by descriptive qualities, styles, moods, or categories (for example, {"OR": ["term1", "term2"]}). Use {} if no taxonomies apply. |
contentTypeFqn | string | No | A list of one or more non-media content type fully qualified names (FQN). |
pageOffset | integer | No | A page of results when the search returns multiple content items. |
searchLimit | integer | No | The maximum number of content items shown on a single page when the search returns multiple content items. |
Outputs: An array of published, non-media content items from public CMS channels that match the search query.
Searches for and retrieves published media assets in Salesforce CMS by using keywords or taxonomy terms. This tool retrieves only published media content, such as images (sfdc_cms__image), videos (sfdc_cms__video), documents (sfdc_cms__document), and audio (sfdc_cms__audio), from public CMS channels that are accessible to the current user.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
searchKeyword | string | No | A list of up to 10 OR-separated concrete nouns extracted from the user’s natural language query. Use domain-specific synonyms, leave empty if the query contains no concrete nouns. |
searchLanguage | string | No | The locale of the content to search for, by using underscore format (for example, en_US, es_MX, fr_FR). Default is en_US. |
channelIds | string | No | A list of one or more IDs of CMS channels where the search happens. |
channelType | string | No | The type of channel where the search happens. This parameter limits the action to search for published content only within channels of the specified type. |
contentAccessScope | string | No | This parameter limits the search to channels with the specified content access scope. The only supported value is Public, which restricts the search to publicly accessible channels. |
taxonomyExpression | string | No | A stringified JSON expression derived from the user’s natural language query that filters content by descriptive qualities, styles, moods, or categories (for example, {"OR": ["term1", "term2"]}). Use {} if no taxonomies apply. |
contentTypeFqn | string | No | A list of one or more content type fully qualified names (FQN). |
pageOffset | integer | No | A page of results when the search returns multiple content items. |
searchLimit | integer | No | The maximum number of content items shown on a single page when the search returns multiple content items. |
Outputs: An array of published media assets from public CMS channels that match the search query.
Lists the CMS content published to a specific CMS channel. Filter the results by content type, language, publish date, and show paginated results. Use this tool to read live, published CMS content from a channel.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/delivery/channels/{channelId}/contents.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
channelId | string | Yes | ID of the CMS channel |
contentKeys | array of strings | No | Comma-separated list of up to 50 content keys. Specify either managed content IDs or content keys. |
contentTypeFQN | string | No | Fully qualified name of the managed content type. |
expandReferences | boolean | No | Specifies whether to include details of references (true) or summaries of references (false) in the response body. If unspecified, the default value is false. |
includeContentBody | boolean | No | Specifies whether to return the content body (true) or the content summary (false). If unspecified, the default value is false. |
language | string | No | Language locale for the managed content, for example, en_US. If the requested translation isn’t available, the language defaults to the configured fallback language or the channel’s default language. If the content isn’t available in the fallback language and the channel’s default language, we return an error. |
managedContentIds | array of strings | No | Comma-separated list of up to 100 managed content IDs. Specify either managed content IDs or content keys. |
page | integer | No | Number of the page you want returned. Starts at 0. If you don’t specify a value or if you specify 0, the first page is returned. |
pageSize | integer | No | Specifies the number of items per page. Valid values are from 1 through 250. If unspecified, the default size is 25. If you specify true for expandReferences or includeContentBody, the maximum page size you can specify is 25. |
publishEndDate | string | No | ISO 8601 formatted publish end date. |
publishStartDate | string | No | ISO 8601 formatted publish start date. |
referenceDepth | integer | No | An integer 0–3 specifying the depth of references. If you specify 0, the references property of the Managed Content Delivery Document Collection response body is null. If unspecified, the default value is 0. |
referencesAsList | boolean | No | Specifies whether to return the references as a list in the referencesList property of the Managed Content Delivery Document Collection response body (true). If you specify false, the references are returned as key-value pairs in the references property. If unspecified, the default value is false. |
showAbsoluteUrl | boolean | No | Specifies whether to show absolute URLs in the response body (true) or not (false). If you don’t specify a value, the default is false. |
Outputs: A paginated array of published content variants for the CMS channel.
Lists all the CMS content published to a specific Experience Cloud site. Filter the results by content type, language, publication date, and show paginated results. Use this tool to read live, published CMS content on a site.
Inputs and outputs mirror the Connect REST API at GET /connect/sites/{siteId}/cms/delivery/contents.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | ID of the Experience Cloud site |
contentKeys | array of strings | No | Comma-separated list of up to 50 content keys. Specify either managed content IDs or content keys. |
contentTypeFQN | string | No | Fully qualified name of the managed content type. |
expandReferences | boolean | No | Specifies whether to include details of references (true) or summaries of references (false) in the response body. If unspecified, the default value is false. |
includeContentBody | boolean | No | Specifies whether to return the content body (true) or the content summary (false). If unspecified, the default value is false. |
language | string | No | Language locale for the managed content, for example, en_US. If the requested translation isn’t available, the language defaults to the configured fallback language or the site’s default language. If the content isn’t available in the fallback language and the site’s default language, we return an error. |
managedContentIds | array of strings | No | Comma-separated list of up to 100 managed content IDs. Specify either managed content IDs or content keys. |
page | integer | No | Number of the page you want returned. Starts at 0. If you don’t specify a value or if you specify 0, the first page is returned. |
pageSize | integer | No | Specifies the number of items per page. Valid values are from 1 through 250. If unspecified, the default size is 25. If you specify true for expandReferences or includeContentBody, the maximum page size you can specify is 25. |
publishEndDate | string | No | ISO 8601 formatted publish end date. |
publishStartDate | string | No | ISO 8601 formatted publish start date. |
referenceDepth | integer | No | An integer 0–3 specifying the depth of references. If you specify 0, the references property of the Managed Content Delivery Document Collection response body is null. If unspecified, the default value is 0. |
referencesAsList | boolean | No | Specifies whether to return the references as a list in the referencesList property of the Managed Content Delivery Document Collection response body (true). If you specify false, the references are returned as key-value pairs in the references property. If unspecified, the default value is false. |
showAbsoluteUrl | boolean | No | Specifies whether to show absolute URLs in the response body (true) or not (false). If you don’t specify a value, the default is false. |
Outputs: A paginated array of published content variants for the site.
Gets a single item of published CMS content from an Experience Cloud site given the content key or ID. This tool returns the published variant as content consumers see it at run time.
Inputs and outputs mirror the Connect REST API at GET /connect/sites/{siteId}/cms/delivery/contents/{contentKeyOrId}.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | ID of the Experience Cloud site |
contentKeyOrId | string | Yes | Content key or ID of the content item |
Outputs: The published content variant.
Gets a published CMS collection from an Experience Cloud site given the collection key or ID. This tool also lists all content items contained in the collection.
Inputs and outputs mirror the Connect REST API at GET /connect/sites/siteId/cms/delivery/collections/{collectionKeyOrId}.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | ID of the Experience Cloud site |
collectionKeyOrId | string | Yes | Collection key or ID. A collection key is a unique identifier such as MCA4CCV5QS2BAB5H7YRCRPTCWGZQ. |
Outputs: The collection and the published content items it contains.
Gets a single item of published CMS content from a CMS channel given the content key or ID. Returns the published variant as content consumers see it at run time.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/delivery/channels/{channelId}/contents/{contentKeyOrId}.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
channelId | string | Yes | The ID of the CMS channel |
contentKeyOrId | string | Yes | The content key or ID of the content item |
contentVersion | integer | No | The content version of the CMS content item |
expandReferences | boolean | No | Specifies whether to include details of references (true) or summaries of references (false) in the response body. If unspecified, the default value is false. |
language | string | No | The language locale for the managed content, for example, en_US. If the requested translation isn’t available, the language defaults to the configured fallback language or the channel’s default language. |
referenceDepth | integer | No | An integer 0–3 specifying the depth of references. If you specify 0, the references property of the response body is null. If unspecified, the default value is 0. |
referencesAsList | boolean | No | Specifies whether to return the references as a list in the referencesList property of the response body (true), or as key-value pairs in the references property (false). If unspecified, the default value is false. |
showAbsoluteUrl | boolean | No | Specifies whether to show absolute URLs in the response body (true) or not (false). If you don’t specify a value, the default is false. |
Outputs: The published content variant.
Gets a published CMS collection from a CMS channel given the collection key or ID. This tool also lists all content items contained in the collection.
Inputs and outputs mirror the Connect REST API at GET /connect/cms/delivery/channels/{channelId}/collections/{collectionKeyOrId}.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
channelId | string | Yes | The ID of the CMS channel |
collectionKeyOrId | string | Yes | The collection key or ID. A collection key is a unique identifier such as MCA4CCV5QS2BAB5H7YRCRPTCWGZQ. |
language | string | No | The language locale for the managed content collection, for example, en_US. |
pageSize | integer | No | The number of items to fetch per page. The default is 50. |
pageToken | integer | No | The page of items to fetch. |
Outputs: The collection and the published content items it contains.
Searches for and retrieves media assets, such as image files, across Salesforce CMS and any connected third-party CMS or digital asset management (DAM) systems. This tool uses Data 360 hybrid search (vector search and keyword search) to find media.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
searchQuery | string | Yes | The natural language query that the user provides. The action uses this query to retrieve relevant digital content or electronic media. |
channelType | string | Yes | This parameter limits the search to content or media published to channels of the specified channel type. The only supported channel type is PublicUnauthenticated. This channel type searches content across all public channels. |
contentAccessScope | string | No | This parameter limits the search to channels with the specified content access scope. The only supported value is Public, which restricts the search to publicly accessible channels. |
Outputs: An array of matching media assets from Salesforce CMS and connected third-party sources.
Gets specific instructions that tell Agentforce Vibes how to extract and apply a brand from Salesforce CMS. This tool executes an invocable action to get instructions that specialize in applying branding to apps or sites. Call this tool before you call any other brand tools.
Inputs: None
Outputs: Instructions for extracting and applying a brand from Salesforce CMS.
List the content types supported by a Salesforce CMS workspace. Identify the workspace by supplying exactly one of: a base type developer name, such as content, marketing, or fragment_space; the ID of a content space; or the ID of a CMS folder. The supported content types are derived from the modules that the workspace defines or has installed. This tool returns a list of content types, each with a namespace prefix, developer name, title, and description.
Inputs:
| Parameter | Type | Required | Description |
|---|---|---|---|
baseType | string | No | The base type developer name of the workspace (for example, content, marketing, fragment_space). The supported content types are derived from the modules that this base type defines. Specify at most one of baseType, spaceId, or folderId. All three can be omitted only if typeClassFullyQualifiedNames or mixinTypeFullyQualifiedNames is provided instead (when enabled for the org). |
spaceId | string | No | The ID of a content space. The supported content types are derived from the modules installed on this space. Specify at most one of baseType, spaceId, or folderId. All three can be omitted only if typeClassFullyQualifiedNames or mixinTypeFullyQualifiedNames is provided instead (when enabled for the org). |
folderId | string | No | The ID of a CMS folder. Its owning content space is resolved first, then the supported content types are derived from the modules installed on that space. Specify at most one of baseType, spaceId, or folderId. All three can be omitted only if typeClassFullyQualifiedNames or mixinTypeFullyQualifiedNames is provided instead (when enabled for the org). |
typeClassFullyQualifiedNames | array of strings | No | A list of type-class fully qualified names (or IDs) to scope the returned content types. Combines with the types the workspace already supports when both are present, but can also be provided on its own to scope the query even when the workspace resolves no content types. Ignored unless this feature is enabled for the org. |
mixinTypeFullyQualifiedNames | array of strings | No | A list of mixin-type fully qualified names (or IDs) to scope the returned content types to those types that carry the given mixin. Combines with the types the workspace already supports when both are present, but can also be provided on its own to scope the query even when the workspace resolves no content types. Ignored unless this feature is enabled for the org. |
Outputs: An array of content types, each with a namespace prefix, developer name, title, and description.
Every Salesforce Hosted MCP transaction runs as the authenticated user, scoped through an External Client App with the mcp_api scope. Object permissions (CRUD), field-level security (FLS), sharing rules, profile permissions, and permission sets all apply. If you can’t perform an action in Salesforce, your agent can’t perform it through the MCP server. The audit trail attributes every action to you.
The Content Read-Only server follows the same practices that apply across all Salesforce Hosted MCP servers. For full guidance, see Security Best Practices and General Best Practices.