Skip to main content
Glama
aicostbudget

AICostBudget AI API Pricing

AI API Pricing Dataset

An AI API and LLM pricing dataset for OpenAI, Anthropic Claude, Google Gemini, xAI, DeepSeek, Mistral AI, and Cohere, built for cost estimation, budget planning, and model price comparison.

Published as JSON, CSV, and a Hugging Face dataset, with machine-readable records linked to official provider pricing sources and regularly validated. Prices change frequently, so production budget decisions should always be checked against the relevant provider pricing pages.

Validate Code license: MIT Data license: CC BY 4.0

Dataset access

Related MCP server: Price Tracker AI MCP

Use it from code or an AI assistant

  • JavaScript/TypeScript: npm install ai-api-pricing for source-linked prices, model comparisons, and deterministic token-cost estimates.

  • AI assistants: npx -y ai-api-pricing-mcp exposes read-only MCP tools for prices, monthly estimates, comparisons, and price changes.

Both packages return the official provider source URL and verification date with pricing results. See package documentation and MCP client setup.

Interactive Tools

Distribution projections

The GitHub Pages /api/v1 JSON and CSV publish the canonical records in this repository. The AICostBudget Website JSON/CSV and Hugging Face files publish the Pricing V2 public Website projection, including structured tier and pricing-component metadata. Current public export schema 1.10.0 adds generic promotion/list-price conditions and aligns the access/binding extension with the Website (contract); historical releases retain their original schema version. Schema 1.8.0 preserves generic usage_tier conditions and adds transport selection, modality-aware components, mutually exclusive measurement alternatives, optional feature charges, and independent model-default metadata. Eligibility-scoped conditional_usage_allowances remain separate from standard paid tiers. Hugging Face must match the Website projection exactly by key set and exported fields; it is not expected to match the intentionally narrower GitHub Pages V1 key set.

The existing scalar input, cached-input, and output values remain the compatibility/default pricing view. pricing_components is the full conditional view: each entry combines a charge component, decimal-string amount, condition, provenance, verification status, and effective range. One model can have separate cache_write_5m and cache_write_1h entries, or cache-write entries for different processing modes and context classes, so cache write cannot be modeled permanently as one universal scalar.

Dataset Trust & Freshness

This repository publishes a versioned dataset and read-only static API for AI API pricing. It is designed for developers, SaaS builders, FinOps teams, researchers, technical writers, and AI systems that need maintained pricing records instead of ad hoc scraped snippets.

This project is maintained as an independent public dataset by AICostBudget.

Why this dataset?

  • Source-linked pricing records

  • Unknown or unverified values remain null, never 0

  • Versioned JSON and CSV outputs

  • Per-model history files

  • Dated full snapshots

  • Read-only static API

  • Suitable for calculators, dashboards, cost analysis, and AI FinOps tooling

The weekly freshness workflow checks source URLs and stale last_verified_at values. It does not guess, infer, or overwrite prices automatically.

Quick Start

Latest JSON

curl -L https://aicostbudget.github.io/ai-api-pricing-data/api/v1/prices.json

Latest CSV

curl -L https://aicostbudget.github.io/ai-api-pricing-data/api/v1/prices.csv

Single model record

curl -L https://aicostbudget.github.io/ai-api-pricing-data/api/v1/models/openai/gpt-4.1.json

Python

import json
import urllib.request

url = "https://aicostbudget.github.io/ai-api-pricing-data/api/v1/models/openai/gpt-4.1.json"
with urllib.request.urlopen(url) as response:
    model = json.load(response)

print(model["provider_id"], model["model_id"], model["pricing"]["input"])

JavaScript

const url = "https://aicostbudget.github.io/ai-api-pricing-data/api/v1/models/openai/gpt-4.1.json";

async function main() {
  const response = await fetch(url);
  const model = await response.json();

  console.log(model.provider_id, model.model_id, model.pricing.input);
}

main();

Developer utility: retry and fallback cost diagnostics

Run the repository's dependency-free Python example to estimate the cost of anonymized LLM task attempts while keeping first attempts, retries, and model fallbacks separate:

python examples/llm_cost_diagnostics.py examples/sample_llm_attempts.json

Expected output for the checked-in synthetic input and current checked-in Pricing V2 catalog:

LLM cost diagnostics
Input provenance: synthetic_example_not_production_measurement
Pricing catalog: data/pricing-v2-preview/generated/model-pricing.v2.json
Tasks: 3
Successful tasks: 2
Attempts: 5
Billed attempts: 5
Not-billed attempts: 0
First-attempt estimated cost (USD): 0.287500
Retry estimated cost (USD): 0.150000
Fallback estimated cost (USD): 0.300000
Total estimated cost (USD): 0.737500
Cost per successful task (USD): 0.368750

The example input is synthetic and is not a production measurement, provider invoice, or claimed success-rate benchmark. Replace it with anonymized attempt records from your own system. Each record must identify its task and attempt, classify the attempt as first_attempt, retry, or fallback, state whether the task attempt succeeded, and provide normalized usage by pricing component. usage.input must contain only uncached input tokens; cached input belongs in usage.cached_input so the two counts do not overlap.

The utility deliberately has a narrow billing scope:

  • It reads the checked-in Pricing V2 catalog and accepts only its verified, default-safe selected billing record.

  • It supports standard, short-context, global text pricing in USD per one million tokens for input, cached_input, and output components.

  • billing_status must be billed, not_billed, or unknown. An explicit not_billed attempt contributes zero; unknown stops the run instead of silently contributing zero.

  • Missing models or rates, conditional tiers, alternative processing modes, non-token units, unsupported usage components, and ambiguous billing conditions stop the run with an error.

  • Results are catalog-rate estimates for diagnostic comparison, not invoice reconciliation. Provider-specific taxes, contracts, credits, rounding, and unrecorded charges are outside this example's scope.

Use the interactive tools for scenario exploration:

Use Cases

  • Compare AI model prices

  • Estimate monthly AI API cost

  • Build LLM cost dashboards

  • Plan SaaS AI feature budgets

  • Track model pricing changes

Explore Pricing by Provider

Provider

Pricing page

Coverage

OpenAI

OpenAI API pricing

GPT models, cached input, cache-write pricing, batch and alternative processing modes, and long-context tiers

Anthropic

Anthropic API pricing

Claude models, prompt caching, cache-write pricing, and batch pricing

Google Gemini

Google Gemini API pricing

Gemini models, multimodal pricing, TTS, batch pricing, and cached input

xAI

xAI API pricing

Grok models, long-context tiers, processing-mode pricing, and speech/transcription pricing

DeepSeek

DeepSeek API pricing

DeepSeek chat and reasoning models, including cached-input pricing where available

Mistral AI

Mistral AI API pricing

Mistral model pricing with structured source and verification metadata

Cohere

Cohere API pricing

Cohere model pricing and supported non-token services

Dataset Coverage

The dataset covers multiple AI providers and supports both token-based and non-token pricing structures.

Coverage includes:

  • Standard input and output token pricing

  • Cached input and cache-write pricing

  • Batch and alternative processing modes

  • Long-context, usage-tier, and conditional pricing

  • Multimodal and non-token pricing

  • TTS, speech, and transcription pricing

  • Model lifecycle, provenance, and verification metadata

  • Structured conditional pricing components

Fields

The CSV output uses the following fields:

Field

Meaning

provider_id

Stable provider identifier.

model_id

Stable model identifier within the provider.

display_name

Human-readable model name.

model_family

Model family or grouping when available.

status

Model availability or lifecycle status.

currency

Pricing currency.

unit

Pricing unit, such as per-token or per-million-token billing units.

input

Input token price for the listed unit.

output

Output token price for the listed unit.

cached_input

Cached input token price when available.

cache_write

Cache write price when available.

batch_input

Batch input token price when available.

batch_output

Batch output token price when available.

official_source_url

Provider page or document URL used for source checking.

accessed_at

Date when the source was accessed.

last_verified_at

Date when the record was last verified.

effective_from

Date when the listed pricing became effective, if known.

notes

Additional context or caveats for the record.

API Reference

The static API is published through GitHub Pages:

  • /api/v1/prices.json

  • /api/v1/prices.csv

  • /api/v1/meta.json

  • /api/v1/providers/<provider>.json

  • /api/v1/models/<provider>/<model>.json

Unknown or unverified prices are represented as null, never 0.

The CSV output includes normalized pricing fields for provider, model, pricing unit, source URL, verification dates, and notes.

Historical Pricing

Per-model history files are stored under:

data/history/<provider>/<model>.jsonl

Dated full snapshots are stored under:

data/snapshots/<YYYY-MM-DD>/prices.json
data/snapshots/<YYYY-MM-DD>/prices.csv

Price Change Events

Canonical price change events are stored in:

data/price-change-events/events.jsonl

A price change event is different from a normal history verification row. History rows record source verification state for a model and may change when last_verified_at, official_source_url, or notes change. Price change events record verified scalar pricing semantics between two trusted snapshots and can also emit component_price_update when matching pricing_id + charge_id entries change amount while scalar prices remain unchanged. Component events preserve the component name, old and new decimal-string amounts, and condition. Component additions/removals are not treated as price launches because they may reflect coverage changes.

Baseline snapshots are not price changes. New snapshots, reordered files, source URL edits, status changes, or repeated verification dates must not create price change events when the prices are unchanged.

Date fields use separate meanings:

  • effective_from: provider-announced effective date only. It stays null when the provider did not publish one.

  • detected_at: the first snapshot date where the repository observed the change by comparing trusted snapshots.

  • verified_at: the date the new price was checked against an official provider source.

  • date_basis: one of provider_announced, official_changelog, first_observed, or unknown.

Preview events without writing:

python scripts\generate_price_change_events.py --before data\snapshots\2026-07-09\prices.json --after data\snapshots\2026-07-27\prices.json --dry-run

Generate the canonical JSONL projection:

python scripts\generate_price_change_events.py --before data\snapshots\2026-07-09\prices.json --after data\snapshots\2026-07-27\prices.json

The generator matches models by provider_id + model_id, compares only pricing semantics, writes stable sorted output, and merges by dedupe_key. The first version emits price_update, cached_price_added, and cached_price_removed; it does not emit pricing_added or pricing_removed because a model first appearing in a snapshot may be coverage expansion rather than an official pricing launch. The dedupe key is based on provider, model, old prices, new prices, unit, currency, and change type. It excludes verified_at, announcement_url, and notes so later metadata backfills update the same event instead of creating a duplicate.

Both source snapshots must already be tracked by Git before event generation. The generator fails closed rather than writing a canonical event that depends on an ignored, untracked, or local-only snapshot.

Manual backfills should edit the existing event with the same dedupe_key. Add effective_from only when an official provider announcement, official changelog, or pricing page explicitly gives the effective date. Add announcement_url only for an official URL; do not invent one.

Do not copy a fixed event count into documentation or product code. The validated records in data/price-change-events/events.jsonl are the authoritative current count.

Publication readiness is determined from the current event file: require at least 5 real price changes, at least 3 providers covered, an official source plus detected_at and verified_at for every event, explicit marking of unknown effective dates, and no inferred old prices. Passing these gates supports a recent verified price-changes feed; it does not by itself establish deep multi-year Pricing History coverage.

Methodology

Prices are accepted only from official provider pricing pages, official documentation, official APIs, or official announcements. Third-party calculators, SEO pages, Reddit posts, and competitor aggregators are not used as final price sources.

See METHODOLOGY.md.

Cite this dataset

For reproducible research, cite the frozen v1.1.0 release:

AICostBudget. AICostBudget AI API Pricing Dataset, v1.1.0 (snapshot 2026-09-30). https://doi.org/10.5281/zenodo.23087250.

The DOI identifies this fixed release, not the latest data. CITATION.cff provides its machine-readable citation metadata. The canonical live dataset continues to update; for current operational use, cite that URL with your access date. The export's generated_at and last_verified_at timestamps are separate from the access date. See the release process for projection and checksum rules.

Contributing

Contributions are welcome when they include official sources and preserve null for unknown values. See CONTRIBUTING.md.

License

Code is licensed under MIT in LICENSE-CODE. Data is licensed under Creative Commons Attribution 4.0 in LICENSE-DATA.

Disclaimer

AI API prices change frequently. Always verify official provider pricing pages before making production budget decisions.

This dataset is informational and may lag provider pricing changes. Provider names and trademarks belong to their respective owners. This project is not affiliated with, endorsed by, or sponsored by any listed provider.

Available Tools

5 tools
compare_modelsCompare modelsB
Read-onlyIdempotent

Compare monthly costs for multiple models and sort them from lowest to highest total.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelsYes
requests_per_monthYes
input_tokens_per_requestYes
output_tokens_per_requestYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
sourceYes
verified_atYes
aicostbudget_urlYes
bundled_fallbackYes
official_source_urlsYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds one useful behavioral detail (results sorted ascending by total cost), but says nothing about cost assumptions, currency, or how models are resolved.

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?

A single tight sentence with the action and the output ordering front-loaded. Every clause earns its place with no filler.

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

Completeness3/5

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

An output schema exists so return values need no explanation, and annotations cover safety. However, with 0% schema coverage on four required numeric parameters and no usage routing against estimate_monthly_cost, the definition is only minimally sufficient for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0% and all four parameters are required, so the description carries the full burden. It mentions 'models' and 'monthly costs' but never clarifies the token-volume parameters (input_tokens_per_request, output_tokens_per_request, requests_per_month) beyond what their names already imply, failing to compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb (compare) plus resource (monthly costs for multiple models) and even describes the ordering behavior. It implicitly distinguishes itself from the single-model sibling estimate_monthly_cost by scoping to 'multiple models', but never names that alternative explicitly.

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

Usage Guidelines3/5

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

'Multiple models' implies this is the multi-model variant versus estimate_monthly_cost, but there is no explicit when-to-use statement, no prerequisites, and no named alternative. Usage is only inferable from the plural scope.

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

estimate_monthly_costEstimate monthly costB
Read-onlyIdempotent

Estimate monthly token cost from request volume, with optional cached-input and batch pricing.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
use_batchNo
cached_input_ratioNo
requests_per_monthYes
input_tokens_per_requestYes
output_tokens_per_requestYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
sourceYes
verified_atYes
aicostbudget_urlYes
bundled_fallbackYes
official_source_urlsYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds useful context that caching and batch pricing modes affect the result, but says nothing about assumptions (e.g., cached ratio defaults) or output shape.

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?

A single front-loaded sentence with the primary action first and the optional pricing modes trailing. No filler or redundant restatement of the title.

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?

An output schema exists, so return-value explanation is unnecessary, and annotations cover behavior. The description is adequate for a 6-parameter estimation tool, though it leaves the sibling-selection question unanswered.

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 0%, so the description must carry the load. It loosely maps to the parameters (request volume, cached-input, batch pricing) but omits units, formats, and the model parameter entirely, so it only partially compensates.

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

Purpose4/5

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

Clear specific verb (estimate) plus resource (monthly token cost) and the driving input (request volume), with optional pricing modes called out. It does not differentiate itself from siblings like get_model_price or compare_models, but the core purpose is unambiguous.

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

Usage Guidelines2/5

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

No when-to-use, prerequisites, or alternatives are given. An agent cannot tell from this text whether to reach for this versus get_model_price for a single-model lookup or compare_models for a side-by-side. Usage is only implied by the verb 'estimate'.

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

get_model_priceGet model priceA
Read-onlyIdempotent

Find a model by ID or display name and return source-linked prices.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
sourceYes
verified_atYes
aicostbudget_urlYes
bundled_fallbackYes
official_source_urlsYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, covering the safety profile. The description adds 'source-linked prices', hinting at provenance of the returned data, but says nothing about lookup failure behavior or external-source reliability that openWorldHint implies.

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?

A single front-loaded sentence with zero filler; the core action and the accepted lookup keys come first.

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 one-parameter read tool with an output schema that documents the return shape, the description covers the essentials. The main omission is behavior when no model matches, which matters given the openWorldHint.

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 0%, so the description must carry the param burden. It usefully clarifies that the single 'model' argument accepts either an ID or a display name, but gives no guidance on ambiguity, casing, or partial matching.

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

Purpose4/5

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

The description states a specific verb (find/return) and resource (model, prices) and clarifies the lookup key accepts either an ID or a display name. It does not, however, explicitly differentiate itself from siblings like list_models or price_changes, so an agent must infer the boundary.

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

Usage Guidelines3/5

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

Usage is only implied: the description suggests you use this when you have a model identifier and want its price. There is no explicit when-not guidance and no mention of alternatives such as compare_models or price_changes, which overlap in subject matter.

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

list_modelsList modelsB
Read-onlyIdempotent

List source-linked models, optionally filtering by provider and maximum token prices.

ParametersJSON Schema
NameRequiredDescriptionDefault
providerNo
max_input_priceNo
max_output_priceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
sourceYes
verified_atYes
aicostbudget_urlYes
bundled_fallbackYes
official_source_urlsYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the agent knows this is a safe, repeatable read operation. The description adds only that models are 'source-linked' and filters are optional; it does not add other behavioral details such as pagination or result ordering, so a baseline 3 is appropriate given the annotation coverage.

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 a single front-loaded sentence with no wasted words. It immediately conveys the core action and the optional filter behavior, making it appropriately sized for a simple list tool.

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 simple list operation with rich annotations and an output schema, the description is largely complete. It states the core purpose and optional filters; remaining gaps like provider enumeration and price units are minor because the output schema and structured annotations cover the safety and return-shape concerns.

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 0%, so the description must compensate. It names the filter dimensions (provider and maximum token prices) and implies that both price parameters relate to token pricing, but it does not clarify accepted provider values, whether prices are input/output-specific, units, or currency. It adds some meaning over the bare schema but remains incomplete.

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

Purpose4/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 source-linked models,' with optional filtering by provider and maximum token prices. It is clear enough to distinguish from siblings like compare_models or get_model_price, but it does not explicitly name an alternative or state how listing differs from those tools.

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

Usage Guidelines2/5

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

The description says the tool can optionally filter by provider and maximum token prices, but it gives no when-to-use guidance, no conditions for choosing this over compare_models, get_model_price, price_changes, or estimate_monthly_cost, and no exclusions. Usage context is left entirely to inference.

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

price_changesPrice changesB
Read-onlyIdempotent

List up to 20 newest source-linked price-change events.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNo
providerNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
sourceYes
verified_atYes
aicostbudget_urlYes
bundled_fallbackYes
official_source_urlsYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral facts: the result is capped at 20, ordered newest-first, and each event is source-linked. It does not explain what the 'since'/'provider' filters do behaviorally.

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?

A single front-loaded sentence with no filler; the limit and ordering constraints are stated up front where an agent will read them.

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

Completeness3/5

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

An output schema exists, so return values need no explanation, and annotations carry the safety profile. The remaining gap is parameter meaning: two undocumented filters at 0% schema coverage, especially the open-ended 'provider' string, leave the agent guessing.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden for the two parameters — and it says nothing about 'since' or 'provider'. A caller cannot learn from either source what values 'provider' accepts or whether 'since' is inclusive.

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

Purpose4/5

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

The description states a specific verb ('List') and resource ('source-linked price-change events') with a clear scope ('up to 20 newest'). It is distinguishable from get_model_price or compare_models, but it never explicitly contrasts itself with those siblings.

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

Usage Guidelines2/5

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

There is no when-to-use statement, no exclusions, and no reference to the sibling tools. An agent must infer that this is a changelog/feed-style tool purely from the word 'events'.

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. 5 tool updates
    • First observedcompare_models
    • First observedestimate_monthly_cost
    • First observedget_model_price
    • First observedlist_models
    • First observedprice_changes

TDQS

A3.6/5.0

Scored across 5 tools

Disambiguation4/5

Each tool targets a distinct operation: listing models, looking up a price, estimating cost, comparing costs, and tracking price changes. compare_models and estimate_monthly_cost both compute costs, but their inputs (multiple models vs. request volume) and outputs are clearly differentiated.

Naming Consistency4/5

Four of five names follow a verb_noun snake_case pattern (compare_models, estimate_monthly_cost, get_model_price, list_models); price_changes is a noun phrase but still readable and consistent in casing.

Tool Count5/5

5 tools is well-scoped for a pricing data server; each tool covers a distinct capability (list, get, estimate, compare, change history) without redundancy.

Completeness4/5

Core lifecycle for pricing data (list, get, estimate, compare, change history) is covered. Minor gaps include no batch estimation across different request volumes or provider-specific metadata beyond price filtering.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers