Deploy HTML or dist/ to a live HTTPS URL. No account. Drop, MCP, or CLI.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
List the versions (v1, v2…) of a slug with their label, door, commit and whether each is live or a held preview. Needs edit_token from .aft/state.json (or the first deploy). Same history the project UI shows after claim.
Site slug from aft.json or .aft/state.json
From first deploy / .aft/state.json. Required to update or rollback the same URL.
List the versions (v1, v2…) of a slug with their label, door, commit and whether each is live or a held preview. Needs edit_token from .aft/state.json (or the first deploy). Same history the project UI shows after claim.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Site slug from aft.json or .aft/state.json |
| edit_token* | string | From first deploy / .aft/state.json. Required to update or rollback the same URL. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug",
"edit_token"
],
"properties": {
"slug": {
"type": "string",
"pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$",
"description": "Site slug from aft.json or .aft/state.json"
},
"edit_token": {
"type": "string",
"minLength": 1,
"description": "From first deploy / .aft/state.json. Required to update or rollback the same URL."
}
}
}Ping the aft.page deploy API.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Make a held preview version live at the same URL. Pass version (e.g. 4) or deploy_id from aft_deploys. Needs edit_token.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Site slug from aft.json or .aft/state.json |
| version | integer | Version number from aft_deploys, e.g. 3 for v3 |
| deploy_id | string | deployId from aft_deploys |
| edit_token* | string | From first deploy / .aft/state.json. Required to update or rollback the same URL. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug",
"edit_token"
],
"properties": {
"slug": {
"type": "string",
"pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$",
"description": "Site slug from aft.json or .aft/state.json"
},
"version": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Version number from aft_deploys, e.g. 3 for v3"
},
"deploy_id": {
"type": "string",
"minLength": 1,
"description": "deployId from aft_deploys"
},
"edit_token": {
"type": "string",
"minLength": 1,
"description": "From first deploy / .aft/state.json. Required to update or rollback the same URL."
}
}
}Point the live slug at a prior version from aft_deploys, by version number or deploy_id. Same URL. Needs edit_token from .aft/state.json. Claim not required.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Site slug from aft.json or .aft/state.json |
| version | integer | Version number from aft_deploys, e.g. 3 for v3 |
| deploy_id | string | deployId from aft_deploys |
| edit_token* | string | From first deploy / .aft/state.json. Required to update or rollback the same URL. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug",
"edit_token"
],
"properties": {
"slug": {
"type": "string",
"pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$",
"description": "Site slug from aft.json or .aft/state.json"
},
"version": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Version number from aft_deploys, e.g. 3 for v3"
},
"deploy_id": {
"type": "string",
"minLength": 1,
"description": "deployId from aft_deploys"
},
"edit_token": {
"type": "string",
"minLength": 1,
"description": "From first deploy / .aft/state.json. Required to update or rollback the same URL."
}
}
}Publish to a live URL. Pass html (one page) OR files (a built site, or a small app's source). Plain HTML → html. Vite/React → npm run build, then files from dist/. Next static export → files from out/; a static site needs index.html. Flask/FastAPI/Django/Express → the source files with requirements.txt or package.json; aft builds and runs it. Never upload node_modules, .venv, or .next/. First hit: preferred_slug from aft.json (include aft.json in files). Later: same slug + edit_token from .aft/state.json — every update is a new version (v1, v2…) at the same URL. Pass hold:true to keep an update as a preview until aft_promote. label names the version. Limits: 500 files, 25MB each, 100MB total.
| Argument | Type | Description |
|---|---|---|
| hold | boolean | Update only: build and verify but do not go live; promote later with aft_promote. |
| html | string | One HTML document. Ignored if files is set. |
| files | array | |
| label | string | Short name for this version, e.g. 'before redesign'. |
| expires | string | Optional quick-view expiry, e.g. "1h", "24h", "90s", "7d". Anonymous (unclaimed) deploys only — the link 404s after this. |
| edit_token | string | From first deploy / .aft/state.json. Required to update or rollback the same URL. |
| preferred_slug | string | aft.json slug. Required with edit_token. |
Same engine as aft.page/run: public GitHub URL → detect → build → live URL. Static is instant; Vite and Next.js build in the background (polls until live or failed). Private repos are refused. For a local project dir, use hosted CLI aft deploy instead.
| Argument | Type | Description |
|---|---|---|
| url* | string | GitHub URL or owner/repo, e.g. https://github.com/mdn/beginner-html-site |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"minLength": 3,
"description": "GitHub URL or owner/repo, e.g. https://github.com/mdn/beginner-html-site"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"hold": {
"type": "boolean",
"description": "Update only: build and verify but do not go live; promote later with aft_promote."
},
"html": {
"type": "string",
"minLength": 1,
"description": "One HTML document. Ignored if files is set."
},
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string",
"minLength": 1,
"description": "Relative path, e.g. index.html"
},
"content": {
"type": "string",
"description": "UTF-8 text (or base64 if encoding=base64)"
},
"encoding": {
"enum": [
"utf8",
"base64"
],
"type": "string"
}
}
},
"maxItems": 500,
"minItems": 1
},
"label": {
"type": "string",
"maxLength": 60,
"description": "Short name for this version, e.g. 'before redesign'."
},
"expires": {
"type": "string",
"pattern": "^\\d+(s|m|h|d)?$",
"description": "Optional quick-view expiry, e.g. \"1h\", \"24h\", \"90s\", \"7d\". Anonymous (unclaimed) deploys only — the link 404s after this."
},
"edit_token": {
"type": "string",
"minLength": 1,
"description": "From first deploy / .aft/state.json. Required to update or rollback the same URL."
},
"preferred_slug": {
"type": "string",
"pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$",
"description": "aft.json slug. Required with edit_token."
}
}
}