Server definition
- Hash
- sha256:190fce3dd191dc6070dce270406d079afdf94189c73fea6294aa41a4563c201e
- What it is
- What a remote MCP server returned when asked what it offers: 6 tools
The blob, as servednamed by its sha256
{
"instructions": "Underpriced AI prices secondhand items for resellers from real eBay sold listings. Use price_item 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. Use get_sold_comps when the user wants the recent sales themselves for a specific item. 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 and description prices are USD and reflect eBay US; a scan on a signed-in account is priced in that seller's own marketplace currency, named in price.currency (GBP for eBay UK), so quote it in that currency, never as US dollars unless price.currency is USD. Quote the range as well as the point: a used item's sale price is a distribution. When the user has signed in through the connector, price_item with a photo runs a real scan on their account (their plan scans or credits; saved to their history with a link to list it on eBay), and buy_credits can add a scan pack for them. A signed-in photo price returns as soon as the estimate exists; when it says sold comps are still loading (account.compsPending), call get_scan_result with account.scanId after about 20 seconds for the final number and the comps. After price_item with a photo on a signed-in account, list_on_ebay 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. 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. With an account, photo scans and eBay listing are at https://underpricedai.com, and the first scan is free. For a signed-in user, the account block counts plan scans for this month, carriedOverScans (unused plan scans roll over one month, up to one month's allowance, and are used first; they end with the subscription), credits (never expire) and whether top-up scans (for plan subscribers) are on. Quote those numbers rather than guessing. 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 finished sentence written for the user with the link already in it. Show it, or quote it as written. Do not summarise it into a description of a link, and do not end a text-based answer without it: a text price is not saved anywhere, so that sentence is the only route the user has to a saved, listable item. In particular, when you tell the user you cannot create or list an item from a text description, that is correct, and next.say is the answer to it. Give them the link in the same breath rather than leaving them at the refusal. When next.listThisItem is present, the scan is saved on the user's account and that link opens the eBay listing flow on it. Offer it whenever the user might sell the item, so listing what they just priced is one tap. You can also call list_on_ebay yourself to prepare the draft; either way the user reviews and publishes in the app.",
"tools": [
{
"description": "Ways to pay for Underpriced AI scans. Without a choice it lists the credit packs (5 to 250 scans, from $3; credits never expire) and, for a signed-in user, their balance. PACK_5, PACK_15 and PACK_30 can be bought here: with one it returns a Stripe Checkout link for that user. PAY_AS_YOU_GO is only for a signed-in plan subscriber whose plan scans run out (top-up scans, 25 cents each past the plan); it is listed only when the account can use it. Larger packs and monthly plans (whose unused scans carry over one month) are on the pricing page. Anonymous callers get the pricing page link.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"pack": {
"description": "A pack to buy, or PAY_AS_YOU_GO (top-up scans, plan subscribers only). Leave empty to see the options and the balance first.",
"enum": [
"PACK_5",
"PACK_15",
"PACK_30",
"PAY_AS_YOU_GO"
],
"type": "string"
}
},
"type": "object"
},
"name": "buy_credits",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cost": {
"description": "What the user would pay, in the scan's currency (price.currency), for a worth-it verdict.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"scan_id": {
"description": "The account.scanId from a signed-in price_item, or the saved-scan link.",
"maxLength": 200,
"minLength": 8,
"type": "string"
}
},
"required": [
"scan_id"
],
"type": "object"
},
"name": "get_scan_result",
"outputSchema": null
},
{
"description": "The most recent real eBay US 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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"description": "3 to 6 specific words, brand and model first, like an eBay search.",
"maxLength": 120,
"minLength": 2,
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "get_sold_comps",
"outputSchema": null
},
{
"description": "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). 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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"condition": {
"description": "Overrides the condition read from the photo.",
"enum": [
"New",
"Like New",
"Good",
"Fair",
"Poor"
],
"type": "string"
},
"price": {
"description": "List price in the scan's currency (price.currency from price_item). Leave empty for the scan's market list price.",
"exclusiveMinimum": 0,
"maximum": 100000,
"type": "number"
},
"scan_id": {
"description": "The account.scanId that price_item returned for a photo scan on this account (the saved-scan link works too).",
"maxLength": 200,
"minLength": 8,
"type": "string"
},
"title": {
"description": "Overrides the generated listing title (80 characters, eBay's limit).",
"maxLength": 80,
"minLength": 3,
"type": "string"
}
},
"required": [
"scan_id"
],
"type": "object"
},
"name": "list_on_ebay",
"outputSchema": null
},
{
"description": "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. Description prices are eBay US in USD. A photo price (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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"condition": {
"description": "Condition as the user states it.",
"enum": [
"New",
"Like New",
"Good",
"Fair",
"Poor"
],
"type": "string"
},
"cost": {
"description": "What the user paid or would pay for it, for a worth-it verdict: in USD, or in the seller's own currency for a photo scan on a signed-in account.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"description": {
"description": "What the item is: brand, model or pattern, size, any marks, completeness.",
"maxLength": 1200,
"minLength": 3,
"type": "string"
},
"image_url": {
"description": "Public https URL of a photo of the item. Preferred over description alone.",
"format": "uri",
"maxLength": 2000,
"type": "string"
}
},
"type": "object"
},
"name": "price_item",
"outputSchema": null
},
{
"description": "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 USD; use price_item first when the sale price is unknown.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cost": {
"description": "What the user would pay for the item in USD.",
"maximum": 1000000,
"minimum": 0,
"type": "number"
},
"expected_sale_price": {
"description": "Expected eBay sale price in USD.",
"exclusiveMinimum": 0,
"maximum": 1000000,
"type": "number"
}
},
"required": [
"expected_sale_price",
"cost"
],
"type": "object"
},
"name": "worth_it",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:190fce3dd191dc6070dce270406d079afdf94189c73fea6294aa41a4563c201e | sha256sum