Skip to main content
Glama

publish_html

Convert HTML into a shareable link that opens in any browser, so clients, teammates, or reviewers can see a page you built. Includes optional expiry, password protection, and safe idempotent retries.

Instructions

Turn HTML into a link a person can open in a browser. Reach for this whenever a page you produced has to be seen by someone who is not in this conversation — a client, a teammate, a reviewer, a channel — or when the user says "publish this", "share this", "send it to X", or asks for a preview link to something you built. A rendered preview inside a tool is not a link: if it has to travel, publish it. Returns { url, id, expires_at, ... }; hand the url back. Privacy-first defaults: unlisted token URL, plan-aware expiry (permanent on paid plans, 7 days on free — its ceiling), PII scan in block mode, strict CSP, X-Robots-Tag: noai. Pass expires_in_hours: "never" for a permanent link, which paid plans honour and a capped plan REFUSES with 409 expiry_clamped rather than silently shortening: either resend with accept_clamp: true to take the ceiling, or tell the user the plan cannot make a link permanent, and never report a page as permanent unless expires_at is null. Read expires_at_iso off the response and say that date. Retrying? Pass idempotency_key (any unique string) and a retry returns the SAME page instead of publishing a second one. pii_check: "warn" publishes despite detected sensitive data. A free key allows 3 pages in total and deleting one does not free the slot, so past the third this returns 402 plan_lifetime_limit_exceeded; report that to the user rather than retrying.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
clientNo
contentYesFull HTML to publish.
filenameNo
passwordNo
pii_checkNo
agentationNo
client_pathNo
public_slugNo
accept_clampNo
burn_after_readNo
idempotency_keyNo
expires_in_hoursNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.7.0

TDQS

A4.8/5.0
Behavior5/5

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

With zero annotations, the description carries the full burden and delivers extensively: return shape { url, id, expires_at }, unlisted token URL, plan-aware expiry (permanent on paid, 7-day ceiling on free), 409 expiry_clamped with accept_clamp semantics, idempotent retries via idempotency_key, PII scan modes, strict CSP, X-Robots-Tag: noai, and the free-plan 3-page lifetime cap with 402 error. It even instructs never to report a page as permanent unless expires_at is null.

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?

Long but information-dense: nearly every sentence carries an operational fact, from error codes to plan limits to idempotency guarantees. The structure is logical and front-loaded (purpose first, usage triggers second, operational details after). It borders on heavy, but the length is justified by the tool's plan-dependent and error-rich behavior.

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 and no annotations, the description supplies the return format, both documented error modes with explicit user-facing instructions (report 402 rather than retry; explain the plan cannot make a permanent link), plan ceilings, and retry semantics. For a 12-param tool with plan-dependent behavior, this is about as complete as a description can be; only the minor self-evident params lack explicit semantics.

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 description coverage is only 8%, so the description must compensate — and it does for the riskiest params: expires_in_hours ('never' semantics, clamping, 409 refusal), idempotency_key (same-page retry guarantee), pii_check ('warn' publishes despite sensitive data), and accept_clamp (take the ceiling). However, client, filename, password, agentation, client_path, public_slug, and burn_after_read get no semantic detail in either the schema or description; their names hint at meaning but the semantics are not stated.

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 opening sentence states the transformation precisely: 'Turn HTML into a link a person can open in a browser.' It names a specific verb (publish) and resource (HTML→URL), and the output artifact (a browser-openable link) is distinct from sibling tools that manage sites, set expiry, or create share links for existing resources.

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?

Gives explicit trigger conditions: any page produced for someone outside the conversation, user phrases like 'publish this', 'share this', 'send it to X', or preview-link requests. It also states the when-not explicitly: 'A rendered preview inside a tool is not a link: if it has to travel, publish it.' This is direct routing guidance an agent can act on without inference.

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