Skip to main content
Glama

Save app

save_app
Idempotent

Create or update a persistent UI app by saving its self-contained HTML document and optional manifest, then open it immediately for reuse.

Instructions

Create or update a UI app in the persistent registry. Two slots, each optional on update (an omitted slot keeps its current value): ui — the complete self-contained HTML document (contract in get_app_guide; window.oma, no external resources, NO embedded manifest block) — and manifest, the app's declaration as a JSON object (kind, collections, settings, scene; keys in get_app_guide). manifest: null clears the declaration. Creating needs ui. Every save snapshots both slots as one new version (history kept). After saving, open it IMMEDIATELY with open_app.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
uiNocomplete self-contained HTML document using window.oma; omit on update to keep the current one
nameYesapp name, ^[a-z][a-z0-9-]{0,31}$ (e.g. 'kanban', 'habit-tracker')
manifestNodeclaration object (whole-value replace), null to clear, omit to keep
command_idNoidempotency key (uuid); auto-generated if omitted
descriptionNoone line: what this app shows and what data fields it uses
expected_versionNoREQUIRED when overwriting an existing app: the version you read (get_app). Creating a new name needs none

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYes
eotNo
nameNo
noteNo
sizeNo
reasonNo
appliedNo
createdNo
versionNo
prev_sizeNo
manifest_actionNo
expected_versionNo

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed2 schema fields changedv0.6.0
    • removedOutput schema / properties / prev_size / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / prev_size / type
      Added value: +[
      +  "number",
      +  "null"
      +]
  2. First observedv0.5.7

TDQS

A4.7/5.0
Behavior5/5

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

This goes far beyond the annotations. It discloses slot-merge semantics, manifest null clearing, snapshot creation for every save, history retention, and the required immediate open_app call. An agent understands the tool's side effects without experimentation.

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?

Dense and front-loaded with the core purpose, then systematically covers slots, versioning, and next action. Every sentence earns its place and there is no filler or repetition of schema text.

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 6-parameter upsert with a rich schema and output schema, the description is complete: it covers create/update behavior, slot semantics, clearing, versioning, and the immediate next step. It also points to get_app_guide for contract details, leaving no material gap.

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 100%, so the baseline is 3. The description adds meaning by explaining the two-slot update model, the ui contract, manifest null behavior, and the 'creating needs ui' constraint. It does not expand on command_id or expected_version, but the schema already covers those clearly.

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 opens with a specific verb and resource: 'Create or update a UI app in the persistent registry.' It clearly distinguishes save_app from siblings like open_app and get_app by emphasizing slot-based updates, version snapshotting, and the required follow-up with open_app.

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?

The description gives clear operational context: omitted slots keep current values, creating requires ui, manifest null clears the declaration, and 'after saving, open it IMMEDIATELY with open_app.' It does not explicitly name exclusions or alternative tools such as edit_app or restore_app, so it stops short of a 5.

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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/2nd1st/open-mcp-apps'

If you have feedback or need assistance with the MCP directory API, please join our Discord server