MCP 서버

deals

com.kitsdeals/deals
커머스 및 리테일 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Searches curated live deals and supports registering, checking, canceling, and reporting outcomes for price watches.

cancel_watch
Cancel a watch
Stop 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.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['watch_id'], 'properties': {'watch_id': {'type': 'string', 'maxLength': 50, 'minLength': 1, 'description': 'The watch_id returned by register_watch.'}}}
check_watch
Check a watch
Status 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.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['watch_id'], 'properties': {'cursor': {'type': 'string', 'maxLength': 2048, 'description': 'Opaque live_matches.cursor continuation; an incomplete scan is not a no-match result.'}, 'watch_id': {'type': 'string', 'maxLength': 50, 'minLength': 1, 'description': 'The watch_id returned by register_watch.'}}}
get_deal
Get one deal
Fetch 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.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['deal_id'], 'properties': {'full': {'type': 'boolean', 'description': 'true = full ~30-field record with provenance + price history. Default false (compact).'}, 'deal_id': {'type': 'string', 'maxLength': 50, 'minLength': 1, 'description': 'Deal id from search_deals / latest_deals results.'}}}
latest_deals
Newest live deals
The 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).
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Max results (default 5).'}, 'category': {'type': 'string', 'maxLength': 100, 'description': 'Category filter (comma-separated allowed). Currently in scope: electronics.'}, 'max_price_cents': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Only deals at or below this price, in cents.', 'exclusiveMinimum': 0}, 'highlighted_only': {'type': 'boolean', 'description': "true = only current Kit's Picks, ordered by the most recent highlight decision."}}}
register_watch
Register a deal watch
Register 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.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['intent'], 'properties': {'specs': {'type': 'object', 'description': '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.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': 'string'}}, {'type': 'object', 'required': ['value', 'unit'], 'properties': {'unit': {'type': 'string', 'maxLength': 24}, 'value': {'type': 'number'}}, 'additionalProperties': False}]}, {'type': 'null'}]}}, 'intent': {'type': 'string', 'maxLength': 1000, 'minLength': 3, 'description': 'Free-text intent (e.g. "Oura Ring 4 silver under $350"). The interpretation pipeline owns the structuring.'}, 'agent_id': {'type': 'string', 'maxLength': 200, 'description': 'Self-identifier for telemetry (e.g. "claude-desktop:tom"). Helps us prioritize agent demand.'}, 'conditions': {'type': 'array', 'items': {'enum': ['new', 'open_box', 'refurbished', 'pre_owned'], 'type': 'string'}, 'minItems': 1, 'description': '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': {'type': 'string', 'maxLength': 100, 'description': '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': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Hard price ceiling for delivery, in cents (a numeric string like "150000" is accepted).', 'exclusiveMinimum': 0}, 'min_discount_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Minimum discount percentage for delivery.'}, 'webhook_callback_url': {'type': 'string', 'maxLength': 500, 'description': 'https:// endpoint to receive push deliveries (activates post-interpretation).'}}}
report_outcome
Report a deal outcome
Records 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.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['deal_id', 'outcome'], 'properties': {'notes': {'type': 'string', 'maxLength': 1000, 'description': 'What you or your human saw. Required for other. Leave out personal details.'}, 'deal_id': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'The deal id you acted on.'}, 'outcome': {'enum': ['purchased', 'price_confirmed', 'wrong_price', 'out_of_stock', 'deal_dead', 'checkout_failed', 'irrelevant', 'other'], 'type': 'string', 'description': '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).'}, 'watch_id': {'type': 'string', 'maxLength': 64, 'description': 'The watch that surfaced this deal, if any.'}, 'actual_price_cents': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The price the retailer actually showed, in cents. Include it for wrong_price.', 'exclusiveMinimum': 0}}}
search_deals
Search live deals
Search 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.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Max results (default 5).'}, 'query': {'type': 'string', 'maxLength': 200, 'minLength': 2, 'description': 'Search keywords — product name, brand, model number, or merchant. Token-AND: every word must match.'}, 'category': {'type': 'string', 'maxLength': 100, 'description': 'Category filter (comma-separated allowed). Currently in scope: electronics.'}, 'max_price_cents': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Only deals at or below this price, in cents (e.g. 35000 = $350).', 'exclusiveMinimum': 0}, 'min_discount_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Only deals with at least this discount percentage.'}}}
변경됨
report_outcome
2026년 10월 1일 2:54 AM
변경됨
register_watch
2026년 9월 21일 3:00 AM
추가됨
report_outcome
2026년 9월 17일 12:35 PM
추가됨
cancel_watch
2026년 9월 17일 12:35 PM
추가됨
check_watch
2026년 9월 17일 12:35 PM
추가됨
register_watch
2026년 9월 17일 12:35 PM
추가됨
get_deal
2026년 9월 17일 12:35 PM
추가됨
latest_deals
2026년 9월 17일 12:35 PM
추가됨
search_deals
2026년 9월 17일 12:35 PM