← The evidence ledger
Evidence row 1222802
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint f340defe-90ee-4f9f-8532-c9f16789dab3
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- b1f656e2609597969278fe968f527788a5054bb3b35d5ba1b797e98b8ebba0fd
- Leaf
- 0xd7069046722cee5c4322642c05209e821db48392b797d9b9167529873211d68a
What was observed
{
"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"
}
]
}What the leaf hashes
{"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"}Proof
Its day has not closed yet. A day closes ten minutes after midnight UTC; the proof appears here then.