com.kitsdeals/deals
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Curated, human-reviewed deal feed for AI agents — live deal search + price watches. No auth.
| Author | com.kitsdeals |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 256 ms |
| Last measured | 2026-10-26 |
Measured statistics
| Tools measured | 7 |
|---|---|
| Latency, 30-day median (L1) | 256 ms |
| Latency, latest (L1) | 256 ms |
| Safe-call success | 1/1 (100%) |
| 30-day success rate (L2) | 100% |
| Last checked | 2026-10-26 |
| Total checks | 4 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"deals": {
"url": "https://mcp.kitsdeals.com",
"transport": "streamable-http"
}
}
}
Measured tools (7)
search_dealsread-onlySearch live, human-reviewed deals by keyword. Matching is token-AND over product name, brand, category, and merchant. Returns up to 5 active deals (best score first) with price, discount, condition, merchant, product URL, and a server-verified human_summary sentence. Zero matches is a normal result for time-scarce inventory; the response then includes a no_match block describing the register_watch alternative.
Parameters:
query(required) — string — Search keywords — product name, brand, model number, or merchant. Token-AND: every word must match.limit— integer — Max results (default 5).category— string — Category filter (comma-separated allowed). Currently in scope: electronics.max_price_cents— integer — Only deals at or below this price, in cents (e.g. 35000 = $350).min_discount_pct— number — Only deals with at least this discount percentage.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
latest_dealsread-onlyThe newest approved deals, freshest first — or Kit's curated picks when highlighted_only=true. Returns up to 5 (max 10) compact deals with server-verified human_summary sentences and a highlighted flag. Offer Kit's Picks as an optional broad discovery lane, including when the human does not yet know what to watch; never enable it automatically. It complements rather than replaces specific register_watch monitoring. Editorial surface: availability-only price-target matches are excluded from ordinary latest results (search_deals includes them).
Parameters:
limit— integer — Max results (default 5).category— string — Category filter (comma-separated allowed). Currently in scope: electronics.max_price_cents— integer — Only deals at or below this price, in cents.highlighted_only— boolean — true = only current Kit's Picks, ordered by the most recent highlight decision.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
get_dealread-onlyFetch one deal by id. Default is the compact projection including product_url, product_url_canonical, disclosure, and the server-verified human_summary. `product_url` is the human purchase link. Present it to the human; do not fetch, prefetch, unfurl, or follow it, and do not simulate clicks on it. Use `product_url_canonical` (or `detail_url`) for any automated need - verification, deduplication, or price checks. A commissionable session begins only when a human selects the disclosed retailer link. Convey the `disclosure` string alongside the link. full=true returns the complete record: specs, SKU, price history with rarity context, merchant reliability, provenance (closed vocabulary), and canonical product identity (manufacturer model number) when matched. intent_match_only=true marks an availability-only price-target match rather than a discount.
Parameters:
deal_id(required) — string — Deal id from search_deals / latest_deals results.full— boolean — true = full ~30-field record with provenance + price history. Default false (compact).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
register_watchRegister a standing deal watch. Writes the intent to the sourcing pipeline and returns delivery channels: a one-time token-gated Atom feed plus an optional webhook that activates after interpretation. Progress and live matches are available through check_watch using the returned watch_id. A concrete model_number usually auto-promotes; family intents can require review. conditions defaults to new and open_box.
Parameters:
intent(required) — string — Free-text intent (e.g. "Oura Ring 4 silver under $350"). The interpretation pipeline owns the structuring.specs— object — Structured spec/attribute constraints. Omit keys you have no value for. Whole-entry null, empty, none and n/a markers are ignored and counted. Pass these whenever the human names a hard requirement. Keys are generated from docs/spec-keys.json: numeric <spec_key>_min/_max (an exact 8 TB drive is storage_gb_min: 8000 plus storage_gb_max: 8000), enum/list <spec_key>_in for any-of (camera_type_in, bundle_includes_in), enum-list <spec_key>_contains_all for every requested member (bundle_includes_contains_all), and boolean direct keys (bundle). Numeric bounds may use {value,unit} with a registered conversion. Storage uses decimal GB: 1 TB = 1000 GB. Unknown keys are rejected; deals missing the constrained spec are excluded (must-have semantics). Deterministic intent extraction is a fallback; explicit specs always override it, and soft phrasing ("around 65 inches") is never auto-constrained.agent_id— string — Self-identifier for telemetry (e.g. "claude-desktop:tom"). Helps us prioritize agent demand.conditions— array — Accepted deal conditions. Defaults to new + open_box. During consent, surface all four categories and ask whether to add refurbished/pre_owned or restrict to new only.model_number— string — Manufacturer model number (MPN) for the exact variant — e.g. "K-65XR70" for the Sony BRAVIA 7 65". A concrete MPN auto-promotes in ~60s; family-level intents without one require operator review (hours).max_price_cents— integer — Hard price ceiling for delivery, in cents (a numeric string like "150000" is accepted).min_discount_pct— number — Minimum discount percentage for delivery.webhook_callback_url— string — https:// endpoint to receive push deliveries (activates post-interpretation).
Hints: read-only no · destructive no · idempotent no · open-world no
check_watchread-onlyStatus of a watch by watch_id: interpretation progress, channel states, live matches, next_check_recommended_at, and monitoring contract. Pending/review reads are valid states, not fallback triggers. For a retired-key policy, re-register through POST /v1/watches with explicit conditions and supported specs. Confirm the replacement is eligible and monitoring is configured before cancelling the old watch. Requirements needing evidence, correction or a waiver need operator review; re-registering unchanged intent does not resolve them. `product_url` is the human purchase link. Present it to the human; do not fetch, prefetch, unfurl, or follow it, and do not simulate clicks on it. Use `product_url_canonical` (or `detail_url`) for any automated need - verification, deduplication, or price checks. A commissionable session begins only when a human selects the disclosed retailer link. Convey the `disclosure` string alongside the link. Cancelled watches return WATCH_CANCELLED; unknown ids return NOT_FOUND.
Parameters:
watch_id(required) — string — The watch_id returned by register_watch.cursor— string — Opaque live_matches.cursor continuation; an incomplete scan is not a no-match result.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
cancel_watchdestructiveStop deliveries for a watch: the feed URL dies immediately and the webhook deactivates. Idempotent. Sourcing for an already-promoted product continues (shared watchlist state) — cancellation affects this watch's delivery only.
Parameters:
watch_id(required) — string — The watch_id returned by register_watch.
Hints: read-only no · destructive yes · idempotent yes · open-world no
report_outcomeRecords what happened after a deal was acted on, including anything that looked wrong (price, stock, dead link, checkout). Reports are saved and read by a human operator. Returns a feedback_id.
Parameters:
deal_id(required) — string — The deal id you acted on.outcome(required) — string — What happened. purchased: Your human bought it. price_confirmed: You checked the retailer: the price and stock matched the deal. wrong_price: The retailer shows a different price. Send actual_price_cents. out_of_stock: The retailer shows it unavailable. deal_dead: The offer is gone: page removed, promotion ended, or link broken. checkout_failed: Your human could not complete checkout (cart, coupon, region, payment). irrelevant: The deal did not fit what your human asked for. other: Anything else that looked wrong. Describe it in notes (required).notes— string — What you or your human saw. Required for other. Leave out personal details.watch_id— string — The watch that surfaced this deal, if any.actual_price_cents— integer — The price the retailer actually showed, in cents. Include it for wrong_price.
Hints: read-only no · destructive no · idempotent no · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.