# SoldStack

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

- name: io.github.aar-ont/soldstack
- version: 1.1.0
- connection class: R1 (autonomous)
- trust: 80/100 flags: no-repository
- quality: 87/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.aar-ont%2Fsoldstack
- tools: https://api.protogrid.dev/v1/servers/io.github.aar-ont%2Fsoldstack/tools

**An agent can connect on its own if it already holds `X_API_KEY`, `X_API_KEY`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "soldstack": {
      "type": "http",
      "url": "https://soldstack.dev/mcp",
      "headers": {
        "X-API-Key": "${X_API_KEY}",
        "Authorization": "${X_API_KEY}"
      }
    }
  }
}
```

Placeholders to fill: `${X_API_KEY}`, `${X_API_KEY}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 45
- drivers: +website +reachable +uptime-100% +updated-6d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 87/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 2 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 3 of 3 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,159 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 13 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 3, about 2,159 tokens to load them all
- tool set hash: 979f6cb75e038ba64ea04e1f56ee998b
- tools last changed: 2026-10-19T04:36:40.969Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.aar-ont/soldstack.svg)](https://protogrid.dev/servers/io.github.aar-ont/soldstack)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-19 `value_donation_list` added
  - 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'. 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. Each item gets value (the median sold price), low and high (the 25th and 75th percentiles), sales_used, basis ("brand + item", or "category + department + condition" or "category + condition" when there is no brand match), a confidence rating and a reason. 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.
- 2026-10-16 `buy_or_pass` changed (title, annotations)
- 2026-10-16 `sold_comps` changed (title, annotations)
- 2026-10-15 `buy_or_pass` changed (description)
  - before: 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).
  - after: 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).
- 2026-10-15 `sold_comps` changed (description)
  - before: 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", 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). limit: how many individual sales to include (0-50). 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. category: comma-separated Poshmark categories, e.g. "Jeans". include_removed: true also returns removed_items, the sales cleaning dropped, each with a removed_reason. deep: true reads up to ~190 recent sales instead of 48 (slower when not cached, about 10s; one lookup). source: "poshmark" (US, default) or "poshmark_ca" (Poshmark Canada; prices and fees in CAD).
  - after: 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. category: comma-separated Poshmark categories, e.g. "Jeans". 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).
- 2026-10-13 `sold_comps` changed (description, inputSchema)
  - before: 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", 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). limit: how many individual sales to include (0-50). deep: true reads up to ~190 recent sales instead of 48 (slower when not cached, about 10s; one lookup). source: "poshmark" (US, default) or "poshmark_ca" (Poshmark Canada; prices and fees in CAD).
  - after: 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", 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). limit: how many individual sales to include (0-50). 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. category: comma-separated Poshmark categories, e.g. "Jeans". include_removed: true also returns removed_items, the sales cleaning dropped, each with a removed_reason. deep: true reads up to ~190 recent sales instead of 48 (slower when not cached, about 10s; one lookup). source: "poshmark" (US, default) or "poshmark_ca" (Poshmark Canada; prices and fees in CAD).
- 2026-10-13 `buy_or_pass` changed (description)
  - before: 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" (the only live marketplace today).
  - after: 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).
- 2026-10-13 `sold_comps` changed (description)
  - before: 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", 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). limit: how many individual sales to include (0-50). deep: true reads up to ~190 recent sales instead of 48 (slower when not cached, about 10s; one lookup). source: "poshmark" (the only live marketplace today).
  - after: 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", 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). limit: how many individual sales to include (0-50). deep: true reads up to ~190 recent sales instead of 48 (slower when not cached, about 10s; one lookup). source: "poshmark" (US, default) or "poshmark_ca" (Poshmark Canada; prices and fees in CAD).
- 2026-10-12 `sold_comps` changed (description, inputSchema)
  - before: 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". size: only this size, e.g. "8", "M" or "10.5". condition: "new", "used", 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). limit: how many individual sales to include (0-50). source: "poshmark" (the only live marketplace today).
  - after: 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", 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). limit: how many individual sales to include (0-50). deep: true reads up to ~190 recent sales instead of 48 (slower when not cached, about 10s; one lookup). source: "poshmark" (the only live marketplace today).
- 2026-10-11 `buy_or_pass` changed (description)
  - before: 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. 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" (the only live marketplace today).
  - after: 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" (the only live marketplace today).

Full history: https://api.protogrid.dev/v1/servers/io.github.aar-ont%2Fsoldstack/changes

## Remotes

- https://soldstack.dev/mcp (streamable-http, auth api_key ${X_API_KEY}, reachable true, uptime30d 1)

## Packages

_none_

## Tools (3)

- `buy_or_pass`: 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).
        
- `sold_comps`: 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.
        category: comma-separated Poshmark categories, e.g. "Jeans".
        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).
        
- `value_donation_list`: 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'.
            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.

        Each item gets value (the median sold price), low and high (the 25th and 75th percentiles), sales_used, basis
        ("brand + item", or "category + department + condition" or "category + condition" when there is no brand
        match), a confidence rating and a reason. 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.
        
