{"id":1222802,"recorded_at":"2026-10-30T00:25:33.154897Z","observed_at":"2026-10-30T00:25:33.154840Z","subject_kind":"endpoint","subject":"f340defe-90ee-4f9f-8532-c9f16789dab3","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":12,"tools":[{"description":"Compare 2-5 deals side by side (price, unit, offer type, code, verification), best value first.","inputSchema":{"properties":{"ids":{"type":"string"},"mode":{"default":"full","type":"string"}},"required":["ids"],"type":"object"},"name":"compare_deals"},{"description":"Compare tracked GPU rental prices for one model (e.g. 'H100', 'A100 SXM', 'RTX 4090', 'L40S'), cheapest first. If a result looks wrong, give the user its report_issue_url.\n\nSame data as https://thelanternworks.com/api/v1/gpu-prices.json. Sorted by hourly_usd ascending; each result\nhas source_url and checked_at. 'Cheapest' means cheapest among tracked providers, not the whole market.\nlimit 1-25. Unknown model returns not_found listing tracked models.\nEach result has tier_class: on-demand | community | marketplace | interruptible (spot/preemptible) |\nreserved | dedicated-monthly. Reserved (reservation/commitment 'starting from') rates are left out unless\ninclude_reserved=true, and even then they are never reported as cheapest. The cheapest overall can be spot or community capacity; on_demand_only=true keeps only\non-demand rates, and the summary names the cheapest on-demand rate when the overall cheapest isn't.\ninclude_history=true adds each result's price_history (daily-snapshot change points) and history.recent_changes\n(price changes for this model among tracked providers, last 30 days) from /api/v1/gpu-prices/history.json.\nEach result has data_age_hours (hours since its price was last verified), degraded (> 48 h) and stale (> 7 days).\nmax_data_age_hours (optional) drops older rates; excluded_too_old reports how many were dropped.","inputSchema":{"properties":{"gpu":{"type":"string"},"include_history":{"default":false,"type":"boolean"},"include_reserved":{"default":false,"type":"boolean"},"limit":{"default":10,"type":"integer"},"max_data_age_hours":{"default":null,"type":"number"},"mode":{"default":"full","type":"string"},"on_demand_only":{"default":false,"type":"boolean"}},"required":["gpu"],"type":"object"},"name":"compare_gpu_prices"},{"description":"Hosted only, free, opt-in. Register a webhook for GPU price alerts and get an api_key plus a webhook signing secret (both shown ONCE; store them). webhook_url must be public https. email is optional contact only (no mail is sent). No payment. Stored: a hash of the key, the webhook URL, optional email, your watches and per-key counts.","inputSchema":{"properties":{"email":{"type":"string"},"webhook_url":{"type":"string"}},"required":["webhook_url"],"type":"object"},"name":"create_watch_key"},{"description":"Hosted only. Delete one of your watches by watch_id.","inputSchema":{"properties":{"api_key":{"type":"string"},"watch_id":{"type":"string"}},"required":["watch_id"],"type":"object"},"name":"delete_watch"},{"description":"Cost of one GPU job (not cost per hour) among tracked providers, cheapest compute subtotal first.\n\nYou supply the duration: job_hours, OR work_units plus throughput_units_per_gpu_hour from your own benchmark\n(job_hours = work_units / (throughput x gpus_per_job)). If you give workload + work_units but no throughput,\na directly applicable published figure (closed-division MLPerf Inference, exact GPU variant, inference only)\nis used: throughput_basis='published_benchmark' with throughput_source {url, quote, date, benchmark, derived,\ncaveats}; your throughput always wins. Otherwise not_found 'missing: throughput for {gpu}'. Whole-instance billing:\ninstances = ceil(gpus_per_job / gpus_per_instance), all allocated GPUs billed (9 GPUs on an 8-GPU-only\noffer bill 16). Reserved and held-stale rates are never ranked; spot/interruptible only if allow_interruptible.\nEach result has rate_id, source_url, verified_at, data_age_hours/degraded/stale. Response has assumptions,\ncitations, missing_costs, budget_verdict (unresolved: extras unknown) and a quote_id. Compute subtotal only.","inputSchema":{"properties":{"allow_interruptible":{"default":false,"type":"boolean"},"gpu_family":{"type":"string"},"gpus_per_job":{"type":"integer"},"job_hours":{"default":null,"type":"number"},"max_data_age_hours":{"default":null,"type":"number"},"min_vram_gb":{"default":null,"type":"integer"},"mode":{"default":"full","type":"string"},"runs_per_month":{"default":null,"type":"number"},"throughput_units_per_gpu_hour":{"default":null,"type":"number"},"top_n":{"default":5,"type":"integer"},"work_units":{"default":null,"type":"number"},"workload":{"default":null,"type":"string"}},"required":["gpu_family","gpus_per_job"],"type":"object"},"name":"estimate_job_cost"},{"description":"Get one deal's public record by id, including redeem_url and agent_instructions.","inputSchema":{"properties":{"id":{"type":"string"},"mode":{"default":"full","type":"string"}},"required":["id"],"type":"object"},"name":"get_deal"},{"description":"GPU rental price changes among tracked providers, each with old/new hourly price, change_pct, direction,\nthe vendor source_url, a stable event_id (dedupe key) and rate_id.\n\nsince: 'YYYY-MM-DD' returns every change on or after that date, newest first (daily snapshots in\n/api/v1/gpu-prices/history.json); omitted returns the latest day's moves (/api/v1/gpu-price-changes.json).\ncursor: pass next_cursor from a previous call to get every change after it, oldest first, with has_more;\nloop until has_more is false, and store next_cursor only after processing (a watcher never misses or repeats\nevents). error cursor_expired means re-sync with since and dedupe by event_id.\nkinds: optional subset of down, up, new, removed, same. gpu: optional model filter (substring, e.g. 'H100').\nlimit 1-200. Includes data_checked_at and next_refresh_utc (prices refresh daily at about 10:23 UTC).","inputSchema":{"properties":{"cursor":{"default":null,"type":"string"},"gpu":{"default":null,"type":"string"},"kinds":{"default":null,"items":{"type":"string"},"type":"array"},"limit":{"default":50,"type":"integer"},"mode":{"default":"full","type":"string"},"since":{"default":null,"type":"string"}},"type":"object"},"name":"get_price_changes"},{"description":"Hosted only. Your watches and per-key alert counts.","inputSchema":{"properties":{"api_key":{"type":"string"}},"type":"object"},"name":"list_watches"},{"description":"Estimate a monthly stack cost from a short description of the agent being built.\n\ndescription: free text, e.g. 'scrapes 20k JS pages/month via 5 GB residential proxies, 3k search queries,\nsummarizes with an LLM, budget $300/mo'. Parsed deterministically (keywords/regex, no LLM) into components:\ngpu, scraping, proxy, search, llm_api, email, hosting, database, monitoring. Optional fields override the parse:\ngpu_hours (GPU-hours/month), gpu_model ('H100', 'A100', 'RTX 4090'), model_size_b (billions of params; sets a\nminimum VRAM using FP16 x 1.2), scrape_pages, js_rendering, proxy_gb, search_queries, emails_sent, llm_api,\nmonthly_budget_usd. Each component gets the cheapest option with a cited price among tracked providers, with\ncalc, source_url, verified_at, referral_disclosure (set when the link is a referral link) and manual-signup\nnotes. Components with no cited price say 'no sourced price tracked' (nothing is estimated). Totals show the\nmath and say whether they are complete. Pulled listings are excluded. Every option has data_age_hours, degraded (> 48 h) and stale (> 7 days); max_data_age_hours drops older options (excluded_too_old counts them). Same data as optimize_stack,\ncompare_gpu_prices and the deal feed.","inputSchema":{"properties":{"description":{"default":"","type":"string"},"emails_sent":{"default":null,"type":"number"},"exclude_manual_signup":{"default":false,"type":"boolean"},"gpu_hours":{"default":null,"type":"number"},"gpu_model":{"default":null,"type":"string"},"js_rendering":{"default":null,"type":"boolean"},"llm_api":{"default":null,"type":"boolean"},"max_data_age_hours":{"default":null,"type":"number"},"mode":{"default":"full","type":"string"},"model_size_b":{"default":null,"type":"number"},"monthly_budget_usd":{"default":null,"type":"number"},"proxy_gb":{"default":null,"type":"number"},"scrape_pages":{"default":null,"type":"number"},"search_queries":{"default":null,"type":"number"},"workload":{"default":null,"type":"string"}},"type":"object"},"name":"optimize_agent_stack"},{"description":"Cheapest suitable stack among tracked providers for monthly needs (set the quantities you need, rest 0).\n\nscrape_pages: pages/month without JS rendering. scrape_pages_js: pages/month needing JS rendering.\nproxy_gb: residential proxy GB/month. emails_sent: transactional emails/month. search_queries: search API\nqueries/month. gpu_hours: GPU-hours/month (1 GPU), optionally gpu_model e.g. 'H100', 'A100', 'RTX 4090'.\nEach line has the chosen plan, monthly_cost_usd, calc, vendor quote, source_url, checked_at and assumptions,\nplus alternatives. A vendor price that isn't published is 'unknown' (never estimated). manual_signup_only=true\nmeans a human must sign up (never automate it); exclude_manual_signup=true drops those plans. Same data as\nhttps://thelanternworks.com/api/v1/stack-pricing.json and /tools/stack-optimizer/.","inputSchema":{"properties":{"emails_sent":{"default":0,"type":"integer"},"exclude_manual_signup":{"default":false,"type":"boolean"},"gpu_hours":{"default":0,"type":"number"},"gpu_model":{"default":null,"type":"string"},"mode":{"default":"full","type":"string"},"proxy_gb":{"default":0,"type":"number"},"scrape_pages":{"default":0,"type":"integer"},"scrape_pages_js":{"default":0,"type":"integer"},"search_queries":{"default":0,"type":"integer"}},"type":"object"},"name":"optimize_stack"},{"description":"Search agent work-stack deals (compute, search, email, unblock, hosting...).\n\noffer_type: verified_discount | listed_discount (not confirmed; verified_at null) | free_tier | trial | standard_referral | credit_only_referral.\nmax_price excludes deals with unknown price. limit 1-25. Pass next_cursor back as cursor to page.","inputSchema":{"properties":{"category":{"default":null,"type":"string"},"cursor":{"default":null,"type":"string"},"limit":{"default":10,"type":"integer"},"max_price":{"default":null,"type":"number"},"mode":{"default":"full","type":"string"},"offer_type":{"default":null,"type":"string"},"query":{"default":null,"type":"string"},"tags":{"default":null,"items":{"type":"string"},"type":"array"}},"type":"object"},"name":"search_deals"},{"description":"Hosted only. Alert your webhook (signed POST) after the daily refresh when a tracked rate for `gpu` crosses at or below max_hourly_usd, or a change of a watched kind (down/up/new; default down) lands at or below it. region: optional code from availability.available_regions (rates that publish no region never match). Each event is delivered at most once per watch (dedupe on event_id). Pass api_key or an Authorization: Bearer header.","inputSchema":{"properties":{"api_key":{"type":"string"},"gpu":{"type":"string"},"kinds":{"items":{"enum":["down","up","new"],"type":"string"},"type":"array"},"max_hourly_usd":{"type":"number"},"region":{"type":"string"}},"required":["gpu","max_hourly_usd"],"type":"object"},"name":"watch_price"}]},"body_sha256":"b1f656e2609597969278fe968f527788a5054bb3b35d5ba1b797e98b8ebba0fd","prev_id":null,"leaf":"0xd7069046722cee5c4322642c05209e821db48392b797d9b9167529873211d68a","leaf_text":"{\"body\":\"b1f656e2609597969278fe968f527788a5054bb3b35d5ba1b797e98b8ebba0fd\",\"id\":1222802,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793319933154840,\"prev\":null,\"subject\":\"f340defe-90ee-4f9f-8532-c9f16789dab3\",\"subject_kind\":\"endpoint\"}","day":null,"proof":[]}