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 you confirm.
Paste it into Claude Code, Codex, Cursor or any agent. No account needed.
View prompt
Use the Benchy skill "Move your shop to Benchy". 1. Read https://benchy.world/skills/move-your-shop-to-benchy/files?path=SKILL.md and follow it. If you support skills, save it as one. 2. Save https://benchy.world/skills/move-your-shop-to-benchy/files?path=BENCHY.md as BENCHY.md at the root of my project, and keep it current as we work. 3. Then start on this: Use this skill to move my shop to Benchy. My files are in ~/Models/shop and my MakerWorld page is makerworld.com/en/@me. Show me the plan before you upload anything.
What you’ll need
- Model files and listing images
Suggested: GLB · STL · 3MF · PNG · JPG
- An approved creator account and an agent connected to Benchy MCP
- Rights to publish the files and their previews
Agent skill · MCP-capable agents · Version 1.0.0 · MIT license
What you can work toward
- 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
Skill files
The instructions your agent follows. Review them first: tools, connections and execution depend on your setup.
--- 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" } ] } ```