Benchlot

For agents and the people who build them

Everything the price guide knows, as JSON and as an MCP server. Free. Attribution required. Nothing for sale here: every listing links to the dealer, forum or seller it came from.

2,088 price-guide pages · 222,697 listings indexed, 66% in the guide, as of 2026-10-21 · data-use policy

MCP server

Streamable HTTP at https://benchlot.com/mcp. Six tools: get_price_guide, search_price_guide, search_listings, get_coverage, identify_tool, create_alert.

Claude Code

claude mcp add --transport http benchlot https://benchlot.com/mcp
# optional, raises the limits:
claude mcp add --transport http benchlot https://benchlot.com/mcp --header "Authorization: Bearer bl_live_…"

Claude Desktop, Cursor, and other clients that take an HTTP URL

{ "mcpServers": { "benchlot": { "type": "http", "url": "https://benchlot.com/mcp" } } }

Clients that only speak stdio

{ "mcpServers": { "benchlot": { "command": "npx", "args": ["-y", "mcp-remote", "https://benchlot.com/mcp"] } } }

REST API

Base URL https://benchlot.com/api/v1. Machine-readable description at openapi.json. Every response is { data, meta, errors }; meta.attribution says what to print.

EndpointWhat
GET /prices?type=&brand=&model=|size=What a tool sells for: sold median and quartiles, asking prices, what is for sale now, with confidence, freshness and coverage.
GET /prices/search?q=Find price-guide pages by free text.
GET /listings?q=&type=&brand=&status=Listings for sale now, or recorded sales. Every row links its source.
GET /listings/{id}One listing.
GET /typesThe tool types the guide knows, with evidence counts.
GET /brands?type=Makers with price-guide pages.
GET /metaCoverage, freshness, sources, thresholds, licensing. Read it first.
POST /identifyIdentify a tool from one to five photos, with the guide band and live listings. 5 scans per 15 minutes without a key, 20 with one.
POST /alertsEmail alert when a tool is newly listed. The address confirms by email.
POST /keysRequest a free key by email.

Example

curl "https://benchlot.com/api/v1/prices?type=bench%20plane&brand=stanley&model=no.%204" | jq '.data | {confidence, sold, guide_url}'

Reading the numbers honestly

  • confidence: high is 20 or more recorded sales, medium 8 to 19, low fewer than 8. Below 8 no sold median is published; do not state one.
  • freshness.last_sale_at and sales_last_365d say how current the evidence is. coverage.sources says where it came from; specialist dealers skew prices up.
  • Asking prices are not selling prices. The two blocks are kept apart on purpose.
  • On listings, price_status: stale means the source does not allow the asking price to be repeated past 24 hours (eBay). Link the listing instead.
  • Breaking changes get a new version prefix. /api/v1 stays stable.

Keys and limits

Everything works without a key: 30 requests a minute per address, and 5 photo identifications per 15 minutes. A key is free, raises those to 120 and 20, and makes your usage attributable so we can help if something breaks. Send it as Authorization: Bearer bl_live_…. We log route, status, latency, key and a salted hash of the IP; never request bodies.

What we ask

Say via Benchlot and link the guide_url or source_url next to any figure or listing you show. Send people to the source, unaltered: no wrapping, no tracking parameters. Don’t mirror the dataset. That is the whole policy.

We cannot see what agents do with the answers, and we do not try to: no redirect tracker, no UTM on seller links. Questions: rob@benchlot.com.