Skip to main content
Glama

Update a saved stack: users, name or alerts

update_saved_stack
Idempotent

Change one of the signed-in user's saved stacks or audits: its name, how many users it has now (mau_now) or expects (mau_forecast), whether to email them when it changes (alerts), which build-pack steps are done (build_progress, for plans) and which steps of a host move are done (migration_progress, for audits). With alerts on, Kong Reviews checks it every day and emails when a vendor's price change moves its monthly cost, when a cost jump or a startup credit running out is about 45 days away, and once a month to ask for the current user count. Alerts need a confirmed email: pass email to send the confirmation link (GitHub sign-in shares no email). Updating users re-prices it and makes today the start of its projection. Needs sign-in.

Input Schema

NameRequiredDescriptionDefault
idYes
nameNo
emailNoWhere alerts go. A confirmation link is sent first; only ask for it when the user wants alerts.
alertsNoEmail the user when prices, cost jumps or credits change this stack.
answersNoAnswers to the plan's questions (from get_saved_stack), kept with the stack so a re-plan doesn't ask again. Plans only. Re-prices the stack.
mau_nowNoMonthly active users today.
unlink_repoNoForget the repo linked with check_build, and its last check.
mau_forecastNoUsers expected at the end of the forecast (12 months for audits).
build_progressNoTick build-pack steps done (true) or not done (false), by step id from get_build_pack: domain or the step's category (hosting, database, auth…). Plans only.
migration_progressNoTick a host move's features and cutover steps done (true) or not done (false), by id from plan_migration (e.g. forms, redirects, lower-ttl, switch). Audits only.

Output Schema

NameRequiredDescriptionDefault
dataYesThe tool result. Its shape depends on the tool.
staleYes
caveatsYesShow to the user word for word.
sourcesYes
confidenceYes
assumptionsYesUsage and pricing assumptions behind the numbers.
disclosuresYesAlways includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid.
generated_atYes
engine_versionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedInput schema / properties / answers
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Answers to the plan's questions (from get_saved_stack), kept with the stack so a re-plan doesn't ask again. Plans only. Re-prices the stack.",
      +  "properties": {
      +    "builder_profile": {
      +      "enum": [
      +        "developer",
      +        "non_developer"
      +      ],
      +      "type": "string"
      +    },
      +    "confirmed": {
      +      "description": "Question ids whose assumption is right, e.g. [\"region\", \"builder\"].",
      +      "items": {
      +        "maxLength": 40,
      +        "type": "string"
      +      },
      +      "maxItems": 20,
      +      "type": "array"
      +    },
      +    "data_in_eu": {
      +      "description": "true: user data has to stay in the EU. false: no region requirement.",
      +      "type": "boolean"
      +    },
      +    "per_user": {
      +      "additionalProperties": false,
      +      "description": "Usage per active user a month, e.g. {\"sms\": 2, \"file_storage_gb\": 0.2, \"ai_input_ktok\": 30}. Replaces the profile and the filled-in defaults for those units; a plan's questions say which unit each answer sets. Units: mau, seat, request_million, bandwidth_gb, db_storage_gb, egress_gb, email, event, error_event, compute_hour, revenue_usd, transaction, ai_input_ktok, ai_output_ktok, kv_read, kv_write, ci_hour, file_storage_gb, file_egress_gb, file_write, file_read, video_min_stored, video_min_delivered, sms, job_run, search_request, search_record.",
      +      "properties": {
      +        "ai_input_ktok": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "ai_output_ktok": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "bandwidth_gb": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "ci_hour": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "compute_hour": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "db_storage_gb": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "egress_gb": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "email": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "error_event": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "event": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "file_egress_gb": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "file_read": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "file_storage_gb": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "file_write": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "job_run": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "kv_read": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "kv_write": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "mau": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "request_million": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "revenue_usd": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "search_record": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "search_request": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "seat": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "sms": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "transaction": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "video_min_delivered": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "video_min_stored": {
      +          "minimum": 0,
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "revenue_per_mau_usd": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "transactions_per_mau": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "users_per_account": {
      +      "description": "People who use it at each business customer.",
      +      "maximum": 100000,
      +      "minimum": 1,
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / build_progress
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Tick build-pack steps done (true) or not done (false), by step id from get_build_pack: domain or the step's category (hosting, database, auth…). Plans only.",
      +  "properties": {
      +    "ai": {
      +      "type": "boolean"
      +    },
      +    "app_store": {
      +      "type": "boolean"
      +    },
      +    "auth": {
      +      "type": "boolean"
      +    },
      +    "coding": {
      +      "type": "boolean"
      +    },
      +    "database": {
      +      "type": "boolean"
      +    },
      +    "domain": {
      +      "type": "boolean"
      +    },
      +    "edge": {
      +      "type": "boolean"
      +    },
      +    "email": {
      +      "type": "boolean"
      +    },
      +    "hosting": {
      +      "type": "boolean"
      +    },
      +    "jobs": {
      +      "type": "boolean"
      +    },
      +    "observability": {
      +      "type": "boolean"
      +    },
      +    "payments": {
      +      "type": "boolean"
      +    },
      +    "push": {
      +      "type": "boolean"
      +    },
      +    "search": {
      +      "type": "boolean"
      +    },
      +    "sms": {
      +      "type": "boolean"
      +    },
      +    "storage": {
      +      "type": "boolean"
      +    },
      +    "video": {
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / migration_progress
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Tick a host move's features and cutover steps done (true) or not done (false), by id from plan_migration (e.g. forms, redirects, lower-ttl, switch). Audits only.",
      +  "type": "object"
      +}
    • addedInput schema / properties / unlink_repo
      Added value: +{
      +  "description": "Forget the repo linked with check_build, and its last check.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / disclosures / description
      Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
  2. Added

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: updating users re-prices the stack and resets the projection start to today, and enabling alerts triggers daily monitoring with three specific email conditions. It also discloses the auth/email-confirmation requirement (GitHub sign-in shares no email), which is exactly the kind of operational detail annotations cannot express.

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

Conciseness4/5

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

Front-loaded with the core action and the field list, with the caveats following. The alerts paragraph is long — three distinct email triggers are more than an agent needs to invoke the tool — but it is dense and free of 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?

Output schema exists, so return values need no explanation, and the description covers side effects, auth and per-entity field applicability. Minor gap: `answers` (a large nested object that re-prices the stack) and `unlink_repo` (which destroys the linked repo check) are only covered inside the schema, not in the description.

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

Parameters4/5

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

Schema coverage is already 80%, yet the description disambiguates the two easily-confused user fields (mau_now = today, mau_forecast = end of projection, 12 months for audits) and explains build_progress/migration_progress scope. It does not mention unlink_repo or the answers object, leaving those to the schema.

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?

States a specific verb plus resource ('Change one of the signed-in user's saved stacks or audits') and enumerates exactly what is mutable: name, mau_now, mau_forecast, alerts, build_progress, migration_progress. It also scopes which fields apply to which entity ('for plans' vs 'for audits'), which no sibling tool name conveys.

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?

Gives clear preconditions and gating rules: 'Needs sign-in', alerts require a confirmed email, and the email confirmation link must be requested first. It lacks an explicit 'use this instead of save_stack/plan_stack when…' routing sentence, so the agent must infer the edit-vs-create boundary from sibling names.

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.

Resources