Skip to main content
Glama

Restore version

restore_version
Destructive

Load a saved version over the live project. Accepts either the version's UUID id or the v<N> shorthand (e.g. "v6" finds the bookmark with version_number=6); auto-snapshots are addressable by UUID only. Without page_index this replaces the ENTIRE project (every page) — an auto checkpoint named before restore: … is saved first whenever the current state has unsaved changes, so the overwritten state stays recoverable. With page_index it restores ONLY that page: the page is matched across versions by its stable id and replaced verbatim (canvas size and name included); other pages are untouched and the write is compare-and-swapped against concurrent edits. Errors if the version predates that page — restore the whole version instead. A restored page may reference assets deleted since the snapshot; those render as missing. An open editor reconciles the result into the live project within a few seconds — no refresh needed.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject to restore into.
versionIdYesVersion to restore. UUID `id` or `v<N>` shorthand (partner-facing bookmark number).
page_indexNoOptional. 0-based index into the project's CURRENT pages (same indexing as select_page / delete_page). Restores only that page from the version; omit to restore the whole project.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYesWhether the call succeeded.
dataNoThe payload, shaped by the tool.
noteNoWhat to do next when not ready.
errorNoWhy it failed.
statusNoFor cache-backed readers: whether the answer was ready.
editorUrlNoOpens this project in the editor.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedInput schema / properties / anonymousToken
      Removed value: -{
      -  "description": "The token create_anonymous_account returned. This connection has no Morpha key, so every call carries it.",
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "projectId",
      -  "versionId",
      -  "anonymousToken"
      -]New value: +[
      +  "projectId",
      +  "versionId"
      +]
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "The result envelope every Morpha tool returns.",
      +  "properties": {
      +    "data": {
      +      "description": "The payload, shaped by the tool.",
      +      "type": [
      +        "object",
      +        "array",
      +        "string",
      +        "number",
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "editorUrl": {
      +      "description": "Opens this project in the editor.",
      +      "type": "string"
      +    },
      +    "error": {
      +      "description": "Why it failed.",
      +      "type": "string"
      +    },
      +    "note": {
      +      "description": "What to do next when not ready.",
      +      "type": "string"
      +    },
      +    "ok": {
      +      "description": "Whether the call succeeded.",
      +      "type": "boolean"
      +    },
      +    "status": {
      +      "description": "For cache-backed readers: whether the answer was ready.",
      +      "enum": [
      +        "ready",
      +        "not-ready"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "ok"
      +  ],
      +  "type": "object"
      +}
  3. Changed2 schema fields changed
    • addedInput schema / properties / anonymousToken
      Added value: +{
      +  "description": "The token create_anonymous_account returned. This connection has no Morpha key, so every call carries it.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "projectId",
      -  "versionId"
      -]New value: +[
      +  "projectId",
      +  "versionId",
      +  "anonymousToken"
      +]
  4. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Even though destructiveHint=true already signals mutation, the description discloses critical extra behavior: an auto-checkpoint named 'before restore: …' is saved first, page-restores are compare-and-swapped against concurrent edits, missing asset references render as missing, and open editors reconcile without refresh. This is substantial behavioral context beyond the 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 long but dense; every sentence contributes a distinct behavioral or usage fact. It front-loads the core purpose, then expands into mode-specific behavior and edge cases. Slightly more compact phrasing would be possible, but very little is wasted.

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 destructive, dual-mode restore operation with no output schema to lean on, the description covers the full error surface: pre-restore checkpointing, single-page CAS semantics, page mismatch with version age, deleted assets, and editor reconciliation. An agent has enough context to invoke the tool safely and anticipate consequences.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds real semantic value: it explains the v<N> shorthand resolution, notes that auto-snapshots are addressable only by UUID, clarifies that page_index indexes the project's CURRENT pages, and ties page_index to the sibling select_page/delete_page indexing. Both required and optional parameters gain meaning beyond their schema descriptions.

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: 'Load a saved version over the live project.' It then clearly separates the two modes (entire project vs single page), which distinguishes the tool from sibling versioning tools like save_version and delete_version.

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 strong condition-based guidance: omit page_index for whole-project restore, provide it for single-page restore, use UUID for auto-snapshots, and restore the whole version if a page predates the version. It does not explicitly name alternative sibling tools or say when not to use restore_version, but the operational context is clear enough to select it correctly.

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