Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,552Letters: 14Defects: 1,331counted 1 min ago
teppi

Server definition

Hash
sha256:9355d0f7f046cb9a04f2747705af57926ccf62bed1a59f2b9ea4a0972e6786cd
What it is
What a remote MCP server returned when asked what it offers: 7 tools

The blob, as servednamed by its sha256

{ "instructions": "Kit's Deals — curated, human-reviewed deal feed for AI agents (electronics today; liquidation + retail markdowns).\nUse search_deals when your human wants a deal RIGHT NOW; quote each deal's human_summary verbatim — it is server-verified. Prefer 2-4 specific tokens (\"sony wh-1000xm6\") over long sentences.\ndiscount_pct is relative to the merchant's list price (which some brands inflate); when human_summary cites a tracked-price rank (\"lowest in 90 days\", \"tied with the 30-day low\") that's our independent verification — when it doesn't, treat large list-price discounts with skepticism rather than relaying them as steals.\nDeals are time-scarce, so \"no match right now\" is normal: register_watch is the right tool for any high-consideration, low-urgency purchase (\"watch for an Oura Ring 4 under $350\"). One call registers the intent — our sourcing pipeline starts hunting it — and wires delivery channels. Watches beat polling: zero tokens are spent until a real match arrives.\nCONSENT FIRST on every watch: confirm with your human before calling register_watch (\"want me to keep watching for a better price?\") — never reflex-register. For broad asks (\"a good robot vacuum\"), do the preference work FIRST: elicit budget, use case, and constraints, propose 1–3 specific models you'd recommend, and register a watch per confirmed model (cap 3). Specific-product watches massively outperform category watches.\nSurface condition during that confirmation. Say that new + open-box are included by default, then ask whether to add refurbished/pre-owned or restrict to new only. Pass the resulting conditions explicitly when your human answers.\nPass every hard requirement you know through its structured field: max_price_cents for price, conditions for condition, and specs for capacity or size (for example, exact 8 TB storage is storage_gb_min=8000 and storage_gb_max=8000). Deterministic intent extraction is a fallback, not a substitute for structured agent input.\nPass model_number when you know the exact variant (e.g. \"K-65XR70\" for the Sony BRAVIA 7 65\") — a concrete MPN auto-promotes in ~60s, while family-level intents wait hours for operator review. Know the family but not the MPN? Ask your human or look it up first.\nStore the returned watch_id (for check_watch / cancel_watch) and the feed URL — its secret token is shown only once.\nOffer Kit's Picks as an optional hand-picked discovery lane. Never start it automatically: use it only after the human opts in, either alongside specific watches or by itself when they do not yet know what to watch. In an MCP session call latest_deals with highlighted_only=true; scheduled HTTP runtimes may poll https://api.kitsdeals.com/v1/feeds/highlights.atom once per run. On opt-in, offer the current entries once and seed their deal ids as seen; after that, notify only on newly seen Picks. Deduplicate overlap with watches by stable deal id; a missing Atom entry is not live.\nFollow monitoring_contract for recurring checks: seed current deal ids, stay silent on valid empty results, and continue after every deal alert. Quote human_summary verbatim and link product_url, the human purchase URL at the retailer. detail_url is machine-only: never show it as the alert link; fetch it only to recover product_url from a legacy response. Personal fit stays with you; ask one focused question when uncertain. Stop only on explicit purchased/no-longer-wanted intent. WATCH_CANCELLED is terminal for that target; NOT_FOUND is an unknown-id/configuration error, never cancellation.\n`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.\nClose the loop with report_outcome whenever your human acts on a deal, and always when something looked wrong (price, stock, dead link, checkout). A human operator reads every report.\nTwo delivery audiences (PR 433): EDITORIAL surfaces (latest_deals, broadcast webhooks/feeds, river) carry only deals worth anyone's attention; INTENT-bound surfaces (search_deals, register_watch + its bound channels, check_watch live matches) ALSO carry availability-only matches (price-target hits at ~0% discount — exactly what the watcher asked for). When a deal carries intent_match_only=true, frame it as \"matched your target,\" not as a markdown.\nFull REST API + push channels (webhook, SSE river, Atom): https://api.kitsdeals.com/\nPrivacy policy: https://kitsdeals.com/privacy/", "tools": [ { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "watch_id": { "description": "The watch_id returned by register_watch.", "maxLength": 50, "minLength": 1, "type": "string" } }, "required": [ "watch_id" ], "type": "object" }, "name": "cancel_watch", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "cursor": { "description": "Opaque live_matches.cursor continuation; an incomplete scan is not a no-match result.", "maxLength": 2048, "type": "string" }, "watch_id": { "description": "The watch_id returned by register_watch.", "maxLength": 50, "minLength": 1, "type": "string" } }, "required": [ "watch_id" ], "type": "object" }, "name": "check_watch", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "deal_id": { "description": "Deal id from search_deals / latest_deals results.", "maxLength": 50, "minLength": 1, "type": "string" }, "full": { "description": "true = full ~30-field record with provenance + price history. Default false (compact).", "type": "boolean" } }, "required": [ "deal_id" ], "type": "object" }, "name": "get_deal", "outputSchema": null }, { "description": "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).", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "category": { "description": "Category filter (comma-separated allowed). Currently in scope: electronics.", "maxLength": 100, "type": "string" }, "highlighted_only": { "description": "true = only current Kit's Picks, ordered by the most recent highlight decision.", "type": "boolean" }, "limit": { "description": "Max results (default 5).", "maximum": 10, "minimum": 1, "type": "integer" }, "max_price_cents": { "description": "Only deals at or below this price, in cents.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "type": "object" }, "name": "latest_deals", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "agent_id": { "description": "Self-identifier for telemetry (e.g. \"claude-desktop:tom\"). Helps us prioritize agent demand.", "maxLength": 200, "type": "string" }, "conditions": { "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.", "items": { "enum": [ "new", "open_box", "refurbished", "pre_owned" ], "type": "string" }, "minItems": 1, "type": "array" }, "intent": { "description": "Free-text intent (e.g. \"Oura Ring 4 silver under $350\"). The interpretation pipeline owns the structuring.", "maxLength": 1000, "minLength": 3, "type": "string" }, "max_price_cents": { "description": "Hard price ceiling for delivery, in cents (a numeric string like \"150000\" is accepted).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "min_discount_pct": { "description": "Minimum discount percentage for delivery.", "maximum": 100, "minimum": 0, "type": "number" }, "model_number": { "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).", "maxLength": 100, "type": "string" }, "specs": { "additionalProperties": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "boolean" }, { "items": { "type": "string" }, "type": "array" }, { "additionalProperties": false, "properties": { "unit": { "maxLength": 24, "type": "string" }, "value": { "type": "number" } }, "required": [ "value", "unit" ], "type": "object" } ] }, { "type": "null" } ] }, "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" }, "type": "object" }, "webhook_callback_url": { "description": "https:// endpoint to receive push deliveries (activates post-interpretation).", "maxLength": 500, "type": "string" } }, "required": [ "intent" ], "type": "object" }, "name": "register_watch", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "actual_price_cents": { "description": "The price the retailer actually showed, in cents. Include it for wrong_price.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "deal_id": { "description": "The deal id you acted on.", "maxLength": 100, "minLength": 1, "type": "string" }, "notes": { "description": "What you or your human saw. Required for other. Leave out personal details.", "maxLength": 1000, "type": "string" }, "outcome": { "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).", "enum": [ "purchased", "price_confirmed", "wrong_price", "out_of_stock", "deal_dead", "checkout_failed", "irrelevant", "other" ], "type": "string" }, "watch_id": { "description": "The watch that surfaced this deal, if any.", "maxLength": 64, "type": "string" } }, "required": [ "deal_id", "outcome" ], "type": "object" }, "name": "report_outcome", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "category": { "description": "Category filter (comma-separated allowed). Currently in scope: electronics.", "maxLength": 100, "type": "string" }, "limit": { "description": "Max results (default 5).", "maximum": 10, "minimum": 1, "type": "integer" }, "max_price_cents": { "description": "Only deals at or below this price, in cents (e.g. 35000 = $350).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "min_discount_pct": { "description": "Only deals with at least this discount percentage.", "maximum": 100, "minimum": 0, "type": "number" }, "query": { "description": "Search keywords — product name, brand, model number, or merchant. Token-AND: every word must match.", "maxLength": 200, "minLength": 2, "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "search_deals", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:9355d0f7f046cb9a04f2747705af57926ccf62bed1a59f2b9ea4a0972e6786cd | sha256sum