
Shopify Admin
Search Shopify Admin and dev documentation and call Admin API patterns from an agent while building storefront apps and automations.
Install
npx skills add https://github.com/shopify/shopify-ai-toolkit --skill shopify-adminWhat is this skill?
- Ships Node-oriented search_docs utilities against shopify.dev with production and staging base URL resolution
- Supports multiple Admin API versions: unstable, 2026-07, 2026-04, 2026-01, 2025-10, 2025-07
- Staging workflow documents MINERVA_TOKEN via devx minerva-auth when SHOPIFY_DEV_STAGING_SERVER_NUMBER is set
- Validates staging server number as positive integer with explicit configuration errors
- Agent skill scripts colocated with HTTP helpers for Shopify dev and shop.dev endpoints
Adoption & trust: 6.1k installs on skills.sh; 373 GitHub stars; 2/3 security scanners passed (skills.sh audits).
Recommended Skills
Entra App Registrationmicrosoft/azure-skills
Azure Aigatewaymicrosoft/azure-skills
Lark Openapi Explorerlarksuite/cli
Supabasesupabase/agent-skills
Firebase Auth Basicsfirebase/agent-skills
Firebase Data Connectfirebase/agent-skills
Journey fit
Primary fit
Build is canonical because the toolkit supports implementing and querying Shopify Admin capabilities during product development. Integrations fits Shopify Admin API, staging doc hosts, and GraphQL API version pins used when connecting your app to merchant data.
Common Questions / FAQ
Is Shopify Admin safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Shopify Admin
#!/usr/bin/env node // <define:__SUPPORTED_VERSIONS__> var define_SUPPORTED_VERSIONS_default = ["unstable", "2026-07", "2026-04", "2026-01", "2025-10", "2025-07"]; // src/agent-skills/scripts/search_docs.ts import { parseArgs } from "util"; // src/http/index.ts var PROD_BASE_URL = "https://shopify.dev/"; var SHOP_DEV_BASE_URL = "https://shopify-dev.shop.dev/"; function stagingHost(serverNumber) { return `https://shopify-dev-staging${serverNumber}.shopifycloud.com/`; } function resolveShopifyDevBaseUrl(options) { const env = options?.env ?? process.env; const stagingRaw = env.SHOPIFY_DEV_STAGING_SERVER_NUMBER?.trim(); if (stagingRaw) { if (!/^\d+$/.test(stagingRaw)) { throw new Error( `SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${stagingRaw}"` ); } const serverNumber = Number(stagingRaw); if (!Number.isSafeInteger(serverNumber) || serverNumber <= 0) { throw new Error( `SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${stagingRaw}"` ); } const token = env.MINERVA_TOKEN; if (!token) { const audience = stagingHost(serverNumber).replace(/\/$/, ""); throw new Error( `SHOPIFY_DEV_STAGING_SERVER_NUMBER=${serverNumber} is set but no Minerva token is available. Staging servers are behind Minerva. Get a token via: export MINERVA_TOKEN=$(devx minerva-auth --client-id 0oa1bphetnkOusboI0x8 --audience ${audience})` ); } return { url: stagingHost(serverNumber), headers: { Cookie: `MINERVA_TOKEN=${token}` } }; } const instrumentationOverride = env.SHOPIFY_DEV_INSTRUMENTATION_URL?.trim(); if (instrumentationOverride && options?.uri?.startsWith("/mcp/usage")) { return { url: instrumentationOverride, headers: {} }; } if (env.DEV && env.DEV !== "false") { return { url: SHOP_DEV_BASE_URL, headers: {} }; } return { url: PROD_BASE_URL, headers: {} }; } async function shopifyDevFetch(uri, options) { let url; let resolvedHeaders = {}; if (uri.startsWith("http://") || uri.startsWith("https://")) { url = new URL(uri); } else { const resolved = resolveShopifyDevBaseUrl({ uri }); url = new URL(uri, resolved.url); resolvedHeaders = resolved.headers; } if (options?.parameters) { Object.entries(options.parameters).forEach(([key, value]) => { url.searchParams.append(key, value); }); } const response = await fetch(url.toString(), { method: options?.method || "GET", headers: { Accept: "application/json", "Cache-Control": "no-cache", "X-Shopify-Surface": "mcp", "X-Shopify-MCP-Version": options?.instrumentation?.packageVersion || "", "X-Shopify-Timestamp": options?.instrumentation?.timestamp || "", ...resolvedHeaders, ...options?.headers }, ...options?.body && { body: options.body } }); if (!response.ok) { let errorBody; try { errorBody = await response.text(); } catch { } throw new Error( errorBody ? `HTTP ${response.status}: ${errorBody}` : `HTTP error! status: ${response.status}` ); } return await response.text(); } // src/data/supported-versions-schema.json var supported_versions_schema_default = { admin: [ { name: "unstable" }, { name: "2026-07", releaseCandidate: true }, { name: "2026-04", latestVersion: true }, { name: "2026-01" }, { name: "2025-10" }, { name: "2025-07" } ], "storefront-graphql": [ { name: "unstable" }, { name: "2026-07", releaseCandidate: true }, { name: "2026-04", latestVersion: true }, { name: "2026-01" }, { name: "2025-10" }, { name: "2025-07" } ], partner: [ { name: "unstable" }, { name: "2026-07", releaseCandidate: true }, { name: "2026-04", lates