Skip to main content

Lantern Works GPU prices — MCP server (v0.3.30, 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.30

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lantern-works-deals-mcp 0.3.30
File Size Uploaded Provenance Actions
lantern_works_deals_mcp-0.3.30.tar.gz 134.3 kB Without provenance Details for lantern_works_deals_mcp-0.3.30.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for lantern-works-deals-mcp 0.3.30
File Interpreter ABI Platform Actions
lantern_works_deals_mcp-0.3.30-py3-none-any.whl Python 3 none any Details for lantern_works_deals_mcp-0.3.30-py3-none-any.whl

Total release size: 217.3 kB

Release files / lantern_works_deals_mcp-0.3.30.tar.gz

Download URL lantern_works_deals_mcp-0.3.30.tar.gz
Size 134.3 kB
Tags Source
SHA-256 checksum
How to use checksums
f4be32a36236c9e9b7a2df1c960792842501cde2e382afb85a10038decae93b0
BLAKE2b-256 checksum
How to use checksums
13acf84a200001139c6df8f7cb4aa5745e49e73642c3bd155ee8ca883f0d0bec
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.30-py3-none-any.whl

Download URL lantern_works_deals_mcp-0.3.30-py3-none-any.whl
Size 83.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5f076c973642f820f5ed3e697924f21d3998260fff7c87bb37f02a54e00311ec
BLAKE2b-256 checksum
How to use checksums
c4491f6fa0da3d959a8d25f816eb4708d63e963b272fe666d7151f3344e9de62
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.30

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.

Release history Release notifications | RSS feed

This release

0.3.30 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page