Skip to main content
Glama

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.

TIP

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

Cloud

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:

  1. Create an account at developer.ebay.com

  2. Create an application to get a Client ID and Client Secret

  3. Add them to your MCP config as EBAY_CLIENT_ID and EBAY_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_US

ebay.com (default)

EBAY_DE

ebay.de

EBAY_GB

ebay.co.uk

EBAY_AU

ebay.com.au

EBAY_FR

ebay.fr

EBAY_IT

ebay.it

EBAY_ES

ebay.es

EBAY_CA

ebay.ca

The full list is available in the eBay API docs.

Tools

search_marketplace

Search for items across marketplaces.

Parameter

Required

Default

Description

query

Yes

Search terms

marketplace

No

facebook

facebook, ebay, depop, poshmark, or all

location

No

san francisco

City to search in (Facebook only)

maxPrice

No

Maximum price

minPrice

No

Minimum price

limit

No

20

Max results

showSold

No

false

Include sold items (Facebook only)

includeImages

No

false

Include image URLs in output

sort

No

relevance

Sort order (Depop, Poshmark): relevance, newest, most_popular, price_low_to_high, price_high_to_low

condition

No

Item condition. eBay: new, like_new, good, fair. Depop: new, like_new, excellent, good, fair, used. Poshmark: new (NWT), like_new (NWOT), good, fair

category

No

Product category. Depop: tops, bottoms, dresses, coats-jackets, footwear, accessories, bags, jewellery, activewear, swimwear. Poshmark: Jackets_&_Coats, Dresses, Shoes, Accessories, etc.

brand

No

Brand filter (Poshmark only): e.g. "Nike", "Levi's", "Gucci"

department

No

Department filter (Poshmark only): Women, Men, Kids

sizes

No

Size filter (Depop, Poshmark): e.g. ["S", "M", "L"] or ["US 9", "US 10"]

colors

No

Color filter (Depop, Poshmark): black, white, red, blue, green, yellow, orange, pink, purple, brown, grey, cream, multi, silver, gold

Data returned per marketplace:

Field

Facebook

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

listingId

Yes

Listing ID from search results

marketplace

No

facebook

facebook, ebay, depop, or poshmark

Data returned per marketplace:

Field

Facebook

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.

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 }] }, where id is marketplace:listingId

  • fetch(id) — returns full listing details for a search result 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 build

Adding a Marketplace

  1. Create a new file in src/marketplaces/

  2. Extend BaseMarketplace and implement search() and optionally getListingDetails()

  3. Add the constructor to allMarketplaces in src/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 tools
get_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
listingIdYesThe listing ID (from search results or a marketplace URL)
marketplaceNoWhich marketplace the listing is from (default: facebook)facebook
includeImagesNoReturn actual image content instead of URLs. Images are returned as base64-encoded content blocks that the model can see.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort order (Depop, Poshmark). Options: relevance, newest, most_popular, price_low_to_high, price_high_to_lowrelevance
brandNoFilter by brand (Poshmark only). e.g. "Nike", "Levi's", "Gucci"
limitNoMaximum number of results to return (default: 20). eBay paginates automatically to fetch more than 200 (eBay caps offset + limit at 10,000).
queryYesSearch query (e.g., "stroller", "iPhone 14", "vintage couch")
sizesNoFilter by sizes (Depop, Poshmark). Example: ["S", "M", "L"] or ["US 9", "US 10"]
colorsNoFilter by colors (Depop, Poshmark). Options: black, white, red, blue, green, yellow, orange, pink, purple, brown, grey, cream, multi, silver, gold
offsetNoStarting result offset for pagination (default: 0). eBay only; other marketplaces ignore it.
categoryNoProduct 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.
locationNoCity or area to search (e.g., "san francisco", "nyc", "los angeles")san francisco
maxPriceNoMaximum price filter (optional)
minPriceNoMinimum price filter (optional)
showSoldNoInclude sold/unavailable items in results (default: false)
conditionNoItem 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.
departmentNoFilter by department (Poshmark only). Options: Women, Men, Kids
marketplaceNoMarketplace to search. Options: , or "all" to search all marketplacesfacebook
includeImagesNoInclude full image URLs in results (default: false). Use get_listing_details for full photos.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 3 tool updatesv0.4.0
    • First observedget_listing_details
    • First observedlist_marketplaces
    • First observedsearch_marketplace

TDQS

A3.9/5.0
Disambiguation5/5

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.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case: list_marketplaces, search_marketplace, get_listing_details. Predictable and clear.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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