
Marketplace Add Xmc
- 31 installs
- 3 repo stars
- Updated April 6, 2026
- vercel-labs/sitecore-skills
marketplace-add-xmc integrates XM Cloud APIs into marketplace apps.
About
The marketplace-add-xmc skill wires XM Cloud Sites, Pages, Authoring, Content Transfer, Search, and Agent APIs after installing the xmc shadcn registry package. Supports client-side client.query and client.mutate or server-side experimental_createXMCClient with Auth0 full-stack apps. xmc-patterns.md provides per-API examples.
- XMC package install via shadcn registry.
- Sites Pages Authoring Search Agent API map.
- Client-side vs Auth0 server-side patterns.
- xmc-patterns.md code examples.
- Prerequisite package check.
Marketplace Add Xmc by the numbers
- 31 all-time installs (skills.sh)
- +1 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #97 of 154 .NET & C# skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Jul 27, 2026 (Skillselion catalog sync)
marketplace-add-xmc capabilities & compatibility
- Capabilities
- xmc api namespace table
- Use cases
- api development
What marketplace-add-xmc says it does
Adds XM Cloud API integration to a Sitecore Marketplace app
npx skills add https://github.com/vercel-labs/sitecore-skills --skill marketplace-add-xmcAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 31 |
|---|---|
| repo stars | ★ 3 |
| Security audit | 3 / 3 scanners passed |
| Last updated | April 6, 2026 |
| Repository | vercel-labs/sitecore-skills ↗ |
How do I access XM Cloud data from a marketplace app?
Add XM Cloud API integration to Sitecore Marketplace apps via xmc SDK package.
Who is it for?
Marketplace developers needing XM Cloud APIs.
Skip if: Skip without XMC data requirements.
When should I use this skill?
User wants XM Cloud API integration.
What you get
Working XMC SDK query or mutation.
Files
Add XM Cloud API Integration
You are helping the user add XM Cloud API integration to their Sitecore Marketplace app.
Prerequisites
The XMC package must be installed. If not:
npx shadcn@latest add https://marketplace-sdk.sitecorecloud.io/r/xmc.jsonStep 1: Determine Which API
Ask the user (or infer from $ARGUMENTS) which XMC API they need:
| API | Namespace | Use For |
|---|---|---|
| Sites | xmc.sites.* | List/get sites, current site context |
| Pages | xmc.pages.* | List/get pages, current page context |
| Authoring | xmc.authoring.* | GraphQL queries/mutations against authoring API |
| Content Transfer | xmc.contentTransfer.* | Import/export content |
| Search | xmc.search.* | Search content items |
| Agent | xmc.agent.* | Invoke XM Cloud agents |
Step 2: Choose Client-Side or Server-Side
- Client-side: Use
client.query()/client.mutate()— simpler, works in any architecture - Server-side: Use
experimental_createXMCClient()— requires Auth0 (full-stack architecture)
Step 3: Implement
See xmc-patterns.md for complete code patterns for each API.
Step 4: Suggest Related Skills
- Use
/marketplace-build-componentto build UI for the data - Use
/marketplace-sdk-referencefor detailed type information
Reference Files
- XMC Patterns — Code patterns for each XMC API
XM Cloud API Code Patterns
Module Registration
Ensure the XMC module is registered in your client initialization (lib/sitecore/client.ts):
import { ClientSDK } from "@sitecore-marketplace-sdk/client";
import { XMC } from "@sitecore-marketplace-sdk/xmc";
export const client = await ClientSDK.init({
target: window.parent,
modules: [XMC],
});Getting sitecoreContextId
Most XMC queries require sitecoreContextId. In React components, use useAppContext():
const appContext = useAppContext();
const sitecoreContextId = appContext?.resourceAccess[0].context.live;Sites API Patterns
List All Sites (Client-Side)
"use client";
import { useEffect, useState } from "react";
import type { Site } from "@sitecore-marketplace-sdk/xmc";
import { useMarketplaceClient, useAppContext } from "@/components/providers/marketplace";
export function SitesList() {
const { client } = useMarketplaceClient();
const appContext = useAppContext();
const [sites, setSites] = useState<Site[]>([]);
useEffect(() => {
if (!client || !appContext) return;
const sitecoreContextId = appContext.resourceAccess[0].context.live;
async function load() {
const { data: sites } = await client.query("xmc.sites.listSites", {
params: { query: { sitecoreContextId } },
});
setSites(sites);
}
load();
}, [client, appContext]);
return (
<ul>
{sites.map((site) => (
<li key={site.id}>{site.name}</li>
))}
</ul>
);
}Pages API Patterns
Get Current Page with Subscription
"use client";
import { useEffect, useState } from "react";
import type { PagesContext } from "@sitecore-marketplace-sdk/client";
import { useMarketplaceClient, useAppContext } from "@/components/providers/marketplace";
export function PageInfo() {
const { client } = useMarketplaceClient();
const [page, setPage] = useState<PagesContext | null>(null);
useEffect(() => {
if (!client) return;
// Get initial page context and subscribe to changes
let cleanup: (() => void) | undefined;
client.query("pages.context", {
subscribe: true,
onSuccess: setPage,
}).then(({ data, unsubscribe }) => {
setPage(data);
cleanup = unsubscribe;
});
return () => cleanup?.();
}, [client]);
if (!page) return null;
return <div>Current page: {page.name}</div>;
}Get a Specific Page
const { data: appContext } = await client.query("application.context");
const sitecoreContextId = appContext.resourceAccess[0].context.live;
const { data: page } = await client.query("xmc.pages.retrievePage", {
params: {
path: { pageId: "page-id" },
query: { site: "site-name", sitecoreContextId, language: "en" },
},
});Authoring API Patterns (GraphQL)
Query Items
const { data } = await client.mutate("xmc.authoring.graphql", {
params: {
query: { sitecoreContextId },
body: {
query: `
query GetItem($path: String!) {
item(path: $path, language: "en") {
id
name
fields { name value }
children { results { id name } }
}
}
`,
variables: { path: "/sitecore/content/Home" },
},
},
});Mutate Items
const { data } = await client.mutate("xmc.authoring.graphql", {
params: {
query: { sitecoreContextId },
body: {
query: `
mutation UpdateField($itemId: ID!, $fieldName: String!, $value: String!) {
updateItem(input: { itemId: $itemId, fields: [{ name: $fieldName, value: $value }] }) {
item { id }
}
}
`,
variables: { itemId: "item-id", fieldName: "Title", value: "New Title" },
},
},
});Content Transfer API Patterns
const { data } = await client.mutate("xmc.contentTransfer.createContentTransfer", {
params: {
query: { sitecoreContextId },
body: { /* transfer options */ },
},
});Server-Side Patterns (Auth0 Required)
API Route
// app/api/sites/route.ts
import { experimental_createXMCClient } from "@sitecore-marketplace-sdk/xmc";
import { getAccessToken } from "@auth0/nextjs-auth0";
export async function GET() {
const { accessToken } = await getAccessToken();
const xmcClient = await experimental_createXMCClient({
getAccessToken: async () => accessToken!,
});
const languages = await xmcClient.sites.listLanguages({
query: { sitecoreContextId: "your-context-id" },
});
return Response.json(languages);
}Server Action
// app/actions.ts
"use server";
import { experimental_createXMCClient } from "@sitecore-marketplace-sdk/xmc";
import { getAccessToken } from "@auth0/nextjs-auth0";
export async function getXmcClient() {
const { accessToken } = await getAccessToken();
return experimental_createXMCClient({
getAccessToken: async () => accessToken!,
});
}Related skills
FAQ
What does marketplace-add-xmc do?
marketplace-add-xmc integrates XM Cloud APIs into marketplace apps.
When should I use marketplace-add-xmc?
User wants XM Cloud API integration.
Is this skill safe to install?
Review the Security Audits panel on this page before installing in production.