Espresso gear price history: live Amazon prices, 2+ years of daily data, BUY calls at verified lows.
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.
Full detail for one product by slug: community sentiment, reference price and basis, date of the latest price observation, portafilter size (machines) or accessory size (sized accessories), superautomatic / manual-lever / hand-grinder flags, product URL and Amazon link. A known product with no price returns price null, the reason, and priced alternatives. An unknown slug returns did_you_mean.
A slug from search_catalog (products or known_unpriced).
Full detail for one product by slug: community sentiment, reference price and basis, date of the latest price observation, portafilter size (machines) or accessory size (sized accessories), superautomatic / manual-lever / hand-grinder flags, product URL and Amazon link. A known product with no price returns price null, the reason, and priced alternatives. An unknown slug returns did_you_mean.
| Argument | Type | Description |
|---|---|---|
| slug* | string | A slug from search_catalog (products or known_unpriced). |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "A slug from search_catalog (products or known_unpriced)."
}
}
}The slots an espresso setup is built from (machine, grinder, scale, tamper…), with what each is for. Use the ids as search_catalog's `slot`.
No arguments.
{
"type": "object",
"properties": {}
}Search the espresso gear this site tracks. `products` have a live Amazon price and, when at a genuine low, a BUY call computed from their own price history; otherwise no call. Filter by slot (the role a product plays in a setup), free-text words (brand and model names, partial words and small typos are fine), a price band, a brand, or on-sale only. Products we know but cannot price (sold direct by the maker, e.g. Niche, Lelit, Decent) come back in `known_unpriced` with no price and the reason: say so, quote the note, and link the url. When nothing in `products` matches, `alternatives` lists the closest tracked products with live prices and `note` says what was and was not found. Never tell the user the site has nothing; tell them what it has.
| Argument | Type | Description |
|---|---|---|
| slot | string | Restrict to one slot. Omit to search every slot. |
| brand | string | Only this brand (case-insensitive; "Niche Coffee" finds Niche). |
| limit | integer | Max results. Default 12. |
| query | string | Free-text words to match (any word matches; names and brands rank first), e.g. "niche", "bambino plus", "hand burr", "dual boiler". |
| max_price | number | Only products at or under this USD price. |
| min_price | number | Only products at or over this USD price. |
Email the user when a product is at a good price (a verified low), or at or under a target price they name. Use after search_catalog/get_product when the user wants to be told when to buy. Ask the user for their email; never invent or reuse one. One watch per email per product; calling again updates the target. The first time an address is used it receives a confirmation email and the watch arms when they click it — tell the user to check their inbox. Each alert links to the product page and carries an unsubscribe link.
| Argument | Type | Description |
|---|---|---|
| slug* | string | A slug from search_catalog or get_product. |
| email* | string | The user's email address, given by the user in this conversation. |
| target_price | number | Optional USD price to alert at or under. Omit to alert on the next verified low. |
{
"type": "object",
"required": [
"email",
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "A slug from search_catalog or get_product."
},
"email": {
"type": "string",
"description": "The user's email address, given by the user in this conversation."
},
"target_price": {
"type": "number",
"description": "Optional USD price to alert at or under. Omit to alert on the next verified low."
}
}
}| on_sale_only |
| boolean |
| Only products at a good price today (verdict = buy). |
{
"type": "object",
"properties": {
"slot": {
"enum": [
"machine",
"grinder",
"scale",
"tamper",
"water",
"cleaning",
"pitcher",
"wdt",
"funnel",
"puckscreen",
"basket",
"knockbox",
"mat"
],
"type": "string",
"description": "Restrict to one slot. Omit to search every slot."
},
"brand": {
"type": "string",
"description": "Only this brand (case-insensitive; \"Niche Coffee\" finds Niche)."
},
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "Max results. Default 12."
},
"query": {
"type": "string",
"description": "Free-text words to match (any word matches; names and brands rank first), e.g. \"niche\", \"bambino plus\", \"hand burr\", \"dual boiler\"."
},
"max_price": {
"type": "number",
"description": "Only products at or under this USD price."
},
"min_price": {
"type": "number",
"description": "Only products at or over this USD price."
},
"on_sale_only": {
"type": "boolean",
"description": "Only products at a good price today (verdict = buy)."
}
}
}