Cheapest LLM API
by tehtelabs · remote · no sign-in to list tools · v1.0.0 · published by GitHub user tehtelabs
Compare LLM API prices, search models and providers, and access reviewed benchmark results.
12 tools: 1 change things and 11 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads11Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http cheapestllmapi https://cheapestllmapi.com/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnexecute
The server marks "execute" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "execute" says "execute": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
12 tools
Changes things 1Claude Code: ask
executeRun a JavaScript async function in an isolated sandbox, composing catalog_search, model_detail, offer_compare, benchmark_results, provider_list, benchmark_list, coding_agent_list, …1 finding
Why it is in this group
- The name "execute" says "execute": a word for a change.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "execute" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "execute" says "execute": a word for a change.
Description, as the server wrote it Run a JavaScript async function in an isolated sandbox, composing catalog_search, model_detail, offer_compare, benchmark_results, provider_list, benchmark_list, coding_agent_list, coding_agent_detail, coding_agent_releases, coding_agent_upgrade, and price_watch as catalog.* methods. Return a small JSON value. Example: async () => { const page = await catalog.catalog_search({query: 'claude', page_size: 5}); return page.data.models.map(m => ({slug: m.slug, prices: m.bestOffer?.prices})); }. No network, secrets, or database binding is exposed. Shared worldwide execution budgets: 100 per UTC minute and 5000 per UTC day. Limits: 30 executions per client per minute (IPv6 /64), 20 catalog calls and read units (offer_compare and price_watch use 5), at most two concurrent calls, 5 seconds wall time, 50ms sandbox CPU, 32KiB code, 64KiB JSON output. JavaScript only; no imports or TypeScript syntax. Use /mcp?mode=code for only search + execute.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 11Claude Code: allow
benchmark_listDiscover exact benchmark IDs, editions, score units, configurations, provenance, and reviewed result counts before calling benchmark_results.No findings
Why it is in this group
- The name "benchmark_list" says "list": a word for reading.
Description, as the server wrote it Discover exact benchmark IDs, editions, score units, configurations, provenance, and reviewed result counts before calling benchmark_results. Empty benchmarks are retained with resultCount 0.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
benchmark_resultsGet reviewed scores for an exact benchmark_id from benchmark_list.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it Get reviewed scores for an exact benchmark_id from benchmark_list. Join result.modelId to catalog_search model.id. Compare scores only within the same benchmark edition and configuration. Includes source provenance and reported coding-agent usage when published. Follow pagination.hasMore.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
catalog_searchFind canonical model slugs, context limits, and provider prices.No findings
Why it is in this group
- The name "catalog_search" says "search": a word for reading.
Description, as the server wrote it Find canonical model slugs, context limits, and provider prices. Optional provider_slug filters availability, not the provider in bestOffer. bestOffer is selected for 10M input + 2M output tokens; use offer_compare for your workload. Follow pagination.hasMore.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
coding_agent_detailGet a coding-agent profile by agent_slug from coding_agent_list, including official source, latest stable release, freshness, and history coverage.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it Get a coding-agent profile by agent_slug from coding_agent_list, including official source, latest stable release, freshness, and history coverage. An unavailable archive is explicit in state. This does not assert product benchmark rankings or subscription prices.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
coding_agent_listList coding-agent profiles, interfaces, model access, official sources, latest stable release, archive counts, freshness, coverage limits, and sourced model/provider compatibility,…No findings
Why it is in this group
- The name "coding_agent_list" says "list": a word for reading.
Description, as the server wrote it List coding-agent profiles, interfaces, model access, official sources, latest stable release, archive counts, freshness, coverage limits, and sourced model/provider compatibility, BYOK, billing and setup facts. Includes agents whose release archive is unavailable; inspect state. Use coding_agent_releases to page through source-linked changelogs.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
coding_agent_releasesSearch archived coding-agent releases by agent_slug, query (title, version, excerpt), topic, and channel.No findings
Why it is in this group
- The description's first verb is "search": a word for reading.
Description, as the server wrote it Search archived coding-agent releases by agent_slug, query (title, version, excerpt), topic, and channel. Stable only by default; channel all includes prereleases. Newest first; advance offset by limit while pagination.hasMore. Includes source URLs, abbreviated excerpts, and per-agent freshness/coverage. Topics are keyword mentions, not assessments. Partial coverage is explicit in meta.completeness; all unavailable returns an error. Archives reflect configured source history, not every product announcement.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
coding_agent_upgradeFind archived changes published after an installed version or exact release ID.No findings
Why it is in this group
- The description's first verb is "find": a word for reading.
Description, as the server wrote it Find archived changes published after an installed version or exact release ID. Get agent_slug and source_id from coding_agent_detail; default source_id is primary. Only the same publisher source and recognizable product stream are compared. Stable only by default; use channel all for prereleases. The ready response is publication order, not semantic-version precedence or an upgrade safety assessment; backports may appear. An unknown or ambiguous baseline is explicit in data.status, never treated as no changes. Follow data.pagination.hasMore with offset and limit.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
model_detailGet capabilities, context/output limits, and current sourced provider offers by model_slug from catalog_search.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it Get capabilities, context/output limits, and current sourced provider offers by model_slug from catalog_search. Prices are base-context rates; long-context tiers, cache writes, batch discounts, and free-tier quotas can change actual cost.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
offer_compareRank current chat offers for up to five canonical model slugs with the website calculator: context-tier prices, cache reads/writes, retries, supported batch rates, capability/bench…No findings
Why it is in this group
- The name "offer_compare" says "compare": a word for reading.
Description, as the server wrote it Rank current chat offers for up to five canonical model slugs with the website calculator: context-tier prices, cache reads/writes, retries, supported batch rates, capability/benchmark requirements, provider/route preferences, and evidence filters. Input totals include cache shares; cache_hit_percent plus cache_write_percent must be <=100. Average request sizes determine tiers and capacity. Batch is Anthropic direct only. Unknown required evidence excludes offers; missing cache-read rates use standard input rates. Inspect costs, qualification, warnings, assumptions, excludedModels, and pagination.hasMore. Free quotas, non-token fees, and media token accounting are excluded.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
price_watchRead current offers meeting a monthly baseline_usd minus minimum_saving_usd.No findings
Why it is in this group
- The description's first verb is "read": a word for reading.
Description, as the server wrote it Read current offers meeting a monthly baseline_usd minus minimum_saving_usd. Uses the same workload, qualifications and evidence filters as offer_compare. Omit model_slugs to watch all qualifying models. Returns up to 50 cheapest matches; no account or delivery subscription is created. The same query is available as RSS at /api/v1/price-watch/feed.xml; your RSS reader handles polling and notifications. Inspect offer warnings before switching.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
provider_listDiscover accepted provider slugs, roles, and current comparable model/offer counts.No findings
Why it is in this group
- The name "provider_list" says "list": a word for reading.
Description, as the server wrote it Discover accepted provider slugs, roles, and current comparable model/offer counts. Provider minimum input and output prices are independent minima and may belong to different models; use offer_compare for an actual quote.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http cheapestllmapi https://cheapestllmapi.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__cheapestllmapi__catalog_search",
"mcp__cheapestllmapi__model_detail",
"mcp__cheapestllmapi__offer_compare",
"mcp__cheapestllmapi__benchmark_results",
"mcp__cheapestllmapi__provider_list",
"mcp__cheapestllmapi__benchmark_list",
"mcp__cheapestllmapi__coding_agent_list",
"mcp__cheapestllmapi__coding_agent_detail",
"mcp__cheapestllmapi__coding_agent_releases",
"mcp__cheapestllmapi__coding_agent_upgrade",
"mcp__cheapestllmapi__price_watch"
],
"ask": [
"mcp__cheapestllmapi__execute"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as cheapestllmapi. Review it before you use it.
