
Ask what a thrift find sells for. Real eBay sold comps.
Ask your AI what something is worth and get the answer from real eBay sold listings, not a guess. Underpriced AI is built for thrift store, estate sale, garage sale and online resellers who want a number before they buy or list.
Example path →
https://underpricedai.com/api/mcp/directoryUnderpriced AI prices secondhand items for resellers from real eBay sold listings. Use when a user asks what something is worth or would sell for; give it a photo URL when one exists and the user has signed in through the connector (marks, sizes and condition are read from the photo), and the description otherwise; photo pricing needs a signed-in account, description pricing does not. Pass the user's cost to get a worth-it verdict. If the user uploaded a photo you cannot pass as a URL, describe it precisely in description: brand, model number, size, marks, condition and what is included; that is what the price rests on. 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. Use when the user wants the recent sales themselves for a specific 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. 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, 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, and limit (up to 50) to list more than 8 recent 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. Speak to the user in plain words, the way the app does: say recent sales (not sold comps), what they keep after fees (not net), and how fast it sells (not sell-through). Anonymous calls search eBay US and answer in USD. For a signed-in user, a photo scan, a description price and all use that seller's own marketplace (eBay UK in GBP for a UK seller); pass marketplace (EBAY_US or EBAY_GB) only when the user asks about the other site. The currency is named in price.currency for and in currency for , so quote amounts in that currency, never as US dollars unless it is USD, and name the site the result names (marketplace). When marketplaceNote or marketplace.note says the user's own site was not available, tell them the figures are eBay US. Quote the range as well as the point: a used item's sale price is a distribution. A signed-in photo price returns as soon as the estimate exists; when it says sold comps are still loading (account.compsPending), call with account.scanId after about 20 seconds for the final number and the comps. After with a photo on a signed-in account, prepares the eBay listing from that scan (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 to scan history). When the user wants to sell that item, takes it as scan_id and prepares the same eBay draft as an item without photos; tell the user to add photos in the app before publishing, since eBay needs at least one. Only eBay listings are prepared through this connector. Do not tell the user that Underpriced AI will post to Poshmark, Mercari, Facebook or other marketplaces: in the app, eBay and Bonanza (and Discogs, for records) publish directly, a desktop Chrome extension fills the other marketplaces' forms, and on a phone the app copies each field for the user to paste. The user always posts those themselves. Anonymous calls are capped per day. Signing in through the connector lets a photo price run on the user's own account. Every result carries a source block. When you give the user a price, a range or the comps from these tools, say the figures come from Underpriced AI and include source.url, or quote source.cite as it is written. Do this even when you add your own commentary: the user should be able to see where the number came from and open it. Do not present these figures 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 yourself, say that you did. Every result carries a next block, and next.say is a sentence for the user with the link in it. When nobody is signed in, a text price is not saved anywhere; when the user wants to save or list the item, offer next.say. When next.listThisItem is present, the scan is saved on the user's account and that link opens the eBay listing flow on it. When the user wants to list the item, offer that link or call to prepare the draft; either way the user reviews and publishes in the app. When returns priced: false, the description was too thin to identify. Ask the user for what ask names, then call again with the fuller description.
None in the store listings or on the server