Underpriced AI

Real eBay sold prices by photo or description. Signed-in photo scans: your currency and eBay drafts.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
97%
Naming quality
90%
Poisoning risk
60%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • HIGHTool poisoning patterns detected
  • LOWTool description contains role marker that could confuse chat modelsin get_scan_result
  • LOWTool description contains role marker that could confuse chat modelsin list_on_ebay

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,525Tokens (tool definitions)
~1.4 KBTypical response size
Moderate attention impact (1.19% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "underpriced-ai": {
      "url": "https://underpricedai.com/api/mcp"
    }
  }
}

Remote endpoints

https://underpricedai.com/api/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢price_item(description, image_url, condition, cost)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "description": {
      "description": "What the item is: brand, model or pattern, size, any marks, completeness.",
      "type": "string",
      "minLength": 3,
      "maxLength": 1200
    },
    "image_url": {
      "description": "Public https URL of a photo of the item. Preferred over description alone.",
      "type": "string",
      "maxLength": 2000,
      "format": "uri"
    },
    "condition": {
      "description": "Condition as the user states it.",
      "type": "string",
      "enum": [
        "New",
        "Like New",
        "Good",
        "Fair",
        "Poor"
      ]
    },
    "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.",
      "type": "number",
      "minimum": 0,
      "maximum": 100000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_sold_comps(query)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120,
      "description": "3 to 6 specific words, brand and model first, like an eBay search."
    }
  },
  "required": [
    "query"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢worth_it(expected_sale_price, cost)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "expected_sale_price": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 1000000,
      "description": "Expected eBay sale price in USD."
    },
    "cost": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000,
      "description": "What the user would pay for the item in USD."
    }
  },
  "required": [
    "expected_sale_price",
    "cost"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢buy_credits(pack)

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.

Input Schema

{
  "type": "object",
  "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.",
      "type": "string",
      "enum": [
        "PACK_5",
        "PACK_15",
        "PACK_30",
        "PAY_AS_YOU_GO"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_scan_result(scan_id, cost)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "scan_id": {
      "type": "string",
      "minLength": 8,
      "maxLength": 200,
      "description": "The account.scanId from a signed-in price_item, or the saved-scan link."
    },
    "cost": {
      "description": "What the user would pay, in the scan's currency (price.currency), for a worth-it verdict.",
      "type": "number",
      "minimum": 0,
      "maximum": 100000
    }
  },
  "required": [
    "scan_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡list_on_ebay(scan_id, price, condition, title)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "scan_id": {
      "type": "string",
      "minLength": 8,
      "maxLength": 200,
      "description": "The account.scanId that price_item returned for a photo scan on this account (the saved-scan link works too)."
    },
    "price": {
      "description": "List price in the scan's currency (price.currency from price_item). Leave empty for the scan's market list price.",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "condition": {
      "description": "Overrides the condition read from the photo.",
      "type": "string",
      "enum": [
        "New",
        "Like New",
        "Good",
        "Fair",
        "Poor"
      ]
    },
    "title": {
      "description": "Overrides the generated listing title (80 characters, eBay's limit).",
      "type": "string",
      "minLength": 3,
      "maxLength": 80
    }
  },
  "required": [
    "scan_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools