Skip to main content
Glama

Import a project from a ZIP file

import_zip
Destructive

Imports a multi-file website from a ZIP archive into an existing site. index.html (or the only HTML file in the root) becomes the page and is published; all other files go to assets/ with their folders kept (assets/css/style.css, assets/img/logo.png). Relative paths in index.html are rewritten to assets/ automatically. Send the archive as zip_base64 (base64 string) or zip_url (public http/https link, e.g. a GitHub archive URL). Limits: ZIP up to 20 MB, 300 files, 10 MB per file, the account storage limit. Allowed files: html, css, js, json, images (jpg, png, gif, svg, webp, avif, ico), fonts (woff, woff2, ttf, otf), txt, xml, pdf. Use dry_run=true first to see what would happen. The previous index.html is kept in version history (restore_version).

Input Schema

NameRequiredDescriptionDefault
siteYesSite id or name, e.g. "my-portfolio" or "my-portfolio.hostilo.page" (from list_sites).
dry_runNoOnly check the archive and report what would be imported; nothing is changed.
zip_urlNoPublic http/https URL of the ZIP file (max 20 MB, up to 3 redirects). Use this or zip_base64.
zip_base64NoThe ZIP file encoded as base64 (max 20 MB decoded). Use this or zip_url.
clear_assetsNoDelete all current files in assets/ before importing.
expected_versionNoOptional: the version from get_site. If the site was saved by someone else since then, nothing is published and you get a version_conflict error (get the site again and merge).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / site / description
      Previous value: -"Site id or name, e.g. \"my-portfolio\" or \"my-portfolio.hostilo.app\" (from list_sites)."New value: +"Site id or name, e.g. \"my-portfolio\" or \"my-portfolio.hostilo.page\" (from list_sites)."
  2. Changed1 schema field changed
    • addedInput schema / properties / expected_version
      Added value: +{
      +  "description": "Optional: the version from get_site. If the site was saved by someone else since then, nothing is published and you get a version_conflict error (get the site again and merge).",
      +  "type": "string"
      +}
  3. Added

TDQS

A4.6/5.0
Behavior5/5

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

Annotations (destructive=true, non-idempotent, open world) only flag risk class; the description goes far beyond by disclosing the publishing behavior, assets/ path rewriting, hard limits (20 MB ZIP, 300 files, 10 MB/file, account storage), the allowed file-type whitelist, and the expected_version conflict behavior. This is the level of detail an agent needs before a destructive import.

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-loaded with the core action and outcome before limits and caveats; every sentence carries information (file handling, input methods, quotas, dry-run advice, version history). It is dense but not padded, with only the allowed-types enumeration making it longer than strictly necessary.

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?

With no output schema, the description fully covers the observable outcome: index.html becomes the published page, other files land in assets/ with folders preserved, relative paths are rewritten, and the prior page is versioned. An agent has enough to call this correctly and predict the effect.

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, but the description adds real meaning beyond the schema: it explains the two input channels as alternatives, clarifies zip_url accepts public http/https links such as GitHub archives, and reinforces dry_run as a preview step. It adds context rather than merely restating field 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?

States a specific verb and resource ('Imports a multi-file website from a ZIP archive into an existing site') and immediately distinguishes itself from siblings like create_site and publish_files by operating on an existing site and taking a ZIP archive. An agent can tell what it does and where the result lands 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 Guidelines4/5

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

Gives explicit operational guidance ('Use dry_run=true first to see what would happen') and routes the agent to restore_version for recovering the previous index.html. It offers two input channels (zip_base64 or zip_url) but never contrasts this tool with publish_files or create_site, so the sibling-selection reasoning is left implicit.

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