Skip to main content
Glama

utilpeek: cheapest GPU per hour on AWS, Azure, Google Cloud and Akash, on-demand, spot and marketplace bids, by chip, memory and region

get_gpu_prices
Read-onlyIdempotent

utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google Cloud (list prices) and Akash (marketplace bids with GPUs free), by chip, memory, minimum GPUs per cloud machine, region and price ceiling; returns USD per machine-hour or null for unknown shape and an unknown-shape exclusion count; optionally rent-or-buy break-even. Input: all optional: chip, min_gpu_mem_gb, min_gpus_per_machine, provider, regions, pricing, max_usd_per_gpu_hour, limit, rent_vs_buy. List prices from a snapshot refreshed twice a day, excluding tax, egress and storage; spot changes often. A snapshot over 36 hours old is a 503 (not charged). Typically under 0.1 s. Price: USD 0.002. Free: 10 utilpeek calls per IP per UTC day. Docs: https://tanod.dev/learn/cloud-gpu-price-api.html

Input Schema

NameRequiredDescriptionDefault
chipNoGPU chip, any case, e.g. H100 or A100 80GB.
limitNoRows to return, 1-100.
pricingNoPrice to rank by; any is the lower of the two and also includes Akash marketplace rows (ranked by median bid); on_demand and spot are cloud list prices only.any
regionsNoRegion names, e.g. us-east-1.
providerNoAWS, Azure, Google Cloud or Akash (marketplace bids, with GPUs free).
rent_vs_buyNoRent-or-buy break-even against the cheapest matching row: monthly cloud cost, monthly ownership cost, break-even month and totals. When min_gpus_per_machine is set and rent_vs_buy.gpus is omitted, compares all GPUs of that machine; an explicit gpus overrides it. Same price.
min_gpu_mem_gbNoMinimum GPU memory in GB.
max_usd_per_gpu_hourNoCeiling on the ranked price, USD.
min_gpus_per_machineNoMinimum GPUs in one cloud machine (1-16). Excludes rows without a known machine shape, including Akash marketplace inventory; count_excluded_unknown_machine_shape reports otherwise-matching rows excluded.

Output Schema

NameRequiredDescriptionDefault
noteNo
rowsNo
errorNoOnly on an error result: an object {code, message}, or the reason string of an x402 PaymentRequired object.
pricingNo
sourcesNo
rent_vs_buyNoOnly with the rent_vs_buy input: break-even against the cheapest matching row; null when no row matches (see rent_vs_buy_unavailable).
generated_atNo
count_matchedNo
count_returnedNo
rent_vs_buy_unavailableNo
count_excluded_unknown_machine_shapeNoOtherwise-matching priced rows excluded because min_gpus_per_machine is set and their machine shape is unknown (including Akash inventory). Before limit; zero without the filter. Only rows available from the snapshot and best-effort Akash read are counted.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / $defs / RentVsBuy / properties / gpus / description
      Previous value: -"Number of GPUs bought and rented."New value: +"Number of GPUs bought and rented. Defaults to 1, or to the cheapest matching machine's GPU count when min_gpus_per_machine is set; an explicit value overrides that default."
    • addedInput schema / properties / min_gpus_per_machine
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 16,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Minimum GPUs in one cloud machine (1-16). Excludes rows without a known machine shape, including Akash marketplace inventory; count_excluded_unknown_machine_shape reports otherwise-matching rows excluded.",
      +  "title": "Min Gpus Per Machine"
      +}
    • changedInput schema / properties / rent_vs_buy / description
      Previous value: -"Rent-or-buy break-even against the cheapest matching row: monthly cloud cost, monthly ownership cost, break-even month and totals. Same price."New value: +"Rent-or-buy break-even against the cheapest matching row: monthly cloud cost, monthly ownership cost, break-even month and totals. When min_gpus_per_machine is set and rent_vs_buy.gpus is omitted, compares all GPUs of that machine; an explicit gpus overrides it. Same price."
    • addedOutput schema / properties / count_excluded_unknown_machine_shape
      Added value: +{
      +  "description": "Otherwise-matching priced rows excluded because min_gpus_per_machine is set and their machine shape is unknown (including Akash inventory). Before limit; zero without the filter. Only rows available from the snapshot and best-effort Akash read are counted.",
      +  "minimum": 0,
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / rows / items / properties / gpus / description
      Added value: +"GPUs per cloud machine when known; Akash rows: total marketplace inventory, not a machine size."
    • addedOutput schema / properties / rows / items / properties / usd_per_machine_hour
      Added value: +{
      +  "description": "Selected per-GPU rate times GPUs in the cloud machine, rounded to 4 decimal places (USD per machine-hour). Snapshot per-GPU rates are already rounded to 4 decimals, so this can differ slightly from the provider's instance price due to rounding. Null for unknown machine shape, including Akash inventory.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  2. Changed10 schema fields changed
    • changedInput schema / properties / pricing / description
      Previous value: -"Price to rank by; any is the lower of the two."New value: +"Price to rank by; any is the lower of the two and also includes Akash marketplace rows (ranked by median bid); on_demand and spot are cloud list prices only."
    • changedInput schema / properties / provider / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "AWS",
      -      "Azure",
      -      "Google Cloud"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "AWS",
      +      "Azure",
      +      "Google Cloud",
      +      "Akash"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / provider / description
      Previous value: -"AWS, Azure or Google Cloud."New value: +"AWS, Azure, Google Cloud or Akash (marketplace bids, with GPUs free)."
    • addedOutput schema / properties / rows / items / properties / gpus_available
      Added value: +{
      +  "description": "Akash rows: GPUs free at read_at",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / rows / items / properties / gpus_total
      Added value: +{
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / rows / items / properties / max_usd_per_gpu_hour
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / rows / items / properties / median_usd_per_gpu_hour
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / rows / items / properties / min_usd_per_gpu_hour
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / rows / items / properties / price_kind / enum
      Previous value: -[
      -  "on_demand",
      -  "spot",
      -  null
      -]New value: +[
      +  "on_demand",
      +  "spot",
      +  "marketplace_bid",
      +  null
      +]
    • addedOutput schema / properties / rows / items / properties / read_at
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed9 schema fields changed
    • addedInput schema / $defs
      Added value: +{
      +  "RentVsBuy": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "gpus": {
      +        "default": 1,
      +        "description": "Number of GPUs bought and rented.",
      +        "maximum": 1024,
      +        "minimum": 1,
      +        "title": "Gpus",
      +        "type": "integer"
      +      },
      +      "hours_per_month": {
      +        "default": 730,
      +        "description": "Hours per month the GPUs run (utilisation).",
      +        "maximum": 744,
      +        "minimum": 1,
      +        "title": "Hours Per Month",
      +        "type": "number"
      +      },
      +      "months": {
      +        "default": 36,
      +        "description": "Horizon in months.",
      +        "maximum": 120,
      +        "minimum": 1,
      +        "title": "Months",
      +        "type": "integer"
      +      },
      +      "pue": {
      +        "default": 1,
      +        "description": "Power usage effectiveness multiplier for cooling and overhead.",
      +        "maximum": 3,
      +        "minimum": 1,
      +        "title": "Pue",
      +        "type": "number"
      +      },
      +      "purchase_usd": {
      +        "description": "Purchase price of the GPUs in USD.",
      +        "exclusiveMinimum": 0,
      +        "maximum": 10000000,
      +        "title": "Purchase Usd",
      +        "type": "number"
      +      },
      +      "resale_pct": {
      +        "default": 0,
      +        "description": "Resale value after the horizon, percent of the purchase price.",
      +        "maximum": 100,
      +        "minimum": 0,
      +        "title": "Resale Pct",
      +        "type": "number"
      +      },
      +      "usd_per_kwh": {
      +        "default": 0.15,
      +        "description": "Electricity price in USD per kWh.",
      +        "exclusiveMinimum": 0,
      +        "maximum": 5,
      +        "title": "Usd Per Kwh",
      +        "type": "number"
      +      },
      +      "watts_per_gpu": {
      +        "anyOf": [
      +          {
      +            "exclusiveMinimum": 0,
      +            "maximum": 2000,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Power draw per GPU in watts under load; defaults by chip when the chip is a known one (H100 700, A100 400, L4 72), else required.",
      +        "title": "Watts Per Gpu"
      +      }
      +    },
      +    "required": [
      +      "purchase_usd"
      +    ],
      +    "title": "RentVsBuy",
      +    "type": "object"
      +  }
      +}
    • changedInput schema / properties / provider / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "AWS",
      -      "Azure"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "AWS",
      +      "Azure",
      +      "Google Cloud"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / provider / description
      Previous value: -"AWS or Azure."New value: +"AWS, Azure or Google Cloud."
    • addedInput schema / properties / rent_vs_buy
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/RentVsBuy"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Rent-or-buy break-even against the cheapest matching row: monthly cloud cost, monthly ownership cost, break-even month and totals. Same price."
      +}
    • addedOutput schema / properties / rent_vs_buy
      Added value: +{
      +  "description": "Only with the rent_vs_buy input: break-even against the cheapest matching row; null when no row matches (see rent_vs_buy_unavailable).",
      +  "properties": {
      +    "break_even_month": {
      +      "description": "First month the cumulative cloud cost reaches the purchase plus power so far (resale credited at the horizon); null if never within the horizon",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "cheaper_over_horizon": {
      +      "enum": [
      +        "buy",
      +        "rent",
      +        "equal",
      +        null
      +      ]
      +    },
      +    "cloud_row": {
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "inputs": {
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "monthly_cloud_usd": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "monthly_depreciation_usd": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "monthly_ownership_usd": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "monthly_power_usd": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "note": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "total_cloud_usd": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "total_ownership_usd": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / rent_vs_buy_unavailable
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / rows / items / properties / basis
      Added value: +{
      +  "description": "instance_share: price per GPU including a share of vCPU and memory",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / rows / items / properties / memory_gib_per_gpu
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / rows / items / properties / vcpus_per_gpu
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
  4. Added

TDQS

A4/5.0
Behavior5/5

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

Beyond the annotations, the description discloses important behavior: list prices come from a snapshot refreshed twice a day, tax/egress/storage are excluded, spot prices change often, and a snapshot over 36 hours old returns an uncharged 503. It also states the response includes USD per machine-hour or null for unknown shape plus an unknown-shape exclusion count, and notes Akash marketplace bids with GPUs free.

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 purpose is front-loaded and the description is appropriately dense for a complex pricing tool. There is minor redundancy between the title, the opening phrase, and the "Returns..." sentence, but the operational details and docs link earn their place.

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?

With annotations, a full schema, and an output schema available, the description still provides the extra operational context an agent needs: data freshness, exclusions, failure behavior, latency, cost, free-tier limits, and documentation. Nothing material appears 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 nine parameters thoroughly. The description lists the input names and adds some contextual notes, but most parameter meaning is already present in the schema, so this meets the baseline rather than adding substantial new semantics.

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 gives a specific verb and resource: "Returns cheapest GPU prices per GPU-hour" across AWS, Azure, Google Cloud, and Akash, with ranking by chip, memory, machine shape, region, and price ceiling. It is easy to distinguish from most siblings, but it does not mention the closely related `get_gpu_price_index` sibling, so it falls short of full sibling differentiation.

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?

The description provides operational context such as latency, price per call, free daily calls, and data freshness, which implies when the tool is appropriate. However, it gives no explicit when-to-use/when-not-to-use guidance and does not route the agent to alternatives such as `get_gpu_price_index`.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources