Stackcut

Cut SaaS spend: checked savings, right-sized plans, cheaper alternatives, the cheapest stack.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
81%
Naming quality
94%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~10,895Tokens (tool definitions)
~6.5 KBTypical response size
Significant attention impact (8.51% of 128k context)

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": {
    "stackcut": {
      "url": "https://stackcut.io/mcp"
    }
  }
}

Remote endpoints

https://stackcut.io/mcpstreamable-http

What it can do

Tool inventory

Tools (14)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_recipes(query, vendor, feature, category, path_type, ...)

Search Stackcut's catalog of replacement recipes. A recipe is the slice of a SaaS product someone actually uses (e.g. 'occasional keyword lookups in Semrush') mapped to every way to stop paying for it: switch vendor, cheaper plan, open source, pay per use, an agent skill, or Replace with AI (build it from a spec). Filter by the vendor they pay for (matched exactly, plan words like 'Pro' ignored), a feature they use, a category (exact name, else whole words), or a path type. A query matches a recipe when at least half of its meaningful words do (stopwords ignored); a query with no meaningful words returns nothing. best_path is the best priced path that saves money, covers at least 60% of the core features, and isn't a trial, one-time credit, expiring or non-commercial tier (of that path type, or covering that feature, when you filter by them); partial: true marks a narrower path, shown only when no fuller path is priced. Returns compact cards; call get_recipe for full paths, costs and sources. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 300,
      "description": "Free text, e.g. 'client approval portal' or 'semrush backlinks'"
    },
    "vendor": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Product currently paid for, e.g. 'Airtable', 'Salesforce', 'Semrush Pro'"
    },
    "feature": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "A feature they rely on, e.g. 'rank tracking', 'e-signatures'"
    },
    "category": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Category name from list_categories, e.g. 'CRM', 'SEO data'"
    },
    "path_type": {
      "type": "string",
      "enum": [
        "switch",
        "downgrade",
        "open_source",
        "per_use",
        "agent_skill",
        "build",
        "bundled"
      ],
      "description": "Only recipes offering this kind of replacement"
    },
    "sort": {
      "type": "string",
      "enum": [
        "savings",
        "popular",
        "relevance"
      ],
      "default": "relevance"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25,
      "default": 10
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_recipe(id)

Full recipe: the features it covers, what is out of scope, checks to run before switching, and every replacement path with modeled first-year net savings, monthly costs, setup hours, maintenance, pros/cons, license notes and sources. Where Stackcut has them: how_to_leave (cancel steps, refunds, notice, what to export first, what you lose, all sourced), a step-by-step playbook per path (before, setup, migrate, verify, rollback, gotchas), and tested_by_stackcut lab reports from Stackcut's own end-to-end tests (not customer results). Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Recipe id from search_recipes, e.g. 'crm-pipeline'"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢find_alternatives(vendor, plan, monthly_spend_usd, seats, features_used, ...)

Given a product the user pays for, return the ranked ways to replace it, re-costed for them: against what they pay (monthly_spend_usd), else that vendor's own list price (never another vendor's), scaled by seats where either side is priced per seat. Includes right-size: the cheapest plan of the same vendor that fits their usage (published caps, overage and add-ons priced, seats, commercial use), costed against what they pay now; a plan their usage is over is never offered. The name resolves exactly ('Slack Pro', 'Twilio SendGrid', 'notion.so' work; plan words become plan_hint); an unknown name returns found:false with did_you_mean, never a look-alike. Each path has fit: fits (checked: every feature you listed is covered, usage within the plan's caps, a real free tier, commercial use allowed), check (open checks listed in checks) or does_not_fit (fit_reasons: over a cap, a trial, one-time credit or expiring tier, non-commercial, or missing a feature you listed); plus your_features_covered / your_features_missing / your_features_to_check. status, why and questions say what to ask before recommending anything. Pass usage ({emails_per_month: 40000, domains: 4, db_gb: 3, …}) or evidence strings ('40,000 emails/mo', 'db 1.5 GB') so caps can be checked; get_usage_questions says which numbers matter and where the user finds them. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "vendor": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Product name as on the invoice, e.g. 'Typeform', 'Slack Pro', 'HubSpot Sales Hub Starter'"
    },
    "plan": {
      "type": "string",
      "maxLength": 100,
      "description": "Their plan, e.g. 'Essential' (else read from the vendor name)"
    },
    "monthly_spend_usd": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000,
      "description": "What they pay per month today, all seats (replaces the modeled baseline)"
    },
    "seats": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100000,
      "description": "Paid seats; per-seat prices on both sides scale with it"
    },
    "features_used": {
      "type": "array",
      "maxItems": 50,
      "items": {
        "type": "string",
        "maxLength": 200
      },
      "description": "Features they actually use; sizes and counts ('4,000 contacts', 'videos over 5 minutes') are read as usage"
    },
    "usage": {
      "type": "object",
      "additionalProperties": false,
      "description": "Their usage, checked against each plan's caps (priced with published overage and add-ons). Units: seats, members, mau, emails_per_month, emails_per_day, contacts, domains, events_per_month, pageviews_per_month, errors_per_month, requests_per_month, requests_per_day, searches_per_month, cpu_ms_per_request, db_gb, storage_gb, bandwidth_gb, projects, sites, videos, video_minutes, responses_per_month, tasks_per_month, keywords_tracked, credits_per_month, history_days, apps, files, event_types, monitors, tokens_per_month, images_per_month, audio_minutes_per_month, characters_per_month, transactions_per_month, sandbox_hours_per_month, concurrent_sessions, session_minutes, call_participants, meeting_minutes, records, inboxes, tokens_in_per_month, tokens_out_per_month, cached_tokens_per_month, video_minutes_stored, video_minutes_delivered_per_month, gmv_usd_per_month, payouts_per_month, active_accounts, verifications_per_month, browser_hours_per_month, proxy_gb_per_month, job_executions_per_month, sso_connections, sso_users, inbound_emails_per_month, stream_hours_per_month, vcpu_hours_per_month, credits_usd_per_month, disputes_per_month, payout_volume_usd_per_month, object_writes_per_month, object_reads_per_month, job_executions_per_day, scim_connections (MAU is accepted for mau). Example: {\"emails_per_month\": 40000, \"domains\": 4, \"db_gb\": 3}. get_usage_questions says which units matter for a vendor and where the user finds each number.",
      "properties": {
        "seats": {
          "type": "number",
          "minimum": 0
        },
        "members": {
          "type": "number",
          "minimum": 0
        },
        "mau": {
          "type": "number",
          "minimum": 0
        },
        "emails_per_month": {
          "type": "number",
          "minimum": 0
        },
        "emails_per_day": {
          "type": "number",
          "minimum": 0
        },
        "contacts": {
          "type": "number",
          "minimum": 0
        },
        "domains": {
          "type": "number",
          "minimum": 0
        },
        "events_per_month": {
          "type": "number",
          "minimum": 0
        },
        "pageviews_per_month": {
          "type": "number",
          "minimum": 0
        },
        "errors_per_month": {
          "type": "number",
          "minimum": 0
        },
        "requests_per_month": {
          "type": "number",
          "minimum": 0
        },
        "requests_per_day": {
          "type": "number",
          "minimum": 0
        },
        "searches_per_month": {
          "type": "number",
          "minimum": 0
        },
        "cpu_ms_per_request": {
          "type": "number",
          "minimum": 0
        },
        "db_gb": {
          "type": "number",
          "minimum": 0
        },
        "storage_gb": {
          "type": "number",
          "minimum": 0
        },
        "bandwidth_gb": {
          "type": "number",
          "minimum": 0
        },
        "projects": {
          "type": "number",
          "minimum": 0
        },
        "sites": {
          "type": "number",
          "minimum": 0
        },
        "videos": {
          "type": "number",
          "minimum": 0
        },
        "video_minutes": {
          "type": "number",
          "minimum": 0
        },
        "responses_per_month": {
          "type": "number",
          "minimum": 0
        },
        "tasks_per_month": {
          "type": "number",
          "minimum": 0
        },
        "keywords_tracked": {
          "type": "number",
          "minimum": 0
        },
        "credits_per_month": {
          "type": "number",
          "minimum": 0
        },
        "history_days": {
          "type": "number",
          "minimum": 0
        },
        "apps": {
          "type": "number",
          "minimum": 0
        },
        "files": {
          "type": "number",
          "minimum": 0
        },
        "event_types": {
          "type": "number",
          "minimum": 0
        },
        "monitors": {
          "type": "number",
          "minimum": 0
        },
        "tokens_per_month": {
          "type": "number",
          "minimum": 0
        },
        "images_per_month": {
          "type": "number",
          "minimum": 0
        },
        "audio_minutes_per_month": {
          "type": "number",
          "minimum": 0
        },
        "characters_per_month": {
          "type": "number",
          "minimum": 0
        },
        "transactions_per_month": {
          "type": "number",
          "minimum": 0
        },
        "sandbox_hours_per_month": {
          "type": "number",
          "minimum": 0
        },
        "concurrent_sessions": {
          "type": "number",
          "minimum": 0
        },
        "session_minutes": {
          "type": "number",
          "minimum": 0
        },
        "call_participants": {
          "type": "number",
          "minimum": 0
        },
        "meeting_minutes": {
          "type": "number",
          "minimum": 0
        },
        "records": {
          "type": "number",
          "minimum": 0
        },
        "inboxes": {
          "type": "number",
          "minimum": 0
        },
        "tokens_in_per_month": {
          "type": "number",
          "minimum": 0
        },
        "tokens_out_per_month": {
          "type": "number",
          "minimum": 0
        },
        "cached_tokens_per_month": {
          "type": "number",
          "minimum": 0
        },
        "video_minutes_stored": {
          "type": "number",
          "minimum": 0
        },
        "video_minutes_delivered_per_month": {
          "type": "number",
          "minimum": 0
        },
        "gmv_usd_per_month": {
          "type": "number",
          "minimum": 0
        },
        "payouts_per_month": {
          "type": "number",
          "minimum": 0
        },
        "active_accounts": {
          "type": "number",
          "minimum": 0
        },
        "verifications_per_month": {
          "type": "number",
          "minimum": 0
        },
        "browser_hours_per_month": {
          "type": "number",
          "minimum": 0
        },
        "proxy_gb_per_month": {
          "type": "number",
          "minimum": 0
        },
        "job_executions_per_month": {
          "type": "number",
          "minimum": 0
        },
        "sso_connections": {
          "type": "number",
          "minimum": 0
        },
        "sso_users": {
          "type": "number",
          "minimum": 0
        },
        "inbound_emails_per_month": {
          "type": "number",
          "minimum": 0
        },
        "stream_hours_per_month": {
          "type": "number",
          "minimum": 0
        },
        "vcpu_hours_per_month": {
          "type": "number",
          "minimum": 0
        },
        "credits_usd_per_month": {
          "type": "number",
          "minimum": 0
        },
        "disputes_per_month": {
          "type": "number",
          "minimum": 0
        },
        "payout_volume_usd_per_month": {
          "type": "number",
          "minimum": 0
        },
        "object_writes_per_month": {
          "type": "number",
          "minimum": 0
        },
        "object_reads_per_month": {
          "type": "number",
          "minimum": 0
        },
        "job_executions_per_day": {
          "type": "number",
          "minimum": 0
        },
        "scim_connections": {
          "type": "number",
          "minimum": 0
        },
        "MAU": {
          "type": "number",
          "minimum": 0
        }
      }
    },
    "evidence": {
      "type": "array",
      "maxItems": 50,
      "items": {
        "type": "string",
        "maxLength": 500
      },
      "description": "Usage facts in words, read best effort: 'db 1.5 GB', '40,000 emails/mo', '37 domains', '3,000 MAU'"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 8
    }
  },
  "required": [
    "vendor"
  ],
  "additionalProperties": false
}
🟢get_build_packet(recipe_id)

Agent-ready build packet for a recipe that has a Replace-with-AI path: SPEC.md (must-haves, out of scope, data model, checks, cost targets, acceptance tests, deliverables), AGENTS.md and CLAUDE.md instructions, and recipe-manifest.json. Write these files into a new repo and have a coding agent build from them. Recipes without a build path (or where building would mean scraping a third party against its terms) return available: false with the reason and the other paths. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "recipe_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "recipe_id"
  ],
  "additionalProperties": false
}
🟢leaderboard(metric, category, path_type, include_partial, limit)

Top replacement paths across the catalog: 'savings' ranks by modeled first-year net savings, 'payback' by months to recover setup cost, 'popular' by how often people and agents used them. Excludes partial replacements (paths covering under 60% of the core features) unless include_partial is true, and never lists trials, one-time credits, expiring free tiers or non-commercial plans. Figures are modeled against the price of the vendor named in modeled_against. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "metric": {
      "type": "string",
      "enum": [
        "savings",
        "payback",
        "popular"
      ],
      "default": "savings"
    },
    "category": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "path_type": {
      "type": "string",
      "enum": [
        "switch",
        "downgrade",
        "open_source",
        "per_use",
        "agent_skill",
        "build",
        "bundled"
      ]
    },
    "include_partial": {
      "type": "boolean",
      "default": false
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢audit_stack(services, limit_paths)

Audit the paid services a codebase or team uses. Pass the services found by scanning the code locally (get_detection_rules, or the Stackcut skill's detect.mjs) plus any subscriptions the user names, with what they pay per month, seats, the features they rely on and their usage (usage: {emails_per_month: 40000, domains: 4, db_gb: 3, …} or evidence strings like 'db 1.5 GB', '40,000 emails/mo', '37 domains'). Invoice names resolve exactly ('Slack Pro', 'Intercom Essential'); unknown names are no_recipe with did_you_mean. Per service: status eligible only when a cheaper path was checked end to end (your price, every feature you listed covered, usage within the plan's caps, seats, a real free tier, commercial use allowed, not partial, not a bundle you don't pay for); needs_info = a cheaper path looks possible but a check is open (why lists them; questions ask); keep = no path that fits saves money; no_priced_path = paths exist but none is priced; no_recipe = not costed in the catalog. Also: the best path, other paths, right_size (their plan now, the cheapest plan of the same vendor that fits their usage, and near misses such as a plan that needs an add-on the catalog can't price), does_not_fit (paths ruled out and why, e.g. over a free tier's caps), and overlaps (several tools you pay for doing the same job). Portfolio: give each line a project and the same vendor in several projects is audited as one account, its usage summed where the vendor counts it per account (billing says which, and what was assumed), with per-project fees flagged as a lever. Send only vendor names, feature names, usage numbers and prices: never source code or secret values. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "services": {
      "type": "array",
      "minItems": 1,
      "maxItems": 60,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "vendor"
        ],
        "properties": {
          "vendor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Vendor id from the scan (e.g. 'sendgrid') or a product name as on the invoice ('Airtable', 'Slack Pro')"
          },
          "project": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Which of their projects or products this line is for (portfolio audits): lines of one vendor across projects are audited as one account. Give each project's own usage on its line and the account's bill once"
          },
          "plan": {
            "type": "string",
            "maxLength": 100,
            "description": "Their plan, e.g. 'Business Standard' (else read from the name or evidence)"
          },
          "features_used": {
            "type": "array",
            "maxItems": 50,
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "description": "Features the code or the user relies on; sizes and counts ('4,000 contacts') are read as usage"
          },
          "monthly_spend_usd": {
            "type": "number",
            "minimum": 0,
            "maximum": 1000000,
            "description": "What they pay per month for it, all seats, if known"
          },
          "seats": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100000,
            "description": "Paid seats"
          },
          "usage": {
            "type": "object",
            "additionalProperties": false,
            "description": "Their usage, checked against each plan's caps (priced with published overage and add-ons). Units: seats, members, mau, emails_per_month, emails_per_day, contacts, domains, events_per_month, pageviews_per_month, errors_per_month, requests_per_month, requests_per_day, searches_per_month, cpu_ms_per_request, db_gb, storage_gb, bandwidth_gb, projects, sites, videos, video_minutes, responses_per_month, tasks_per_month, keywords_tracked, credits_per_month, history_days, apps, files, event_types, monitors, tokens_per_month, images_per_month, audio_minutes_per_month, characters_per_month, transactions_per_month, sandbox_hours_per_month, concurrent_sessions, session_minutes, call_participants, meeting_minutes, records, inboxes, tokens_in_per_month, tokens_out_per_month, cached_tokens_per_month, video_minutes_stored, video_minutes_delivered_per_month, gmv_usd_per_month, payouts_per_month, active_accounts, verifications_per_month, browser_hours_per_month, proxy_gb_per_month, job_executions_per_month, sso_connections, sso_users, inbound_emails_per_month, stream_hours_per_month, vcpu_hours_per_month, credits_usd_per_month, disputes_per_month, payout_volume_usd_per_month, object_writes_per_month, object_reads_per_month, job_executions_per_day, scim_connections (MAU is accepted for mau). Example: {\"emails_per_month\": 40000, \"domains\": 4, \"db_gb\": 3}. get_usage_questions says which units matter for a vendor and where the user finds each number.",
            "properties": {
              "seats": {
                "type": "number",
                "minimum": 0
              },
              "members": {
                "type": "number",
                "minimum": 0
              },
              "mau": {
                "type": "number",
                "minimum": 0
              },
              "emails_per_month": {
                "type": "number",
                "minimum": 0
              },
              "emails_per_day": {
                "type": "number",
                "minimum": 0
              },
              "contacts": {
                "type": "number",
                "minimum": 0
              },
              "domains": {
                "type": "number",
                "minimum": 0
              },
              "events_per_month": {
                "type": "number",
                "minimum": 0
              },
              "pageviews_per_month": {
                "type": "number",
                "minimum": 0
              },
              "errors_per_month": {
                "type": "number",
                "minimum": 0
              },
              "requests_per_month": {
                "type": "number",
                "minimum": 0
              },
              "requests_per_day": {
                "type": "number",
                "minimum": 0
              },
              "searches_per_month": {
                "type": "number",
                "minimum": 0
              },
              "cpu_ms_per_request": {
                "type": "number",
                "minimum": 0
              },
              "db_gb": {
                "type": "number",
                "minimum": 0
              },
              "storage_gb": {
                "type": "number",
                "minimum": 0
              },
              "bandwidth_gb": {
                "type": "number",
                "minimum": 0
              },
              "projects": {
                "type": "number",
                "minimum": 0
              },
              "sites": {
                "type": "number",
                "minimum": 0
              },
              "videos": {
                "type": "number",
                "minimum": 0
              },
              "video_minutes": {
                "type": "number",
                "minimum": 0
              },
              "responses_per_month": {
                "type": "number",
                "minimum": 0
              },
              "tasks_per_month": {
                "type": "number",
                "minimum": 0
              },
              "keywords_tracked": {
                "type": "number",
                "minimum": 0
              },
              "credits_per_month": {
                "type": "number",
                "minimum": 0
              },
              "history_days": {
                "type": "number",
                "minimum": 0
              },
              "apps": {
                "type": "number",
                "minimum": 0
              },
              "files": {
                "type": "number",
                "minimum": 0
              },
              "event_types": {
                "type": "number",
                "minimum": 0
              },
              "monitors": {
                "type": "number",
                "minimum": 0
              },
              "tokens_per_month": {
                "type": "number",
                "minimum": 0
              },
              "images_per_month": {
                "type": "number",
                "minimum": 0
              },
              "audio_minutes_per_month": {
                "type": "number",
                "minimum": 0
              },
              "characters_per_month": {
                "type": "number",
                "minimum": 0
              },
              "transactions_per_month": {
                "type": "number",
                "minimum": 0
              },
              "sandbox_hours_per_month": {
                "type": "number",
                "minimum": 0
              },
              "concurrent_sessions": {
                "type": "number",
                "minimum": 0
              },
              "session_minutes": {
                "type": "number",
                "minimum": 0
              },
              "call_participants": {
                "type": "number",
                "minimum": 0
              },
              "meeting_minutes": {
                "type": "number",
                "minimum": 0
              },
              "records": {
                "type": "number",
                "minimum": 0
              },
              "inboxes": {
                "type": "number",
                "minimum": 0
              },
              "tokens_in_per_month": {
                "type": "number",
                "minimum": 0
              },
              "tokens_out_per_month": {
                "type": "number",
                "minimum": 0
              },
              "cached_tokens_per_month": {
                "type": "number",
                "minimum": 0
              },
              "video_minutes_stored": {
                "type": "number",
                "minimum": 0
              },
              "video_minutes_delivered_per_month": {
                "type": "number",
                "minimum": 0
              },
              "gmv_usd_per_month": {
                "type": "number",
                "minimum": 0
              },
              "payouts_per_month": {
                "type": "number",
                "minimum": 0
              },
              "active_accounts": {
                "type": "number",
                "minimum": 0
              },
              "verifications_per_month": {
                "type": "number",
                "minimum": 0
              },
              "browser_hours_per_month": {
                "type": "number",
                "minimum": 0
              },
              "proxy_gb_per_month": {
                "type": "number",
                "minimum": 0
              },
              "job_executions_per_month": {
                "type": "number",
                "minimum": 0
              },
              "sso_connections": {
                "type": "number",
                "minimum": 0
              },
              "sso_users": {
                "type": "number",
                "minimum": 0
              },
              "inbound_emails_per_month": {
                "type": "number",
                "minimum": 0
              },
              "stream_hours_per_month": {
                "type": "number",
                "minimum": 0
              },
              "vcpu_hours_per_month": {
                "type": "number",
                "minimum": 0
              },
              "credits_usd_per_month": {
                "type": "number",
                "minimum": 0
              },
              "disputes_per_month": {
                "type": "number",
                "minimum": 0
              },
              "payout_volume_usd_per_month": {
                "type": "number",
                "minimum": 0
              },
              "object_writes_per_month": {
                "type": "number",
                "minimum": 0
              },
              "object_reads_per_month": {
                "type": "number",
                "minimum": 0
              },
              "job_executions_per_day": {
                "type": "number",
                "minimum": 0
              },
              "scim_connections": {
                "type": "number",
                "minimum": 0
              },
              "MAU": {
                "type": "number",
                "minimum": 0
              }
            }
          },
          "evidence": {
            "type": "array",
            "maxItems": 50,
            "items": {
              "type": "string",
              "maxLength": 500
            },
            "description": "Scan evidence labels and usage facts in words ('db 1.5 GB', '40,000 emails/mo', '37 domains')"
          },
          "name": {
            "type": "string",
            "maxLength": 200,
            "description": "detect.mjs output (ignored)"
          },
          "category": {
            "type": "string",
            "maxLength": 100,
            "description": "detect.mjs output (ignored)"
          },
          "in_catalog": {
            "type": "boolean",
            "description": "detect.mjs output (ignored)"
          },
          "confidence": {
            "type": "string",
            "maxLength": 20,
            "description": "detect.mjs output (ignored)"
          },
          "feature_counts": {
            "type": "array",
            "maxItems": 100,
            "items": {
              "type": "object"
            },
            "description": "detect.mjs output (ignored)"
          },
          "files_referencing": {
            "type": "integer",
            "minimum": 0,
            "description": "detect.mjs output (ignored)"
          }
        }
      }
    },
    "limit_paths": {
      "type": "integer",
      "minimum": 1,
      "maximum": 8,
      "default": 3
    }
  },
  "required": [
    "services"
  ],
  "additionalProperties": false
}
🟢get_detection_rules(vendors)

Rules for finding paid services in a codebase locally: package names (npm, PyPI, RubyGems, Go), environment variable NAME patterns, config files, API hosts, and per-feature code patterns for about 100 vendors. Apply them on the user's machine and send only the summary to audit_stack. Or run the Stackcut skill's scripts/detect.mjs, which applies these rules for you. Names you ask for that have no rules come back under unknown. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "vendors": {
      "type": "array",
      "maxItems": 200,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      },
      "description": "Only these vendors, by id or name (default: all)"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_usage_questions(vendors, context)

Before auditing, find out which usage numbers decide the answer and where the user finds them. Per vendor: the units its plans and replacement paths are capped or priced by (e.g. emails/mo, domains, GB of database, seats), each with the published caps that make it matter and where the number lives (dashboard path, API call, export) when Stackcut has it, plus the features that decide which paths fit (out of scope for some paths, or missing from them) and ready-to-ask questions. Units stated in context are marked as already given. Pass the answers to audit_stack or find_alternatives as usage and features_used. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "vendors": {
      "type": "array",
      "minItems": 1,
      "maxItems": 30,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      },
      "description": "Vendors they pay for, by name or id, e.g. ['Resend', 'Supabase Pro']"
    },
    "context": {
      "type": "string",
      "maxLength": 2000,
      "description": "Optional: what is already known, in words (e.g. 'about 40,000 emails/mo, 4 domains'); units it states are marked as given and not asked again"
    }
  },
  "required": [
    "vendors"
  ],
  "additionalProperties": false
}
🟢list_categories

Categories in the catalog with recipe counts and the best modeled first-year savings in each (null when no path that covers at least 60% of the core features saves money). Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟢get_my_plan(code)

Read the user's own Stackcut savings plan with the read-only agent code they copied from stackcut.io (Send to my agent; it starts with sca_). Returns every subscription line with its verdict (cancel, switch, consolidate, downgrade, replace_with_ai, investigate, needs_info, keep), the proven saving or null, and the proof: why (each claim with receipts, card charges or a sourced price link), how (ordered steps), checks, pros/cons, time and a ready prompt. Walk the user through it from the biggest proven saving down, show the proof, and ask before any cancel, purchase or sign-up. The code is read-only and expires; never ask for their scan link or password. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "maxLength": 200,
      "description": "The agent code from stackcut.io, e.g. sca_…"
    }
  },
  "required": [
    "code"
  ],
  "additionalProperties": false
}
🟢choose_stack(project, needs, prefer, budget_monthly_usd, limit_per_job, ...)

For a product being built or planned, compare vendors per job (database, auth, hosting, transactional and inbound email, object storage, video delivery, LLM inference and gateways, image generation, payments and marketplace payouts, KYC, code sandboxes, browser automation, job queues, B2B SSO, analytics, error monitoring, …) at the user's volumes, and total the bill. Every tier of every vendor is priced at your volumes and the cheapest valid tier wins: several dimensions per job (volumes: tokens_in + tokens_out, gb_stored + gb_egress, transactions + avg_amount_usd, …; per_user rates × MAU), pay-per-use prices multiplied out, overage bands applied. An option fits only when every volume is within its published caps or priced by its published overage, no published limit is violated or likely violated (blocked_by: daily caps, session caps, concurrency, commercial use, pausing, project limits, feature availability per tier, merchant of record vs platform-held funds), and its price was checked within 120 days (source and checked_at on every price). Unknown features become questions, never vetoes; unknown or ambiguous jobs come back in unsupported_jobs with suggestions (never an error), and every remap shows mapped_from and match_confidence. total separates proven, estimated (with its assumptions) and unpriced jobs, with a coverage_warning when AI, video, payments or sandbox costs are unpriced. Pass scales (e.g. [1000, 20000, 200000] MAU) for cost curves, tier changes and break-even points, and unit_economics for gross margin per scale; risks lists money transmission, B2B privacy and non-refundable fees. Volumes written in project are used and echoed. For a whole product brief, use plan_stack_from_spec. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "maxLength": 4000,
      "description": "What is being built. Volumes written here ('1,200,000 preview images/mo', '20k MAU') are used and echoed as assumptions. Say 'personal' or 'hobby' if it is non-commercial; otherwise plans that forbid commercial use (e.g. Vercel Hobby) are blocked."
    },
    "needs": {
      "type": "array",
      "minItems": 1,
      "maxItems": 12,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "job"
        ],
        "properties": {
          "job": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "A job id from list_stack_jobs (llm_inference, image_generation_api, video_delivery, object_storage, sandbox_compute, browser_automation, job_queue, auth_b2b, email_inbound, identity_verification, marketplace_payouts, database, auth, hosting, email_transactional, …) or plain words ('send email', 'video hosting (HLS)', 'KYC'). Unknown or ambiguous jobs come back in unsupported_jobs, never as an error"
          },
          "features": {
            "type": "array",
            "maxItems": 20,
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "description": "Must-haves, e.g. ['Custom domain', 'CAPTCHA solving', 'platform holds funds', 'refunds enabled', 'unbounded sessions', '2 vCPU / 4 GiB', 'gpt-6-sol']. Sizes and counts ('30 GB database') are checked as volumes; a model or plan name pins that model; SSO, SOC 2, audit logs and region needs are listed as unverified requirements"
          },
          "volume": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "amount",
              "unit"
            ],
            "properties": {
              "amount": {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000000000
              },
              "unit": {
                "type": "string",
                "enum": [
                  "seats",
                  "members",
                  "mau",
                  "emails_per_month",
                  "emails_per_day",
                  "contacts",
                  "domains",
                  "events_per_month",
                  "pageviews_per_month",
                  "errors_per_month",
                  "requests_per_month",
                  "requests_per_day",
                  "searches_per_month",
                  "cpu_ms_per_request",
                  "db_gb",
                  "storage_gb",
                  "bandwidth_gb",
                  "projects",
                  "sites",
                  "videos",
                  "video_minutes",
                  "responses_per_month",
                  "tasks_per_month",
                  "keywords_tracked",
                  "credits_per_month",
                  "history_days",
                  "apps",
                  "files",
                  "event_types",
                  "monitors",
                  "tokens_per_month",
                  "images_per_month",
                  "audio_minutes_per_month",
                  "characters_per_month",
                  "transactions_per_month",
                  "sandbox_hours_per_month",
                  "concurrent_sessions",
                  "session_minutes",
                  "call_participants",
                  "meeting_minutes",
                  "records",
                  "inboxes",
                  "tokens_in_per_month",
                  "tokens_out_per_month",
                  "cached_tokens_per_month",
                  "video_minutes_stored",
                  "video_minutes_delivered_per_month",
                  "gmv_usd_per_month",
                  "payouts_per_month",
                  "active_accounts",
                  "verifications_per_month",
                  "browser_hours_per_month",
                  "proxy_gb_per_month",
                  "job_executions_per_month",
                  "sso_connections",
                  "sso_users",
                  "inbound_emails_per_month",
                  "stream_hours_per_month",
                  "vcpu_hours_per_month",
                  "credits_usd_per_month",
                  "disputes_per_month",
                  "payout_volume_usd_per_month",
                  "object_writes_per_month",
                  "object_reads_per_month",
                  "job_executions_per_day",
                  "scim_connections",
                  "MAU",
                  "tokens",
                  "tokens_in",
                  "tokens_out",
                  "cached_tokens",
                  "images",
                  "video_minutes_delivered",
                  "gb_stored",
                  "gb_egress",
                  "transactions",
                  "gmv_usd",
                  "sandbox_seconds",
                  "sandbox_hours",
                  "vm_hours",
                  "vcpu_hours",
                  "browser_hours",
                  "proxy_gb",
                  "job_executions",
                  "verifications",
                  "inbound_emails",
                  "emails",
                  "events",
                  "errors",
                  "exceptions",
                  "requests",
                  "pageviews",
                  "searches",
                  "payouts",
                  "credits_usd",
                  "stream_hours",
                  "audio_minutes",
                  "characters",
                  "payout_volume_usd",
                  "disputes",
                  "object_writes",
                  "object_reads"
                ],
                "description": "A units.json unit, or an alias: tokens_in, tokens_out, images, gb_stored, gb_egress, transactions, gmv_usd, sandbox_seconds, sandbox_hours, vcpu_hours, browser_hours, job_executions, verifications, inbound_emails, video_minutes_delivered, sso_connections, sso_users, emails, events, requests, credits_usd, MAU (= mau). *_per_month units are monthly, *_per_day daily, *_gb and video_minutes_stored are totals."
              }
            }
          },
          "volumes": {
            "type": "array",
            "minItems": 1,
            "maxItems": 8,
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "amount",
                "unit"
              ],
              "properties": {
                "amount": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1000000000000000
                },
                "unit": {
                  "type": "string",
                  "enum": [
                    "seats",
                    "members",
                    "mau",
                    "emails_per_month",
                    "emails_per_day",
                    "contacts",
                    "domains",
                    "events_per_month",
                    "pageviews_per_month",
                    "errors_per_month",
                    "requests_per_month",
                    "requests_per_day",
                    "searches_per_month",
                    "cpu_ms_per_request",
                    "db_gb",
                    "storage_gb",
                    "bandwidth_gb",
                    "projects",
                    "sites",
                    "videos",
                    "video_minutes",
                    "responses_per_month",
                    "tasks_per_month",
                    "keywords_tracked",
                    "credits_per_month",
                    "history_days",
                    "apps",
                    "files",
                    "event_types",
                    "monitors",
                    "tokens_per_month",
                    "images_per_month",
                    "audio_minutes_per_month",
                    "characters_per_month",
                    "transactions_per_month",
                    "sandbox_hours_per_month",
                    "concurrent_sessions",
                    "session_minutes",
                    "call_participants",
                    "meeting_minutes",
                    "records",
                    "inboxes",
                    "tokens_in_per_month",
                    "tokens_out_per_month",
                    "cached_tokens_per_month",
                    "video_minutes_stored",
                    "video_minutes_delivered_per_month",
                    "gmv_usd_per_month",
                    "payouts_per_month",
                    "active_accounts",
                    "verifications_per_month",
                    "browser_hours_per_month",
                    "proxy_gb_per_month",
                    "job_executions_per_month",
                    "sso_connections",
                    "sso_users",
                    "inbound_emails_per_month",
                    "stream_hours_per_month",
                    "vcpu_hours_per_month",
                    "credits_usd_per_month",
                    "disputes_per_month",
                    "payout_volume_usd_per_month",
                    "object_writes_per_month",
                    "object_reads_per_month",
                    "job_executions_per_day",
                    "scim_connections",
                    "MAU",
                    "tokens",
                    "tokens_in",
                    "tokens_out",
                    "cached_tokens",
                    "images",
                    "video_minutes_delivered",
                    "gb_stored",
                    "gb_egress",
                    "transactions",
                    "gmv_usd",
                    "sandbox_seconds",
                    "sandbox_hours",
                    "vm_hours",
                    "vcpu_hours",
                    "browser_hours",
                    "proxy_gb",
                    "job_executions",
                    "verifications",
                    "inbound_emails",
                    "emails",
                    "events",
                    "errors",
                    "exceptions",
                    "requests",
                    "pageviews",
                    "searches",
                    "payouts",
                    "credits_usd",
                    "stream_hours",
                    "audio_minutes",
                    "characters",
                    "payout_volume_usd",
                    "disputes",
                    "object_writes",
                    "object_reads"
                  ],
                  "description": "A units.json unit, or an alias: tokens_in, tokens_out, images, gb_stored, gb_egress, transactions, gmv_usd, sandbox_seconds, sandbox_hours, vcpu_hours, browser_hours, job_executions, verifications, inbound_emails, video_minutes_delivered, sso_connections, sso_users, emails, events, requests, credits_usd, MAU (= mau). *_per_month units are monthly, *_per_day daily, *_gb and video_minutes_stored are totals."
                }
              }
            },
            "description": "Several dimensions at once, e.g. [{amount: 15000000, unit: 'tokens_in'}, {amount: 7500000, unit: 'tokens_out'}]"
          },
          "per_user": {
            "type": "array",
            "minItems": 1,
            "maxItems": 8,
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "amount",
                "unit"
              ],
              "properties": {
                "amount": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1000000000000000
                },
                "unit": {
                  "type": "string",
                  "enum": [
                    "seats",
                    "members",
                    "mau",
                    "emails_per_month",
                    "emails_per_day",
                    "contacts",
                    "domains",
                    "events_per_month",
                    "pageviews_per_month",
                    "errors_per_month",
                    "requests_per_month",
                    "requests_per_day",
                    "searches_per_month",
                    "cpu_ms_per_request",
                    "db_gb",
                    "storage_gb",
                    "bandwidth_gb",
                    "projects",
                    "sites",
                    "videos",
                    "video_minutes",
                    "responses_per_month",
                    "tasks_per_month",
                    "keywords_tracked",
                    "credits_per_month",
                    "history_days",
                    "apps",
                    "files",
                    "event_types",
                    "monitors",
                    "tokens_per_month",
                    "images_per_month",
                    "audio_minutes_per_month",
                    "characters_per_month",
                    "transactions_per_month",
                    "sandbox_hours_per_month",
                    "concurrent_sessions",
                    "session_minutes",
                    "call_participants",
                    "meeting_minutes",
                    "records",
                    "inboxes",
                    "tokens_in_per_month",
                    "tokens_out_per_month",
                    "cached_tokens_per_month",
                    "video_minutes_stored",
                    "video_minutes_delivered_per_month",
                    "gmv_usd_per_month",
                    "payouts_per_month",
                    "active_accounts",
                    "verifications_per_month",
                    "browser_hours_per_month",
                    "proxy_gb_per_month",
                    "job_executions_per_month",
                    "sso_connections",
                    "sso_users",
                    "inbound_emails_per_month",
                    "stream_hours_per_month",
                    "vcpu_hours_per_month",
                    "credits_usd_per_month",
                    "disputes_per_month",
                    "payout_volume_usd_per_month",
                    "object_writes_per_month",
                    "object_reads_per_month",
                    "job_executions_per_day",
                    "scim_connections",
                    "MAU",
                    "tokens",
                    "tokens_in",
                    "tokens_out",
                    "cached_tokens",
                    "images",
                    "video_minutes_delivered",
                    "gb_stored",
                    "gb_egress",
                    "transactions",
                    "gmv_usd",
                    "sandbox_seconds",
                    "sandbox_hours",
                    "vm_hours",
                    "vcpu_hours",
                    "browser_hours",
                    "proxy_gb",
                    "job_executions",
                    "verifications",
                    "inbound_emails",
                    "emails",
                    "events",
                    "errors",
                    "exceptions",
                    "requests",
                    "pageviews",
                    "searches",
                    "payouts",
                    "credits_usd",
                    "stream_hours",
                    "audio_minutes",
                    "characters",
                    "payout_volume_usd",
                    "disputes",
                    "object_writes",
                    "object_reads"
                  ],
                  "description": "A units.json unit, or an alias: tokens_in, tokens_out, images, gb_stored, gb_egress, transactions, gmv_usd, sandbox_seconds, sandbox_hours, vcpu_hours, browser_hours, job_executions, verifications, inbound_emails, video_minutes_delivered, sso_connections, sso_users, emails, events, requests, credits_usd, MAU (= mau). *_per_month units are monthly, *_per_day daily, *_gb and video_minutes_stored are totals."
                }
              }
            },
            "description": "Volumes per monthly active user per month, e.g. [{amount: 6, unit: 'images'}]; multiplied by MAU (from scales, a mau volume or the project text)"
          },
          "avg_amount_usd": {
            "type": "number",
            "minimum": 0,
            "maximum": 10000000,
            "description": "Average payment in USD; with transactions it prices payment fees"
          },
          "sandbox_size": {
            "type": "object",
            "additionalProperties": false,
            "description": "Sandbox size for sandbox_compute",
            "properties": {
              "vcpu": {
                "type": "number",
                "minimum": 0.1,
                "maximum": 512
              },
              "ram_gib": {
                "type": "number",
                "minimum": 0.1,
                "maximum": 4096
              }
            }
          }
        }
      }
    },
    "prefer": {
      "type": "string",
      "enum": [
        "cheapest",
        "managed",
        "open_source"
      ],
      "default": "cheapest",
      "description": "managed leaves out self-hosted options"
    },
    "budget_monthly_usd": {
      "type": "number",
      "minimum": 0
    },
    "limit_per_job": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 4
    },
    "scales": {
      "type": "array",
      "minItems": 1,
      "maxItems": 6,
      "items": {
        "type": "number",
        "minimum": 0.001,
        "maximum": 1000000000
      },
      "description": "Price the stack at several scales, e.g. [1000, 20000, 200000] MAU (scale_by mau) or [1, 10, 100] (scale_by multiplier): per-job cost curve, tier changes and break-even points between options"
    },
    "scale_by": {
      "type": "string",
      "enum": [
        "mau",
        "multiplier"
      ],
      "default": "mau",
      "description": "mau: scales are monthly active users (per_user volumes × MAU; other monthly volumes and sizes grow in proportion to the MAU they were given at); multiplier: every monthly volume and size is multiplied"
    },
    "unit_economics": {
      "type": "object",
      "additionalProperties": false,
      "description": "Revenue model for gross margin per scale: price_usd with conversion_rate, or revenue_per_mau",
      "properties": {
        "price_usd": {
          "type": "number",
          "minimum": 0,
          "maximum": 1000000,
          "description": "What a paying user pays"
        },
        "billing": {
          "type": "string",
          "enum": [
            "monthly",
            "one_time"
          ],
          "default": "monthly",
          "description": "one_time: price_usd per purchase, conversion_rate = purchases per MAU per month"
        },
        "conversion_rate": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Share of MAU who pay, e.g. 0.03"
        },
        "revenue_per_mau": {
          "type": "number",
          "minimum": 0,
          "maximum": 10000,
          "description": "Average monthly revenue per MAU (instead of price_usd × conversion_rate)"
        },
        "variable_cost_alert_pct": {
          "type": "number",
          "minimum": 1,
          "maximum": 100,
          "default": 20,
          "description": "Flag jobs whose monthly cost is above this % of revenue"
        }
      }
    }
  },
  "required": [
    "needs"
  ],
  "additionalProperties": false
}
🟢plan_stack_from_spec(spec, scales, overrides, add_jobs, exclude_jobs, ...)

Turn a product brief (markdown or text, up to 20,000 characters) into a priced stack and a new-product build packet. Derives the jobs the product needs (auth, database, hosting, email, payments or payouts, LLM, image generation, video, sandboxes, browser automation, queues, SSO, KYC, …) with the sentence that implies each; derives volumes per scale from numbers in the brief or from stated default rates (every assumption listed and editable with overrides); runs choose_stack at each scale (default 1k / 20k / 200k MAU) with cost curves and break-evens; and returns SPEC.md (concrete data model with money, state machines and personal data; acceptance tests with numbers; per-unit cost targets with a stop-and-ask rule; named dependencies with tier, price, checked_at and the limit that triggers an upgrade; domain security items), AGENTS.md and a manifest. Rules and keyword tables only, no model call: check the derived jobs and assumptions with the user. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "spec": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20000,
      "description": "The product brief (markdown or plain text, up to 20,000 characters): what it does, who uses it, how it makes money, any numbers you know (users, conversion, prices, volumes). Never paste secrets or personal data."
    },
    "scales": {
      "type": "array",
      "minItems": 1,
      "maxItems": 5,
      "items": {
        "type": "number",
        "minimum": 1,
        "maximum": 1000000000
      },
      "default": [
        1000,
        20000,
        200000
      ],
      "description": "MAU targets to price, default [1000, 20000, 200000]"
    },
    "overrides": {
      "type": "array",
      "maxItems": 40,
      "description": "Edit the derived assumptions: a volume per MAU per month (per_user) or a fixed monthly total for a job",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "job",
          "unit",
          "amount"
        ],
        "properties": {
          "job": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "unit": {
            "type": "string",
            "enum": [
              "seats",
              "members",
              "mau",
              "emails_per_month",
              "emails_per_day",
              "contacts",
              "domains",
              "events_per_month",
              "pageviews_per_month",
              "errors_per_month",
              "requests_per_month",
              "requests_per_day",
              "searches_per_month",
              "cpu_ms_per_request",
              "db_gb",
              "storage_gb",
              "bandwidth_gb",
              "projects",
              "sites",
              "videos",
              "video_minutes",
              "responses_per_month",
              "tasks_per_month",
              "keywords_tracked",
              "credits_per_month",
              "history_days",
              "apps",
              "files",
              "event_types",
              "monitors",
              "tokens_per_month",
              "images_per_month",
              "audio_minutes_per_month",
              "characters_per_month",
              "transactions_per_month",
              "sandbox_hours_per_month",
              "concurrent_sessions",
              "session_minutes",
              "call_participants",
              "meeting_minutes",
              "records",
              "inboxes",
              "tokens_in_per_month",
              "tokens_out_per_month",
              "cached_tokens_per_month",
              "video_minutes_stored",
              "video_minutes_delivered_per_month",
              "gmv_usd_per_month",
              "payouts_per_month",
              "active_accounts",
              "verifications_per_month",
              "browser_hours_per_month",
              "proxy_gb_per_month",
              "job_executions_per_month",
              "sso_connections",
              "sso_users",
              "inbound_emails_per_month",
              "stream_hours_per_month",
              "vcpu_hours_per_month",
              "credits_usd_per_month",
              "disputes_per_month",
              "payout_volume_usd_per_month",
              "object_writes_per_month",
              "object_reads_per_month",
              "job_executions_per_day",
              "scim_connections",
              "MAU",
              "tokens",
              "tokens_in",
              "tokens_out",
              "cached_tokens",
              "images",
              "video_minutes_delivered",
              "gb_stored",
              "gb_egress",
              "transactions",
              "gmv_usd",
              "sandbox_seconds",
              "sandbox_hours",
              "vm_hours",
              "vcpu_hours",
              "browser_hours",
              "proxy_gb",
              "job_executions",
              "verifications",
              "inbound_emails",
              "emails",
              "events",
              "errors",
              "exceptions",
              "requests",
              "pageviews",
              "searches",
              "payouts",
              "credits_usd",
              "stream_hours",
              "audio_minutes",
              "characters",
              "payout_volume_usd",
              "disputes",
              "object_writes",
              "object_reads"
            ]
          },
          "amount": {
            "type": "number",
            "minimum": 0,
            "maximum": 1000000000000000
          },
          "basis": {
            "type": "string",
            "enum": [
              "per_user",
              "total"
            ],
            "default": "per_user"
          }
        }
      }
    },
    "add_jobs": {
      "type": "array",
      "maxItems": 12,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      },
      "description": "Jobs to add that the brief doesn't mention"
    },
    "exclude_jobs": {
      "type": "array",
      "maxItems": 20,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      },
      "description": "Derived jobs to drop (job ids)"
    },
    "unit_economics": {
      "type": "object",
      "additionalProperties": false,
      "description": "Revenue model for gross margin per scale: price_usd with conversion_rate, or revenue_per_mau",
      "properties": {
        "price_usd": {
          "type": "number",
          "minimum": 0,
          "maximum": 1000000,
          "description": "What a paying user pays"
        },
        "billing": {
          "type": "string",
          "enum": [
            "monthly",
            "one_time"
          ],
          "default": "monthly",
          "description": "one_time: price_usd per purchase, conversion_rate = purchases per MAU per month"
        },
        "conversion_rate": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Share of MAU who pay, e.g. 0.03"
        },
        "revenue_per_mau": {
          "type": "number",
          "minimum": 0,
          "maximum": 10000,
          "description": "Average monthly revenue per MAU (instead of price_usd × conversion_rate)"
        },
        "variable_cost_alert_pct": {
          "type": "number",
          "minimum": 1,
          "maximum": 100,
          "default": 20,
          "description": "Flag jobs whose monthly cost is above this % of revenue"
        }
      }
    },
    "prefer": {
      "type": "string",
      "enum": [
        "cheapest",
        "managed",
        "open_source"
      ],
      "default": "cheapest"
    },
    "limit_per_job": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 3
    }
  },
  "required": [
    "spec"
  ],
  "additionalProperties": false
}
🟢list_stack_jobs

The jobs choose_stack can compare (database, auth, auth_b2b, hosting, email_transactional, email_inbound, object_storage, video_delivery, llm_inference, llm_gateway, image_generation_api, sandbox_compute, browser_automation, job_queue, identity_verification, marketplace_payouts, payments_billing, …) with how many vendors and open-source options each has. choose_stack's input schema lists the volume units and the aliases it accepts (tokens_in, images, gb_stored, sandbox_seconds, …). Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟡report_outcome(recipe_id, path_id, outcome)

Anonymously count that a user picked, switched to, or reverted from a replacement path. Increments public counters (used for the 'most used' leaderboard) and stores no personal data. Call it only after the user confirms. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers and project descriptions; never IP addresses): don't send personal data or secrets.

Input Schema

{
  "type": "object",
  "properties": {
    "recipe_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "path_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "outcome": {
      "type": "string",
      "enum": [
        "picked",
        "switched",
        "reverted"
      ]
    }
  },
  "required": [
    "recipe_id",
    "path_id",
    "outcome"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded14 tools