Skip to main content
Glama

Manage Apps

apps
Destructive

The v2 app lifecycle apart from creation and redeploy, which deploy_app covers. Actions: list returns the owning human's apps; show returns full detail including manifest, timezone and has_share_token; audit is a read-only security review of every app the caller owns, computed from each app's stored manifest, which is what makes it see apps that were deployed once and never redeployed (a deploy-time warning never reaches those). It reports collections whose declared permissions expose them, worst first: severity 'high' means an anonymous visitor can exploit it today, typically a collection that admits "anyone" to write with no separate 'update' list, so any visitor can overwrite rows other people created rather than only adding their own. It changes nothing; the fix is a redeploy declaring the missing list, and the right list differs per app, so read the app before proposing one. update changes visibility and timezone, the slug being immutable, and switching to 'link' returns a share_url once; share_link_rotate issues a new share token for a 'link' app, returning a new share_url and revoking the old link, and generates one if the app has none; delete is an idempotent soft-delete, and it is recoverable: the app stops serving at once but keeps every version, collection, row, attachment, member and grant, and restore brings all of it back until the retention window elapses (list_deleted shows what is in the trash and each app's purges_at deadline, which is null when the account is never purged). restore is idempotent on a live app, and refuses with 409 when the account is at its app limit, when the app was an expired trial, or when the owning account is itself deleted; an app an operator suspended comes back suspended, not active. purge destroys a deleted app and all its data immediately and forever, with no restore afterwards, and requires the app to already be deleted, so no single call takes a serving app to unrecoverable; wake wakes a dormant app and is otherwise a no-op that reports the actual status; domain_set binds a custom domain and returns the DNS records the domain owner must publish, where the first domain bound serves the app and every later one redirects to it, which is how apex plus www is configured; domain_status returns the serving domain and its aliases, live-refreshed against Cloudflare when that is enabled, with last_error carrying the reason a domain is not activating; domain_remove unbinds one domain, or all of them when no domain is given, and is idempotent.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugNolist only. Exact-match slug filter.
limitNolist only. Page size.
actionYeslist: the caller's owning human's apps. show/update/delete/wake: act on one app (app_id). audit: read-only security review of every app the caller owns. share_link_rotate: rotate a 'link' app's share token, returning a new share_url (the old link stops working); also generates one if the app has none yet. list_deleted: the apps in the trash, each with when it is purged for good. restore: bring a deleted app back with all its data (app_id). purge: destroy a deleted app forever, now (app_id). domain_set/domain_status/domain_remove: manage the app's custom domains (app_id; domain_set also needs domain).
app_idNoRequired for show/update/share_link_rotate/delete/restore/purge/wake/domain_set/domain_status/domain_remove.
cursorNolist only. Opaque cursor from a previous next_cursor.
domainNodomain_set: the bare custom domain to bind (e.g. app.example.com); the response's dns_records lists the DNS entries the domain owner must publish. domain_remove: optional, the one domain to unbind - omit it to unbind them all.
statusNolist only. Default: active. 'all' means every live status; deleted apps are never in this list, use action list_deleted for those.
severityNoaudit only. Return findings of this severity only. The response's `counts` always describe the whole audit, so filtering never hides that other findings exist.
timezoneNoupdate only. The app's IANA timezone for `schedules` reminders (e.g. Europe/Berlin). An app that declares schedules with no timezone fires reminders at 08:00 UTC.
visibilityNoupdate only. The new visibility (slug is immutable).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / action / description
      Previous value: -"list: the caller's owning human's apps. show/update/delete/wake: act on one app (app_id). audit: read-only security review of every app the caller owns. share_link_rotate: rotate a 'link' app's share token, returning a new share_url (the old link stops working); also generates one if the app has none yet. domain_set/domain_status/domain_remove: manage the app's custom domains (app_id; domain_set also needs domain)."New value: +"list: the caller's owning human's apps. show/update/delete/wake: act on one app (app_id). audit: read-only security review of every app the caller owns. share_link_rotate: rotate a 'link' app's share token, returning a new share_url (the old link stops working); also generates one if the app has none yet. list_deleted: the apps in the trash, each with when it is purged for good. restore: bring a deleted app back with all its data (app_id). purge: destroy a deleted app forever, now (app_id). domain_set/domain_status/domain_remove: manage the app's custom domains (app_id; domain_set also needs domain)."
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "show",
      -  "audit",
      -  "update",
      -  "share_link_rotate",
      -  "delete",
      -  "wake",
      -  "domain_set",
      -  "domain_status",
      -  "domain_remove"
      -]New value: +[
      +  "list",
      +  "show",
      +  "audit",
      +  "update",
      +  "share_link_rotate",
      +  "delete",
      +  "list_deleted",
      +  "restore",
      +  "purge",
      +  "wake",
      +  "domain_set",
      +  "domain_status",
      +  "domain_remove"
      +]
    • changedInput schema / properties / app_id / description
      Previous value: -"Required for show/update/share_link_rotate/delete/wake/domain_set/domain_status/domain_remove."New value: +"Required for show/update/share_link_rotate/delete/restore/purge/wake/domain_set/domain_status/domain_remove."
    • changedInput schema / properties / status / description
      Previous value: -"list only. Default: active."New value: +"list only. Default: active. 'all' means every live status; deleted apps are never in this list, use action list_deleted for those."
    • changedInput schema / properties / status / enum
      Previous value: -[
      -  "active",
      -  "dormant",
      -  "archived",
      -  "all"
      -]New value: +[
      +  "active",
      +  "dormant",
      +  "archived",
      +  "suspended",
      +  "all"
      +]
  2. Changed3 schema fields changed
    • changedInput schema / properties / action / description
      Previous value: -"list: the caller's owning human's apps. show/update/delete/wake: act on one app (app_id). share_link_rotate: rotate a 'link' app's share token, returning a new share_url (the old link stops working); also generates one if the app has none yet. domain_set/domain_status/domain_remove: manage the app's custom domains (app_id; domain_set also needs domain)."New value: +"list: the caller's owning human's apps. show/update/delete/wake: act on one app (app_id). audit: read-only security review of every app the caller owns. share_link_rotate: rotate a 'link' app's share token, returning a new share_url (the old link stops working); also generates one if the app has none yet. domain_set/domain_status/domain_remove: manage the app's custom domains (app_id; domain_set also needs domain)."
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "show",
      -  "update",
      -  "share_link_rotate",
      -  "delete",
      -  "wake",
      -  "domain_set",
      -  "domain_status",
      -  "domain_remove"
      -]New value: +[
      +  "list",
      +  "show",
      +  "audit",
      +  "update",
      +  "share_link_rotate",
      +  "delete",
      +  "wake",
      +  "domain_set",
      +  "domain_status",
      +  "domain_remove"
      +]
    • addedInput schema / properties / severity
      Added value: +{
      +  "description": "audit only. Return findings of this severity only. The response's `counts` always describe the whole audit, so filtering never hides that other findings exist.",
      +  "enum": [
      +    "high",
      +    "medium",
      +    "low"
      +  ],
      +  "type": "string"
      +}
  3. Changed2 schema fields changed
    • changedInput schema / properties / action / description
      Previous value: -"list: YOUR owning human's apps. show/update/delete/wake: act on one app (app_id). share_link_rotate: rotate a 'link' app's share token, returning a new share_url (the old link stops working); also generates one if the app has none yet. domain_set/domain_status/domain_remove: manage the app's custom domains (app_id; domain_set also needs domain)."New value: +"list: the caller's owning human's apps. show/update/delete/wake: act on one app (app_id). share_link_rotate: rotate a 'link' app's share token, returning a new share_url (the old link stops working); also generates one if the app has none yet. domain_set/domain_status/domain_remove: manage the app's custom domains (app_id; domain_set also needs domain)."
    • changedInput schema / properties / domain / description
      Previous value: -"domain_set: the bare custom domain to bind (e.g. app.example.com); the response's dns_records lists the DNS entries the domain owner must publish. domain_remove: OPTIONAL, the one domain to unbind - omit it to unbind them all."New value: +"domain_set: the bare custom domain to bind (e.g. app.example.com); the response's dns_records lists the DNS entries the domain owner must publish. domain_remove: optional, the one domain to unbind - omit it to unbind them all."
  4. Added

TDQS

A4.7/5.0
Behavior5/5

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

Discloses behavior well beyond the annotations: delete is a recoverable soft-delete with a retention window, purge is immediately and permanently destructive, restore is idempotent with named 409 cases, share_link_rotate revokes the old link and returns share_url only once, wake is a no-op that reports actual status, and a suspended app returns suspended. These are consequences and failure modes the destructiveHint/readOnlyHint flags 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.

Conciseness3/5

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

Almost every sentence carries real information and the scope statement is front-loaded, but a single unbroken paragraph covering 13 actions with nested conditions is hard to scan. Bullets or per-action grouping would preserve the content while making the action boundaries legible.

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

Completeness5/5

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

For a complex 10-parameter, 13-action dispatcher with no output schema, the description still supplies the salient return values (share_url, dns_records, counts, aliases, last_error, purges_at) and the safety profile of each mutating action. Nothing an agent needs to call it correctly is missing.

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 description coverage is 100%, so the baseline is 3, and the action descriptions largely mirror the schema's own action docs. It clears the baseline by adding semantics the schema lacks — that the first bound domain serves and later ones redirect (apex + www), and that share_link_rotate returns a fresh share_url while invalidating the old link.

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?

Opens with a precise scope statement — the v2 app lifecycle minus creation/redeploy — and names the sibling that covers the excluded work (deploy_app). Each of the 13 actions is given its own specific verb+resource meaning, so an agent can pick an action without opening the schema.

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?

Explicit routing throughout: deploy_app for creation/redeploy, audit vs deploy-time warnings, purge requires an already-deleted app, restore's 409 conditions, and 'read the app before proposing' a fix. It states not just when to use each action but when it will be refused.

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