
Official MCP RegistryListed
Underpriced AI
Ask what a thrift find sells for. Real eBay sold comps, price range and net after fees.
First seen 2 Oct 2026. Evidence as of 23 Oct 2026.
5
Tools
From an anonymous probe
1
Source listings
Each with its own history
30
Recorded changes
Since first seen
Tools
| Tool | Description | Behaviour |
|---|---|---|
| get_scan_result | For a signed-in user: the finished result for a scan on their account, in the same shape as price_item, once the sold comps have landed in the background. Call it with the account.scanId a photo price returned when that result said comps were still loading (about 20 seconds later), or to re-read any saved scan. | Read-only |
| get_sold_comps | The most recent real eBay sales (sold comps) for a search query (brand, model or pattern, a few specific words), with the count, median and quartiles. Use when the user wants to see what actually sold and for how much. It searches the signed-in user's own eBay marketplace (eBay UK in GBP for a UK seller), eBay US in USD when nobody is signed in, or the site given in marketplace; the result names the site (marketplace) and the currency (currency). One search runs: the query as typed (a retail price with "$" in it is left out), with model or part_number appended only when the query does not already name it; with no query, brand plus model, or brand plus part_number. Sales whose title shows a different item are left out of the count, median and quartiles: comps.matched is how many were kept, comps.dropped how many were left out, and comps.relevanceChecked is false when that check could not run (every sale is then kept). comps.countIsLowerBound true means eBay returned a full page, so the count is that many or more. include words must all appear in a sale's title (and are added to the search when missing); a title with any exclude word is left out; both match whole words in any case and are named in the answer. prefer words leave nothing out: sales whose title has every one are listed first (preferred true) and summarized in comps.preferred, while count and summary still cover every matching sale. Each listed sale has condition, saleType, bids, shipping and location, each null when not known (a sale stored before 22 October 2026 gives condition only as new or used). exclude_items leaves out sales by eBay item number (each listed sale's itemId), before every other filter; comps.removedByItems counts them. limit sets how many recent sales are listed (default 8, up to 50). | Read-only |
| list_on_ebay | For a signed-in user: turns a photo scan from price_item (account.scanId) into an inventory item with a draft eBay listing on their Underpriced AI account (title, list price defaulting to the market price, condition, description) and returns the link where they review and publish it in the app, plus whether eBay is connected and the connect link if not (connecting brings them back to the same item). If the item already has an unpublished eBay draft, it returns that draft unchanged and never overwrites it (draftKept); changes are made in the app. It never publishes anything and only prepares eBay; publishing happens in the app after the user checks the listing, and until then the draft shows on the Sell tab under Not live yet. | Changes data |
| price_item | What a secondhand item sells for on eBay: a calibrated estimate with a range, the recent real eBay sales behind it (sold comps, linked where the source gives a link), three list prices (fast, market, patient) with the 14-day sell chance, what the seller keeps after eBay fees, and a worth-it verdict when you pass what the user would pay. A description price searches the signed-in user's own eBay marketplace (eBay UK in GBP for a UK seller), eBay US in USD when nobody is signed in, or the site given in marketplace; price.currency names the currency. A photo price (photo, a file the user uploaded in the chat, or image_url, a public https link) needs the user signed in through the connector: it runs a real scan on their account, priced in their own eBay marketplace and currency (price.currency). Without sign-in, describe the item; a description works but reads less than a photo. | Changes data |
| worth_it | What the seller keeps after eBay fees and a verdict (worth it / thin / pass) for an expected sale price and what the user would pay. Pure arithmetic in the currency you give it, with eBay US fees: pass the sale price and the cost in the same currency (the one price_item named in price.currency). For a seller on eBay UK, the worthIt block price_item returns already uses their own fees. Use price_item first when the sale price is unknown. | Read-only |
Change history
- price_item: input schema changed (+photo)
- price_item: description changed (+"(photo, a file the user uploaded in the chat, or image_url," -"(image_url,")
- get_sold_comps: input schema changed (+exclude_items, +prefer)
- get_sold_comps: description changed (+"prefer words leave nothing out: sales whose title has every one are listed first (preferred true) and summarized in comps.preferred, while count and summary still cover every matching sale. Each listed sale has condition, saleType, bids, shipping and location, each null when not known (a sale stored before 22 October 2026 gives condition only as new or used). exclude_items leaves out sales by eBay item number (each listed sale's itemId), before every other filter; comps.removedByItems counts them.")
- server instructions changed (+"prefer words to list sales with those words first without leaving any out (their own summary is comps.preferred), exclude_items (eBay item numbers, each sale's itemId) to leave out the user's own earlier sales," +"Each listed sale carries its condition, sale type (auction, Buy It Now or Best Offer), bids, postage and location when eBay gave them; eBay does not give the seller or the quantity sold." -"(title, list price, condition, description as a draft on their account) and returns the link where the user reviews and publishes it in the app; it never publishes by itself. Until they publish, the draft waits in the app on the Sell tab under Not live yet. A description price on a signed-in account also returns account.scanId, an id starting tp_ (account.textPrice is true; nothing goes")
- worth_it: input schema changed
- worth_it: description changed (+"the currency you give it, with eBay US fees: pass the sale price and the cost in the same currency (the one price_item named in price.currency). For a seller on eBay UK, the worthIt block price_item returns already uses their own fees. Use" -"USD; use")
- price_item: input schema changed (+marketplace)
- price_item: description changed (+"A description price searches the signed-in user's own eBay marketplace (eBay UK in GBP for a UK seller)," +"USD when nobody is signed in, or the site given in marketplace; price.currency names the currency." -"Description prices are")
- get_sold_comps: input schema changed (+exclude, +include, +limit, +marketplace)
- get_sold_comps: description changed (+"It searches the signed-in user's own eBay marketplace (eBay UK in GBP for a UK seller), eBay US in USD when nobody is signed in, or the site given in marketplace; the result names the site (marketplace) and the currency (currency)." +"Sales whose title shows a different item are left out of the count, median and quartiles: comps.matched is how many were kept, comps.dropped how many were left out, and comps.relevanceChecked is false when that check could not run (every sale is then kept). comps.countIsLowerBound true means eBay returned a full page, so the count is that many or more. include words must all appear in a sale's title (and are added to the search when missing); a title with any exclude word is left out; both match whole words in any case and are named in the answer. limit sets how many recent sales are listed (default 8, up to 50)." -"US")
- server instructions changed (+"Sales that are a different item are left out before the count and summary; comps.matched is how many were kept and comps.dropped how many were left out. When comps.countIsLowerBound is true, eBay returned a full page: say the count as that number or more, never as the total. When comps.relevanceChecked is false the check for unrelated sales did not run, so tell the user some sales may be a different item. Pass include or exclude words to keep or leave out sales by words in their titles, and limit (up to 50) to list more than 8 recent sales." +"calls search eBay US" +"answer in USD. For a signed-in user, a photo scan, a")
- list_on_ebay: input schema changed
- list_on_ebay: description changed (+"If the item already has an unpublished eBay draft, it returns that draft unchanged and never overwrites it (draftKept); changes are made in the app.")
- price_item: input schema changed (+brand, +model, +part_number, +size)
- get_sold_comps: input schema changed (+brand, +model, +part_number)
- get_sold_comps: description changed (+"One search runs: the query as typed (a retail price with "$" in it is left out), with model or part_number appended only when the query does not already name it; with no query, brand plus model, or brand plus part_number.")
- server instructions changed (+"When you identified the item from a photo you cannot send, also pass what you read on it as fields: brand, model (the model or product-line name), part_number (the manufacturer part number from the label, copied exactly), size and condition. They help identify the item; brand and model are also added to its search when missing, and nothing replaces it. Leave a field empty rather than guess, and leave retail or sticker prices out: they are not sale prices." +"item; a query is searched as you typed it, with model or part_number appended when the query lacks them; with no query, brand plus model (or brand plus part_number) is searched." -"item.")
- MCP URL changed from "https://underpricedai.com/api/mcp" to "https://underpricedai.com/api/mcp/directory" (registry)
- Description changed (registry)
- worth_it: annotations changed
- price_item: annotations changed
- list_on_ebay: annotations changed
- get_sold_comps: annotations changed
- get_scan_result: annotations changed
- buy_credits: annotations changed
- server instructions changed
- buy_credits: input schema changed
- buy_credits: description changed (+"turns on the meter" +"account:" +"for")
- server instructions changed (+"them or turn on the meter (25 cents for each photo pricing, billed monthly: pay per answer with no plan needed, or the top-up past the plan's scans on a plan)." -"them." -"as your own estimate, and do not round or restate the median and quartiles as if you computed them. Use the numbers in the payload; if you work anything out")
| Source | Listing | First seen | Last seen | Versions |
|---|---|---|---|---|
| Official MCP Registry | com.underpricedai/underpriced-ai | 2 Oct 2026 | 23 Oct 2026 | 2 |