48-hour HTTPS previews of prebuilt static sites and HTML slides. No server builds or backends.
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.
Prepare a new temporary static preview. Supply exactly one of small files or ZIP archive_base64. No backend/build. Requires explicit consent; returns an approval link, not a published URL. User must confirm in their browser.
Set true only after the user explicitly agrees to the current terms and public temporary preview limits. Not inferred from a request to generate a site. Preparation is not publication; the user must also personally confirm the approval URL in their browser within 2 hours.
One input choice: 1-500 already-built static files, at most 1 MiB decoded in total. Include index.html at the root and all needed assets. Do not also send archive_base64 or archive. For larger output use a ZIP.
One input choice: actual ZIP bytes encoded as canonical standard base64, without data: prefix. At most 50 MiB (52,428,800 bytes) of decoded ZIP and 50 MiB extracted content; at most 25 MiB per file. index.html at root. No nested archives or server code. Do not also send files or archive.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Prepare a new temporary static preview. Supply exactly one of small files or ZIP archive_base64. No backend/build. Requires explicit consent; returns an approval link, not a published URL. User must confirm in their browser.
| Argument | Type | Description |
|---|---|---|
| files | array | One input choice: 1-500 already-built static files, at most 1 MiB decoded in total. Include index.html at the root and all needed assets. Do not also send archive_base64 or archive. For larger output use a ZIP. |
| accept_terms* | boolean | Set true only after the user explicitly agrees to the current terms and public temporary preview limits. Not inferred from a request to generate a site. Preparation is not publication; the user must also personally confirm the approval URL in their browser within 2 hours. |
| archive_base64 | string | One input choice: actual ZIP bytes encoded as canonical standard base64, without data: prefix. At most 50 MiB (52,428,800 bytes) of decoded ZIP and 50 MiB extracted content; at most 25 MiB per file. index.html at root. No nested archives or server code. Do not also send files or archive. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"accept_terms"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string",
"maxLength": 240,
"minLength": 1,
"description": "Relative POSIX path inside the ready static output, e.g. index.html or assets/app.js. index.html must be at the root. No absolute paths, traversal, symlinks, archives or executable/server files."
},
"content": {
"type": "string",
"maxLength": 1400000,
"description": "Actual file contents, not a filename, local path or download URL. Use UTF-8 text for HTML/CSS/JS and canonical base64 for binary assets. All files together must decode to at most 1 MiB (1,048,576 bytes). No secrets, personal/payment data or forms."
},
"encoding": {
"enum": [
"utf8",
"base64"
],
"type": "string",
"description": "Defaults to utf8. Set base64 for binary content; standard padded base64 only, without a data: prefix, whitespace or URL-safe alphabet. The decoded bytes count toward the shared 1 MiB limit."
}
},
"additionalProperties": false
},
"maxItems": 500,
"minItems": 1,
"description": "One input choice: 1-500 already-built static files, at most 1 MiB decoded in total. Include index.html at the root and all needed assets. Do not also send archive_base64 or archive. For larger output use a ZIP."
},
"accept_terms": {
"type": "boolean",
"const": true,
"description": "Set true only after the user explicitly agrees to the current terms and public temporary preview limits. Not inferred from a request to generate a site. Preparation is not publication; the user must also personally confirm the approval URL in their browser within 2 hours."
},
"archive_base64": {
"type": "string",
"maxLength": 69905068,
"description": "One input choice: actual ZIP bytes encoded as canonical standard base64, without data: prefix. At most 50 MiB (52,428,800 bytes) of decoded ZIP and 50 MiB extracted content; at most 25 MiB per file. index.html at root. No nested archives or server code. Do not also send files or archive."
}
},
"additionalProperties": false
}Prepare deletion of an existing preview. Does not delete until its owner confirms in the browser holding the management key.
| Argument | Type | Description |
|---|---|---|
| preview_id* | string | Existing preview_id returned by AIfra. Do not invent it or pass a URL, alias, management key or source IP. |
| confirm_delete* | boolean | Set true only after the owner explicitly asks to delete this preview. The tool only prepares deletion; final confirmation requires the browser holding its management key. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"preview_id",
"confirm_delete"
],
"properties": {
"preview_id": {
"type": "string",
"pattern": "^pv_[A-Za-z0-9_-]{24}$",
"description": "Existing preview_id returned by AIfra. Do not invent it or pass a URL, alias, management key or source IP."
},
"confirm_delete": {
"type": "boolean",
"const": true,
"description": "Set true only after the owner explicitly asks to delete this preview. The tool only prepares deletion; final confirmation requires the browser holding its management key."
}
},
"additionalProperties": false
}Explain remote browser-confirmed AIfra publication of ready static files, limits and current terms.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Read whether a prepared operation is pending, complete, failed or uncertain. Returns no file content or management key. Never assume pending means published.
| Argument | Type | Description |
|---|---|---|
| operation_id* | string | Exact operation_id from a preparation response. Read status after user confirmation or on request. Only complete with a result contains the published URL; pending is not published, uncertain must not be replayed. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"operation_id"
],
"properties": {
"operation_id": {
"type": "string",
"pattern": "^rop_[A-Za-z0-9_-]{43}$",
"description": "Exact operation_id from a preparation response. Read status after user confirmation or on request. Only complete with a result contains the published URL; pending is not published, uncertain must not be replayed."
}
}
}Read current public status, URL and server-enforced expiry of an existing preview. Only the service owner can manually extend expiry; updates never extend it.
| Argument | Type | Description |
|---|---|---|
| preview_id* | string | Existing preview_id returned by AIfra. Do not invent it or pass a URL, alias, management key or source IP. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"preview_id"
],
"properties": {
"preview_id": {
"type": "string",
"pattern": "^pv_[A-Za-z0-9_-]{24}$",
"description": "Existing preview_id returned by AIfra. Do not invent it or pass a URL, alias, management key or source IP."
}
}
}Prepare replacement of an existing temporary static preview. Supply exactly one of small files or ZIP archive_base64. No backend/build. Requires explicit consent; returns an approval link, not a published URL. User must confirm in their browser. Requires the browser holding the existing management key; expiry is unchanged.
| Argument | Type | Description |
|---|---|---|
| files | array | One input choice: 1-500 already-built static files, at most 1 MiB decoded in total. Include index.html at the root and all needed assets. Do not also send archive_base64 or archive. For larger output use a ZIP. |
| preview_id* | string | Existing preview_id returned by AIfra. Do not invent it or pass a URL, alias, management key or source IP. |
| accept_terms* | boolean | Set true only after the user explicitly agrees to the current terms and public temporary preview limits. Not inferred from a request to generate a site. Preparation is not publication; the user must also personally confirm the approval URL in their browser within 2 hours. |
| archive_base64 | string | One input choice: actual ZIP bytes encoded as canonical standard base64, without data: prefix. At most 50 MiB (52,428,800 bytes) of decoded ZIP and 50 MiB extracted content; at most 25 MiB per file. index.html at root. No nested archives or server code. Do not also send files or archive. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"accept_terms",
"preview_id"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string",
"maxLength": 240,
"minLength": 1,
"description": "Relative POSIX path inside the ready static output, e.g. index.html or assets/app.js. index.html must be at the root. No absolute paths, traversal, symlinks, archives or executable/server files."
},
"content": {
"type": "string",
"maxLength": 1400000,
"description": "Actual file contents, not a filename, local path or download URL. Use UTF-8 text for HTML/CSS/JS and canonical base64 for binary assets. All files together must decode to at most 1 MiB (1,048,576 bytes). No secrets, personal/payment data or forms."
},
"encoding": {
"enum": [
"utf8",
"base64"
],
"type": "string",
"description": "Defaults to utf8. Set base64 for binary content; standard padded base64 only, without a data: prefix, whitespace or URL-safe alphabet. The decoded bytes count toward the shared 1 MiB limit."
}
},
"additionalProperties": false
},
"maxItems": 500,
"minItems": 1,
"description": "One input choice: 1-500 already-built static files, at most 1 MiB decoded in total. Include index.html at the root and all needed assets. Do not also send archive_base64 or archive. For larger output use a ZIP."
},
"preview_id": {
"type": "string",
"pattern": "^pv_[A-Za-z0-9_-]{24}$",
"description": "Existing preview_id returned by AIfra. Do not invent it or pass a URL, alias, management key or source IP."
},
"accept_terms": {
"type": "boolean",
"const": true,
"description": "Set true only after the user explicitly agrees to the current terms and public temporary preview limits. Not inferred from a request to generate a site. Preparation is not publication; the user must also personally confirm the approval URL in their browser within 2 hours."
},
"archive_base64": {
"type": "string",
"maxLength": 69905068,
"description": "One input choice: actual ZIP bytes encoded as canonical standard base64, without data: prefix. At most 50 MiB (52,428,800 bytes) of decoded ZIP and 50 MiB extracted content; at most 25 MiB per file. index.html at root. No nested archives or server code. Do not also send files or archive."
}
},
"additionalProperties": false
}