agentleFS
preetamnathpreetamnath/agent-skills/skills/shopify-dev-mcp/SKILL.md

shopify-dev-mcp

Skill4 starsChanged 7 months agoMITView on GitHub

Routes Shopify Dev MCP lookups for surfaces the bundled Shopify skills don't cover. TRIGGER when: user needs docs or GraphQL for Storefront API, customer, partner, payments-apps, functions, hydrogen, liquid, or custom-data (metafields/metaobjects). SKIP for Admin GraphQL or App Home markup (`shopify-admin` and `shopify-polaris-app-home` cover those); SKIP for `@shopify/post-purchase-ui-extensions-react` — the MCP doesn't index that legacy SDK (use `post-purchase-ui-extension`).

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 2 are distinctive, and 9 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Use shopify-dev-mcp ONLY when:

    line 26
  2. Very specific:

    Call learn_shopify_api with the target api surface.

    line 41
  3. Very specific:

    Call the appropriate tool(s).

    line 49
  4. Distinctive:

    Before committing any generated code:

    line 53
  5. Very specific:

    If validation fails, fix errors and re-validate.

    line 60
  6. Very specific:

    All 15 valid values for the api param on learn_shopify_api:

    line 66
  7. Very specific:

    Call again (with same conversationId) when switching API surfaces.

    line 105
  8. Very specific:

    Prefer this over fetch_full_docs for targeted lookups.

    line 122
  9. Distinctive:

    Start with the most specific term from the request.

    line 238
  10. Very specific:

    If no results, try broader terms or individual words (e.g.

    line 239
  11. Very specific:

    May not be registered in all MCP server builds: When unavailable, look up valid extension targets via search_docs_chunks instead.

    line 269

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Shopify Dev MCP

Routes MCP tool calls for Shopify surfaces. Standard lookups, not deep reasoning.

⚠️ Skip if a bundled skill applies

The 7 official Shopify skills ship local validators (scripts/search_docs.mjs, scripts/validate.mjs) that are faster than the MCP and don't require a server round-trip:

SurfaceUse this skill instead
Admin GraphQLshopify-admin
App Home <s-*> markupshopify-polaris-app-home
Admin Action/Block extensionsshopify-polaris-admin-extensions
Modern checkout <s-*> markupshopify-polaris-checkout-extensions
Customer Account UIshopify-polaris-customer-account-extensions
App Store pre-submission reviewshopify-app-store-review
shopify.app.toml / CLI workflowsshopify-use-shopify-cli

Use shopify-dev-mcp ONLY when:

  • The surface isn't in the table above (storefront-graphql, customer, partner, payments-apps, functions, hydrogen, liquid, custom-data).
  • You're cross-referencing schemas across two surfaces in one conversation.
  • The bundled script for an installed skill is unavailable or erroring.

⚠️ NOT for legacy post-purchase

The MCP does NOT index @shopify/post-purchase-ui-extensions-react. validate_component_codeblocks rejects every legacy post-purchase component by design — the validator's polaris-checkout-extensions enum value covers MODERN @shopify/ui-extensions <s-*> web components only.

For the legacy SDK: use the post-purchase-ui-extension skill and validate with tsc --noEmit.

Instructions

1 — Initialize

Call learn_shopify_api with the target api surface. Consult the API Surfaces appendix below to confirm the correct api value. Extract the returned conversationId — pass it to every subsequent call.

2 — Route

Determine which tool answers the question: doc search, schema introspection, extension targets, or full page fetch. Consult the Tools Reference below for parameters and gotchas.

3 — Use

Call the appropriate tool(s). If switching API surfaces mid-conversation, call learn_shopify_api again with the existing conversationId and the new api.

4 — Validate

Before committing any generated code:

  • <s-*> component markup → validate_component_codeblocks (mandatory)
  • GraphQL queries/mutations → validate_graphql_codeblocks (mandatory)
  • Liquid/theme files → validate_theme (mandatory)

5 — Fix and re-validate

If validation fails, fix errors and re-validate. Increment revision on the same artifactId to track iterations. If validation fails twice on the same artifact, stop and surface the error to the user.


API Surfaces

All 15 valid values for the api param on learn_shopify_api:

api valueDescription
adminAdmin GraphQL API (orders, products, metafields)
admin-executionAdmin API execution surface (Shopify-internal — present in the learn_shopify_api enum but NOT in the GraphQL validator enum)
storefront-graphqlStorefront API (custom storefronts, cart ops)
partnerPartner API (dashboard data, apps, referrals)
customerCustomer Account API (orders, payment methods, addresses)
payments-appsPayments Apps API (payment provider integrations)
functionsShopify Functions (discounts, delivery, cart transforms)
polaris-app-homeApp Home UI (<s-*> web components in admin iframe)
polaris-admin-extensionsAdmin action/block extensions
polaris-checkout-extensionsModern checkout web-component extensions (@shopify/ui-extensions, <s-*>). Does NOT cover @shopify/post-purchase-ui-extensions-react.
polaris-customer-account-extensionsCustomer account page extensions
pos-uiPoint of sale UI extensions
hydrogenHydrogen framework
liquidLiquid templates
custom-dataMetafields and metaobjects

Note: validate_component_codeblocks accepts one additional value — storefront-web-components — that is NOT valid for learn_shopify_api. See the validator's section below.

Tools Reference

Tool availability varies by MCP server build. Some installations register only a subset (typically: learn_shopify_api, search_docs_chunks, validate_component_codeblocks, validate_graphql_codeblocks, validate_theme). If a tool below is not callable in your environment, fall back to search_docs_chunks.

learn_shopify_api

Purpose: Load API overview and get a conversationId. Must be called before all other tools.

ParamTypeRequiredNotes
apienum (15 values above)YesTarget surface
modelstringNo (always provide)Telemetry. Schema marks not-required, but the description says "ALWAYS provide". Pass the current model name; pass 'none' if unknown.
conversationIdstring (UUID)NoPass existing ID when switching surfaces mid-conversation. Omit on first call — a new ID is generated and returned.

Returns: conversationId (UUID) — required by every subsequent tool call.

Gotchas:

  • Call again (with same conversationId) when switching API surfaces. This loads new context without losing conversation state.
  • The response includes a component/API index for the surface — use it to guide subsequent search_docs_chunks queries.

search_docs_chunks

Purpose: Semantic search over shopify.dev documentation. Returns relevant doc chunks with URLs.

ParamTypeRequiredNotes
conversationIdstringYesFrom learn_shopify_api
promptstringYesNatural language search query
api_namestringNoFilter results to a specific API surface (use the same value as api in learn_shopify_api)
max_num_resultsnumberNoLimit result count. Omit on first call; use when trimming for context-window constraints.

Gotchas:

  • Prefer this over fetch_full_docs for targeted lookups.
  • For storefront-graphql, this is the only reliable doc tool — introspect_graphql_schema and fetch_full_docs are restricted.

fetch_full_docs

Purpose: Fetch complete documentation pages by path. Use when you need full property/slot/event details from a page found via search_docs_chunks.

ParamTypeRequiredNotes
conversationIdstringYesFrom learn_shopify_api
pathsstring[]YesDoc paths relative to site root, e.g. ["/docs/api/app-home"]

Gotchas:

  • The learn_shopify_api response labels fetch_full_docs as DEPRECATED for some surfaces, but where present the tool still works. Prefer search_docs_chunks; fall back to fetch_full_docs for complete property/slot/event docs.
  • For storefront-graphql, this tool is restricted — use search_docs_chunks instead.
  • May not be registered in all MCP server builds.

validate_component_codeblocks

Purpose: Validate <s-*> web component markup against Shopify's schema. Catches hallucinated components, props, and prop values.

ParamTypeRequiredNotes
conversationIdstringYesFrom learn_shopify_api
apienumYesOne of: polaris-app-home, polaris-admin-extensions, polaris-checkout-extensions, polaris-customer-account-extensions, pos-ui, hydrogen, storefront-web-components (7 values)
codearray of { content: string, artifactId?: string, revision?: number }YesCode blocks. content is required per item. Param key is code (not codeblocks).
extensionTargetstringNo*Required for extension surfaces: polaris-admin-extensions, polaris-checkout-extensions, polaris-customer-account-extensions, pos-ui. Determines which components/APIs are available. Where learn_extension_target_types is registered, use it to discover valid targets.

Input format: Wrap code in a function — JS logic outside return, components inside return:

const Example = () => {
  const [value, setValue] = useState('');

  return (
    <s-page heading="Example">
      <s-section>
        <s-text-field label="Name" value={value} />
      </s-section>
    </s-page>
  );
};

Raw HTML also works, but the function wrapper is recommended.

Gotchas:

  • The param is code (array), not codeblocks — opposite naming from validate_graphql_codeblocks.
  • Mandatory after generating ANY <s-*> markup — never skip, even for small snippets.
  • For polaris-checkout-extensions, pass the specific extensionTarget (e.g. purchase.checkout.block.render) to get accurate validation.
  • The validator does not type App Bridge web components (<s-app-window>, <s-app-nav>) as JSX intrinsic elements — they will fail validation in TSX even though they're real components. Use raw HTML, the App Bridge React wrappers (<TitleBar>, <NavMenu>), or a JSX type augmentation.

GraphQL API enum

IMPORTANT — this enum differs from learn_shopify_api.

validate_graphql_codeblocks and introspect_graphql_schema share an expanded 18-value enum where functions splits into 13 specific subtypes. admin-execution is NOT in this enum — even though it's valid for learn_shopify_api.

ValueDescription
adminAdmin GraphQL API
storefront-graphqlStorefront API
partnerPartner API
customerCustomer Account API
payments-appsPayments Apps API
functions_cart_checkout_validationCart and Checkout Validation Function inputs
functions_cart_transformCart Transform Function inputs
functions_delivery_customizationDelivery Customization Function inputs
functions_discountDiscount Function inputs
functions_discounts_allocatorDiscounts Allocator Function inputs
functions_fulfillment_constraintsFulfillment Constraints Function inputs
functions_local_pickup_delivery_option_generatorLocal Pickup Delivery Option Generator inputs
functions_order_discountsOrder Discounts Function inputs
functions_order_routing_location_ruleOrder Routing Location Rule inputs
functions_payment_customizationPayment Customization Function inputs
functions_pickup_point_delivery_option_generatorPickup Point Delivery Option Generator inputs
functions_product_discountsProduct Discounts Function inputs
functions_shipping_discountsShipping Discounts Function inputs

validate_graphql_codeblocks

Purpose: Validate GraphQL queries/mutations against the Shopify schema. Catches hallucinated fields and operations.

ParamTypeRequiredNotes
conversationIdstringYesFrom learn_shopify_api
codeblocksarray of { content: string, artifactId?: string, revision?: number }YesEach content is raw GraphQL (no markdown backticks). Param key is codeblocks (not code).
apienumNoDefaults to admin. See GraphQL API enum.

Gotchas:

  • The param is codeblocks (array), not code — opposite naming from validate_component_codeblocks.
  • Content must be raw GraphQL, not wrapped in markdown code fences.
  • For Functions, use the specific functions_* subtype from the GraphQL API enum, not functions.

introspect_graphql_schema

Purpose: Explore GraphQL schema — find fields, types, queries, mutations, and required scopes.

ParamTypeRequiredNotes
conversationIdstringYesFrom learn_shopify_api
querystringYesSimple search term (e.g. product, discountProduct, capture). One concept at a time.
apienumNoDefaults to admin. Same expanded enum as validate_graphql_codeblocks — see GraphQL API enum.
filterstring[]NoFilter results: all (default), types, queries, mutations. Pass as array, e.g. ["queries", "mutations"].

Fallback strategy (confirmed accurate):

  1. Start with the most specific term from the request.
  2. If no results, try broader terms or individual words (e.g. captureSession → try capture).
  3. For list operations, try all, list, or the plural object name.
  4. For mutations, try the action verb: create, update, delete.

Gotchas:

  • Uses the same expanded api enum as validate_graphql_codeblocks — functions splits into 13 subtypes.
  • For storefront-graphql, this tool is restricted — use search_docs_chunks instead.
  • May not be registered in all MCP server builds.

learn_extension_target_types

Purpose: Get type declarations for components and APIs available within a specific extension target.

ParamTypeRequiredNotes
conversationIdstringYesFrom learn_shopify_api
apienumYesThe surface
extension_targetstringYesThe specific extension target (e.g. purchase.checkout.block.render)

Supported surfaces:

  • polaris-admin-extensions
  • polaris-checkout-extensions
  • polaris-customer-account-extensions
  • pos-ui

Not supported:

  • polaris-app-home — not an extension surface.

May not be registered in all MCP server builds. When unavailable, look up valid extension targets via search_docs_chunks instead.


validate_theme

Purpose: Validate Liquid and theme files (JSON locales, config, templates, JS, CSS, SVG).

ParamTypeRequiredNotes
conversationIdstringYesFrom learn_shopify_api
absoluteThemePathstringYesAbsolute path to theme directory
filesCreatedOrUpdatedarray of { path: string, artifactId?: string, revision?: number }Yespath is relative to the theme root

Validation Reference

Required params per surface for validate_component_codeblocks

SurfaceapiextensionTarget required?
polaris-app-homepolaris-app-homeNo
polaris-admin-extensionspolaris-admin-extensionsYes
polaris-checkout-extensionspolaris-checkout-extensionsYes
polaris-customer-account-extensionspolaris-customer-account-extensionsYes
pos-uipos-uiYes
hydrogenhydrogenNo
storefront-web-componentsstorefront-web-componentsNo

Artifact tracking

Both validate_component_codeblocks and validate_graphql_codeblocks support iterative tracking:

  • artifactId — Stable ID for the code artifact. Omit on first validation (the tool generates one). Reuse the returned ID on subsequent validations of the same artifact.
  • revision — Starts at 1. Increment on each re-validation of the same artifactId. Tracks validation retries vs. new validations.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.