Espresso Steals
Server Details
Espresso gear price history: live Amazon prices, 2+ years of daily data, BUY calls at verified lows.
- Status
- Healthy
- Uptime
- 100.0% over 19 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
Each tool targets a distinct operation: get_product fetches a single product by slug, list_slots enumerates setup roles, search_catalog does filtered discovery, and watch_price subscribes to alerts. The boundaries are clear, with get_product (single-item lookup) and search_catalog (filtered query) cleanly separated by input style and purpose.
All four tools follow a strict verb_noun snake_case pattern: get_product, list_slots, search_catalog, watch_price. There are no deviations or mixed conventions.
Four tools is a tight, well-scoped set for a focused espresso price-tracking site, and each earns its place. It sits at the lean end, but no tool feels redundant or trivial.
The surface covers the core workflow: discover slots, search catalog, inspect a product, and set a price watch, including graceful handling of unpriced and unknown items. Minor gaps exist (e.g. no comparison or browsing of top deals), but nothing blocks typical agent tasks.
Available Tools
4 toolsget_productProduct price history and callARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | A slug from search_catalog (products or known_unpriced). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld=false, so the safety profile is covered. The description adds real behavioral value by disclosing edge cases: a known product with no price returns price null plus the reason and priced alternatives, and an unknown slug returns did_you_mean.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense but well-formed sentences, front-loaded with the primary purpose and followed by error semantics. No filler, though the field list is somewhat terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by enumerating returned fields and both error paths. The only meaningful gap is missing sibling/alternative routing, which an agent would otherwise have to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the slug field is fully documented in the schema as coming from search_catalog. The description only restates 'by slug' without adding format or syntax detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (full detail for one product by slug) and enumerates the exact fields returned, so the agent knows precisely what it gets. It does not, however, explicitly differentiate itself from siblings like search_catalog or watch_price, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description contains no when-to-use, when-not-to-use, or alternative routing guidance; it never tells the agent to prefer search_catalog for discovery or watch_price for monitoring. Usage is only implied by the field enumeration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_slotsParts of an espresso setupARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world. The description adds that each slot includes 'what each is for', clarifying the return content, but does not cover pagination, format, or any edge behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource definition and followed by the actionable usage note. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool with rich annotations and no output schema, the description covers what is returned and how to use it. It could specify the return structure (e.g., list of objects with id and description) but is otherwise sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline of 4 applies. The description references search_catalog's `slot` parameter, which is useful context for the agent's next call but not a description of this tool's own inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (espresso setup slots) and its scope (machine, grinder, scale, tamper…) with what each is for. It implies a list operation and links to search_catalog's `slot` parameter, but does not explicitly state the verb or distinguish itself from siblings like get_product or watch_price beyond that link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It instructs the agent to use the returned ids as search_catalog's `slot`, giving a clear primary use case. It offers no explicit exclusions or comparisons to sibling tools, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_catalogSearch the espresso catalogARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No | Restrict to one slot. Omit to search every slot. | |
| brand | No | Only this brand (case-insensitive; "Niche Coffee" finds Niche). | |
| limit | No | Max results. Default 12. | |
| query | No | Free-text words to match (any word matches; names and brands rank first), e.g. "niche", "bambino plus", "hand burr", "dual boiler". | |
| max_price | No | Only products at or under this USD price. | |
| min_price | No | Only products at or over this USD price. | |
| on_sale_only | No | Only products at a good price today (verdict = buy). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is low, yet the description adds substantial undisclosed behavior: the BUY call is derived from the product's own price history (so a null call is meaningful, not a failure), unpriced-but-known products land in `known_unpriced` with a reason, and `alternatives`/`note` backfill empty results. That is real operational context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool searches and what it returns, then moves to filters and fallback behavior; every sentence carries weight. It is on the long side and the response-handling instruction ("say so, quote the note, and link the url") is arguably prompt guidance rather than tool semantics, but nothing is redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return shape and it does: `products` with price/BUY call, `known_unpriced` with reason, `alternatives` with `note`. For a seven-parameter, zero-required search tool this is complete enough to call and interpret correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: `slot` is defined as "the role a product plays in a setup," and `query` is characterized as tolerant free text ("partial words and small typos are fine") rather than exact matching. It loosely references the price band and brand filters, though it does not add anything about `limit` or the price bounds beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search the espresso gear this site tracks") plus the scope of the catalog, and immediately contrasts the two result shapes (live Amazon price with a computed BUY call vs. products with no call). An agent can tell this is a fuzzy multi-filter search tool, distinct from get_product, list_slots, and watch_price, without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete guidance on filter combinations (slot, free text, price band, brand, on-sale) and strong directive handling for edge outcomes: quote the `known_unpriced` note and link the url, use `alternatives` when `products` is empty, and never tell the user the site has nothing. What is missing is explicit routing versus the siblings (e.g. when to prefer get_product for a single item or watch_price to track one).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_priceWatch a price by emailAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | A slug from search_catalog or get_product. | |
| Yes | The user's email address, given by the user in this conversation. | ||
| target_price | No | Optional USD price to alert at or under. Omit to alert on the next verified low. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (not read-only, idempotent, non-destructive), and the description goes well beyond them: one watch per email per product, re-calling updates the target, a double opt-in confirmation flow before the watch arms, and alert contents including product link and unsubscribe. This is exactly the operational context an agent needs before promising the user anything.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and trigger conditions, and nearly every sentence carries a distinct behavioral fact. It is slightly dense at five sentences, with the alert-contents sentence being the least essential, but nothing is redundant or circular.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must carry the return behavior — and it does, describing when emails arrive, what they contain, and when the watch becomes active. Combined with full schema coverage and annotations, an agent has everything needed to call this correctly and set user expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds genuine meaning on top: the email must come from the user in-conversation and must never be invented or reused, and it clarifies the target-price-vs-default-low behavior, which complements the optional target_price parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (email the user) and resource (price watch on a product), and defines the two trigger conditions: a verified low or a user-named target price. It also names the sibling tools it follows, so the agent can place it in the workflow without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use after search_catalog/get_product when the user wants to be told when to buy,' which gives both sequencing and intent. It further specifies what to ask the user for (email) and the prohibition on inventing or reusing addresses, which is real usage guidance, not just description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
get_product1 field changed- changed
Input schema / properties / slug / descriptionPrevious value: -"A slug from search_catalog."New value: +"A slug from search_catalog (products or known_unpriced)."
- Changed
search_catalog2 fields changed- changed
Input schema / properties / brand / descriptionPrevious value: -"Only this brand (case-insensitive)."New value: +"Only this brand (case-insensitive; \"Niche Coffee\" finds Niche)." - changed
Input schema / properties / query / descriptionPrevious value: -"Free-text words to match (any word matches), e.g. \"hand burr\", \"lever\", \"dual boiler\"."New value: +"Free-text words to match (any word matches; names and brands rank first), e.g. \"niche\", \"bambino plus\", \"hand burr\", \"dual boiler\"."
4 tool updates
- First observed
get_product - First observed
list_slots - First observed
search_catalog - First observed
watch_price
Related MCP Connectors
Specialty coffee roaster prices, stock, price/100g, change events and store profiles (30 roasters).
AliExpress price history in USD and real price drops, verified against our own price history.
Live UK golf equipment prices: retailer offers, price history and deal ratings in GBP.
Price comparison across partner retailers. Read-only, 90-day history, disclosed affiliate.
Related MCP Servers
- AlicenseAqualityAmaintenanceLive Amazon marketplace data for AI agents: product details, prices, reviews, keyword search, best-sellers, deals, offers and stock, and seller profiles across 20 marketplaces.12MIT
- FlicenseNot gradedqualityCmaintenanceMonitors and analyzes product prices across major e-commerce platforms (Taobao, JD, PDD, 1688, Amazon) with tools for price alerts, competitor comparison, market trends, and deal detection.-

Easyparserofficial
AlicenseAqualityBmaintenanceReal-time, structured Amazon data for AI agents across 21 marketplaces: product details, seller offers, search results, 12-month sales history, Best Sellers Rank, package dimensions, and seller intelligence. 16 tools including free bulk-job monitoring and account usage tracking, available as a hosted endpoint or via npx.1713 npmMIT
idealo MCP Serverofficial
AlicenseNot gradedqualityFmaintenanceEnables product search, price comparison, and price history analysis across 6 European marketplaces (DE, AT, GB, FR, IT, ES).19MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.