Skip to main content
Glama

llmledger

Which AI model should you use, and what will it cost? Paste a prompt and get the best value model for it, the top rated one and the cheapest rated one, with what each costs and the chance its price changes in the next 90 days. Behind it: every price change in LiteLLM's model catalogue since 2023 (4,200+ models), Arena's quality ratings, and a competing risks survival model, rebuilt every day.

tests refresh PyPI License: MIT Python 3.12 | 3.14 Data: LiteLLM DOI

Try it: https://pouriaetab.github.io/llmledger/ (no sign up, the prompt stays in your browser)

llmledger: paste a prompt, see the best value model, the top rated one and the cheapest rated one

Use it inside Claude

The same answers inside Claude Code, Claude Desktop, Cursor or any app that speaks MCP. Nothing to host, no keys:

claude mcp add llmledger -- uvx llmledger-mcp

Eleven tools: suggest a model and effort level for a project, compare models side by side, estimate a budget, find models within limits, a model's price history with its outlook, new models not priced yet, how long a job takes (learned from your own runs), a quote for a whole job from a promptfoo sample, whether buying a computer to run an open model pays off, and what your own coding agent usage (a ccusage or codeburn export) would have cost on every other model. Other apps and details: mcp/README.md.

As an Agent Skill, which stays out of the context until it is used (about 150 tokens against well over 1,000 for the plug-in's tools) and needs only Python:

/plugin marketplace add pouriaetab/llmledger
/plugin install llmledger@llmledger

or npx skills add pouriaetab/llmledger, or copy skills/llmledger into your agent's skills folder.

Related MCP server: Model Price Watch

Watch the models you use

A GitHub Action that fails a check (or just reports) when a model your project uses changes price, gets a retirement date or leaves the catalogue. On the GitHub Marketplace, or add it to a workflow that runs on a schedule:

- uses: pouriaetab/llmledger@main
  with:
    models: gpt-5, claude-sonnet-4-5, deepseek/deepseek-chat
    days: 7            # a price change within this many days counts
    fail: "true"       # "false" only reports; the report is in the step's outputs

Keys are LiteLLM's (gpt-5, not openai/gpt-5; the Action finds the bare key when a prefix is given). The same check from a shell: python action/watch.py --models "gpt-5,claude-sonnet-4-5".

A badge for a model, for any README, refreshed every day:

![gpt-5](https://img.shields.io/endpoint?url=https://pouriaetab.github.io/llmledger/badge/gpt-5.json)

gpt-5

The address is the key with / as -- and : as - (badge/azure--eu--gpt-5.json). It shows the prices per 1M tokens and the chance of a price change in 90 days (amber from 10%), or the retirement date (orange).

What you get

  • Ask. Paste a prompt, see the best value model, the top rated and the cheapest rated for its task (coding, math, writing, 7 fields, 7 languages, images, documents, websites), with the cost per answer and the chance of a price change. The task is guessed from the prompt, in the browser.

  • Compare. Up to five models side by side: Arena rating, prices, cost per task, effort levels, or how fast each uses a Claude or ChatGPT plan. Cost against quality, with the models no other model beats on both.

  • Models. Every model in the catalogue, as LiteLLM lists it or grouped by model, with its price history, every change linked to the LiteLLM commit behind it, and its outlook.

  • Trends. Two years of Arena leaderboards replayed: the best open model against the best closed one, the top makers, and what top quality has cost, with one line on top: how many times cheaper a model as good as last year's #1 is today.

  • Price history. How likely a newly listed model is to have its price changed, get a retirement date or be removed, within 30 days to 2 years, with and without the catalogue's own corrections; the same by maker (which makers' models change first); and whether LiteLLM's CI guard changed the share of corrections, as an interrupted time series.

  • A feed and a weekly post. feed.xml: every price change and retirement date, one entry a day. digest.md: this week in LLM prices, written from the data, ready to paste. The data behind everything: data.json, with index: what top quality costs against a year ago.

The full list, one line per feature: docs/FEATURES.md.

Not financial or procurement advice. The numbers describe edits to a public catalogue, not what any model costs you. See DISCLAIMER.md.

What the data says

A snapshot; the live page has the current numbers. The short version: about 6 in 10 "price changes" in the catalogue are corrections of the catalogue, not price changes, and once those are set aside about 1 model in 10 has its price changed within a year of being listed.

5,256 models added after the catalogue's first recorded version (6 September 2023), followed until 13 October 2026. Each cell is the estimated share of models whose first exit was this one, with its 95% confidence interval.

Within

Price change

Retirement announced

Removed

None of these

1 year

14.7% (13.5 to 15.9)

16.4% (15.2 to 17.7)

16.3% (15.3 to 17.4)

52.6% (50.9 to 54.3)

2 years

18.3% (16.9 to 19.7)

29.5% (27.6 to 31.4)

23.4% (21.7 to 25.0)

28.8% (26.8 to 31.2)

Each row adds up to 100% because the three exits compete: once a model is removed, its price can no longer change. Analysing each exit on its own would overstate all three.

Counting only input and output token prices, the one year price change estimate is 12.5%. Ignoring price changes in a model's first week, it is 12.0%. Many of the changes counted are corrections of the catalogue, not real price changes: see the next section. On the data of 18 October 2026, leaving out likely corrections as well as unit fixes and undone changes, it is 10.0% (9.1 to 11.1), against 14.6% (13.5 to 15.7) counting every change; that still counts some corrections.

Corrections and clean ups matter more for removals. The one year removal estimate above includes a clean up that removed about 500 OpenRouter rows on 9 October 2026. Leaving out bulk clean ups, unit fixes and reverted changes, it is 5.7% (5.0 to 6.5).

How many first price changes are corrections?

A stratified random sample of 200 models' first price changes (100 from a model's first 7 days, 100 from later, out of 800) was labelled from the LiteLLM commit behind each change: a correction when the catalogue's number had been wrong, a repricing when the host changed its price, unclear when the evidence cannot tell (33 rows). The guide, every label and its reason are in docs/corrections; the numbers are in src/llmledger/corrections_eval.json. Intervals are 95%, from a bootstrap of whole LiteLLM commits, since one commit often changes many rows.

First price changes

Share that are corrections

All

59% (41 to 75)

In a model's first 7 days

86% (54 to 97)

Later

51% (34 to 71)

How well simple rules find the corrections:

Rule

Precision

Recall

The page's tags (unit fixes, reverted changes)

93% (51 to 100)

36% (5 to 59)

Any first change in the first 7 days

86% (54 to 97)

30% (11 to 53)

Either of the two

87% (60 to 96)

46% (19 to 66)

First 7 days, or a change of 10 times or more

92% (76 to 98)

55% (30 to 73)

A small model (cross-validated logistic regression)

76% (57 to 89)

78% (59 to 90)

So about six in ten first price changes correct the catalogue rather than reprice the model, and corrections are common after the first week too. The tags miss most of them. Counting the unclear rows as repricings instead, the share is 46%; counting them as corrections, 70%.

Since version 1.12 the page tags the fourth rule as a likely correction and gives every estimate without those changes too. It does not find them all: of the first price changes it does not tag, about 40% (24 to 61) are still corrections, so even that estimate overstates how often a host really changes a price.

How it works

  1. Rebuilds the history. Reads every version of model_prices_and_context_window.json that LiteLLM's main branch went through, in order, using git, and writes one row per change (data/events.csv).

  2. Estimates competing risks. Follows each newly added model until its first exit and estimates the chance of each with the Aalen-Johansen estimator and 95% bootstrap intervals (data/survival.csv). Checked a second time in SQL every run; the build stops if SQL and Python disagree on any model.

  3. Publishes. The page, data.json and feed.xml, every day, after a licence check of every outside source and a check that the new build is not a step back from the live page.

The full method is in docs/SPEC.md: definitions, numbered requirements, known limitations, and a traceability table linking each requirement to the test that verifies it. The model, in short:

  1. Subject: a model added after the catalogue's first version. Time zero is the moment it was added.

  2. Exit: the first of a price change, a retirement date being set, or removal. When two happen in the same version, removal counts first, then retirement.

  3. Censored: no exit by the end of the history.

  4. Estimator: Aalen-Johansen cumulative incidence for each exit, reported only while at least 100 models are still being followed.

  5. Uncertainty: 1,000 bootstrap resamples of the models with a fixed seed, so every run gives identical output.

  6. Checked on simulated data: on 200 simulated datasets per setting, with exit rates chosen in advance, the largest bias is 0.0015 and the 95% intervals contain the true value in 91% to 98% of datasets.

Run it yourself

Python 3.14.7 (pinned in .python-version; 3.12 or newer works), standard library only, plus pyarrow (pinned in requirements.txt) to read Arena's past leaderboards for the Trends view; without it the page is built without the trend charts. One command downloads LiteLLM's history, rebuilds everything and writes the results page:

PYTHONPATH=src python -m llmledger.pipeline    # writes data/ and site/index.html
PYTHONPATH=src python -m llmledger.simulate    # simulation check, about 2 minutes

Before it writes the page, the pipeline compares its data with the live page and stops if the new build is a step back (fewer models, a quarter fewer listed, or older data). Set LLMLEDGER_SKIP_LIVE_CHECK=1 to publish anyway, for example after LiteLLM rewrites its history.

Tests (197 in tests/, 32 more for the plug-in in mcp/tests; the ones that run the page's JavaScript need Node.js and are skipped without it), with the exact versions pinned in requirements.txt:

python -m pip install -r requirements.txt
python -m pytest

Cite

Use the "Cite this repository" button on GitHub, which reads CITATION.cff. Archived on Zenodo: 10.5281/zenodo.23330454 always points to the newest version; version 1.0.0 is 10.5281/zenodo.23330455.

Data source

The data is the git history of model_prices_and_context_window.json in BerriAI/litellm, used under its MIT licence. The history is cloned to your own machine and is not redistributed here. llmledger is independent and not affiliated with or endorsed by BerriAI.

Quality ratings on the Best value tab come from the Arena leaderboard dataset by LMArena, used under CC BY 4.0 and read once a day; the Trends view reads its full history of past leaderboards from the same dataset. The task guess is measured on prompts from Arena's human preference dataset, also CC BY 4.0. llmledger is not affiliated with or endorsed by LMArena.

Electricity prices for the plug-in's local or cloud answer come from the U.S. Energy Information Administration's Electric Power Monthly, Table 5.6.A (average price for homes, by state), a U.S. government work in the public domain, read once a day with its month in the credit line.

Layout

src/llmledger/       history.py, events.py, flags.py (corrections),
                     survival.py, survival.sql and sql.py (SQL check),
                     simulate.py,
                     outlook.py (one model's outlook), names.py (grouping),
                     catalog.py (page data), page.py, page.html, app.js,
                     cost.js (prompt cost), arena.py (quality ratings),
                     licences.py (daily licence check), route.js and
                     route_eval.py (task guess and how often it is right),
                     pick.js (compare side by side), export.py (data.json),
                     trends.py and trends.js (the Trends view, cost vs quality),
                     corrections.py (how many price changes are corrections),
                     unpriced.py (models seen on Arena, not yet priced),
                     guard.py (no step back from the live page),
                     table_protocol.js (results page), pipeline.py
tests/               known answer, simulation, naming, page and version tests
mcp/                 the plug-in (llmledger-mcp): FastMCP server, tests, server.json
skills/llmledger/    the Agent Skill: SKILL.md and a script with a copy of the
                     plug-in's code (tools.py, logic.py, data.py, speed.py, forecast.py)
.claude-plugin/      the Claude Code marketplace entry for the skill
docs/SPEC.md         definitions, requirements, limitations, traceability
docs/corrections/    labelling guide and the labelled sample (issue #7)
docs/promptfoo.md    checking the plug-in with promptfoo, timing jobs from its runs,
                     and quoting a whole job from a sample
.github/workflows/   tests on every pull request; refresh rebuilds and
                     publishes the results page every day, and opens an
                     issue when it fails

Built with an AI pair programmer (Claude); the specification, the statistical design and the conclusions were reviewed by the author.

MIT licence.

Available Tools

11 tools
compare_modelsCompare ModelsA
Read-onlyIdempotent

Compare 2 to 6 named models for a kind of work: rating, prices, cost per task (or how fast each uses a Claude or ChatGPT plan), the pick, and for each model the share of answer tokens at which it would beat the pick. Use when the user already has candidate models in mind. Not for finding candidates (find_models), for reading a prompt to guess the work (suggest_for_project), or for a monthly budget (estimate_cost).

NameRequiredDescriptionDefault
payNoapi: dollars; claude or chatgpt: how fast each uses that planapi
taskNoThe kind of work, as Arena rates itoverall
modelsYes2 to 6 model names, for example claude-opus-5.5, gpt-6.1-sol
input_tokensNoPrompt tokens per task
answer_tokensNoAnswer tokens per model when they differ, by the names given
output_tokensNoAnswer tokens per task, including hidden thinking

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context by explaining that 'pay' switches the meaning of the numbers between dollars and plan consumption, and that a per-model breakeven token share is returned. It does not say what happens when a supplied model name is unknown or unpriced (there is a not_yet_priced sibling), which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the compare action and the returned fields, then the routing rules. The first sentence is long and comma-heavy but every clause carries information; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not restate return values, and annotations cover the read-only/idempotent profile, so the description's job is mainly routing and it does that well. The only shortfall is guidance on unpriced or unrecognized model names, which matters given a sizable model-name surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including the pay enum and the answer_tokens-per-model map is already documented. The description adds the 2-6 model bound and the dollars-vs-plan distinction, but this largely restates what the schema states. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (compare) and resource (models), bounds the scope to 2-6 named models, and enumerates the outputs the agent will get back: rating, prices, cost per task, the pick, and each model's breakeven token share. This is clearly separable from every sibling at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit inclusion condition ('when the user already has candidate models in mind') and then names three exclusions with the sibling that handles each: find_models for discovering candidates, suggest_for_project for inferring work from a prompt, estimate_cost for monthly budget. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

estimate_costEstimate CostA
Read-onlyIdempotent

Price a workload on 1 to 10 models at each one's cheapest listing: dollars per call, per day and per 30 days, and with cache tokens the saving the cache makes. Use when the question is a budget or a bill: token counts and calls a day are known. Not for deciding which model is better (compare_models) or for pricing past usage from an export (price_my_usage).

NameRequiredDescriptionDefault
modelsYes1 to 10 model names
input_tokensYesPrompt tokens per call
cached_tokensNoHow many of the prompt tokens are read from the cache
calls_per_dayNoCalls per day
output_tokensYesAnswer tokens per call, including hidden thinking
cache_write_tokensNoHow many of the prompt tokens are written to the cache

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so safety and determinism are covered. The description adds real context beyond them: pricing uses each model's cheapest listing and reports cache savings, which an agent needs to interpret results. It stops short of noting what happens to models lacking a listing, which is a minor gap given a sibling named not_yet_priced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and output shape, followed by usage routing. Every clause carries information; no padding or repeated name/title text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't detail return values, and its output summary plus usage routing is sufficient to call the tool correctly. The only omission is behavior for models without a price listing, a small but real gap for a pricing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters including cached_tokens and cache_write_tokens are already documented in the schema. The description only restates that token counts and daily call volume are inputs, adding no syntax, units, or edge-case guidance beyond the structured fields. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (price) and resource (a workload across 1–10 models), and specifies the outputs returned: dollars per call, per day, per 30 days, plus cache savings. The scope (cheapest listing per model) makes it clearly distinct from compare_models and price_my_usage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the question is a budget or a bill: token counts and calls a day are known') and names two alternatives with the conditions that select them, compare_models for quality decisions and price_my_usage for export-based pricing. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

estimate_timeEstimate TimeA
Read-onlyIdempotent

Estimate how long one call and a whole job take, as a usual time and a slow day, from the user's own timed runs of that model called that way (kept by log_run). Use when the question is time, not money, and some runs have been logged; it says so when none have. Not for cost (estimate_cost) or for a job you have a promptfoo sample of (forecast_job gives time and cost together).

NameRequiredDescriptionDefault
wayNoHow the model is calledapi
callsNoHow many calls the job makes
modelYesA model name, as the catalogue or Ollama names it
thinkingNoThinking turned on
concurrencyNoCalls running at once
input_tokensYesPrompt tokens per call
output_tokensYesAnswer tokens per call, including hidden thinking

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a read-only, idempotent, closed-world operation, so the description does not need to restate safety. It adds useful behavioral context by disclosing that estimates come from the user's own logged timed runs and that the tool reports when none exist. The main remaining gap is output-shape detail, though an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with the core purpose and data source up front, followed by usage conditions and exclusions. Every sentence carries useful routing or behavioral information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a seven-parameter estimator with an output schema and strong annotations, the description supplies the key missing context: where timing data comes from, the precondition that runs must be logged, and which sibling tools handle adjacent cases. Nothing an agent needs in order to choose and call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters including enums, defaults, and token semantics. The description adds context about the overall estimate but does not contribute parameter-level meaning beyond what is already structured.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and outcome: estimating duration for one call and a whole job, reported as usual time and a slow day. It names the data source (the user's own timed runs kept by log_run) and explicitly distinguishes itself from estimate_cost and forecast_job.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it when the question is time rather than money and when some runs have been logged. It names both alternatives and the conditions that select them: estimate_cost for cost questions and forecast_job when a promptfoo sample exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_modelsFind ModelsA
Read-onlyIdempotent

List the highest rated models for a kind of work within price, prompt size, ability and maker limits, each at its cheapest listing with its rating; or, with name, look one model up and list every host that offers it. Use when browsing or filtering the catalogue, or to find a model's exact name. Not for choosing between named models (compare_models), for a prompt you have in hand (suggest_for_project), or for a budget (estimate_cost).

NameRequiredDescriptionDefault
nameNoLook up one model by name instead of browsing: all its listings
taskNoThe kind of work, as Arena rates itoverall
limitNoHow many models to list (up to 200 for the whole catalogue)
makerNoOnly this maker, for example anthropic or openai
needsNoWhat the model must be able to do
min_contextNoSmallest prompt size the model must take, in tokens
max_output_priceNoHighest answer price, dollars per 1M tokens

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context: browsing returns highest-rated models at their cheapest listing with ratings, while passing `name` switches to a lookup that lists every host offering that model. It does not add much beyond that, but with annotations and an output schema present, this is appropriately informative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary behavior, then usage guidance, then exclusions. Every sentence earns its place, and there is no redundant repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter read-only catalogue tool with a complete input schema, output schema, and explicit annotations, the description gives enough about modes, filters, and alternatives for an agent to call it correctly. Return-value details are correctly left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters are already documented in the input schema. The description reinforces the key filters (price, prompt size, ability, maker limits, and `name` mode) but does not add syntax or edge-case semantics beyond what the schema provides; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: list/filter models, or look up one model by name and list every host offering it. It clearly distinguishes the browse mode from the name-lookup mode, so an agent can tell what the tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use this when browsing or filtering the catalogue, or to find a model's exact name. It also names alternatives and exclusions: compare_models for choosing between named models, suggest_for_project for a prompt in hand, and estimate_cost for a budget.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forecast_jobForecast JobA
Read-onlyIdempotent

Estimate a whole job's time, cost and accuracy from a promptfoo run of a sample of it: for each model in the sample, the time as a usual time and a slow day, the cost at its cheapest listing next to the listing the sample used, the 90-day chance of a price change, how often it was right (95% range) and the break-even against the pick. Use when a promptfoo results file of a sample exists and the whole job's size is known. Not for a job with no sample (estimate_cost for money, estimate_time for time).

NameRequiredDescriptionDefault
wayNoHow the models are called (default: read from each provider)
itemsYesHow many tests the whole job has
thinkingNoThinking turned on
concurrencyNoCalls running at once in the whole job (default: as the sample ran)
promptfoo_resultsYesPath of a promptfoo results file from a sample of the job (promptfoo eval --filter-sample 20 -o sample.json)
wrong_answer_costNoDollars a wrong answer costs you to catch and fix; the pick then counts it

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety is covered. The description adds genuine estimation semantics beyond that (that cost is reported at the cheapest listing next to the listing the sample used, that accuracy carries a 95% range, that break-even is computed against the pick), which tells the agent how to interpret the numbers. It stops short of stating assumptions or limits on the extrapolation, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead clause front-loads the action and resource, and the trailing sentences carry routing information rather than filler. It is dense and slightly run-on in the output enumeration, but nearly every clause earns its place by naming a distinct reported metric.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema already defines return values, annotations cover the safety profile, and schema coverage is 100%, so the description only needs to convey purpose, preconditions and sibling routing — all of which it does. Nothing an agent needs to select or invoke this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (way, thinking, concurrency, wrong_answer_cost, items, promptfoo_results) is already documented in the schema, setting the baseline at 3. The description references the sample and the whole job's size but adds no format or defaulting nuance beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (estimate) and resource (a whole job's time, cost and accuracy) and enumerates exactly which outputs are produced: usual/slow-day time, cheapest-vs-used listing cost, 90-day price-change chance, accuracy range and break-even. It also distinguishes itself from the similar-sounding siblings by requiring a promptfoo sample, so an agent can separate it from estimate_cost/estimate_time without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit precondition: 'Use when a promptfoo results file of a sample exists and the whole job's size is known.' Explicit exclusion plus named alternatives: 'Not for a job with no sample (estimate_cost for money, estimate_time for time).' Both the when and the when-not, with the correct fallback tools, are stated outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

local_or_cloudLocal Or CloudA
Read-onlyIdempotent

Compare running an open model on a computer you buy with paying a cloud model per call: the cost a month each way, the month the computer pays for itself, and whether it keeps up with the load. Use when the question is whether to buy hardware for a local model. Needs timed runs of the local model (log_run) and the computer's price; electricity comes from EIA or the user's own rate. Not for cloud-only comparisons (compare_models or estimate_cost).

NameRequiredDescriptionDefault
stateNoA US state, for EIA's average there, for example Texas
wattsNoPower the computer draws while it answers, in watts
monthsNoHow many months to compare over
thinkingNoThinking turned on for the local model
local_wayNoHow the local model is calledollama
local_modelYesThe open model you would run at home, as Ollama names it, for example llama3.1:8b
cloud_modelsYes1 to 5 cloud models to compare with
input_tokensYesPrompt tokens per call
cached_tokensNoPrompt tokens read from the cloud model's cache
output_tokensYesAnswer tokens per call, including hidden thinking
hardware_priceYesWhat the computer costs you, in dollars
calls_per_monthYesCalls a month
electricity_priceNoYour electricity price, dollars per kWh (default: EIA's average for homes)

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), and the description adds real context beyond them: the tool depends on prior log_run measurements and pulls electricity cost from EIA or a user-supplied rate. It does not discuss sensitivity of the break-even result or how load feasibility is judged, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the decision the tool answers, then prerequisites, then exclusions. Phrasing like "the cost a month each way" is slightly compressed but no sentence is wasted; structure is sound.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter, 6-required analysis tool with an output schema and full annotations, the description covers purpose, prerequisites, and alternatives adequately. Remaining gaps (result interpretation, what happens with missing run data) are minor given the output schema documents return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 13 parameters are already documented, including the electricity_price default and the state/watts options. The description only reinforces the electricity source and the hardware-price input, adding little beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific comparison verb and both resources: local hardware cost versus per-call cloud cost, plus the derived outputs (break-even month, whether it keeps up with load). It also names the sibling tools it is not, so an agent can separate it from compare_models and estimate_cost without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit use condition ("Use when the question is whether to buy hardware for a local model"), explicit exclusion ("Not for cloud-only comparisons (compare_models or estimate_cost)"), and stated prerequisites (timed runs via log_run, hardware price). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

log_runLog RunA

Record a timed run (model, tokens, seconds, how it was called), or every result of a promptfoo results file, in a file on this computer so estimate_time can learn from it. Use right after a call or a promptfoo run whose time is known. Not a query: it stores and returns what it stored. Nothing is sent anywhere.

NameRequiredDescriptionDefault
wayNoHow the model was called (default api; for a promptfoo file, read from each provider)
taskNoThe kind of work, if known
modelNoThe model that ran
secondsNoHow long the call took
thinkingNoThinking was on (a promptfoo result that counts thinking tokens is marked on by itself)
input_tokensNoPrompt tokens of the call
output_tokensNoAnswer tokens of the call, hidden thinking included
promptfoo_resultsNoPath of a promptfoo results file (promptfoo eval -o results.json): every result becomes a run

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring non-destructive, local (openWorldHint=false) and non-idempotent, the description adds real value: writes to a file 'on this computer', 'Nothing is sent anywhere' (privacy/data-locality guarantee an agent may need to relay), and 'returns what it stored'. It does not warn that repeated calls append duplicate records despite idempotentHint=false, which is the one consequence an agent would most want spelled out.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: what it records first, when to use it second, and the non-query/locality caveats last. No filler and no repetition of schema detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists and annotations cover safety, so the description only needs purpose, trigger and behavioral caveats — all present. The main residual gap is what happens on repeated logging (duplicate records vs. update) and where the file lives, which matters for a stateful writer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema, including the promptfoo_results path semantics and the thinking auto-detection. The description only re-lists 'model, tokens, seconds, how it was called' without adding format, precedence, or mutual-exclusion rules between a single run and a results file. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Record a timed run') plus the two supported input modes (single run with model/tokens/seconds/way, or a whole promptfoo results file) and the downstream consumer (estimate_time). An agent can distinguish it from estimate_time or forecast_job without inspecting any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use right after a call or a promptfoo run whose time is known' gives a clear timing condition, and 'Not a query: it stores and returns what it stored' explicitly rules out the wrong usage pattern. It stops short of naming which sibling to call instead when the agent does want a query, so it's a strong 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

not_yet_pricedNot Yet PricedA
Read-onlyIdempotent

List the models Arena has rated that LiteLLM's catalogue does not price yet, with how soon the catalogue usually prices a maker's models after Arena first shows them. Use when a brand-new model is missing from the other tools' answers, or to ask what is coming. Not for models that already have a price (find_models).

NameRequiredDescriptionDefault
makerNoOnly this maker, for example meta or ibm

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds genuine context the annotations cannot: that results include the typical lag between Arena first showing a model and the catalogue pricing it, which shapes how the output should be read. It stops short of describing result ordering or volume, a minor gap given an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all load-bearing, with the definition first and routing second. The opening clause is slightly dense ('models Arena has rated that LiteLLM's catalogue does not price yet') but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single optional-parameter read tool with full schema coverage and an output schema, the description covers purpose, routing and the meaning of the returned timing data. The only omission is the behaviour of the default no-maker case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter carries its own description with examples (meta, ibm), so the schema does the heavy lifting. The description implies per-maker aggregation but never says what omitting maker returns (all makers). Baseline 3 is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and a precisely scoped resource: models Arena has rated that LiteLLM's catalogue does not price yet. It also names the sibling (find_models) that covers the complementary set, so an agent can separate the two without reading either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States both triggering conditions (a brand-new model missing from other tools' answers, or asking what is coming) and an explicit exclusion: not for models that already have a price, use find_models. There is essentially nothing left to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

price_historyPrice HistoryA
Read-onlyIdempotent

Show one model's price history: every price and retirement date change since 2023 on every host, each with the LiteLLM change behind it, the chance of a price change, retirement or removal in the next 90 days and year, and with date, the prices on that day. Use when the question is about one model over time, a past price, or how likely a price is to move. Not for today's cheapest price of several models (find_models or estimate_cost).

NameRequiredDescriptionDefault
dateNoA day as YYYY-MM-DD: each listing's prices that day and the change that set them
modelYesA model name, for example claude-opus-5.5, or one listing such as bedrock/anthropic.claude-opus-5-5

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered and the description instead spends its words on payload content — the historical change records, the sourcing ('LiteLLM change behind it'), and probabilistic 90-day/year forecasts. It omits result size/pagination and how ambiguity between a bare model name and a host-qualified listing is resolved, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key scoping and exclusion information is front-loaded and there is no filler; the exclusion clause doubles as routing. The first sentence is a long multi-clause run-on that could be split for faster scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-shape explanation is optional, and the description still summarizes the payload well; usage and alternatives are fully covered. The only residual gap for a 2-param read tool is no note on model-name resolution or empty/missing-history behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters already carry descriptions, so the schema does the heavy lifting. The description's 'with `date`, the prices on that day' restates what the schema field description already says, adding no new syntax, format, or edge-case guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Show one model's price history') and enumerates exactly what is returned: price/retirement changes since 2023, the LiteLLM change, and forward-looking risk over 90 days and a year. It explicitly contrasts itself with find_models and estimate_cost, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the positive trigger ('one model over time, a past price, or how likely a price is to move') and the exclusion ('Not for today's cheapest price of several models'), naming the two sibling tools that should be used instead. Both sides of the routing decision are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

price_my_usagePrice My UsageA
Read-onlyIdempotent

Price the user's own past coding agent usage, from a ccusage or codeburn export, on every rated model: each session at the price of its day, the models that keep the rating and cost less, a 95% range for the cost per session, and whether two models differ for real or the data cannot tell. Use when a usage export (or a list of token mixes) exists and the question is what the same work would have cost elsewhere. Not for a future workload (estimate_cost) or for a prompt (suggest_for_project). Reads token counts, names and dates only; nothing leaves the computer.

NameRequiredDescriptionDefault
mixNoInstead of a file: token mixes as {model, date, input, output, cache_read, cache_write, session?}
taskNoThe kind of work the sessions were (default: codeburn's categories, else coding)
limitNoHow many models to list in every_model (the cheapest first)
exportNoPath of a token export on this computer: `ccusage daily --json > f.json`, `ccusage session --json > f.json`, or `codeburn export -f json -o f.json`
compareNoTwo models to test against each other on the same sessions

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only and idempotent annotations, the description discloses the data scope ('Reads token counts, names and dates only') and privacy property ('nothing leaves the computer'). It also characterizes the analysis outputs, including per-session historical pricing, cheaper alternatives, a 95% range, and model-comparison significance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded with the core action, then adds use conditions, exclusions, and privacy context. Despite being a dense paragraph, every clause contributes relevant selection or behavioral information for a complex analysis tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, full input-schema descriptions, and read-only annotations, the description supplies the remaining needed context: what the tool answers, when to choose it, when not to, and its local-only data handling. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented in the input schema. The description adds domain context that inputs can come from a ccusage/codeburn export or token mixes, but it does not add parameter-specific detail for task, limit, or compare beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: pricing the user's own past coding-agent usage from an export or token-mix list across every rated model. It also explicitly distinguishes this from sibling tools for future workloads (estimate_cost) and prompts (suggest_for_project).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use condition: when a usage export or token-mix list exists and the question is what the same work would have cost elsewhere. It also names when not to use it, routing the agent to estimate_cost and suggest_for_project.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_for_projectSuggest For ProjectA
Read-onlyIdempotent

Suggest a model and effort level for a prompt or a described project: it guesses the kind of work and names the best value (the cheapest model the votes cannot tell apart from the top), the top rated and the cheapest rated, each with its cost per task. Use when the user asks "which model should I use for this" and the work itself is in hand. Not for named candidates (compare_models) or for browsing by limits (find_models).

NameRequiredDescriptionDefault
payNoapi: dollars; claude or chatgpt: compare within that planapi
answerNoTypical answer lengthmedium
promptYesThe project's starting prompt, or a description of the work

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety is covered; the description adds the non-obvious behavior that it infers the type of work from the prompt and that 'best value' is defined by vote-indistinguishability from the top model rather than raw benchmark rank. It does not say how stable/repeatable the suggestion is or how the pay/answer settings change the ranking, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose in the first clause, then the usage rule and exclusions; no filler sentences. The parenthetical defining best value is dense and slightly convoluted, which is the only cost to readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Since an output schema exists, the description needn't enumerate return values, yet it still names the three recommendation slots and the cost-per-task figure, which is enough for an agent to know what to do with the result. The only gap is not explaining that the pay setting switches the comparison basis between dollars and plan tiers, which affects how results should be interpreted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both enums are documented inline, so the schema carries the parameter burden. The description mentions effort level and cost per task but does not elaborate on how 'pay' (api vs claude vs chatgpt) or 'answer' length shift the recommendation, adding little beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (suggest) and resource (model + effort level for a prompt/project), and explains what the recommendation contains: best value, top rated, cheapest rated, each with cost per task. It explicitly distinguishes itself from siblings compare_models and find_models by name, so an agent can pick it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the user asks "which model should I use for this" and the work itself is in hand') plus two named exclusions with the conditions that select them (compare_models for named candidates, find_models for browsing by limits). This is the full when/when-not/alternative pattern.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv1.22.0
    • Changedfind_models3 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"How many models to list (up to 200 for the whole catalogue)"
      • changedInput schema / properties / limit / maximum
        Previous value: -20New value: +200
      • addedInput schema / properties / name
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Look up one model by name instead of browsing: all its listings"
        +}
    • Addedprice_my_usage
  2. 10 tool updatesv0.1.7
    • First observedcompare_models
    • First observedestimate_cost
    • First observedestimate_time
    • First observedfind_models
    • First observedforecast_job
    • First observedlocal_or_cloud
    • First observedlog_run
    • First observednot_yet_priced
    • First observedprice_history
    • First observedsuggest_for_project

TDQS

A4.4/5.0

Scored across 11 tools

Disambiguation5/5

Each tool has a distinct purpose and input context, and the descriptions explicitly exclude neighboring tools. Cost/time estimators may look similar at a glance, but they are cleanly separated by data source: workload, promptfoo sample, logged runs, usage export, or local hardware.

Naming Consistency4/5

All names use consistent snake_case and most follow a clear verb_noun pattern, such as find_models, compare_models, estimate_cost, and log_run. A few names are noun or adjective phrases, like price_history and not_yet_priced, but they remain readable and predictable.

Tool Count5/5

Eleven tools is well-scoped for an LLM pricing, comparison, and forecasting server. Each tool covers a meaningful workflow rather than duplicating another, so the set does not feel bloated or thin.

Completeness5/5

The surface covers model discovery, direct comparison, cost and time estimation, historical pricing, future/unpriced models, prompt-based recommendation, usage repricing, local-vs-cloud analysis, and run logging. These tools form a complete lifecycle for the stated domain with no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Live LLM API pricing: current token prices, model comparisons, cheapest-model lookups, and The LLM Price Index for 150+ models across 20+ providers, re-verified daily. No API key required.
    4
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables assistants to access up-to-date LLM pricing, context windows, and model identifiers, with tools to estimate costs, find cheapest models, and check scheduled price changes.
    30 npm
    MIT