Skip to main content
Glama

Audit a stack (code + billing)

audit_stack
Read-onlyIdempotent

Use when the user wants their stack checked as a whole: several subscriptions, the paid services in a codebase, or a portfolio of products ('audit what we pay for', 'what can we cut?'). One line per service with vendor, plan, what they pay, seats, the features they use and usage (or evidence strings); add project for a portfolio and account for a shared bill. Per service: status (eligible = a cheaper path checked end to end; needs_info = likely cheaper but a check is open, so ask its questions; keep; no_recipe), the best path, right_size, overlaps, and levers that are not counted as savings. Totals keep prices the user confirmed apart from modeled list prices. If facts are missing, start_audit says which ones matter first. Send vendor names, feature names, numbers and prices only: never source code, secrets or raw invoices. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers, billing amounts and project descriptions; account keys only as a one-way hash, billing and validation sources not at all; never IP addresses): don't send personal data or secrets.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
servicesYes
limit_pathsNo
active_usersNoPeople or accounts active in the last 30 days (0 = unused: cleanup levers and sanity checks)
revenue_usd_per_monthNoThe product's revenue per month (context for sanity checks: no revenue, cost per user, fees vs revenue; never a cap)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed82 schema fields changed
    • addedInput schema / properties / services / items / properties / billing
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Billing evidence: scope (dedicated, shared or unknown), account_id (a non-secret alias; the account key), allocated_monthly_usd (attribution only, never a saving), avoidable_monthly_usd with avoidability_confirmed (what leaving actually removes from the bill; 0 is valid), commitment_months_remaining (non-refundable months left; 0 only when cancellable now) and source (a reference, no private contents). With billing, a path is eligible only once the avoidable amount, scope, commitment and source are all given",
      +  "properties": {
      +    "account_id": {
      +      "maxLength": 200,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "allocated_monthly_usd": {
      +      "maximum": 1000000000000,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "avoidability_confirmed": {
      +      "type": "boolean"
      +    },
      +    "avoidable_monthly_usd": {
      +      "maximum": 1000000000000,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "commitment_months_remaining": {
      +      "maximum": 120,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "scope": {
      +      "enum": [
      +        "dedicated",
      +        "shared",
      +        "unknown"
      +      ],
      +      "maxLength": 2000,
      +      "type": "string"
      +    },
      +    "source": {
      +      "maxLength": 1000,
      +      "minLength": 1,
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / services / items / properties / files_referencing / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / replacement_validation
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "A replacement path the user checked themselves: its current price, capacity, burst limits and paid add-ons against their usage. It answers that path's capacity checks (never its must-haves) and ranks it first",
      +  "properties": {
      +    "capacity_and_price_confirmed": {
      +      "description": "true only after checking the price, capacity, burst limits and required add-ons",
      +      "type": "boolean"
      +    },
      +    "path_id": {
      +      "description": "The path id (from find_alternatives or audit_stack)",
      +      "maxLength": 200,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "source": {
      +      "description": "Where the check comes from (usage report, pricing page, quote); no private contents",
      +      "maxLength": 1000,
      +      "minLength": 1,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "path_id",
      +    "capacity_and_price_confirmed",
      +    "source"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / services / items / properties / service_id
      Added value: +{
      +  "description": "A distinct bill when the same vendor appears more than once (an account key, like account; lines with the same key are one bill)",
      +  "maxLength": 200,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / services / items / properties / usage / properties / MAU / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / active_accounts / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / apps / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / audio_minutes_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / bandwidth_gb / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / browser_hours_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / cache_commands_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / cached_tokens_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / call_participants / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / characters_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / concurrent_sessions / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / contacts / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / cpu_ms_per_request / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / credits_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / credits_usd_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / db_gb / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / disputes_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / domains / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / emails_per_day / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / emails_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / errors_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / event_types / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / events_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / files / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / gmv_usd_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / gpu_seconds_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / history_days / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / images_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / inbound_emails_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / inboxes / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / job_executions_per_day / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / job_executions_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / keywords_tracked / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / mau / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / meeting_minutes / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / members / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / monitors / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / mtu / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / object_reads_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / object_writes_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / pageviews_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / payout_volume_usd_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / payouts_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / phone_minutes_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / projects / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / proxy_gb_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / records / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / requests_per_day / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / requests_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / responses_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / revenue_usd_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / sandbox_hours_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / scim_connections / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / searches_per_hour / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / searches_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / seats / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / session_minutes / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / sites / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / sms_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / sso_connections / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / sso_users / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / storage_gb / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / stream_hours_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / tasks_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / tokens_in_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / tokens_out_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / tokens_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / transactions_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / vcpu_hours_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / vector_queries_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / vector_read_units_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / vector_write_units_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / vectors_stored / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / verifications_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / video_minutes / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / video_minutes_delivered_per_month / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / video_minutes_stored / maximum
      Added value: +1000000000000
    • addedInput schema / properties / services / items / properties / usage / properties / videos / maximum
      Added value: +1000000000000
  2. Changed23 schema fields changed
    • addedInput schema / properties / active_users
      Added value: +{
      +  "description": "People or accounts active in the last 30 days (0 = unused: cleanup levers and sanity checks)",
      +  "maximum": 1000000000,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / revenue_usd_per_month
      Added value: +{
      +  "description": "The product's revenue per month (context for sanity checks: no revenue, cost per user, fees vs revenue; never a cap)",
      +  "maximum": 1000000000,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / account
      Added value: +{
      +  "description": "Billing account key (e.g. 'supabase-org-main'): lines with the same vendor and key share one bill; different keys are separate bills. Give the bill once",
      +  "maxLength": 100,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / services / items / properties / active_users
      Added value: +{
      +  "description": "People or accounts active in the last 30 days (0 = unused: cleanup levers and sanity checks)",
      +  "maximum": 1000000000,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • changedInput schema / properties / services / items / properties / confidence / description
      Previous value: -"detect.mjs output (ignored)"New value: +"detect.mjs output: 'low' (only a config file) means no paid plan is assumed"
    • addedInput schema / properties / services / items / properties / confirmed
      Added value: +{
      +  "description": "true when the user confirmed they pay for this (with plan: its list price counts as confirmed spend). Scanner-only lines are unconfirmed",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / services / items / properties / files_referencing / description
      Previous value: -"detect.mjs output (ignored)"New value: +"detect.mjs output: marks the line as scan-only (unconfirmed); never read as usage"
    • addedInput schema / properties / services / items / properties / last_active
      Added value: +{
      +  "description": "When this resource (project, app, account) was last used: an ISO date ('2026-03-10'), 'never', or '5 months ago'. 90+ days idle or never used gets a cleanup lever",
      +  "maxLength": 100,
      +  "type": "string"
      +}
    • addedInput schema / properties / services / items / properties / revenue_usd_per_month
      Added value: +{
      +  "description": "The product's revenue per month (context for sanity checks: no revenue, cost per user, fees vs revenue; never a cap)",
      +  "maximum": 1000000000,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / shared_with
      Added value: +{
      +  "description": "How many products share this bill (one account, org or team), when only this product is audited: moving one product off it saves only what it adds to the bill, never the whole bill. monthly_spend_usd is then the whole account's bill",
      +  "maximum": 100000,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedInput schema / properties / services / items / properties / usage / description
      Previous value: -"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."New value: +"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, searches_per_hour, sms_per_month, vectors_stored, vector_queries_per_month, cache_commands_per_month, mtu, gpu_seconds_per_month, revenue_usd_per_month, phone_minutes_per_month, vector_read_units_per_month, vector_write_units_per_month (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."
    • addedInput schema / properties / services / items / properties / usage / properties / cache_commands_per_month
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / usage / properties / gpu_seconds_per_month
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / usage / properties / mtu
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / usage / properties / phone_minutes_per_month
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / usage / properties / revenue_usd_per_month
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / usage / properties / searches_per_hour
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / usage / properties / sms_per_month
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / usage / properties / vector_queries_per_month
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / usage / properties / vector_read_units_per_month
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / usage / properties / vector_write_units_per_month
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / services / items / properties / usage / properties / vectors_stored
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • changedInput schema / properties / services / maxItems
      Previous value: -60New value: +200
  3. Changed23 schema fields changed
    • changedInput schema / properties / services / items / additionalProperties
      Previous value: -trueNew value: +false
    • addedInput schema / properties / services / items / properties / category
      Added value: +{
      +  "description": "detect.mjs output (ignored)",
      +  "maxLength": 100,
      +  "type": "string"
      +}
    • addedInput schema / properties / services / items / properties / confidence
      Added value: +{
      +  "description": "detect.mjs output (ignored)",
      +  "maxLength": 20,
      +  "type": "string"
      +}
    • addedInput schema / properties / services / items / properties / evidence / description
      Added value: +"Scan evidence labels and usage facts in words ('db 1.5 GB', '40,000 emails/mo', '37 domains')"
    • addedInput schema / properties / services / items / properties / evidence / items / maxLength
      Added value: +500
    • addedInput schema / properties / services / items / properties / evidence / maxItems
      Added value: +50
    • addedInput schema / properties / services / items / properties / feature_counts
      Added value: +{
      +  "description": "detect.mjs output (ignored)",
      +  "items": {
      +    "type": "object"
      +  },
      +  "maxItems": 100,
      +  "type": "array"
      +}
    • changedInput schema / properties / services / items / properties / features_used / description
      Previous value: -"Features the code or the user relies on"New value: +"Features the code or the user relies on; sizes and counts ('4,000 contacts') are read as usage"
    • addedInput schema / properties / services / items / properties / features_used / items / maxLength
      Added value: +200
    • addedInput schema / properties / services / items / properties / features_used / maxItems
      Added value: +50
    • addedInput schema / properties / services / items / properties / files_referencing
      Added value: +{
      +  "description": "detect.mjs output (ignored)",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / services / items / properties / in_catalog
      Added value: +{
      +  "description": "detect.mjs output (ignored)",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / services / items / properties / monthly_spend_usd / description
      Previous value: -"What they pay per month for it, if known"New value: +"What they pay per month for it, all seats, if known"
    • addedInput schema / properties / services / items / properties / monthly_spend_usd / maximum
      Added value: +1000000
    • addedInput schema / properties / services / items / properties / name
      Added value: +{
      +  "description": "detect.mjs output (ignored)",
      +  "maxLength": 200,
      +  "type": "string"
      +}
    • addedInput schema / properties / services / items / properties / plan
      Added value: +{
      +  "description": "Their plan, e.g. 'Business Standard' (else read from the name or evidence)",
      +  "maxLength": 100,
      +  "type": "string"
      +}
    • addedInput schema / properties / services / items / properties / project
      Added value: +{
      +  "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",
      +  "maxLength": 100,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / services / items / properties / seats / description
      Added value: +"Paid seats"
    • addedInput schema / properties / services / items / properties / seats / maximum
      Added value: +100000
    • addedInput schema / properties / services / items / properties / usage
      Added value: +{
      +  "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": {
      +    "MAU": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "active_accounts": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "apps": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "audio_minutes_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "bandwidth_gb": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "browser_hours_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "cached_tokens_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "call_participants": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "characters_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "concurrent_sessions": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "contacts": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "cpu_ms_per_request": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "credits_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "credits_usd_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "db_gb": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "disputes_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "domains": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "emails_per_day": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "emails_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "errors_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "event_types": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "events_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "files": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "gmv_usd_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "history_days": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "images_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "inbound_emails_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "inboxes": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "job_executions_per_day": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "job_executions_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "keywords_tracked": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "mau": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "meeting_minutes": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "members": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "monitors": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "object_reads_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "object_writes_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "pageviews_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "payout_volume_usd_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "payouts_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "projects": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "proxy_gb_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "records": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "requests_per_day": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "requests_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "responses_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "sandbox_hours_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "scim_connections": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "searches_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "seats": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "session_minutes": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "sites": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "sso_connections": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "sso_users": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "storage_gb": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "stream_hours_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "tasks_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "tokens_in_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "tokens_out_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "tokens_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "transactions_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "vcpu_hours_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "verifications_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "video_minutes": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "video_minutes_delivered_per_month": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "video_minutes_stored": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "videos": {
      +      "minimum": 0,
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / services / items / properties / vendor / description
      Previous value: -"Vendor id from the scan (e.g. 'sendgrid') or a product name ('Airtable')"New value: +"Vendor id from the scan (e.g. 'sendgrid') or a product name as on the invoice ('Airtable', 'Slack Pro')"
    • addedInput schema / properties / services / items / properties / vendor / maxLength
      Added value: +200
    • addedInput schema / properties / services / items / properties / vendor / minLength
      Added value: +1
  4. First observed

TDQS

A4.4/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the readOnly/idempotent annotations: output statuses and their meanings, price handling, levers not counted as savings, and detailed data-retention/privacy behavior. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place: use case first, then input structure, output behavior, workflow advice, and privacy/storage. It is front-loaded with the selection trigger and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, it describes the per-service result categories (status, best path, right_size, overlaps, levers) and how missing facts are routed. The main gap is the unmentioned limit_paths parameter and the absence of an exact output envelope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description usefully explains how to structure the services array (vendor, plan, seats, usage, project, account) and imposes privacy constraints on values. However, with 50% schema coverage it does not compensate fully: limit_paths is never mentioned, and top-level active_users/revenue_usd_per_month are only covered by schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: auditing a whole stack, with concrete user intents ('audit what we pay for', 'what can we cut?') and portfolio/billing scopes. It also distinguishes itself from start_audit by noting that missing facts are handled there.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit 'Use when' trigger with examples of what counts as a whole-stack audit. It names start_audit as the place that prioritizes missing facts, but does not explicitly exclude other siblings like find_alternatives or choose_stack.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.