Secondhand MCP
This server enables AI assistants to search secondhand items across Facebook Marketplace, eBay, Depop, and Poshmark—individually or all at once. You can filter results by price range, condition, category, brand, department, size, color, sort order, and location (Facebook), with optional inclusion of sold items (Facebook) and image URLs. Full listing details provide description, all photos, seller info, and shipping options. It lists enabled marketplaces, supports pagination (eBay), and works with MCP clients (Claude Desktop, Cursor). Configuration options include eBay API keys and Chrome for Depop/Poshmark scraping.
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., "@Secondhand MCPsearch Facebook Marketplace for a used sofa under $300"
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.
Secondhand MCP
A Model Context Protocol (MCP) server that lets AI assistants search secondhand marketplaces. Search Facebook Marketplace, eBay, Depop, and Poshmark for used and secondhand items — filter by price, category, condition, size, and color, then get full listing details with photos, descriptions, and seller info.
Works with Claude Desktop, Claude Code, Cursor, and other clients that run MCP servers locally.
Using ChatGPT? This one won't work there.
It runs on your computer, so it only works where your computer is — Claude Desktop, Claude Code, Cursor. Secondhand MCP Cloud is the same search, always on, so whichever assistant you actually use can reach it. Free tier, no card.
This repo | ||
Claude Desktop, Code, Cursor | ✅ | ✅ |
ChatGPT, Claude, and other assistants | — | ✅ |
Searching from your phone | — | ✅ |
Chrome running in the background | needed | not needed |
Price | free, forever | free tier, then $4.99 |
Supported Marketplaces
Marketplace | Auth Required | Notes |
Facebook Marketplace | No | Location-based search |
eBay | Yes (API keys) | Official Browse API |
Depop | No | Requires Chrome installed |
Poshmark | No | Requires Chrome installed |
Related MCP server: Marketplace Finder MCP Server
Setup
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"secondhand": {
"command": "npx",
"args": ["-y", "secondhand-mcp"],
"env": {
"EBAY_CLIENT_ID": "your-ebay-client-id",
"EBAY_CLIENT_SECRET": "your-ebay-client-secret",
"EBAY_MARKETPLACE_ID": "EBAY_US"
}
}
}
}Claude Code
Add to ~/.claude/.mcp.json:
{
"mcpServers": {
"secondhand": {
"command": "npx",
"args": ["-y", "secondhand-mcp"],
"env": {
"EBAY_CLIENT_ID": "your-ebay-client-id",
"EBAY_CLIENT_SECRET": "your-ebay-client-secret",
"EBAY_MARKETPLACE_ID": "EBAY_US"
}
}
}
}eBay, Depop, and Poshmark are all optional — if eBay API keys are missing or Chrome isn't installed, those marketplaces are automatically disabled and the rest still work.
Depop & Poshmark / Chrome Requirement
Depop and Poshmark require a headless browser. If Google Chrome or Chromium is installed on your system, both are automatically enabled — no config needed. If Chrome isn't found, they are silently skipped.
On macOS, the first time you search Depop or Poshmark, you may see a system prompt asking to allow Node.js to control Chrome. This is expected — puppeteer needs to launch Chrome in headless mode. Allow it once and it won't ask again.
The browser runs invisibly in the background and only launches when you actually search Depop or Poshmark.
Configuration
Choosing Marketplaces
By default all marketplaces are enabled. To limit which are active, set the MARKETPLACES env var (comma-separated):
{
"env": {
"MARKETPLACES": "facebook,ebay"
}
}Valid values: facebook, ebay, depop, poshmark
eBay API Keys
eBay uses the official Browse API. You need a free eBay developer account:
Create an account at developer.ebay.com
Create an application to get a Client ID and Client Secret
Add them to your MCP config as
EBAY_CLIENT_IDandEBAY_CLIENT_SECRET
eBay Marketplace / Region
By default the server targets the US eBay site. To search a different regional marketplace, set the EBAY_MARKETPLACE_ID environment variable:
{
"env": {
"EBAY_MARKETPLACE_ID": "EBAY_DE"
}
}Common values:
Value | Site |
| ebay.com (default) |
| ebay.de |
| ebay.co.uk |
| ebay.com.au |
| ebay.fr |
| ebay.it |
| ebay.es |
| ebay.ca |
The full list is available in the eBay API docs.
Tools
search_marketplace
Search for items across marketplaces.
Parameter | Required | Default | Description |
| Yes | Search terms | |
| No |
|
|
| No |
| City to search in (Facebook only) |
| No | Maximum price | |
| No | Minimum price | |
| No |
| Max results |
| No |
| Include sold items (Facebook only) |
| No |
| Include image URLs in output |
| No |
| Sort order (Depop, Poshmark): |
| No | Item condition. eBay: | |
| No | Product category. Depop: | |
| No | Brand filter (Poshmark only): e.g. | |
| No | Department filter (Poshmark only): | |
| No | Size filter (Depop, Poshmark): e.g. | |
| No | Color filter (Depop, Poshmark): |
Data returned per marketplace:
Field | eBay | Depop | Poshmark | |
Title | Yes | Yes | Yes | Yes |
Price | Yes | Yes | Yes | Yes |
Location | City | City, State | — | — |
Condition | — | Yes | — | — |
Photo count | 1 thumbnail | 1 thumbnail | 1 thumbnail | 1 thumbnail |
Seller | Yes | Yes | — | — |
get_listing_details
Get full details for a specific listing using an ID from search results.
Parameter | Required | Default | Description |
| Yes | Listing ID from search results | |
| No |
|
|
Data returned per marketplace:
Field | eBay | Depop | Poshmark | |
Description | Yes | Yes | Yes | Yes |
All photos | Yes | Yes | Yes | Yes |
Location | City | City, State, Country | — | — |
Seller | Name | Username | Username | Username |
Delivery types | Yes | — | — | — |
Shipping | Yes/No | Service codes | Yes/No | Always included |
list_marketplaces
List all enabled marketplaces and their status.
search / fetch (deep research)
Convenience pair following the ChatGPT Deep Research tool contract — exact names, a single string argument each:
search(query)— searches every enabled marketplace at once and returns{ results: [{ id, title, text, url }] }, whereidismarketplace:listingIdfetch(id)— returns full listing details for asearchresult ID as{ id, title, text, url, metadata }
Useful for research-style clients that expect these standard tool names; for filtered searches use search_marketplace.
How It Works
Facebook Marketplace — Searches listings by location, price, and query. Resolves city names to coordinates. No login or browser needed.
eBay — Uses the official eBay Browse API with OAuth 2.0 client credentials. Tokens are cached and auto-refreshed. The target regional marketplace is controlled by EBAY_MARKETPLACE_ID (default: EBAY_US).
Depop — Uses a headless browser to search listings with support for category, condition, size, and color filters. The browser instance is shared across requests.
Poshmark — Uses a headless browser to search listings with support for condition, size, color, sort, and price filters. Poshmark is not location-based — all items ship nationally.
Development
git clone https://github.com/jlsookiki/secondhand-mcp.git
cd secondhand-mcp
npm install
npm run buildAdding a Marketplace
Create a new file in
src/marketplaces/Extend
BaseMarketplaceand implementsearch()and optionallygetListingDetails()Add the constructor to
allMarketplacesinsrc/marketplaces/index.ts
Limitations
Facebook: May break if Facebook changes their frontend
eBay: Requires developer API keys (free tier available)
Depop: Requires Chrome/Chromium installed; slower than Facebook/eBay (~5s per search)
Poshmark: Requires Chrome/Chromium installed; no official API so relies on page scraping
Rate limiting: Don't make too many requests too quickly
License
MIT
Available Tools
3 toolsget_listing_detailsA
Get full details for a specific listing using an ID from search results. Facebook returns: description, all photos, location, seller name, delivery types, shipping availability. eBay returns: description, all photos, location (city/state/country), seller username, shipping service options. Depop returns: description, all photos, seller username, shipping availability. Poshmark returns: description, all photos, seller username, shipping availability.
| Name | Required | Description | Default |
|---|---|---|---|
| listingId | Yes | The listing ID (from search results or a marketplace URL) | |
| marketplace | No | Which marketplace the listing is from (default: facebook) | |
| includeImages | No | Return actual image content instead of URLs. Images are returned as base64-encoded content blocks that the model can see. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It describes outputs per marketplace and mentions that includeImages can return base64 images, but does not explicitly state that the tool is read-only, idempotent, or has no side effects. The focus is on return fields rather than behavioral traits like rate limits or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and then efficiently breaks down per-marketplace details. While it is somewhat lengthy, every sentence adds value by specifying what each marketplace returns. It avoids unnecessary words and maintains clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description effectively covers the main purpose and per-marketplace output. It mentions that the ID comes from search results, which ties to sibling usage. However, it lacks details on error cases, prerequisites, or output structure beyond field lists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no additional meaning to the parameters beyond what the input schema already provides (listingId, marketplace, includeImages). The per-marketplace details are about output, not parameters, so no extra value for parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get full details for a specific listing using an ID from search results,' specifying the verb and resource. It distinguishes between multiple marketplaces (Facebook, eBay, Depop, Poshmark) and their respective return fields, which differentiates it from siblings like search_marketplace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used after search_marketplace by mentioning 'using an ID from search results,' and details what each marketplace returns, aiding selection. However, it does not explicitly state when not to use this tool or name alternatives beyond the implied sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_marketplacesA
List all available marketplaces and their status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description correctly indicates a read-only listing operation. However, it does not disclose potential behavioral details such as pagination (though likely unnecessary due to no parameters), rate limits, or the exact meaning of 'status'. The description is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that conveys the essential information without unnecessary words. It is appropriately concise, though it could benefit from being split into purpose and output details for improved scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description covers the basic purpose and output scope. However, it lacks detail on the structure of the response (e.g., what fields beyond 'status' are included), making it somewhat incomplete for an agent lacking additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so the description adds value by indicating the output will include 'all available marketplaces and their status'. This provides semantic context beyond the empty schema, though it could be more explicit about the output fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'all available marketplaces', and specifies the output includes 'their status'. It effectively conveys the tool's function, though it does not explicitly differentiate from siblings like get_listing_details or search_marketplace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a complete list of marketplaces with status is needed, but provides no explicit guidance on when not to use this tool or alternatives (e.g., when details of a specific marketplace are required, use get_listing_details).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_marketplaceA
Search for items on secondary marketplaces. Supports: . Returns listing ID, title, price, location, and photo count. Facebook: location-based search, no auth. eBay: keyword search with condition filter, requires API keys. Depop: keyword search with filters for sort, condition, category, brands, sizes, colors (requires Chrome). Poshmark: keyword search with filters for sort, condition, sizes, colors (requires Chrome). Use get_listing_details with a listing ID for full description, all photos, seller info, and shipping options.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order (Depop, Poshmark). Options: relevance, newest, most_popular, price_low_to_high, price_high_to_low | relevance |
| brand | No | Filter by brand (Poshmark only). e.g. "Nike", "Levi's", "Gucci" | |
| limit | No | Maximum number of results to return (default: 20). eBay paginates automatically to fetch more than 200 (eBay caps offset + limit at 10,000). | |
| query | Yes | Search query (e.g., "stroller", "iPhone 14", "vintage couch") | |
| sizes | No | Filter by sizes (Depop, Poshmark). Example: ["S", "M", "L"] or ["US 9", "US 10"] | |
| colors | No | Filter by colors (Depop, Poshmark). Options: black, white, red, blue, green, yellow, orange, pink, purple, brown, grey, cream, multi, silver, gold | |
| offset | No | Starting result offset for pagination (default: 0). eBay only; other marketplaces ignore it. | |
| category | No | Product category. Depop: tops, bottoms, dresses, coats-jackets, footwear, accessories, bags, jewellery, activewear, swimwear. Poshmark: use underscore-separated names like Jackets_&_Coats, Dresses, Shoes, Accessories, etc. | |
| location | No | City or area to search (e.g., "san francisco", "nyc", "los angeles") | san francisco |
| maxPrice | No | Maximum price filter (optional) | |
| minPrice | No | Minimum price filter (optional) | |
| showSold | No | Include sold/unavailable items in results (default: false) | |
| condition | No | Item condition filter. eBay: new, like_new, good, fair. Depop: new, like_new, excellent, good, fair, used. Poshmark: new (NWT), like_new (NWOT), good, fair. Use "any" for no filter. | |
| department | No | Filter by department (Poshmark only). Options: Women, Men, Kids | |
| marketplace | No | Marketplace to search. Options: , or "all" to search all marketplaces | |
| includeImages | No | Include full image URLs in results (default: false). Use get_listing_details for full photos. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It discloses behavioral traits: auth needs (eBay API keys, Chrome for Depop/Poshmark), pagination (eBay offset+limit, auto-paginate), and that sold items can be shown. It does not mention rate limits or error handling, but covers key aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into paragraphs per marketplace with a summary at the start and sibling tool reference at the end. It is relatively concise for the complexity, though there is an empty bullet after 'Supports:' which is a minor formatting issue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 16 parameters, no output schema, and no annotations, the description fairly covers the tool's purpose, supported marketplaces, return fields, and key behavior. It references get_listing_details for extended info. It could mention output format or error scenarios, but is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds value by explaining marketplace-specific parameter behavior (e.g., offset only for eBay, category options per platform, condition filter differences). It provides examples and clarifications beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for items on secondary marketplaces, lists supported platforms (Facebook, eBay, Depop, Poshmark) and mentions return fields. It distinguishes itself from the sibling tool get_listing_details, which provides full details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (searching marketplaces) and references get_listing_details for more info. It mentions auth requirements for eBay and browser dependencies for Depop/Poshmark, but does not explicitly state when not to use or alternative tools for specific marketplaces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v0.4.0- First observed
get_listing_details - First observed
list_marketplaces - First observed
search_marketplace
TDQS
Each tool has a clearly distinct purpose: listing available marketplaces, searching across them, and retrieving full details for a specific listing. No overlap in functionality.
All tool names follow a consistent verb_noun pattern using snake_case: list_marketplaces, search_marketplace, get_listing_details. Predictable and clear.
Three tools is minimal but covers the essential operations for the domain. While more tools could be added (e.g., filter management), the current set is well-scoped and not excessive.
The tool surface covers the core needs: listing marketplaces, searching items, and getting details. Minor gap: search_marketplace has an incomplete description after 'Supports:', but functionally it covers multiple marketplaces. No dead ends.
Maintenance
Related MCP Connectors
AI marketplace: search, buy, sell across Amazon, eBay, AliExpress. 13 tools.
Search products in nearby stores. Agents can also list items for sale on a user's behalf.
AI-powered product search, affiliate links, and price negotiation for e-commerce platforms
AI resale manager. Photograph an item, AI writes the listing, publish a sale page, manage pickups.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search, compare, buy, and sell products across multiple e-commerce platforms through 13 marketplace tools.1MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents like claude.ai to search online marketplaces (e.g., Facebook Marketplace) through your own logged-in browser, returning structured listings and details.-
- AlicenseAqualityAmaintenanceEnables AI agents to search and monitor Dutch and Belgian classifieds (Marktplaats and 2dehands) for listings, seller profiles, and categories.52MIT
- AlicenseAqualityBmaintenanceEnables AI agents to search, inspect, and purchase physical goods on an escrow-secured marketplace, including listing search, agent reputation checks, and offer creation.583MIT
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/jlsookiki/secondhand-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server