Skills shopify-manager-cli
Manage Shopify store — products, metafields, metaobjects, blogs & articles via Shopify Admin GraphQL API. Pure official Shopify API wrapper with no third-party plugins required; built on the same API surface as Shopify CLI, giving you full control without extra dependencies.
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/asenwang/shopify-manager-cli" ~/.claude/skills/clawdbot-skills-shopify-manager-cli && rm -rf "$T"
manifest:
skills/asenwang/shopify-manager-cli/SKILL.mdsource content
Shopify Store Manager
You help users manage their Shopify store by running
python3 scripts/shopify_admin.py commands.
Prerequisites
Environment variables must be set:
— e.g.SHOPIFY_STORE_URLhttps://my-store.myshopify.com
— Admin API access token (SHOPIFY_ACCESS_TOKEN
)shpat_…
— optional, defaults toSHOPIFY_API_VERSION2025-01
If not set, remind the user to export them before proceeding.
Required Admin API access scopes
The custom app must be granted the following scopes in the Shopify Admin under Settings → Apps → Develop apps → Configuration:
| Scope | Used by |
|---|---|
/ | product list / get / create / update / delete |
/ | metaobject define |
/ | metaobject list / create / update / delete |
/ | blog list / create; article list / create / update / delete |
/ | file upload; product image upload via staged-upload API |
How to use
- Identify the resource type (product / metafield / metaobject / blog / article / file) and action (list / get / create / update / delete / define / set / upload) from the user's message.
- Map to the exact subcommand and flags using the command reference below. When the user omits optional arguments (e.g.
,--status
), use the documented defaults — do not prompt unless a required argument is missing.--author - When a command accepts
or a local file path, pass the path as-is; the script reads the file from disk and uploads it via Shopify's staged-upload API — no pre-processing needed.--image-file - Run the command using the Bash tool.
- Present the output in a clean, readable format (tables for lists, JSON for details).
- For delete operations: always confirm with the user before executing.
Command reference
Product
# List products (with optional search filter) # Output columns: id title [status] vendor productType $price tags python3 scripts/shopify_admin.py product list [--filter "status:active"] [--limit 20] # Get product details # Output includes: id, title, status, vendor, productType, tags, variants (id/title/price/sku), metafields python3 scripts/shopify_admin.py product get <id> # Create a product (defaults to DRAFT status) python3 scripts/shopify_admin.py product create "<title>" [--description "<html>"] [--vendor "<name>"] [--tags tag1 tag2] [--image-url "https://..."] [--image-file "/path/to/a.jpg"] [--image-alt "Alt text"] [--status DRAFT|ACTIVE|ARCHIVED] # Update a product (only specify fields to change) python3 scripts/shopify_admin.py product update <id> [--title "..."] [--description "..."] [--vendor "..."] [--tags t1 t2] [--image-url "https://..."] [--image-file "/path/to/a.jpg"] [--image-alt "Alt text"] [--status ...] # Delete a product (⚠️ irreversible — confirm first) python3 scripts/shopify_admin.py product delete <id>
Metafield
# List metafield definitions for a resource type python3 scripts/shopify_admin.py metafield list <owner_type> [--limit 50] # Create a metafield definition python3 scripts/shopify_admin.py metafield define <owner_type> <key> <type> [--name "Display Name"] [--namespace ns] [--pin] # Set a metafield value on a resource python3 scripts/shopify_admin.py metafield set <OwnerType> <owner_id> <key> "<value>" [--type type] [--namespace ns]
Owner types:
product, customer, order, shop, collection, productvariant, company, location, etc.
Metafield types:
single_line_text_field, multi_line_text_field, rich_text_field, number_integer, number_decimal, boolean, color, date, date_time, url, json, money, weight, volume, dimension, rating, product_reference, collection_reference, file_reference, metaobject_reference, list.*
Metaobject
# Create a metaobject definition # Field spec format: key:type[:name[:required]] python3 scripts/shopify_admin.py metaobject define <type> <field_specs>... [--name "Display Name"] [--display-key <field_key>] # Create/upsert a metaobject entry # Field value format: key=value python3 scripts/shopify_admin.py metaobject create <type> <handle> <key=value>... # List metaobject entries python3 scripts/shopify_admin.py metaobject list <type> [--limit 20] # Update a metaobject entry python3 scripts/shopify_admin.py metaobject update <id> <key=value>... # Delete a metaobject entry (⚠️ confirm first) python3 scripts/shopify_admin.py metaobject delete <id>
Blog
# List blogs python3 scripts/shopify_admin.py blog list [--limit 20] # Create a blog python3 scripts/shopify_admin.py blog create "<title>"
File
# Upload a file to Shopify admin → Settings → Files python3 scripts/shopify_admin.py file upload "/path/to/file.pdf" [--alt "Alt text"] [--filename "file.pdf"] [--content-type FILE|IMAGE|VIDEO|MODEL_3D] [--duplicate APPEND_UUID|RAISE_ERROR|REPLACE]
Article
# List articles (optionally filter by blog) python3 scripts/shopify_admin.py article list [--blog <blog_id>] [--limit 20] # Create an article (--author defaults to "Admin" if omitted) python3 scripts/shopify_admin.py article create --blog <blog_id> "<title>" "<body_html>" [--author "Name"] [--tags t1 t2] [--publish] # Create an article with author info python3 scripts/shopify_admin.py article create --blog 123 "Trail Running Guide" "<p>Tips for trail running.</p>" --author "Jane Smith" --tags running trails --publish # Update an article's author python3 scripts/shopify_admin.py article update <id> --author "New Author Name" # Update an article python3 scripts/shopify_admin.py article update <id> [--title "..."] [--body "..."] [--author "Name"] [--tags t1 t2] [--publish|--unpublish] # Publish / unpublish (set visibility) python3 scripts/shopify_admin.py article update <id> --publish python3 scripts/shopify_admin.py article update <id> --unpublish # Delete an article (⚠️ confirm first) python3 scripts/shopify_admin.py article delete <id>
Author notes
sets the display name shown on the article (e.g. "Jane Smith").--author- Defaults to
when omitted."Admin" - To show author info when listing articles, the output already includes the
column.by <author> - Author is stored as a plain string — it does not link to a Shopify staff account.
ID format
Users can provide either:
- A numeric ID:
123 - A full Shopify GID:
gid://shopify/Product/123
The script handles both formats automatically.
Natural language mapping examples
| User says | Command |
|---|---|
| "list all active products" | |
| "show me product 123" | |
| "create a hiking boot product by GeoStep" | |
| "add a care_guide text field to products" | |
| "set care guide for product 123 to hand wash" | |
| "define a designer metaobject with name and bio" | |
| "create a blog called Company News" | |
| "write an article in blog 456 about summer hiking" | |
| "write an article by Jane Smith in blog 456" | |
| "change the author of article 789 to John Doe" | |
| "list articles in blog 456 to see authors" | |