Skip to content

Add etsy-upload skill: photo folder → draft Etsy listing - #1

Merged
simoneloop merged 1 commit into
mainfrom
skill/etsy-upload
Jun 7, 2026
Merged

Add etsy-upload skill: photo folder → draft Etsy listing#1
simoneloop merged 1 commit into
mainfrom
skill/etsy-upload

Conversation

@simoneloop

Copy link
Copy Markdown
Owner

What

New skill etsy-upload: turns a folder of product photos into a draft Etsy listing via the Open API v3 (OAuth2/PKCE, auto token refresh). Infers style/price/category from the shop's existing active listings, writes SEO copy + tags, optional multilingual translations & variations, then creates the draft — never auto-publishes.

Built via skill-creator (prior-art research, template, catalog row, validation).

Design

  • Generic & shop-agnostic. Voice/languages/pricing/terminology come from a personal shop-profile.md read from the data dir (default ~/.claude/etsy-tools/, ETSY_TOOLS_DIR override) — never committed. Ships a shop-profile.example.md template.
  • Secrets stay out of the repo. config.json + .auth.json live in the data dir; only config.example.json (placeholders) ships. etsy.py reads config from ETSY_TOOLS_DIR, so a marketplace install (read-only skill dir, wiped on update) works.
  • Guided fallback for an empty shop's first listing — nothing to infer from, so it asks targeted questions and offers to seed shop-profile.md.

Prior art

Existing Etsy MCP servers are generic API wrappers; the eBay skill in claude-social-skills uses the scripts+skills pattern. Gap: no opinionated one-shot "photo folder → complete draft" workflow with shop-style inference + multilingual + draft-only safety. This is a differentiated build.

Validation

bash scripts/validate-skills.sh → PASS. Python scripts compile (py_compile). No secrets committed.

🤖 Generated with Claude Code

Generic, shop-agnostic skill that turns a folder of product photos into a
DRAFT Etsy listing via the Open API v3 (OAuth2/PKCE, auto token refresh):
infers style/price/category from the shop's existing active listings, writes
SEO copy + tags, optional multilingual translations & variations, then creates
the draft (never auto-publishes).

- Shop-specific voice/languages/pricing come from a personal shop-profile.md
  read from the data dir (default ~/.claude/etsy-tools/, ETSY_TOOLS_DIR
  override) — never committed.
- Secrets (config.json, .auth.json) live in the data dir too; only a
  config.example.json template ships. Scripts read config via etsy.py from
  ETSY_TOOLS_DIR so a marketplace install (read-only skill dir) works.
- Guided fallback for an empty shop's first listing (nothing to infer from).
- Catalog row added to README.
@simoneloop
simoneloop merged commit 14a984e into main Jun 7, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants