FastGPU
Server Details
Compare live GPU cloud rental prices and match workloads to the cheapest provider.
- Status
- Healthy
- Uptime
- 100.0% over 58 days
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
TDQS
Scored across 2 tools
list_gpu_prices is a direct lookup keyed on a GPU model, while match_workload is a workload-driven ranked recommendation; the descriptions explicitly cross-reference each other ('use list_gpu_prices for the price of a named GPU'). Both deal with live GPU pricing, so there is mild thematic overlap, but the intended use cases are clearly separable.
Both names are snake_case verb_noun constructions (list_gpu_prices, match_workload). The pattern is uniform across the entire surface with no mixed conventions.
Two tools is thin for a price-comparison service, even a read-only one. The pair covers two distinct workflows (named-GPU lookup vs. workload matching), but users may reasonably want per-provider or per-region browsing that has no entry point.
For a read-only price feed, the surface covers both the direct price-lookup path and the workload-to-configuration recommendation path, with limits/budget parameters handled. Minor gaps exist (no provider listing, no historical or regional price browsing), but core workflows have no dead ends.
Available Tools
2 toolslist_gpu_pricesList cheapest GPU pricesARead-onlyIdempotentInspect
One entry per GPU model with its cheapest live on-demand cloud rental price in USD per GPU-hour, the provider offering it, and how many providers rent it, from FastGPU's live price feed across marketplaces, neoclouds and hyperscalers (RunPod, Vast.ai, Lambda, AWS and more). Use it to compare GPU rental prices or to find where a named GPU is cheapest to rent. Each price is the provider's own per-GPU rate: cheapest_min_gpu_count says when it is only sold as a multi-GPU instance, and cheapest_billed_separately names what the provider bills on top of it (CPU, memory, storage), null when the rate includes CPU and memory. page_url links to the GPU's live price page with every offer. Rental prices only: it does not rent, reserve or launch GPUs. No key required.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | Return only one class of GPU (case-insensitive; combines with vendor). flagship: the current top training and inference accelerators (H100, H200, B200, GB200, MI300X, MI355X). datacenter: earlier or mid-range data-center and workstation cards (A100, L40S, L4, A10, RTX 6000 Ada, V100, MI210). prosumer: desktop consumer and workstation cards (RTX 5090, RTX 4090, RTX 3090, RTX A4000). entry: small inference cards (T4, A2, A16, P4). Omit for every tier. | |
| vendor | No | Return only GPUs made by this vendor (case-insensitive). Combines with tier: both must match. Omit for every vendor. |
Output Schema
| Name | Required | Description |
|---|---|---|
| gpus | Yes | |
| count | Yes | |
| stale | No | |
| updated_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: 'live' feed, no key required, and the rental-only boundary. Much of the remaining text describes per-entry output fields, which overlaps the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and scoping in the first sentence and remains informative throughout. The middle sentences detailing cheapest_min_gpu_count, cheapest_billed_separately and page_url are somewhat redundant against the output schema, costing a little tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a moderate-complexity read tool with a full output schema and complete annotations, the description covers source, semantics, and boundaries adequately. Since an output schema exists, its return-field narration is not strictly necessary, leaving a small amount of unearned bulk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both params (tier, vendor) have full enum docs in the schema, so the baseline is 3. The description never mentions tier or vendor filtering, adding no parameter meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('One entry per GPU model with its cheapest live on-demand cloud rental price in USD per GPU-hour') and names the providers and source feed. It is clearly distinct from the sibling match_workload without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('compare GPU rental prices or to find where a named GPU is cheapest to rent') plus a firm when-not boundary ('Rental prices only: it does not rent, reserve or launch GPUs'). It does not name the sibling match_workload as the alternative, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_workloadMatch a workload to the cheapest GPUARead-onlyIdempotentInspect
Ranks up to eight GPU configurations that can run a job at the lowest live price. Describe the job in query (an open-weight model to serve or fine-tune, a model size, or a GPU need) or with the structured fields. Each match gives the GPU count, the USD per hour for the whole configuration and a one-line reason; the answer also states the VRAM the job needs and how much cheaper the top match is than a hyperscaler running the same job. Use it to decide where to run a workload; use list_gpu_prices for the price of a named GPU. Open-weight models only: an API-only model such as GPT-4 returns no matches and a note. Between otherwise equal offers, a small disclosed tie-break favors providers that pay FastGPU a referral (each match reports partner). Hard limits (budget_usd_hr, max_total_usd with duration_hours, max_quote_age_minutes) drop every configuration that breaks them; limits reports what was dropped. Read-only: it does not rent or launch GPUs. No key required.
| Name | Required | Description | Default |
|---|---|---|---|
| spot | No | Set true to include interruptible spot capacity for a cheaper rate. | |
| task | No | What the job does. | |
| model | No | Open model name to size against, e.g. "Llama 3 70B", "Qwen 72B", "Mixtral". | |
| query | No | Plain-language job, e.g. "cheapest to serve Llama 3 70B", "2x H100 for fine-tuning" or "a GPU with 80GB of memory". Provide this OR a structured spec below. | |
| region | No | Restrict to a data-residency region. | |
| vram_gb | No | Rough VRAM the job needs, in GB, if you already know it. | |
| params_b | No | Model size in billions of parameters when no exact model is named. | |
| reserved | No | Set true to include reserved / committed-term capacity for a lower rate. | |
| gpu_count | No | Exact positive GPU count. Overrides a count in query text. Returns no matches if no supported configuration fits; omit for automatic sizing. | |
| precision | No | Numeric precision to size the model at. | |
| weights_gb | No | Measured size of the weights as stored, in GB: the file you will load (for example a GGUF Q4_K_M build, which holds more bits per parameter than its nominal 4). Replaces parameters times bytes per parameter in the memory estimate. Used for a model sized by its parameter count; the answer's workload.weights_gb is null when it was not (an image or speech model sized as a whole pipeline). | |
| budget_usd_hr | No | Hard limit on the hourly price of the whole configuration, in USD. Configurations above it are not returned. | |
| max_total_usd | No | Hard limit on estimated_total_usd, the GPU rental cost of the whole job, in USD. Needs duration_hours. Configurations above it are not returned. | |
| duration_hours | No | How long the job will run, in hours (fractions are fine). When sent, each match carries billed_hours and estimated_total_usd. | |
| min_gpu_memory_gb | No | Memory each GPU card must have, in GB (e.g. 80 for 80GB-class cards such as the H100 or A100 80GB). Smaller cards are never returned. On its own it lists every card that size, cheapest first. | |
| max_quote_age_minutes | No | Hard limit on how old a price quote may be, in minutes. Configurations whose price was fetched from the provider longer ago are not returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hero | No | |
| note | No | Why there are no matches, when there are none. |
| as_of | No | When this answer was computed (ISO 8601). Quote ages are measured against it. |
| count | Yes | |
| error | No | Present when the request was not valid; says what to send instead. |
| stale | No | |
| limits | No | The hard limits this answer applied (null when one was not sent) and how many configurations each one left out. |
| matches | Yes | |
| workload | No | |
| updated_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Reveals behavior beyond annotations: tie-break favoring referral-paying providers, hard-limit filtering with 'limits' reporting dropped configs, API-only models returning no matches, and explicit read-only/no-rental statement. Rich disclosure not present in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with core outcome and helpful, though fairly dense across several sentences. Every sentence carries useful information, but the tie-break/partner disclosure is slightly buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 16 params and no required fields, the description covers both input modes, filtering behavior, output highlights, restrictions, and the read-only nature. Output schema exists so return fields need not be detailed; description still summarizes key outputs helpfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds cross-parameter semantics: budget_usd_hr/max_total_usd/duration_hours/max_quote_age_minutes as hard limits that drop configs, and query-vs-structured precedence hints. Marginal added value over schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (ranks/ranks up to eight configurations) and resource (GPU configs at lowest live price) with explicit scope and a named sibling (list_gpu_prices) for a different task. An agent can distinguish it from list_gpu_prices 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use it to decide where to run a workload; use list_gpu_prices for the price of a named GPU.' Also explains the query-vs-structured-fields alternative input paths and open-weight-only restriction.
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 tool update
- Changed
list_gpu_prices2 fields changed- changed
Input schema / properties / tier / descriptionPrevious value: -"Filter by tier."New value: +"Return only one class of GPU (case-insensitive; combines with vendor). flagship: the current top training and inference accelerators (H100, H200, B200, GB200, MI300X, MI355X). datacenter: earlier or mid-range data-center and workstation cards (A100, L40S, L4, A10, RTX 6000 Ada, V100, MI210). prosumer: desktop consumer and workstation cards (RTX 5090, RTX 4090, RTX 3090, RTX A4000). entry: small inference cards (T4, A2, A16, P4). Omit for every tier." - changed
Input schema / properties / vendor / descriptionPrevious value: -"Filter by GPU vendor."New value: +"Return only GPUs made by this vendor (case-insensitive). Combines with tier: both must match. Omit for every vendor."
1 tool update
- Changed
match_workload1 field changed- added
Input schema / properties / weights_gbAdded value: +{ + "description": "Measured size of the weights as stored, in GB: the file you will load (for example a GGUF Q4_K_M build, which holds more bits per parameter than its nominal 4). Replaces parameters times bytes per parameter in the memory estimate. Used for a model sized by its parameter count; the answer's workload.weights_gb is null when it was not (an image or speech model sized as a whole pipeline).", + "type": "number" +}
1 tool update
- Changed
match_workload14 fields changed- changed
Input schema / properties / budget_usd_hr / descriptionPrevious value: -"Only recommend configs at or under this hourly budget."New value: +"Hard limit on the hourly price of the whole configuration, in USD. Configurations above it are not returned." - added
Input schema / properties / duration_hoursAdded value: +{ + "description": "How long the job will run, in hours (fractions are fine). When sent, each match carries billed_hours and estimated_total_usd.", + "type": "number" +} - added
Input schema / properties / max_quote_age_minutesAdded value: +{ + "description": "Hard limit on how old a price quote may be, in minutes. Configurations whose price was fetched from the provider longer ago are not returned.", + "type": "number" +} - added
Input schema / properties / max_total_usdAdded value: +{ + "description": "Hard limit on estimated_total_usd, the GPU rental cost of the whole job, in USD. Needs duration_hours. Configurations above it are not returned.", + "type": "number" +} - added
Output schema / properties / as_ofAdded value: +{ + "description": "When this answer was computed (ISO 8601). Quote ages are measured against it.", + "type": "string" +} - added
Output schema / properties / errorAdded value: +{ + "description": "Present when the request was not valid; says what to send instead.", + "type": "string" +} - added
Output schema / properties / limitsAdded value: +{ + "description": "The hard limits this answer applied (null when one was not sent) and how many configurations each one left out.", + "properties": { + "budget_usd_hr": { + "type": [ + "number", + "null" + ] + }, + "duration_hours": { + "type": [ + "number", + "null" + ] + }, + "excluded": { + "properties": { + "older_than_max_quote_age_minutes": { + "type": "integer" + }, + "over_budget_usd_hr": { + "type": "integer" + }, + "over_max_total_usd": { + "type": "integer" + } + }, + "type": "object" + }, + "max_quote_age_minutes": { + "type": [ + "number", + "null" + ] + }, + "max_total_usd": { + "type": [ + "number", + "null" + ] + }, + "nearest_excluded": { + "description": "When the limits leave no match: the cheapest configuration that can still run the job, and the limits it breaks.", + "properties": { + "billed_hours": { + "description": "Hours the provider bills for duration_hours: rounded up to whole hours on a per-hour meter and to whole minutes on a per-minute meter. Null when duration_hours was not sent.", + "type": [ + "number", + "null" + ] + }, + "billing_increment": { + "description": "How this provider's meter ticks for on-demand rental; varies means FastGPU has no verified figure.", + "enum": [ + "per-second", + "per-minute", + "per-hour", + "varies" + ], + "type": "string" + }, + "breaks": { + "items": { + "type": "string" + }, + "type": "array" + }, + "effective_usd_hr": { + "type": "number" + }, + "estimated_total_usd": { + "description": "effective_usd_hr times billed_hours, rounded up to the cent. GPU rental only: storage, data transfer, CPU and memory billed separately, and provider minimums are not included. Null when duration_hours was not sent.", + "type": [ + "number", + "null" + ] + }, + "fetched_at": { + "description": "When this price was fetched from the provider (ISO 8601).", + "type": [ + "string", + "null" + ] + }, + "fits_single_card": { + "type": "boolean" + }, + "gpu": { + "type": "string" + }, + "gpu_count": { + "type": "integer" + }, + "monthly_usd": { + "type": "number" + }, + "offer_type": { + "type": "string" + }, + "over_budget": { + "type": "boolean" + }, + "page_url": { + "description": "Absolute URL of this GPU's live price page, with every live offer.", + "type": "string" + }, + "partner": { + "type": "boolean" + }, + "provider": { + "type": "string" + }, + "provider_label": { + "type": [ + "string", + "null" + ] + }, + "quote_age_seconds": { + "description": "Seconds between fetched_at and as_of. Null when the fetch time is unknown.", + "type": [ + "integer", + "null" + ] + }, + "reason": { + "type": "string" + }, + "reliability": { + "type": "string" + }, + "score": { + "type": [ + "number", + "null" + ] + }, + "tokens_per_sec": { + "type": [ + "number", + "null" + ] + }, + "url": { + "description": "Site-relative path of this GPU's live price page, e.g. /gpus/h100-sxm.", + "type": "string" + }, + "usd_per_million_tokens": { + "type": [ + "number", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + } + }, + "type": "object" +} - added
Output schema / properties / matches / items / properties / billed_hoursAdded value: +{ + "description": "Hours the provider bills for duration_hours: rounded up to whole hours on a per-hour meter and to whole minutes on a per-minute meter. Null when duration_hours was not sent.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / matches / items / properties / billing_incrementAdded value: +{ + "description": "How this provider's meter ticks for on-demand rental; varies means FastGPU has no verified figure.", + "enum": [ + "per-second", + "per-minute", + "per-hour", + "varies" + ], + "type": "string" +} - added
Output schema / properties / matches / items / properties / estimated_total_usdAdded value: +{ + "description": "effective_usd_hr times billed_hours, rounded up to the cent. GPU rental only: storage, data transfer, CPU and memory billed separately, and provider minimums are not included. Null when duration_hours was not sent.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / matches / items / properties / fetched_atAdded value: +{ + "description": "When this price was fetched from the provider (ISO 8601).", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / matches / items / properties / quote_age_secondsAdded value: +{ + "description": "Seconds between fetched_at and as_of. Null when the fetch time is unknown.", + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / noteAdded value: +{ + "description": "Why there are no matches, when there are none.", + "type": "string" +} - added
Output schema / properties / workload / properties / gpu_vendorsAdded value: +{ + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] +}
1 tool update
- Changed
match_workload3 fields changed- added
Input schema / properties / min_gpu_memory_gbAdded value: +{ + "description": "Memory each GPU card must have, in GB (e.g. 80 for 80GB-class cards such as the H100 or A100 80GB). Smaller cards are never returned. On its own it lists every card that size, cheapest first.", + "type": "integer" +} - changed
Input schema / properties / query / descriptionPrevious value: -"Plain-language job, e.g. \"cheapest to serve Llama 3 70B\" or \"2x H100 for fine-tuning\". Provide this OR a structured spec below."New value: +"Plain-language job, e.g. \"cheapest to serve Llama 3 70B\", \"2x H100 for fine-tuning\" or \"a GPU with 80GB of memory\". Provide this OR a structured spec below." - added
Output schema / properties / workload / properties / min_gpu_memory_gbAdded value: +{ + "type": [ + "integer", + "null" + ] +}
2 tool updates
- Changed
list_gpu_prices3 fields changed- added
Output schema / properties / gpus / items / properties / page_urlAdded value: +{ + "description": "Absolute URL of this GPU's live price page, with every live offer.", + "type": "string" +} - added
Output schema / properties / gpus / items / properties / slugAdded value: +{ + "type": "string" +} - added
Output schema / properties / gpus / items / properties / url / descriptionAdded value: +"Site-relative path of this GPU's live price page, e.g. /gpus/h100-sxm."
- Changed
match_workload2 fields changed- added
Output schema / properties / matches / items / properties / page_urlAdded value: +{ + "description": "Absolute URL of this GPU's live price page, with every live offer.", + "type": "string" +} - added
Output schema / properties / matches / items / properties / url / descriptionAdded value: +"Site-relative path of this GPU's live price page, e.g. /gpus/h100-sxm."
1 tool update
- Changed
list_gpu_prices1 field changed- added
Output schema / properties / gpus / items / properties / cheapest_billed_separatelyAdded value: +{ + "type": [ + "string", + "null" + ] +}
1 tool update
- Changed
list_gpu_prices1 field changed- added
Output schema / properties / gpus / items / properties / cheapest_min_gpu_countAdded value: +{ + "type": [ + "integer", + "null" + ] +}
1 tool update
- Changed
match_workload2 fields changed- changed
Input schema / properties / gpu_count / descriptionPrevious value: -"Force a specific GPU count instead of letting the engine size it."New value: +"Exact positive GPU count. Overrides a count in query text. Returns no matches if no supported configuration fits; omit for automatic sizing." - added
Output schema / properties / workload / properties / gpu_countAdded value: +{ + "type": [ + "integer", + "null" + ] +}
2 tool updates
- First observed
list_gpu_prices - First observed
match_workload
Related MCP Connectors
Hourly cloud GPU prices from 80+ providers: find, compare, cost and track GPUs.
Cloud GPU prices with live stock from 22 providers. Find where to rent an H100 or B300 now.
Live GPU rental market: 2,500+ offers across a dozen provider feeds. History, watches, limit orders.
Live GPU spot market: 1,700+ offers, 10 provider feeds. History, watches, limit orders, no fee
Related MCP Servers
AlicenseAqualityBmaintenanceEnables agents to query live cloud GPU pricing, stock availability, and up to 12 months of price history across 30+ hyperscalers, neoclouds, and marketplaces, including comparisons of cheapest listed versus cheapest in-stock offers. All tools are read-only, with provider listings and GPU catalogs available at no cost.8MIT- FlicenseNot gradedqualityAmaintenanceEnables users to describe an LLM fine-tuning job once and receive the cheapest, fastest, and most balanced GPU options across multiple cloud providers by calculating required VRAM and FLOPs. It aggregates live market pricing and returns ranked recommendations with clear data-source transparency.-
- AlicenseBqualityDmaintenanceEnables users to describe their LLM fine-tuning job once and get the cheapest, fastest, and most balanced GPU options across a dozen cloud providers in seconds.7104MIT
- FlicenseNot gradedqualityAmaintenanceEnables users to describe an LLM fine-tuning job once and receive the cheapest, fastest, or most balanced GPU hardware options across a dozen cloud providers by calculating required VRAM/FLOPs and aggregating live pricing.-
Glama MCP Gateway
Add one secure layer between your agents and this server.