Skip to main content
Glama

Publish a website

publish_site
Destructive

Publish files as a live website, served over HTTPS at its own URL. Use it when a report, essay, slide-like narrative, dashboard, marketing surface, or other static artifact reads better at a live URL than as conversation text. Honor an artifact form the user requests. Otherwise choose the artifact form and treatment from its audience, job, and material. A request for a live URL chooses delivery, not one long scrolling page.

Apply the governance skill before calling: get_skill with governance says what the organization expects of a published page and names the design-system skill, which supplies identity, not structure. Follow each wherever it speaks.

title and description are required on every publish, and a call missing either is refused: title names the site for a person, and description says in one sentence what it holds. A site's name becomes part of its URL, so those two are what a reader has to go on wherever the site is listed. Write them for the person who will come back to this page in a month.

Content is text written here: HTML, CSS, JavaScript, Markdown, JSON, SVG. Images, PDFs, video, and other binary assets are not supported on this surface — publish those with the Valet CLI.

Publishing uses a connected Valet account by default and creates a permanent, private site. Pass anonymous: true only when the user explicitly wants a temporary public site. It is public to anyone who has the link, and it may be removed 36 hours after it is created, unless it is claimed. The result carries a claim URL that moves the site into a Valet account and makes it permanent, and a site_token that updates the same site on a later call. Give that token back to revise the site instead of publishing a second copy of it; with an account, give the site's name instead.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNoThe site's name, which becomes the first label of its URL, https://<name>.<org>.valet.run. Omit to have one generated. Naming a site that already exists republishes it. Requires a connected Valet account.
filesYesRequired. The site's files. One file named index.html is the minimum; add more for stylesheets, scripts, or further pages.
titleYesRequired. What the site is called, written for a person: 'Q3 Migration Audit', not a hostname. It labels the site wherever it is listed, so write the same thing the page's own <title> says.
org_nameNoThe Valet organization to publish into. Omit to use the organization the account joined first.
anonymousNoSet true only when the user explicitly wants a temporary public site without account ownership. Omit for the account-first path, which connects a Valet account when needed.
site_tokenNoThe token an earlier anonymous publish returned. Give it back to update that same site instead of creating another.
descriptionYesRequired. One sentence saying what the site holds, for a person deciding whether to open it. It is shown beside the title wherever the site is listed.
idempotency_keyNoAn opaque key of your choosing. Repeating a call with the same key returns the first call's result instead of publishing a second site, which makes a retry safe.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / name / description
      Previous value: -"The site's name, which becomes the last segment of its URL, https://<org>.valet.run/<name>. Omit to have one generated. Naming a site that already exists republishes it. Requires a connected Valet account."New value: +"The site's name, which becomes the first label of its URL, https://<name>.<org>.valet.run. Omit to have one generated. Naming a site that already exists republishes it. Requires a connected Valet account."
  2. Changed1 schema field changed
    • changedInput schema / properties / name / description
      Previous value: -"The site's name, which becomes part of its URL. Omit to have one generated. Naming a site that already exists republishes it. Requires a connected Valet account."New value: +"The site's name, which becomes the last segment of its URL, https://<org>.valet.run/<name>. Omit to have one generated. Naming a site that already exists republishes it. Requires a connected Valet account."
  3. Changed5 schema fields changed
    • changedInput schema / properties / description / description
      Previous value: -"One sentence saying what the site holds, for a person deciding whether to open it. It is shown beside the title wherever the site is listed."New value: +"Required. One sentence saying what the site holds, for a person deciding whether to open it. It is shown beside the title wherever the site is listed."
    • changedInput schema / properties / files / description
      Previous value: -"The site's files. One file named index.html is the minimum; add more for stylesheets, scripts, or further pages."New value: +"Required. The site's files. One file named index.html is the minimum; add more for stylesheets, scripts, or further pages."
    • changedInput schema / properties / files / items / properties / content / description
      Previous value: -"The file's complete text content."New value: +"Required. The file's complete text content."
    • changedInput schema / properties / files / items / properties / path / description
      Previous value: -"Path within the site, relative and with no leading slash: index.html, styles/main.css. It may not contain '..'."New value: +"Required. Path within the site, relative and with no leading slash: index.html, styles/main.css. It may not contain '..'."
    • changedInput schema / properties / title / description
      Previous value: -"What the site is called, written for a person: 'Q3 Migration Audit', not a hostname. It labels the site wherever it is listed, so write the same thing the page's own <title> says."New value: +"Required. What the site is called, written for a person: 'Q3 Migration Audit', not a hostname. It labels the site wherever it is listed, so write the same thing the page's own <title> says."
  4. Changed1 schema field changed
    • addedInput schema / properties / anonymous
      Added value: +{
      +  "description": "Set true only when the user explicitly wants a temporary public site without account ownership. Omit for the account-first path, which connects a Valet account when needed.",
      +  "type": "boolean"
      +}
  5. Changed3 schema fields changed
    • addedInput schema / properties / description
      Added value: +{
      +  "description": "One sentence saying what the site holds, for a person deciding whether to open it. It is shown beside the title wherever the site is listed.",
      +  "maxLength": 1024,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / title
      Added value: +{
      +  "description": "What the site is called, written for a person: 'Q3 Migration Audit', not a hostname. It labels the site wherever it is listed, so write the same thing the page's own <title> says.",
      +  "maxLength": 1024,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "files"
      -]New value: +[
      +  "files",
      +  "title",
      +  "description"
      +]
  6. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructive/openWorld and non-idempotent, and the description substantially enriches them: default creates a permanent private site, anonymous: true yields a temporary public link that may be removed 36 hours after creation unless claimed, and the result carries a claim URL plus a site_token used to update rather than duplicate. It does not, however, spell out rate limits or exactly what 'destructive' means for an existing named site on republish, so it falls short of a full 5.

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 the usage trigger, then proceeds to governance, required fields, content types, and account semantics in distinct paragraphs. It is on the long side and restates some schema-level facts (title/description required), but nearly every sentence adds a decision-relevant constraint.

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 an 8-parameter mutation tool with no output schema, the description covers the account-vs-anonymous decision, the token lifecycle, the claim URL, the governance prerequisite, and the unsupported-binary constraint — everything an agent needs to invoke it correctly and interpret its result.

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 schema carries most parameter detail (baseline 3). The description nonetheless adds meaning beyond it: title and description are required on every publish and a call missing either is refused, name becomes the first label of the URL and reuses an existing site on republish, and the claim/token lifecycle for anonymous publishes.

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 ('Publish files as a live website, served over HTTPS at its own URL') and implicitly separates itself from publish_app, publish_skill, and share_site by naming the artifact class (static HTML/CSS/JS/Markdown/JSON/SVG) and the delivery outcome. An agent can select it without opening sibling schemas.

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 when-to-use criteria ('when a report, essay, slide-like narrative, dashboard, marketing surface... reads better at a live URL'), guidance on honoring requested artifact form, a mandatory prerequisite ('Apply the governance skill before calling'), and a clear routing rule for the anonymous vs. account path. It also warns that binary assets must go through the Valet CLI instead.

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