Skip to content

SoldStack

by aar-ont · remote · no sign-in to list tools · v1.1.0 · published by GitHub user aar-ont

Real Poshmark sold prices for secondhand clothing, shoes and bags, split by condition.

Changes · 2

3 tools: 2 change things and 1 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http soldstack https://soldstack.dev/mcp --header 'X-API-Key: <your-x-api-key>'

Findings

Matches of fixed checks, with the text they matched.

2 info
  • The description is 2,468 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...US, default) or "poshmark_ca" (Poshmark Canada; prices and fees in CAD)."

    What this check looks for
  • The description is 2,818 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...l advice; appraisal_may_be_needed is true when the total is over $5,000."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

3 tools

Changes things 2Claude Code: ask
  • buy_or_passWhether an item is worth buying at a given cost to resell on Poshmark: buy, maybe or pass with the reason, judged from its clean sold comps after Poshmark's fee.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Whether an item is worth buying at a given cost to resell on Poshmark: buy, maybe or pass with the reason, judged from its clean sold comps after Poshmark's fee. Call it for one item at a time; if it reports busy, wait the given number of seconds and call again. query: brand + item, e.g. "patagonia better sweater". cost: what you'd pay, e.g. the thrift-store tag price in USD. min_profit: smallest profit after fees worth the effort (default 10). size / condition: same filters as sold_comps. source: "poshmark" (US, default) or "poshmark_ca" (Poshmark Canada; prices and fees in CAD).

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
  • sold_compsWhat an item actually sold for on Poshmark: median sold price, typical range (p10-p90), days to sell, what the seller keeps after fees, price by condition, a confidence rating, and…1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Info

      The description is 2,468 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...US, default) or "poshmark_ca" (Poshmark Canada; prices and fees in CAD)."

      What this check looks for
    Description, as the server wrote it
    What an item actually sold for on Poshmark: median sold price, typical range (p10-p90), days to sell, what the seller keeps after fees, price by condition, a confidence rating, and the matching sales. Call it for one item at a time; if it reports busy, wait the given number of seconds and call again. query: brand + item, e.g. "coach tabby 26" or "lululemon align leggings", or a plain item type like "womens jeans". For kids' clothing put girls, boys, kids, toddler or youth in the query ("girls jeans"); otherwise kids' sizes are removed. size: only this size, e.g. "8", "M" or "10.5". Leave it out unless the user named a size: it can leave very few sales. condition: "new", "used", a plain word (nwt, like new, excellent, very good, good, fair, poor), or an exact grade: new_with_tags, not_new_with_tags, used_like_new, used_excellent, used_good, used_fair (comma-separated for several). days: only sales from the last N days (1-365). Poshmark lists sold results by relevance, not date, so without it the sales can be years old; days=365 (or 90) keeps prices recent. limit: how many individual sales to include in `sales` (default 10, 0-50). Each sale has the same fields as a /v1/sold item. exclude_seller: comma-separated seller usernames to leave out (case-insensitive). sort: order of the included sales: "recent" (newest first), "price_asc" or "price_desc". Stats are unaffected. department: comma-separated: Women, Men, Kids, Home, Pets, Electronics. "Kids" also keeps kids' sizes, and adds "kids" to a query with no kids' word ("snow pants" searches "kids snow pants"; query_note says so). category: comma-separated Poshmark categories, e.g. "Jeans". kids_age: only kids' sales in "baby" (0-24 months), "toddler" (2T-5T) or "big_kids" (4/5 and up) sizes. Kids' searches otherwise keep 12-24 month and toddler sizes, as Poshmark's Kids department does. include_removed: true also returns removed_items, the sales cleaning dropped, each with a removed_reason. deep: true reads up to ~190 sales (4 pages of up to 48, in Poshmark's relevance order) instead of one page (slower when not cached, about 10s; one lookup). source: "poshmark" (US, default) or "poshmark_ca" (Poshmark Canada; prices and fees in CAD).

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
Only reads 1Claude Code: allow
  • value_donation_listFair-market values for a whole donation list (clothing, shoes and bags), each item with the Poshmark sales behind it, a list total and a dated method paragraph the donor can keep w…1 finding

    Why it is in this group

    • The name "value_donation_list" says "list": a word for reading.

    Findings

    • Info

      The description is 2,818 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...l advice; appraisal_may_be_needed is true when the total is over $5,000."

      What this check looks for
    Description, as the server wrote it
    Fair-market values for a whole donation list (clothing, shoes and bags), each item with the Poshmark sales behind it, a list total and a dated method paragraph the donor can keep with their records. One call values up to 100 items and costs one lookup per item. Call it once with the whole list, not once per item. items: a list of objects, one per item. Only description is required. description: what it is, as the donor would say it: "womens handbag", "mens suit", "kids snow pants", "Levi's 501 jeans". Put brand and model in brand or description. brand: optional, e.g. "Coach". With a brand the item is priced from that brand's own sales when enough are saved, else from its category. condition: optional. new_with_tags, used_like_new, used_excellent, used_good, used_fair, a plain word (like new, good, fair), or new or used. Default used, which is right for most donations. category, department, size: optional; read from the description when left out. A kids' size such as "4T" marks the item as kids'. kids_age: optional, for kids' items: "baby" (0-24 months), "toddler" (2T-5T) or "big_kids" (4/5 and up). quantity: optional, default 1. total is value times quantity. source: "poshmark" (US, USD, default) or "poshmark_ca" (Poshmark Canada, CAD). examples_per_item: how many of the sales behind each value to include (0-5, default 2). Each has a title, price, sold date and link. days: only sales from the last N days (1-3650); 365 is the last 12 months. Default: every sale. sold_after, sold_before: only sales sold on or after / on or before these dates (YYYY-MM-DD). Each item gets value (the median sold price), low and high (the 25th and 75th percentiles), p10 and p90 (the 10th and 90th), sales_used, oldest_sold and newest_sold (within the window), matched_on ("brand + item", "item description", "category + department" or "category, all departments"), broadened (true when the value comes from wider sales than the item as described: no brand match, a description reduced to its category, all departments, or the condition group instead of the exact grade), condition_matched (the grade or group the sales are in), by_condition (median and range per grade), a confidence rating and a reason that says why. basis is the older name of matched_on. An item with nothing to go on has value null and a reason; never guess a value for it. The list has total, items_valued, method and disclaimer. This is resale market data, not tax or legal advice; appraisal_may_be_needed is true when the total is over $5,000.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http soldstack https://soldstack.dev/mcp --header 'X-API-Key: <your-x-api-key>'

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__soldstack__value_donation_list"
    ],
    "ask": [
      "mcp__soldstack__sold_comps",
      "mcp__soldstack__buy_or_pass"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as soldstack. Review it before you use it.