Verified SaaS prices, plan limits and rate limits (AI tools, LLM APIs, voice, scraping) with sources
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Read-only compact comparison of 2 to 6 products. Returns `compared` (count), `missing` (ids not found, never an error), `note` and `tools`, one compact record each: id, name, dataset, `checked` date, every plan with price and its headline limits or rates, `free` tier and `overage` policy. Products may come from different datasets. Platform fees and pass-through costs (LLM tokens, speech, telephony) stay separate rows; sum them yourself when the user wants an all-in figure. Ids as returned by list_tools or search_limits; a product name also works. Prices USD.
Two to six product ids or names, e.g. ["vapi", "retell", "elevenlabs-agents"].
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http stackversus-limits https://getstackversus.com/api/mcp
Tool list last changed Oct 30, 2026.
Read-only compact comparison of 2 to 6 products. Returns `compared` (count), `missing` (ids not found, never an error), `note` and `tools`, one compact record each: id, name, dataset, `checked` date, every plan with price and its headline limits or rates, `free` tier and `overage` policy. Products may come from different datasets. Platform fees and pass-through costs (LLM tokens, speech, telephony) stay separate rows; sum them yourself when the user wants an all-in figure. Ids as returned by list_tools or search_limits; a product name also works. Prices USD.
| Argument | Type | Description |
|---|---|---|
| tool_ids* | array | Two to six product ids or names, e.g. ["vapi", "retell", "elevenlabs-agents"]. |
{
"type": "object",
"required": [
"tool_ids"
],
"properties": {
"tool_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6,
"minItems": 2,
"description": "Two to six product ids or names, e.g. [\"vapi\", \"retell\", \"elevenlabs-agents\"]."
}
},
"additionalProperties": false
}Read-only full verified record for one product. Returns `matches` and up to 3 `records`; each record has `dataset`, `plans` (name, monthly and annual price, metering unit, limits per window), `rates` (per-unit prices such as $/min or $/1M tokens, each with the vendor `quote`), `free` tier, `overage` policy, `gotchas` (billing traps), `sources` (URLs) and `checked` date. Match by id (e.g. "claude", "cursor", "vapi", "openai-api") or by product name, case-insensitive; exact match wins, otherwise a substring match. Returns an error listing the candidates when the name is ambiguous or unknown. Prices are USD. `published: false` means the vendor states no number and the `value` is their wording; never estimate from it.
| Argument | Type | Description |
|---|---|---|
| dataset | string | Dataset id to search in, when the same id exists in several. One of: ai-plans, usage, email-sending, llm-apis, media, plans-new, scraping-proxies, search-apis, voice. Omit to cover every dataset. |
| tool_id* | string | Product id from list_tools, or the product name (e.g. "cursor", "Retell AI", "gemini-api"). |
{
"type": "object",
"required": [
"tool_id"
],
"properties": {
"dataset": {
"enum": [
"ai-plans",
"usage",
"email-sending",
"llm-apis",
"media",
"plans-new",
"scraping-proxies",
"search-apis",
"voice"
],
"type": "string",
"description": "Dataset id to search in, when the same id exists in several. One of: ai-plans, usage, email-sending, llm-apis, media, plans-new, scraping-proxies, search-apis, voice. Omit to cover every dataset."
},
"tool_id": {
"type": "string",
"description": "Product id from list_tools, or the product name (e.g. \"cursor\", \"Retell AI\", \"gemini-api\")."
}
},
"additionalProperties": false
}Read-only dated change log for the AI assistant and coding-agent plans dataset ("ai-plans" only; other datasets carry a `checked` date but no history yet). Returns `since` (cut-off date), `count`, `changelog` URL and up to 60 `changes`, newest first, each with `date`, `tool`, `tool_id`, `plan`, `field`, `old`, `new`, vendor `source` URL, `method`, `note` and `page`. By default covers the last 30 days and only real moves: price changes, limit changes, plans added or removed. Set `include_wording` to also get re-verification rows where only the vendor wording changed or a value was recorded for the first time. Use it for "what changed in the Claude plans this month" or to check whether a figure from get_tool moved recently.
| Argument | Type | Description |
|---|---|---|
| days | integer | Look-back window in days. |
| tool_id | string | Only changes for this product id (as in list_tools, e.g. "claude", "chatgpt", "cursor"). |
| include_wording | boolean | Also include re-verification rows that only changed wording or were recorded for the first time. |
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"default": 30,
"maximum": 730,
"minimum": 1,
"description": "Look-back window in days."
},
"tool_id": {
"type": "string",
"description": "Only changes for this product id (as in list_tools, e.g. \"claude\", \"chatgpt\", \"cursor\")."
},
"include_wording": {
"type": "boolean",
"default": false,
"description": "Also include re-verification rows that only changed wording or were recorded for the first time."
}
},
"additionalProperties": false
}Read-only catalog of the datasets on this server. Returns one row per dataset with `id` (the value other tools accept as `dataset`), `title`, `kind`, `tools` (number of products), `plans` (number of plans), `updated` (date of the last verified change), `page` URL and `json` endpoint on getstackversus.com, plus `generated` (build date). Currently 9 datasets: AI assistant and coding-agent plan limits, SaaS usage limits, LLM API token prices, voice-agent $/min, AI media credits, search APIs, scraping platforms and proxies, email platforms. No parameters, no auth, no pagination; the whole catalog comes back in one call. Use it once to learn dataset ids; use list_tools to see the products inside one dataset.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Read-only list of the products (vendors) covered, to look up ids before calling get_tool or compare_tools. Returns `count` and `tools`, each with `id`, `name`, `vendor`, `dataset`, `checked` (date the vendor page was last read), `plans` (count) and `page` URL; no prices or limits, those live in get_tool. Without `dataset` it returns every product across all datasets (about 100 rows); with `dataset` only that one. Not paginated, no auth, no side effects. When the user already names a product, skip this and call get_tool or search_limits directly.
| Argument | Type | Description |
|---|---|---|
| dataset | string | Dataset id to list. One of: ai-plans, usage, email-sending, llm-apis, media, plans-new, scraping-proxies, search-apis, voice. Omit to cover every dataset. |
{
"type": "object",
"properties": {
"dataset": {
"enum": [
"ai-plans",
"usage",
"email-sending",
"llm-apis",
"media",
"plans-new",
"scraping-proxies",
"search-apis",
"voice"
],
"type": "string",
"description": "Dataset id to list. One of: ai-plans, usage, email-sending, llm-apis, media, plans-new, scraping-proxies, search-apis, voice. Omit to cover every dataset."
}
},
"additionalProperties": false
}Read-only keyword search across every plan, limit, rate, free tier, overage rule and gotcha in all datasets. Best first call for a question like "Cursor Pro requests per month", "Retell cost per minute" or "Gemini API free tier RPM". Returns `query`, `relaxed` (true when fewer than all words matched), `total`, `shown` and `rows`, each with `type` (plan, limit, rate, free, overage, unit or gotcha), `tool`, `tool_id`, `dataset`, `plan` and/or `metric`, `value`, `unit`, `published`, vendor `quote`, `sourceUrl`, `checked` date and `page`. Matching is case-insensitive on whole words; words that name a product must all match, other words are matched strictly first and then relaxed to at least half of them. At most `limit` rows (default 20, max 50), ranked by match quality; no pagination. Returns an empty `rows` array, not an error, when nothing matches; then try list_tools to find the product id and call get_tool.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum rows to return. |
| query* | string | Plain words: vendor, plan and metric, e.g. "cursor pro requests" or "vapi per minute". No operators. |
| dataset | string | Dataset id to narrow the search to. One of: ai-plans, usage, email-sending, llm-apis, media, plans-new, scraping-proxies, search-apis, voice. Omit to cover every dataset. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum rows to return."
},
"query": {
"type": "string",
"minLength": 2,
"description": "Plain words: vendor, plan and metric, e.g. \"cursor pro requests\" or \"vapi per minute\". No operators."
},
"dataset": {
"enum": [
"ai-plans",
"usage",
"email-sending",
"llm-apis",
"media",
"plans-new",
"scraping-proxies",
"search-apis",
"voice"
],
"type": "string",
"description": "Dataset id to narrow the search to. One of: ai-plans, usage, email-sending, llm-apis, media, plans-new, scraping-proxies, search-apis, voice. Omit to cover every dataset."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 30, 2026.
What changed in this server's tools since we started watching, newest first. Each change is scanned again.
Dated change log for the AI plan limits dataset: price moves, limit changes, new or removed plans, each with the vendor source. Defaults to the last 30 days.
Read-only dated change log for the AI assistant and coding-agent plans dataset ("ai-plans" only; other datasets carry a `checked` date but no history yet). Returns `since` (cut-off date), `count`, `changelog` URL and up to 60 `changes`, newest first, each with `date`, `tool`, `tool_id`, `plan`, `field`, `old`, `new`, vendor `source` URL, `method`, `note` and `page`. By default covers the last 30 days and only real moves: price changes, limit changes, plans added or removed. Set `include_wording` to also get re-verification rows where only the vendor wording changed or a value was recorded for the first time. Use it for "what changed in the Claude plans this month" or to check whether a figure from get_tool moved recently.
CompactRead-only side-by-sidecompact comparison of 2 to 6 products:products. eachReturns `compared` (count), `missing` (ids not found, never an error), `note` and `tools`, one compact record each: id, name, dataset, `checked` date, every plan with price and its headline limits or rates, free`free` tier and overage`overage` policy,policy. withProducts checkmay dates.come from different datasets. Platform fees and pass-through costs (LLM tokens, speech, telephony) stay separate rows; sum them yourself when the user wants an all-in figure. Ids as inreturned list_tools.by list_tools or search_limits; a product name also works. Prices USD.
{
"type": "object",
"required": [
"tool_ids"
],
"properties": {
"tool_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6,
"minItems": 2
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"tool_ids"
],
"properties": {
"tool_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6,
"minItems": 2,
"description": "Two to six product ids or names, e.g. [\"vapi\", \"retell\", \"elevenlabs-agents\"]."
}
},
"additionalProperties": false
}KeywordRead-only keyword search across every plan, limit, rate and gotcha. Returns matching rowsrate, withfree value,tier, vendoroverage quote, first call for like "Cursor Pro requests per month", "Retell cost per "Gemini API free tier RPM".
FullRead-only full verified record for aone product:product. plansReturns with`matches` prices,and up to 3 `records`; eachlimits or with vendor tier, policy, and date. id (e.g. "claude", "cursor", "vapi", a name
Vendors/productsRead-only list of the products (vendors) covered, withto look up ids tobefore passcalling to get_tool.
TheRead-only catalog of the datasets on this serverserver. holdsReturns (AIone row per dataset with plan limits, SaaS usage limits, voice-agent $/min, AI media credits, search scraping email
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"query": {
"type": "string",
"description": "Words to match (vendor, plan, metric). Case-insensitive, all words must appear."
},
"dataset": {
"type": "string",
"description": "Optional dataset id to narrow the search."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum rows to return."
},
"query": {
"type": "string",
"minLength": 2,
"description": "Plain words: vendor, plan and metric, e.g. \"cursor pro requests\" or \"vapi per minute\". No operators."
},
"dataset": {
"enum": [
"ai-plans",
"usage",
"email-sending",
"llm-apis",
"media",
"plans-new",
"scraping-proxies",
"search-apis",
"voice"
],
"type": "string",
"description": "Dataset id to narrow the search to. One of: ai-plans, usage, email-sending, llm-apis, media, plans-new, scraping-proxies, search-apis, voice. Omit to cover every dataset."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"tool_id"
],
"properties": {
"dataset": {
"type": "string",
"description": "Restrict to one dataset when the same id exists in several."
},
"tool_id": {
"type": "string",
"description": "Tool id or product name."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"tool_id"
],
"properties": {
"dataset": {
"enum": [
"ai-plans",
"usage",
"email-sending",
"llm-apis",
"media",
"plans-new",
"scraping-proxies",
"search-apis",
"voice"
],
"type": "string",
"description": "Dataset id to search in, when the same id exists in several. One of: ai-plans, usage, email-sending, llm-apis, media, plans-new, scraping-proxies, search-apis, voice. Omit to cover every dataset."
},
"tool_id": {
"type": "string",
"description": "Product id from list_tools, or the product name (e.g. \"cursor\", \"Retell AI\", \"gemini-api\")."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"dataset": {
"type": "string",
"description": "Dataset id, e.g. \"ai-plans\", \"voice\", \"llm-apis\". Omit for all."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"dataset": {
"enum": [
"ai-plans",
"usage",
"email-sending",
"llm-apis",
"media",
"plans-new",
"scraping-proxies",
"search-apis",
"voice"
],
"type": "string",
"description": "Dataset id to list. One of: ai-plans, usage, email-sending, llm-apis, media, plans-new, scraping-proxies, search-apis, voice. Omit to cover every dataset."
}
},
"additionalProperties": false
}