marketplace-lister-mcp
Allows posting listings to Facebook Marketplace from a folder of photos, including login management, item scanning, comparable pricing search, creating draft listings that stop at review, publishing, and checking current listings.
Click on "Install 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., "@marketplace-lister-mcpPost everything in C:\sell to Marketplace"
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.
marketplace-lister-mcp
Post listings to Facebook Marketplace from a folder of photos, straight from Claude.
An MCP server for bulk-listing second-hand items. Point it at a folder, one subfolder per item, and it fills the real Marketplace form and publishes on your OK. Runs on Windows, macOS and Linux.
Facebook Marketplace works today. Tools are namespaced per platform (fb_login, fb_login_status), so Kijiji and Craigslist can be added beside it rather than replacing it.
Unlike cookie-scraping tools, this never touches your day-to-day Chrome or any OS keychain. You log in once in a dedicated browser window; the session persists in its own profile for all future runs.
Why this exists
Existing Facebook Marketplace tooling splits two ways. The MCP servers are read-only, and several are macOS-only because they decrypt your Chrome cookies through the macOS Keychain. The auto-posters that can create listings are standalone scripts with no MCP interface, so an assistant can't drive them.
This one posts, exposes the work as MCP tools, runs anywhere Playwright runs, and holds its own login instead of borrowing yours.
Related MCP server: TrySellr MCP Server
Tools
Tool | What it does |
| Opens the dedicated browser to Facebook's login page and waits briefly for you to sign in. Idempotent: if already signed in, returns instantly; if you need more time, just call it again. You only ever type your password on Facebook's own page. |
| Reports whether the dedicated profile is logged in, and where the profile lives. |
| Scans a folder: each subfolder is one item, its images are that item's photos. Folders starting with |
| Looks up what similar items are listed for and returns price ranges (min / p25 / median / p75 / max). Reference only — it does not recommend a price. |
| Fills the create-item form (title, price, description, category, condition, photos) and advances to the review step, stopping before publish. Returns a screenshot of the review page to confirm. |
| Publishes the listing currently on the review step. Call only after confirming the screenshot. |
| Opens your "Selling" page and returns current listings (text + screenshot) to verify Active vs. under review. |
Install
Requires Node.js 18+.
git clone https://github.com/noobsplzwin/marketplace-lister-mcp
cd marketplace-lister-mcp
npm install # also downloads Chromium
npm run buildRegister with Claude Code
claude mcp add marketplace-lister -- node /absolute/path/to/marketplace-lister-mcp/dist/index.jsOr add to a project .mcp.json:
{
"mcpServers": {
"marketplace-lister": {
"command": "node",
"args": ["C:/path/to/marketplace-lister-mcp/dist/index.js"],
"env": { "FB_MCP_CHANNEL": "chrome" }
}
}
}First run
Ask Claude to "log in to Facebook Marketplace" → it calls
fb_login, a browser window opens.Sign in on Facebook's page (including any 2FA). Say you're done →
fb_loginagain confirms.From then on it's automatic. The session is saved; you won't log in again unless Facebook expires it.
Typical flow
Put each item's photos in its own folder:
C:\sell\
ninja-air-fryer\ IMG_8387.jpg IMG_8390.jpg
office-chair\ IMG_9001.jpg IMG_9002.jpg"Post everything in
C:\sellto Marketplace."
Claude calls scan_items, writes a title and description per item, asks you for each price, calls create_listing with that item's folder (you see a review screenshot), and on your OK calls publish_listing.
One folder per item is the whole interface. You never handle individual file paths: create_listing takes folder and uploads every image inside it, sorted by filename, so the first photo alphabetically becomes the cover.
Photos must be files on disk — an image pasted into a chat window can't be forwarded to the browser.
Pricing: you set it
The seller supplies every price. Neither the tools nor the model estimate one.
That's a deliberate retreat. An earlier version derived a suggested asking range from comps, and measured against real listings it was unreliable enough to cost money: a search for rice cooker medians around $15 because entry-level units dominate those two words, while a premium micom cooker that sells for $85 used sits in the very same results. Automated pricing quietly lowballs exactly the items worth the most.
search_comps still exists as reference material — run it when you want to see the local market before deciding — but it reports ranges and declines to recommend:
search_comps({ query: "instant pot" })
→ close_match_stats: { count: 14, min: 20, p25: 53, median: 88, p75: 119, max: 300 }
all_active_stats: { count: 26, min: 20, p25: 50, median: 73, p75: 100, max: 300 }
observation: "14 active listings matching the query containing \"instant\":
$20–$300, median $88 ... Generic search terms pull in
entry-level units, so this range can sit far below what a
premium brand or model is actually worth. Reference only —
the seller sets the price."Why there are two sets of stats
Facebook's search is fuzzy: staub dutch oven returns mostly generic cast iron. So results are split. close_match_stats covers listings whose titles genuinely match; all_active_stats covers everything returned. Matching weights rare query words above common ones (searching "staub dutch oven", the word staub decides, not oven), and the rarest term becomes an anchor a comp must contain. Without that rule, two mid-frequency words out-vote the brand and a Le Creuset tote bag shows up as a comp for a Staub cocotte — observed in real results.
Even with both filters the numbers stay indicative, not authoritative — hence the seller deciding.
Search tips: fewer words find more results. Start broad ("rice cooker"), add the model number only if results are plentiful. Substring matching means common misspellings ("Instapot") fall outside the anchored set.
Configuration (env vars)
Var | Default | Purpose |
|
| Where the Facebook login session is stored. One profile per marketplace. |
| (bundled Chromium) | Set to |
Notes & limits
You publish; the tool never auto-publishes.
create_listingalways stops at review; publishing is a separate, explicit call.Facebook has no official personal-Marketplace write API. This drives the real web UI via a real browser session, which is the most robust and least suspicious approach — but Facebook UI changes can break selectors; update
src/listing.tsif a field stops filling.New listings often show "being reviewed" for a few minutes before going Active. That's normal.
If Facebook shows a checkpoint/CAPTCHA, complete it yourself in the window — the tool won't try to bypass it.
Photos are read straight from disk (no size limit beyond Facebook's own).
Design note: why the browser, not the GraphQL API
Facebook has no official personal-Marketplace write API, and its internal GraphQL doc_ids rotate with every frontend release. Worse, replaying a write mutation straight over HTTP is exactly the fingerprint their anti-abuse systems look for. So publishing goes through the real browser session. Reading (search_comps) also uses the rendered page — the result cards already carry price, title, location, and the Sold badge, so there's nothing to gain from reverse-engineering the API and a maintenance burden to avoid.
Roadmap
Kijiji support, then Craigslist. Tools are already namespaced per platform (
fb_login,fb_login_status), so a second marketplace slots in beside the first rather than replacing it.Post one item to several marketplaces in a single call.
Category-aware depreciation priors layered on top of
search_comps, for items too rare to have local comps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to search secondhand marketplaces (Facebook Marketplace, eBay, Depop, Poshmark) for used items with filters like price, condition, size, and color.Last updated317239MIT
- Flicense-qualityDmaintenanceAI-powered selling intelligence for multiple online marketplaces, enabling item analysis, optimized listings, pricing checks, negotiation coaching, and batch operations via any MCP-compatible AI assistant.Last updated
- Flicense-qualityBmaintenanceEnables AI agents like claude.ai to search online marketplaces (e.g., Facebook Marketplace) through your own logged-in browser, returning structured listings and details.Last updated
- FlicenseAqualityBmaintenanceEnables searching Facebook Marketplace listings from Claude using your existing Facebook session without a browser.Last updated7
Related MCP Connectors
AI resale manager. Photograph an item, AI writes the listing, publish a sale page, manage pickups.
Amazon brand, seller, niche & buy-box intelligence inside your own Claude or ChatGPT.
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/noobsplzwin/marketplace-lister-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server