Move your shop to Benchy
Bring your own models from Thangs, MakerWorld or local files to World as private listings, with prices, licenses and membership plans.
What it does
Bring your own models from Thangs, MakerWorld or local files to World as private listings, with prices, licenses and membership plans you confirm.
- Build a catalogue from your own files, reading your public listing pages for titles, descriptions, tags and prices
- Propose each model's category, license, price and membership plan, and wait for your confirmation
- Upload every model as a private draft, skipping anything already on World
- Save prices and membership plans unpublished, then publish only what you approve
Your agent needs a connection to Benchy. What it can do with this skill is whatever that connection allows.
Add it to your agent
In Claude Code, save it where the agent reads its skills:
shell
mkdir -p .claude/skills/move-your-shop-to-benchy
curl --fail --location -o .claude/skills/move-your-shop-to-benchy/SKILL.md https://benchy.world/skills/move-your-shop-to-benchy.mdThe instructions
SKILL.md
---
name: move-your-shop-to-benchy
description: >-
Move a creator's own 3D model shop to Benchy World: their local files and, for
reference, their public Thangs, MakerWorld, Printables or Cults listings become
private World listings with prices, licences and membership plans. The creator
confirms the mapping before anything is written and says go before anything is
public. Use when a creator wants to bring their catalogue to World.
title: Move your shop to Benchy
date: 2026-09-30
author: Benchy
tags: [benchy, world, migration, selling, memberships, mcp, skill]
license: MIT
metadata:
version: "1.1.0"
schemaVersion: 2
surface: "world_* MCP tools · benchy.world"
---
# Move your shop to Benchy
**Last verified:** 2026-10-22 against the Benchy MCP tools.
You are the creator's own agent, connected to Benchy MCP with a key that can
make changes. You move their models to Benchy World as private listings, set
their prices, licences and membership plans, and make nothing public until they
say so. Discover the current tool schemas before you start; they are the
contract, and this skill only orders them.
Read [Upload and check 3D models](https://benchy.world/skills/upload-and-validate-3d-models.md)
for the upload steps and file checks. This skill does not repeat them.
## Rules
- **Only files the creator gives you.** Work from their local folders: files
they made, or downloaded from their own account on another platform. Never
download model files from another platform yourself.
- **Public pages only.** You may open the creator's public listing pages on
Thangs, MakerWorld, Printables or Cults, as any visitor would, to read the
title, description, tags, displayed price and licence. Never sign in to
another platform, never ask for its password, cookies or session, and never
read anything behind a login or a paywall. If a page needs sign-in or refuses
automated reading, ask the creator to paste the details instead. Respect each
site's terms and robots.txt.
- **Only the creator's own work.** Ask the creator to confirm they made each
model or hold the rights to sell it. Leave out remixes of other people's
models unless their licence allows it, and record the original as a parent.
- **Nothing is invented.** Propose titles, descriptions, prices and licences
from what the creator gave you and what their pages say. The creator confirms
or corrects every one.
- **Private until go.** Create every listing without a visibility (World keeps
it private), save every offer (it saves paused), and leave every membership
plan as a draft. Publishing, starting sales and opening plans happen only
after the creator reads the summary and says yes.
## What World supports today
| Topic | Today |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Model files | One primary file per listing: 3MF (preferred), STL, OBJ, GLB, glTF, USDZ or STEP, up to 250 MiB. STL and OBJ need their units. A STEP file is a CAD listing: it can be public or sold only without the `additive` workflow, so a printable model keeps a 3MF or STL. |
| Extra files | Sliced print files (.gcode, .bgcode, up to 128 MiB) attach through MCP (step 4). Other files (more STLs, STEP, instructions) are added on the listing's Package page on World; tell the creator which ones. |
| Pace | 60 upload requests an hour. A large shop takes several hours; report progress as you go. |
| Catalogue size | 500 live models per creator. |
| Prices | USD only, in cents: `amount: 1200` is $12.00. Convert other currencies and say that you did. |
| Membership plans | Up to three joinable plans, each with a monthly price, an optional yearly price, its own licence and up to five benefit lines. They exist only once memberships open on World (see step 6). |
| Importing from another platform | There is no connection to Thangs, MakerWorld, Printables or Cults. This skill works from the creator's files and their public pages. |
## Steps
### 0. Preflight
1. `world_get_connect_status`. If `ready` is false, the creator can still move
their models; selling waits for payout setup. Offer
`world_start_connect_onboarding` and let them finish it on Stripe.
2. Page through `world_list_my_listings` (pass the continue cursor until
`isDone`) to learn what is already on World.
3. Read the ledger `benchy-migration.json` in the creator's folder if it exists
(see [The ledger](#the-ledger)). A run that stopped part way resumes from it.
If any World call answers `creator_not_approved`, stop. Selling on Benchy World
is open to approved creators, and this account is not one yet. Tell the creator
that, and that they can ask to become one by writing to help@benchy.studio with
the subject "Selling on Benchy World" ([Selling on World](https://benchy.world/docs/selling)).
Do not retry. Buying, downloading and everything else on Benchy still work.
### 1. Inventory
Walk the creator's folders. For each model, pair the primary file (3MF first,
then STL, OBJ or GLB) with its images and any sliced .gcode or .bgcode, and
match it to its public listing page when the creator gave you one. Build one
table: title, file, size, format, images, source link, price there, licence
there.
### 2. Checkpoint A: the catalogue
Show the table. The creator removes items, fixes titles, and confirms they own
each model.
**Skip what is already on World.** A model is already moved when a row from
`world_list_my_listings` has the same title and either:
- `world_get_model` for that row shows `importedFrom.url` equal to this model's
source link, or
- the model has no source link (a local file), and the title matches.
Also skip anything the ledger already lists with a `modelId`. Show the skipped
items and why.
### 3. Checkpoint B: the mapping
For every model, propose and show together:
- **Title and description.** From the creator's file names or their page; keep
their words.
- **Category and tags.** Pick categories from `world_list_categories`.
Printable models use the `additive` workflow as `primaryLens`.
- **Licence.** Map each source licence to World's: Creative Commons licences
map one to one (`cc0`, `cc_by`, `cc_by_sa`, `cc_by_nd`, `cc_by_nc`,
`cc_by_nc_sa`, `cc_by_nc_nd`); a commercial-use licence maps to `commercial`;
a "standard" or personal-use file licence maps to `all_rights_reserved`
(Personal use only). Point out every mapping that is not one to one.
- **Price.** The source price in USD cents, or free. Ask "Same prices as on
your other shop?" and let the creator change any of them.
- **How it was made.** `human`, `ai_assisted` or `ai_generated`. World needs
this before a listing can be public, and an AI label can later be raised but
not lowered.
- **Membership plan.** Which plan, if any, each model belongs to (step 7).
Write nothing until the creator confirms the whole mapping.
### 4. Upload, one model at a time
For each confirmed model, in order:
1. `world_request_model_upload` with `expectedBytes`, transfer the bytes exactly
as it instructs, then `world_finalize_upload` with `uploadedBytes` (the
size you sent, equal to `expectedBytes`).
2. Thumbnail: `world_request_media_upload` with `role: "thumbnail"`, the
file's `extension` and `expectedBytes`, transfer, `world_finalize_upload`
with `uploadedBytes`.
Gallery images: the same with `role: "gallery"`. Finalize says which
`world_create_model` field takes each key.
3. `world_create_model` with the finalized keys, title, description, tags,
categories, `primaryLens`, `license`, `provenance`, and, for a model from
another platform, `importedFrom` with that platform, the listing's link and
its id when you know it. Leave visibility out.
4. Write the new `modelId` to the ledger straight away, then tell the creator
the draft is there.
5. Each sliced print file: `world_request_print_file_upload` with its
`filename` and `expectedBytes`, transfer, `world_finalize_upload`, then
`world_attach_print_file` with the same `filename` as `path`. Then
`world_add_print_profile` with `isOfficial: true`, the creator's slicer
settings, and the `artifactId` the attach returned as `printFileArtifactId`.
### 5. Prices
For each paid model, once its file checks finish, call `world_upsert_model_offer`
with the price, `currency: "usd"` and `billing: "one_time"`. It sells the
current release, saves paused, and leaves free downloads on until sales start.
Record the offer id in the ledger. `world_get_offer` with the `modelId` tells
the owner what is still missing to sell it (`saleReadiness`). A model whose
checks are still running is priced on a later pass.
### 6. Memberships
Skip this step if the connection has no `world_list_membership_plans` tool.
1. `world_list_membership_plans`. If `open` is false, memberships are not open
on World yet: tell the creator, keep each model's own price, and go to
step 8. Any plan tool answering `memberships_not_open` means the same.
2. Update the plans the creator already has rather than making new ones; at
most three can be joinable.
### 7. Checkpoint C: plans
Propose up to three plans: a name, a monthly price, an optional yearly price,
the licence members get (a plan can be personal use only even when its models
are sold with a commercial licence), up to five benefit lines, and the models
in each. The creator confirms, then:
1. `world_save_membership_plan` for each plan, with a fresh `clientIntentId`
reused on any retry. It stays a draft nobody can join.
2. `world_assign_membership_models`, at most 25 changes per call.
3. `world_set_membership_plan_state` with `lead: true` for the plan their page
should lead with.
A refusal carries World's reason in a sentence; read it to the creator.
### 8. Checkpoint D: go live
Show the final table: each model's title, licence, price, plan, and that it is
still private. Ask the creator what to make public. Only after they say yes:
1. `world_update_model` with `visibility: "public"` for each chosen model.
2. `world_set_offer_active` with the `modelId` and `active: true` for each
priced one. Starting sales ends its free downloads.
3. `world_set_membership_plan_state` with `status: "active"` for each plan
they want to open. A plan opens only with a ready payout account, a licence,
and at least one public or unlisted model with ready files in it.
### 9. Report
List what was created, what was skipped and why, and what is left (extra
files to add on each Package page, models still in file checks, plans waiting
for memberships to open), with each model's World link.
## The ledger
Keep `benchy-migration.json` beside the creator's files, one entry per model,
and update it after every write so an interrupted run can resume:
```json
{
"models": [
{
"sourceFile": "dragon/dragon.3mf",
"sha256": "…",
"sourceUrl": "https://makerworld.com/en/models/123456",
"title": "Articulated dragon",
"modelId": "…",
"offerId": "…",
"planIds": ["…"],
"status": "private draft"
}
]
}
```