addrbookFor publishers
← 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.

How to check it · This row as JSON