Skip to content

Underpriced AI

by underpricedai.com · remote · no sign-in to list tools · v1.3.0 · published by com.underpricedai

Ask what a thrift find sells for. Real eBay sold comps, price range and net after fees.

Changes · 3

5 tools: 3 change things and 2 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http underpriced-ai https://underpricedai.com/api/mcp/directory

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "list_on_ebay" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "list_on_ebay" says "list": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

5 tools

Changes things 3Claude Code: ask
  • list_on_ebayFor 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 defaul…1 finding

    Why it is in this group

    • The name "list_on_ebay" says "list": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "list_on_ebay" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "list_on_ebay" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Prepare an eBay listing
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • price_itemWhat 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 pr…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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 (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.

    Annotations the server declares

    • title: Price an item
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • worth_itWhat the seller keeps after eBay fees and a verdict (worth it / thin / pass) for an expected sale price and what the user would pay.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote 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.

    Annotations the server declares

    • title: Worth buying at this cost?
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 2Claude Code: allow
  • get_scan_resultFor 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.No findings

    Why it is in this group

    • The name "get_scan_result" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Fetch a saved scan's result
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_sold_compsThe 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.No findings

    Why it is in this group

    • The name "get_sold_comps" says "get": a word for reading.
    Description, as the server wrote it
    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. limit sets how many recent sales are listed (default 8, up to 50).

    Annotations the server declares

    • title: Recent eBay sold comps
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.3.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http underpriced-ai https://underpricedai.com/api/mcp/directory

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__underpriced-ai__get_sold_comps",
      "mcp__underpriced-ai__get_scan_result"
    ],
    "ask": [
      "mcp__underpriced-ai__price_item",
      "mcp__underpriced-ai__worth_it",
      "mcp__underpriced-ai__list_on_ebay"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as underpriced-ai. Review it before you use it.