Skip to main content
Glama

Save app

save_app
Idempotent

Create or update a UI app in the persistent registry, storing its HTML and manifest as a versioned snapshot. Open the app immediately after saving.

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
Behavior5/5

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

The description adds substantial behavioral detail beyond annotations: it explains the two optional slots ('an omitted slot keeps its current value'), the 'manifest: null clears the declaration' behavior, the requirement that 'Creating needs ui,' versioning ('Every save snapshots both slots as one new version'), and the explicit instruction to open the app immediately. No contradiction with the idempotentHint (true) or destructiveHint (false) annotations.

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?

The description is compact but information-dense, with four sentences covering purpose, slot behaviors, constraints, and versioning. It is well-structured with semicolons and clear references to get_app_guide. No wasted words, though slightly dense for quick scanning.

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?

Given the tool's complexity (6 parameters, two optional slots, versioning), the description covers the key behavioral aspects: slot optionality, null clearing, create prerequisites, snapshot/versioning, and next-step guidance. It references get_app_guide for detailed contracts, and the output schema exists so return values don't need explanation. Minor gap: no explicit mention of the expected_version overwrite check, but that is covered in the schema.

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 baseline is 3. The description adds value by clarifying the create-vs-update condition ('Creating needs ui') and the snapshot semantics for both slots, which are not fully explicit in the individual parameter descriptions. It also reinforces the meaning of ui and manifest without repeating the full schema details.

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 clearly states the tool's function: 'Create or update a UI app in the persistent registry.' It specifies the resource (UI app) and the action (create/update), and distinguishes itself from siblings like get_app, restore_app, and edit_app by framing it as the persistent save operation for the app registry.

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

Usage Guidelines3/5

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

The description provides implicit usage guidance: it says 'Creating needs ui' and 'After saving, open it IMMEDIATELY with open_app,' which suggests a save-then-open workflow. However, it does not explicitly contrast with alternatives like edit_app or state when to prefer save_app over other update mechanisms, leaving some ambiguity.

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

Install Server

Other Tools

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