ads-crosspost
Posts second-hand items to Facebook Marketplace by replaying recorded browser flows in a headed Chromium, filling in the listing form, and stopping at a publish gate for user approval before anything goes live. Subject to Facebook's cap of 20 Marketplace listings per month for private sellers.
Posts second-hand items to Vinted by replaying recorded browser flows in a headed Chromium, filling in the listing form and stopping at a publish gate with a screenshot for user approval before publishing. Vinted is shipping-only, so items without shipping skip it.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ads-crosspostpost my old IKEA desk to all four sites"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ads-crosspost
Post one second-hand item to Blocket, Tradera, Vinted and Facebook Marketplace from a single chat with Claude.
You describe the item and drop in photos. Claude interviews you for anything missing and writes the ad in Swedish and English. It then picks each site's category and fields from snapshots of the real forms. A small macOS tray app fills in each site's form in its own browser, shows you a screenshot, and publishes only after you say yes.
[!warning] Experimental This is a personal tool I built to scratch my own itch, published as-is. There is no signed or notarized build yet, so you build the app from source. Expect rough edges, and expect a flow to break whenever a site changes its form.
How it works
The LLM never clicks around the sites. It writes the text and chooses categories. Posting replays browser flows that I recorded by hand, one per site, with patchright (a Playwright fork) driving a headed Chromium.
Tray app (Electron). Runs a local MCP server on
127.0.0.1behind a bearer token, one browser profile per site, and a job queue.Hosts. Claude Desktop (chat and Cowork) and ChatGPT desktop connect through a small stdio shim that the tray app writes into their config. The shim starts the app if it isn't running.
Publish gate. Every post stops at
ready_to_publishwith a screenshot of the filled form. Nothing goes live until you approve it in the chat.Your data stays local. Items, photos, logins and settings live in
~/Library/Application Support/ads-crosspost/. The server listens on localhost only.
The longer story is in docs/ARCHITECTURE.md and docs/DESKTOP-APP.md.
Related MCP server: Secondhand MCP
Before you use it
All four sites restrict automated use in their terms to some degree. This tool posts at human pace, one item at a time, in a real headed browser that you logged into yourself. That lowers the risk. It doesn't remove it: an account can still get flagged or limited. Use it on your own accounts, for your own things, and decide for yourself whether that risk is fine.
Some other limits:
Facebook caps private sellers at 20 Marketplace listings a month.
Blocket charges for ads in the Fordon category (cars, motorcycles, boats and so on), so this tool doesn't support vehicles. Fordonstillbehör (parts and accessories) is free and works.
Tradera supports fixed-price listings only. The auction flow isn't recorded.
Vinted is shipping-only, so items without shipping skip it.
Sites are in Swedish, and prices are in SEK.
Get started
docs/QUICKSTART.md takes you from a fresh clone to your first posted ad in about 15 minutes.
You need macOS (only tested on Apple silicon), Node 22.18 or newer, and pnpm.
Command line
The CLI predates the app and still works on items stored in the repo checkout:
pnpm run login blocket # log in by hand once per site
pnpm post <slug> --platform all --dry-run # fill the forms, screenshot, don't publish
pnpm post <slug> --platform all # publishItems live in items/<slug>/item.yaml (gitignored). The post-ad skill in .claude/skills/ writes them from Claude Code. pnpm import-data <checkout> moves a CLI checkout's items, logins and config into the app.
Development
pnpm install
pnpm test # unit tests
pnpm typecheck
pnpm app:dev # build and run the tray app
pnpm app:smoke # start the MCP server and shim under plain node, list tools
pnpm app:dist # unsigned arm64 .dmg in dist/Signed releases are covered in docs/RELEASING.md. The per-site form fields in src/platforms/*.fields.json are generated by pnpm discover <platform>. docs/FIELDS.md explains the format.
Roadmap
A signed and notarized macOS build, so you can install without building from source.
Deactivating or removing a listing once the item is sold, on every site it was posted to.
License
MIT.
This server cannot be deployed
Maintenance
Related MCP Connectors
AI resale manager. Photograph an item, AI writes the listing, publish a sale page, manage pickups.
Drafts eBay listings from your item photos: title, description, price and condition.
Build, edit, stock, and publish Social AI websites and storefronts via AI chat.
Run storefronts, listings, orders, content, fulfillment, and analytics through AI.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceEnables AI agents to search and retrieve listings from Sweden's largest second-hand marketplaces, Blocket and Tradera. Returns unified data including prices, images, seller information, and direct links to listings.8-
- AlicenseAqualityAmaintenanceEnables AI assistants to search secondhand marketplaces (Facebook Marketplace, eBay, Depop, Poshmark) for used items with filters like price, condition, size, and color.5128 npm78MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents like claude.ai to search online marketplaces (e.g., Facebook Marketplace) through your own logged-in browser, returning structured listings and details.-
- AlicenseAqualityBmaintenanceEnables posting second-hand items to Facebook Marketplace from local photo folders via Claude, featuring login, listing creation, pricing reference, and publishing tools.74MIT