Skip to main content
Glama

update_plan_limits

DestructiveIdempotent

Change the usage limits on an app's existing tiers (e.g. set ai_generations_daily to 200 on pro). WRITE, human-gated: a real write requires an elicitation-capable client; the human sees the per-tier before -> after diff and must click approve. Clients without elicitation are refused (dry_run still works anywhere). Tier-keyed, so one call can set a new limit key across every tier in a single atomic write. Use -1 for unlimited, matching the catalog convention. This writes ONLY the limits object: it never touches Stripe, prices, or plan names, so it cannot mint a price by accident. Changing prices or adding a tier is a different job: use create_app_kit or the dashboard. Set dry_run to preview the before/after without writing. After this succeeds, run bun run plans:sync in the app repo and commit the regenerated plans.json so the code and the catalog agree.

Input Schema

NameRequiredDescriptionDefault
modeNomerge
app_idYes
dry_runNo
updatesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Goes well past the annotations by disclosing a human-gated elicitation requirement, that non-elicitation clients are refused while dry_run still works, that the human reviews a per-tier before->after diff, and that the multi-tier write is atomic. It also documents the -1 unlimited convention and the exact blast radius (limits object only).

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-loads the WRITE/human-gated warning before the mechanics, and nearly every sentence carries a distinct fact (guardrail, atomicity, -1, blast radius, alternative, sync step). It is dense but runs long; the alternatives and post-sync instructions could be tightened without losing meaning.

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?

Appropriately complete for a destructive, nested-object write with no output schema: safety gate, scope, sentinel value, and follow-up step are all covered. The one omission is what merge versus replace actually does to existing limit keys, which matters given destructiveHint=true.

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?

With 0% schema description coverage and a nested `updates` object, the description carries the burden and mostly delivers: tier-keyed structure, key->number shape via the example, -1 semantics, and dry_run behavior. The `mode` enum (merge vs replace) is never explained anywhere, which is a real gap for a destructive write.

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 and resource (change usage limits on an app's existing tiers) and immediately anchors it with a concrete example (set ai_generations_daily to 200 on pro). It also draws a hard boundary against adjacent operations — 'this writes ONLY the limits object: it never touches Stripe, prices, or plan names' — so it is unmistakable versus update_plan_pricing or create_app_kit.

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

Usage Guidelines5/5

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

Explicitly routes alternatives: changing prices or adding a tier is 'a different job: use create_app_kit or the dashboard.' It also names a preview path (dry_run), and gives a required post-condition (run `bun run plans:sync` and commit plans.json).

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