Live listings, sold prices and resale scores from GovAuctions.app, the public surplus-auction site.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
This key's usage for the current month: total calls and the separate valuation allowance (which comps, sold history, trend and flip-score draw down), plus the reset date. Call it to pace a long run instead of hitting a 429 mid-task. Every other signed-in tool result already carries the same numbers in `_meta.usage`, so this is rarely needed. Free: it does not count against either allowance. Requires sign-in or an API key.
This tool takes no arguments.
This key's usage for the current month: total calls and the separate valuation allowance (which comps, sold history, trend and flip-score draw down), plus the reset date. Call it to pace a long run instead of hitting a 429 mid-task. Every other signed-in tool result already carries the same numbers in `_meta.usage`, so this is rarely needed. Free: it does not count against either allowance. Requires sign-in or an API key.
No arguments.
{
"type": "object",
"properties": {}
}How much sold-price data we hold per category for a market, and which categories can never be priced. Check this before building on the comps tools — it is the honest answer about what we cannot do. Works signed out.
| Argument | Type | Description |
|---|---|---|
| country | string |
{
"type": "object",
"properties": {
"country": {
"enum": [
"US",
"UK",
"CA",
"AU",
"DE",
"FR"
],
"type": "string",
"default": "US"
}
}
}GovAuctions Flip Score resale signal for one live lot, from any source, in any market with sold-price comps (valued against that market's comp archive): estimated value, effective bid, discount, and the link to the lot on its source site. Pass the lot id as it appears in a govauctions.app lot URL. Requires sign-in or an API key.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}Get one live GSA listing by its id (facts only). Works signed out.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}Month-by-month median sale price for an item, plus the first-to-last change — 'is this category softening?'. Computed from the same comps as get_sold_comps, so it never contradicts that range. Returns an empty series when too few months clear the sample threshold. Requires sign-in or an API key.
| Argument | Type | Description |
|---|---|---|
| q* | string | Item description, e.g. 'forklift' |
| state | string | Optional 2-letter state/region code. |
| country | string | |
| category | string |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Item description, e.g. 'forklift'"
},
"state": {
"type": "string",
"description": "Optional 2-letter state/region code."
},
"country": {
"enum": [
"US",
"UK",
"CA",
"AU",
"DE",
"FR"
],
"type": "string",
"default": "US"
},
"category": {
"type": "string"
}
}
}Sold-price comps for a described item, computed across the full government-surplus market in any market listed in `country`. Signed out: coverage (how many comparable sales, confidence, a coarse price band) plus `categoryStats`, the 25th/median/75th percentile of every sale in the item's category (in `state` when it has enough sales). Signed in or with an API key: the 25th/median/75th percentile for this item itself. `liveListingsUrl` links to the live auctions for the same item. A miss says which kind it is: reason `insufficient_comps` (too few comparable sales yet) is worth retrying, reason `category_not_priceable` (real-estate) never is — that category cannot be priced from a title. A catch-all `category` such as `miscellaneous` is not refused: it is dropped and the item is priced on its title alone, with `requestedCategory` and `categoryDropped` echoed back — check the resolved `category` and `confidence` before trusting the range. A miss can still carry `categoryStats` when the item's category is clear, and `retryHint` when the query was a long listing title: retry with just the brand and model.
| Argument | Type | Description |
|---|---|---|
| q* | string | Item description, e.g. '2015 Ford F-150' |
| limit | integer | How many underlying sales to return with include=comps. Capped by plan. |
| state | string | Optional 2-letter state/region code for a regional range. Falls back to the national range when that state has too few sales; the response's `scope` field says which you got. |
| country | string | |
get_sold_comps for a list of items in one call. Each query is either a string ('2015 Ford F-150') or an object with its own q/category/country/state. Each item costs one valuation lookup, exactly as if sent alone; an item that comes back without a range is not charged. If the monthly allowance runs out part-way, the items already priced are returned and `batch.truncated` names the rest. Batch size is capped by plan (10 on the free allowance). Requires sign-in or an API key.
| Argument | Type | Description |
|---|---|---|
| state | string | Default 2-letter state/region code for every query. |
| country | string | Default market for every query. |
| queries* | array |
{
"type": "object",
"required": [
"queries"
],
"properties": {
"state": {
"type": "string",
"description": "Default 2-letter state/region code for every query."
},
"country": {
"enum": [
"US",
"UK",
"CA",
"AU",
"DE",
"FR"
],
"type": "string",
"default": "US",
"description": "Default market for every query."
},
"queries": {
"type": "array",
"items": {
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string"
},
"state": {
"type": "string"
},
"country": {
"enum": [
"US",
"UK",
"CA",
"AU",
"DE",
"FR"
],
"type": "string"
},
"category": {
"type": "string"
}
}
}
]
},
"maxItems": 100,
"minItems": 1
}
}
}The individual archived sales behind an item: title, final price, sale month and state, plus the range they produce. Use when you want the evidence rather than just the number. Query-anchored — describe an item; there is no way to list the archive. Requires sign-in or an API key.
| Argument | Type | Description |
|---|---|---|
| q* | string | Item description, e.g. '2015 Ford F-150' |
| limit | integer | How many sales to return. Capped by plan. |
| state | string | Optional 2-letter state/region code. |
| country | string | |
| category | string |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Item description, e.g. '2015 Ford F-150'"
},
"limit": {
"type": "integer",
"description": "How many sales to return. Capped by plan."
},
"state": {
"type": "string",
"description": "Optional 2-letter state/region code."
},
"country": {
"enum": [
"US",
"UK",
"CA",
"AU"
],
"type": "string",
"default": "US"
},
"category": {
"type": "string"
}
}
}Search live GSA federal-surplus auction listings (facts only — no images). Filter by state, category, keyword, price, or distance from a US ZIP code. Works signed out (up to 25 rows per page). Raw listings cover sanctioned federal sources; sold-price comps span the full market.
| Argument | Type | Description |
|---|---|---|
| q | string | Title keyword |
| zip | string | US 5-digit ZIP to search around. Limits results to lots within radiusMiles, orders them nearest-first, and adds distanceMiles to each. |
| sort | string | Result order. Default is soonest-ending (nearest-first when `zip` is given). Use `newest` to order by the lot's own listing date, newest first - that is the ordering a recurring "what is new" check needs, because under the default a brand-new lot can sit anywhere in the results. |
| limit | integer | Rows per page. Signed out, capped at 25. |
| state | string | 2-letter state code |
| offset | integer | |
| source | string | |
| country | string | |
| include |
| string |
| Set to "comps" to also return the individual sales the range was computed from (title, final price, sale month, state). Requires a key; the number returned is capped by plan. Not served for EU markets (DE, FR, NL, PL): the range is returned with `compsWithheld: true`. |
| category | string |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Item description, e.g. '2015 Ford F-150'"
},
"limit": {
"type": "integer",
"description": "How many underlying sales to return with include=comps. Capped by plan."
},
"state": {
"type": "string",
"description": "Optional 2-letter state/region code for a regional range. Falls back to the national range when that state has too few sales; the response's `scope` field says which you got."
},
"country": {
"enum": [
"US",
"UK",
"CA",
"AU",
"DE",
"FR"
],
"type": "string",
"default": "US"
},
"include": {
"type": "string",
"description": "Set to \"comps\" to also return the individual sales the range was computed from (title, final price, sale month, state). Requires a key; the number returned is capped by plan. Not served for EU markets (DE, FR, NL, PL): the range is returned with `compsWithheld: true`."
},
"category": {
"type": "string"
}
}
}| category |
| string |
| priceMax | number |
| priceMin | number |
| radiusMiles | number | Radius from `zip`, in miles (default 100, max 500). Requires `zip`. |
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Title keyword"
},
"zip": {
"type": "string",
"description": "US 5-digit ZIP to search around. Limits results to lots within radiusMiles, orders them nearest-first, and adds distanceMiles to each."
},
"sort": {
"enum": [
"ending-soonest",
"newest"
],
"type": "string",
"description": "Result order. Default is soonest-ending (nearest-first when `zip` is given). Use `newest` to order by the lot's own listing date, newest first - that is the ordering a recurring \"what is new\" check needs, because under the default a brand-new lot can sit anywhere in the results."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"description": "Rows per page. Signed out, capped at 25."
},
"state": {
"type": "string",
"description": "2-letter state code"
},
"offset": {
"type": "integer",
"default": 0
},
"source": {
"enum": [
"gsa"
],
"type": "string",
"default": "gsa"
},
"country": {
"enum": [
"US"
],
"type": "string",
"default": "US"
},
"category": {
"type": "string"
},
"priceMax": {
"type": "number"
},
"priceMin": {
"type": "number"
},
"radiusMiles": {
"type": "number",
"default": 100,
"maximum": 500,
"description": "Radius from `zip`, in miles (default 100, max 500). Requires `zip`."
}
}
}