Lantern Works GPU prices — MCP server (v0.3.31, read-only, stdio)
mcp-name: io.github.connormatthewdouglas/lantern-works-deals
Free, read-only, no API key. GPU price comparison for agents, checked daily: compare_gpu_prices returns hourly rental prices for H100, A100, RTX 4090 and more across tracked providers, cheapest first, each with the vendor's source page and check date; include_history=true adds daily price history (since 2026-10-27) and recent changes. Also prices the cheapest stack for your monthly usage (optimize_stack) and, last, searches and compares AI-infra deals and free tiers, ranked by customer value (never by affiliate status). Some result links are referral links.
Quick start
uvx lantern-works-deals-mcp
Claude Code:
claude mcp add lantern-works-deals -- uvx lantern-works-deals-mcp
Cursor (.cursor/mcp.json), Cline (cline_mcp_settings.json) and Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"lantern-works-deals": {
"command": "uvx",
"args": ["lantern-works-deals-mcp"]
}
}
}
Without uv: pip install lantern-works-deals-mcp, then use "command": "lantern-works-deals-mcp". Docker (from the repo root; installs the pinned PyPI release): docker build -t lantern-works-deals-mcp . && docker run -i --rm lantern-works-deals-mcp. More clients: https://thelanternworks.com/install/
Hosted endpoint (no install)
Streamable HTTP, same read-only tools: https://lantern-works-mcp.lantern-works.workers.dev/mcp?ref=pypi-readme
(claude mcp add --transport http lantern-works-deals https://lantern-works-mcp.lantern-works.workers.dev/mcp?ref=pypi-readme). Free Cloudflare Worker; it stores only anonymous call counts per tool per day (no IPs, user agents or arguments), public at https://lantern-works-mcp.lantern-works.workers.dev/stats. ?ref= only tags which link was used.
Tools
| Tool | Args | Returns |
|---|---|---|
compare_gpu_prices |
gpu (e.g. H100, A100 SXM, RTX 4090), limit (1-25, default 10), include_history (default false), on_demand_only (bool, default false) |
{summary, scope, total, results[], data_source, feed_updated_at, ...} sorted by hourly_usd; each result has source_url, checked_at and report_issue_url. With include_history=true, each result adds price_history (daily-snapshot change points) and the response adds history.recent_changes (last 30 days) |
get_price_changes |
since (YYYY-MM-DD, optional), gpu (substring filter, optional), limit (1-200, default 50) |
GPU price moves among tracked providers, newest first (drops, rises, removals, then newly tracked rates): from_hourly_usd, to_hourly_usd, change_pct, direction, source_url; window, counts, data_checked_at, next_refresh_utc. Without since, the latest day (/api/v1/gpu-price-changes.json); with it, /api/v1/gpu-prices/history.json. Bad date → invalid_argument |
optimize_stack |
scrape_pages, scrape_pages_js, proxy_gb, emails_sent, search_queries, gpu_hours, gpu_model, exclude_manual_signup |
per-line chosen plan, monthly_cost_usd, calc, vendor quote, source_url, checked_at, assumptions, alternatives; unpublished prices are unknown |
optimize_agent_stack |
description (free text) plus optional workload, gpu_hours, gpu_model, model_size_b, scrape_pages, js_rendering, proxy_gb, search_queries, emails_sent, llm_api, monthly_budget_usd, exclude_manual_signup |
parsed (what the deterministic parse found), per-component cheapest cited option with calc, source_url, verified_at, referral_disclosure, manual-signup notes; monthly_estimate_usd with estimate_math and estimate_is_complete; "no sourced price tracked" where there is no data |
estimate_job_cost |
gpu_family, gpus_per_job, job_hours or (work_units + throughput_units_per_gpu_hour), optional workload, allow_interruptible (default false), min_vram_gb, runs_per_month, top_n (default 5), max_data_age_hours |
cost of one job (compute subtotal), cheapest first: results[] with rate_id, allocated_gpus, source_url, verified_at, data age; assumptions, citations, missing_costs, budget_verdict, quote_id. Inference workloads without your throughput use a cited MLPerf figure (throughput_basis, throughput_source); otherwise not_found "missing: throughput" |
search_deals |
query, category, offer_type, max_price, tags[], limit (1-25, default 10), cursor |
{total, count, results[], next_cursor} (summary fields only) |
compare_deals |
ids (2-5) |
{order, deals[], note} best value first |
get_deal |
id |
the deal's public record |
compare_gpu_prices uses exactly the data published at https://thelanternworks.com/api/v1/gpu-prices.json (history: https://thelanternworks.com/api/v1/gpu-prices/history.json). Prices are re-read daily from each vendor's own page or API and change only where a price was parsed; a rate not re-verified for 7 days is held out of rankings. Model matching is by whole tokens (H100 matches H100 SXM; L40 does not match L40S). "Cheapest" means cheapest among tracked providers, not the whole market.
Errors: {"error": {"code": "invalid_argument|invalid_cursor|not_found|feed_unavailable|feed_invalid", "message": ...}}.
Data and privacy
Deals: https://thelanternworks.com/api/v1/deals.json; stack pricing: https://thelanternworks.com/api/v1/stack-pricing.json; GPU prices: https://thelanternworks.com/api/v1/gpu-prices.json. Each is cached 5 min (a stale copy is served if a refetch fails). Requests send only User-Agent: lantern-works-deals-mcp/<version> (no user, host or install identifiers). Overrides: LANTERN_DEALS_FILE / LANTERN_DEALS_URL, LANTERN_GPU_PRICES_FILE / LANTERN_GPU_PRICES_URL, LANTERN_STACK_PRICING_FILE / LANTERN_STACK_PRICING_URL. Only an allow-list of public fields is returned.
Telemetry: off by default. Opt in with LANTERN_TELEMETRY=1 to send an anonymous daily count of tool calls. Each count is only the tool name, package version, UTC day and number of calls. No arguments, IDs or IPs are sent or stored. It is batched to at most one request per day and never blocks or breaks a tool call. Details: PRIVACY.md.
From git (fallback)
git clone https://github.com/connormatthewdouglas/agent-work-stack-deals.git
cd agent-work-stack-deals
python3 -m venv .venv && .venv/bin/pip install -r mcp_server/requirements.txt
.venv/bin/python mcp_server/server.py
Test
.venv/bin/pip install pytest && .venv/bin/python -m pytest -q tests
python3 scripts/test_pypi_install.py --uvx # clean venv + uvx install from PyPI, calls every tool over stdio
Package
pyproject.toml at the repo root builds lantern-works-deals-mcp (MIT) with a lantern-works-deals-mcp console command. Published on PyPI and in the MCP Registry as io.github.connormatthewdouglas/lantern-works-deals.
License
The package code is MIT. The price and deal data it reads (the Lantern Works feeds) is CC BY 4.0: credit "Lantern Works" and link to https://thelanternworks.com. See https://thelanternworks.com/methodology/#license.
Metadata
Release files for lantern-works-deals-mcp 0.3.31
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| lantern_works_deals_mcp-0.3.31.tar.gz | 134.3 kB | Without provenance | Details for lantern_works_deals_mcp-0.3.31.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| lantern_works_deals_mcp-0.3.31-py3-none-any.whl | Python 3 | none | any | Details for lantern_works_deals_mcp-0.3.31-py3-none-any.whl |
Total release size: 217.4 kB
Release files / lantern_works_deals_mcp-0.3.31.tar.gz
| Download URL | lantern_works_deals_mcp-0.3.31.tar.gz |
|---|---|
| Size | 134.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f043b8eacaf1b052725e1d69ff9f275aeb3e85439ac88977820d0a2a8f3780ac
|
|
BLAKE2b-256 checksum How to use checksums |
3b5de13e7cc1c912aea79b4f781c12f8be73a63f1eedb9efdf2f410005387dac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Release files / lantern_works_deals_mcp-0.3.31-py3-none-any.whl
| Download URL | lantern_works_deals_mcp-0.3.31-py3-none-any.whl |
|---|---|
| Size | 83.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
85907bff60d28f5be32634e286de41c747283f1ace5552188e2e5ba5337dc38d
|
|
BLAKE2b-256 checksum How to use checksums |
3bf29353389262ab26a978ff5fdf68dcf56f71beb52acba88b396b31d41ee950
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Security for lantern-works-deals-mcp 0.3.31
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.