StackVersus: verified SaaS limits & pricing
Verified SaaS prices, plan limits and rate limits (AI tools, LLM APIs, voice, scraping) with sources
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"stackversus-limits": {
"url": "https://getstackversus.com/api/mcp"
}
}
}Remote endpoints
https://getstackversus.com/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢list_datasets
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.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢list_tools(dataset)
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.
Input Schema
{
"type": "object",
"properties": {
"dataset": {
"type": "string",
"enum": [
"ai-plans",
"usage",
"email-sending",
"llm-apis",
"media",
"plans-new",
"scraping-proxies",
"search-apis",
"voice"
],
"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
}🟢get_tool(tool_id, dataset)
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.
Input Schema
{
"type": "object",
"properties": {
"tool_id": {
"type": "string",
"description": "Product id from list_tools, or the product name (e.g. \"cursor\", \"Retell AI\", \"gemini-api\")."
},
"dataset": {
"type": "string",
"enum": [
"ai-plans",
"usage",
"email-sending",
"llm-apis",
"media",
"plans-new",
"scraping-proxies",
"search-apis",
"voice"
],
"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."
}
},
"required": [
"tool_id"
],
"additionalProperties": false
}🟢search_limits(query, dataset, limit)
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.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 2,
"description": "Plain words: vendor, plan and metric, e.g. \"cursor pro requests\" or \"vapi per minute\". No operators."
},
"dataset": {
"type": "string",
"enum": [
"ai-plans",
"usage",
"email-sending",
"llm-apis",
"media",
"plans-new",
"scraping-proxies",
"search-apis",
"voice"
],
"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."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Maximum rows to return."
}
},
"required": [
"query"
],
"additionalProperties": false
}🟢compare_tools(tool_ids)
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.
Input Schema
{
"type": "object",
"properties": {
"tool_ids": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 2,
"maxItems": 6,
"description": "Two to six product ids or names, e.g. [\"vapi\", \"retell\", \"elevenlabs-agents\"]."
}
},
"required": [
"tool_ids"
],
"additionalProperties": false
}🟢list_changes(days, tool_id, include_wording)
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.
Input Schema
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"minimum": 1,
"maximum": 730,
"default": 30,
"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
}Community
Evidence